Пример решения практической задачи

Задача коммивояжера: Коммивояжер должен посетить пять городов, заезжая в каждый город по одному разу. Расстояние между городами следующие: между первым городом и вторым – 12 км, между первым и третьим – 25 км, между первым и четвертым – 16 км, между первым и пятым – 31 км, между вторым и третьим – 28 км, между вторым и четвертым – 35 км, между вторым и пятым – 22 км, между третьим и четвертым – 36 км, между третьим и пятым – 20 км, между четвертым и пятым – 19 км. Его маршрут должен минимизировать суммарную длину пройденного пути.

Решение. Сначала получим приведенный вид данной матрицы. Для этого пронумеруем строки и столбцы. В каждом столбце определим минимальный элемент и запишем его в нижней строке:

Пример решения практической задачи - student2.ru .

Из каждого элемента столбца вычитаем соответствующий минимальный элемент. Получаем матрицу Пример решения практической задачи - student2.ru :

Пример решения практической задачи - student2.ru Пример решения практической задачи - student2.ru .

Матрица Пример решения практической задачи - student2.ru оказалась не приведенной, поэтому определяем минимальный элемент в каждой строке и вычитаем его из всех элементов соответствующей строки. В результате получаем приведенную матрицу Пример решения практической задачи - student2.ru :

Пример решения практической задачи - student2.ru Пример решения практической задачи - student2.ru .

Вычисляем константу приведения Пример решения практической задачи - student2.ru :

Пример решения практической задачи - student2.ru .

Находим степени каждого нуля – сумму минимальных элементов строки и столбца, в которых стоит нуль (без учета самого нуля). К каждому нулю приписываем вверху его степень. Максимальной степенью является число 12. Нули с максимальной степенью определяют дуги, которые вероятнее всего войдут в гамильтонов цикл. В нашем случае наиболее вероятной дугой гамильтонова цикла является l(3; 5).

Выбираем дугу l(3; 5).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем третью строку и пятый столбец, элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Получаем:

Пример решения практической задачи - student2.ru Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Обе матрицы не являются приведенными. Для приведения матриц определяем минимальные элементы строк и столбцов.

Сначала работаем с матрицей Пример решения практической задачи - student2.ru . Определяем минимальные элементы строк. А потом эти элементы вычитаем из каждого элемента соответствующих строк.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Теперь определяем минимальные элементы каждого столбца. А потом эти элементы вычитаем из каждого элемента соответствующего столбца.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Аналогично преобразовываем матрицу Пример решения практической задачи - student2.ru .

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Таким образом, получаем две приведенные матрицы:

Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru .

Вычисляем константы приведения:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru ,

где Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru – суммы минимальных элементов строк и столбцов матриц Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru .

Пример решения практической задачи - student2.ru , но далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Определяем степени нулей этой матрицы:

Пример решения практической задачи - student2.ru .

Максимальная степень – число 7. Наиболее вероятными дугами гамильтонова цикла являются дуги l(1; 2), l(4; 1) и l(5;4). Выбираем, например, дугу l(1; 2).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем первую строку и второй столбец, элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru , получаем матрицу Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Имеем:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Обе матрицы не являются приведенными. Преобразуем их по той же схеме, как это делали выше.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Таким образом, получаем две приведенные матрицы Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru .

Вычисляем константы приведения:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , то далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Определяем степени каждого нуля.

Пример решения практической задачи - student2.ru

Максимальная степень – число 32. Наиболее вероятной дугой гамильтонова цикла является дуга l(5; 4).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем строку под номером 5 и столбец под номером 4, получаем матрицу Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Имеем:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Матрица Пример решения практической задачи - student2.ru не является приведенной. Преобразуем ее по той же схеме как делали выше.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , то далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Последние две дуги гамильтонова цикла определяем из матрицы Пример решения практической задачи - student2.ru : l(2; 3) и l(4; 1).

Таким образом, получаем решение, которое состоит из следующих дуг: (3; 5), (1;2), (5; 4), (2; 3), (4; 1). Гамильтонов цикл имеет вид 1®2®3®5®4®1, длина цикла равна 95 км.

Сравним константу приведения Пример решения практической задачи - student2.ru с константами приведения Пример решения практической задачи - student2.ru альтернативных вариантов ( Пример решения практической задачи - student2.ru ):

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru ;

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru ;

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , то возвращаемся к приведенной матрице Пример решения практической задачи - student2.ru , и от нее начинаем строить гамильтонов цикл.

Определяем степени нулей этой матрицы:

Пример решения практической задачи - student2.ru .

Максимальная степень – число 8. Наиболее вероятной дугой гамильтонова цикла является дуга l(5; 3).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем пятую строку и третий столбец, элемент Пример решения практической задачи - student2.ru уже заменен Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Получаем:

Пример решения практической задачи - student2.ru Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Матрица Пример решения практической задачи - student2.ru - приведенная, а матрица Пример решения практической задачи - student2.ru не является приведенной. Сделаем ее приведенной, как это делали выше.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Вычисляем константы приведения:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru ,

где Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru – суммы минимальных элементов строк и столбцов матриц Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , но далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Определяем степени нулей этой матрицы:

Пример решения практической задачи - student2.ru Пример решения практической задачи - student2.ru .

Максимальная степень – число 7. Наиболее вероятными дугами гамильтонова цикла являются дуги l(1; 4), и l(4; 5). Выбираем, например, дугу l(4; 5).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем строку под номером 4 и столбец под номером 5, получаем матрицу Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Имеем:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Матрица Пример решения практической задачи - student2.ru - приведенная, а матрица Пример решения практической задачи - student2.ru не является приведенной. Сделаем ее приведенной, как это делали выше.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Вычисляем константы приведения:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , то далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Определяем степени каждого нуля.

Пример решения практической задачи - student2.ru .

Максимальная степень – число 19. Наиболее вероятной дугой гамильтонова цикла является дуга l(2; 1).

В связи с этим рассматриваем две матрицы: Пример решения практической задачи - student2.ru и Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru убираем строку под номером 2 и столбец под номером 1, элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru и получаем матрицу Пример решения практической задачи - student2.ru . В матрице Пример решения практической задачи - student2.ru элемент Пример решения практической задачи - student2.ru заменяем Пример решения практической задачи - student2.ru . Имеем:

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Обе матрицы не являются приведенными. Преобразуем их по той же схеме, как это делали выше.

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru ,

Пример решения практической задачи - student2.ru Þ Пример решения практической задачи - student2.ru .

Пример решения практической задачи - student2.ru , Пример решения практической задачи - student2.ru .

Так как Пример решения практической задачи - student2.ru , то далее рассматриваем матрицу Пример решения практической задачи - student2.ru . Последние две дуги гамильтонова цикла определяем из матрицы Пример решения практической задачи - student2.ru : l(1; 4) и l(3; 2).

Таким образом, получаем решение, которое состоит из следующих дуг: (5; 3), (4;5), (2; 1), (1; 4), (3; 2). Гамильтонов цикл имеет вид 1®4®5®3®2®1, длина цикла тоже равна 95 км.

Сравним константу приведения Пример решения практической задачи - student2.ru с константами приведения Пример решения практической задачи - student2.ru альтернативных вариантов ( Пример решения практической задачи - student2.ru ):

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru ;

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru ;

Пример решения практической задачи - student2.ru : Пример решения практической задачи - student2.ru .

Это значит, что получили оптимальное решение.

Весь процесс отыскания оптимального плана можно изобразить в виде дерева ветвления:

Пример решения практической задачи - student2.ru

Полученные гамильтоновы циклы 1®2®3®5®4®1 или 1®4®5®3®2®1 можно изобразить в виде орграфа.

Пример решения практической задачи - student2.ru

Это означает следующее: коммивояжер сначала посещает город 1, потом – город 2, затем – город 3, после – город 5, и, наконец, город 4, а потом возвращается в город 1. При этом длина всего пути составит 95 км. Второе решение говорит о том, что коммивояжер может ехать в обратную сторону.

,

Практическое задание

3.1. Решить задачу: Коммивояжер должен посетить пять городов, заезжая в каждый город по одному разу. Расстояние между городами следующие: между первым городом и вторым – N км, между первым и третьим – N+5 км, между первым и четвертым – 2N км, между первым и пятым – 45-N км, между вторым и третьим – N-1 км, между вторым и четвертым – 5 км, между вторым и пятым – 12 км, между третьим и четвертым – 3N-15 км, между третьим и пятым – 20-2N км, между четвертым и пятым – 19 км. Его маршрут должен минимизировать суммарную длину пройденного пути. Укажите возможные маршруты и длину пути. Изобразите процесс отыскания оптимального плана в виде дерева ветвления.

3.2. Разработайте блок-схему алгоритма Литтла.

Наши рекомендации