
Лекция 11. П.10. Эйлеровы и гамильтоновы циклы.
10.2. Алгоритм Литтла.
Рассмотрим задачу коммивояжера, которую решим с помощью алгоритма Литтла.
Пример 10.1.Задача коммивояжера:Коммивояжер должен посетить пять городов, заезжая в каждый город по одному разу. Расстояние между городами следующие: между первым городом и вторым – 12 км, между первым и третьим – 25 км, между первым и четвертым – 16 км, между первым и пятым – 31 км, между вторым и третьим – 28 км, между вторым и четвертым – 35 км, между вторым и пятым – 22 км, между третьим и четвертым – 36 км, между третьим и пятым – 20 км, между четвертым и пятым – 19 км. Его маршрут должен минимизировать суммарную длину пройденного пути.
Решение.Сначала получим приведенный вид данной матрицы. Для этого пронумеруем строки и столбцы. В каждом столбце определим минимальный элемент и запишем его в нижней строке:
.
Из каждого элемента столбца вычитаем
соответствующий минимальный элемент.
Получаем матрицу
:
.
Матрица
оказалась не приведенной, поэтому
определяем минимальный элемент в каждой
строке и вычитаем его из всех элементов
соответствующей строки. В результате
получаем приведенную матрицу
:
.
Вычисляем константу приведения
:
.
Находим степени каждого нуля – сумму минимальных элементов строки и столбца, в которых стоит нуль (без учета самого нуля). К каждому нулю приписываем вверху его степень. Максимальной степенью является число 12. Нули с максимальной степенью определяют дуги, которые вероятнее всего войдут в гамильтонов цикл. В нашем случае наиболее вероятной дугой гамильтонова цикла является l(3; 5).
Выбираем дугу l(3; 5).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем третью строку и пятый столбец,
элемент
заменяем
.
В матрице
элемент
заменяем
.
Получаем:
,
.
Обе матрицы не являются приведенными. Для приведения матриц определяем минимальные элементы строк и столбцов.
Сначала работаем с матрицей
.
Определяем минимальные элементы строк.
А потом эти элементы вычитаем из каждого
элемента соответствующих строк.
.
Теперь определяем минимальные элементы каждого столбца. А потом эти элементы вычитаем из каждого элемента соответствующего столбца.
.
Аналогично преобразовываем матрицу
.
.
Таким образом, получаем две приведенные матрицы:
и
.
Вычисляем константы приведения:
,
,
где
и
– суммы минимальных элементов строк и
столбцов матриц
и
.
,
но далее рассматриваем матрицу
.
Определяем степени нулей этой матрицы:
.
Максимальная степень – число 7. Наиболее вероятными дугами гамильтонова цикла являются дуги l(1; 2),l(4; 1) иl(5;4). Выбираем, например, дугуl(1; 2).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем первую строку и второй столбец,
элемент
заменяем
,
получаем матрицу
.
В матрице
элемент
заменяем
.
Имеем:
,
.
Обе матрицы не являются приведенными. Преобразуем их по той же схеме, как это делали выше.
.
Таким образом, получаем две приведенные
матрицы
и
.
Вычисляем константы приведения:
,
.
Так как
,
то далее рассматриваем матрицу
.
Определяем степени каждого нуля.
Максимальная степень – число 32. Наиболее вероятной дугой гамильтонова цикла является дуга l(5; 4).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем строку под номером 5 и столбец
под номером 4, получаем матрицу
.
В матрице
элемент
заменяем
.
Имеем:
,
.
Матрица
не является приведенной. Преобразуем
ее по той же схеме как делали выше.
.
,
.
Так как
,
то далее рассматриваем матрицу
.
Последние две дуги гамильтонова цикла
определяем из матрицы
:l(2; 3) иl(4;
1).
Таким образом, получаем решение, которое состоит из следующих дуг: (3; 5), (1;2), (5; 4), (2; 3), (4; 1). Гамильтонов цикл имеет вид 123541, длина цикла равна 95 км.
Сравним константу приведения
с константами приведения
альтернативных вариантов (
):
:
;
:
;
:
.
Так как
,
то возвращаемся к приведенной матрице
,
и от нее начинаем строить гамильтонов
цикл.
Определяем степени нулей этой матрицы:
.
Максимальная степень – число 8. Наиболее вероятной дугой гамильтонова цикла является дуга l(5; 3).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем пятую строку и третий столбец,
элемент
уже заменен
.
В матрице
элемент
заменяем
.
Получаем:
,
.
Матрица
- приведенная, а матрица
не является приведенной. Сделаем ее
приведенной, как это делали выше.
.
Вычисляем константы приведения:
,
,
где
и
– суммы минимальных элементов строк и
столбцов матриц
и
.
Так как
,
но далее рассматриваем матрицу
.
Определяем степени нулей этой матрицы:
.
Максимальная степень – число 7. Наиболее вероятными дугами гамильтонова цикла являются дуги l(1; 4), иl(4; 5). Выбираем, например, дугуl(4; 5).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем строку под номером 4 и столбец
под номером 5, получаем матрицу
.
В матрице
элемент
заменяем
.
Имеем:
,
.
Матрица
- приведенная, а матрица
не является приведенной. Сделаем ее
приведенной, как это делали выше.
.
Вычисляем константы приведения:
,
.
Так как
,
то далее рассматриваем матрицу
.
Определяем степени каждого нуля.
.
Максимальная степень – число 19. Наиболее вероятной дугой гамильтонова цикла является дуга l(2; 1).
В связи с этим рассматриваем две матрицы:
и
.
В матрице
убираем строку под номером 2 и столбец
под номером 1, элемент
заменяем
и получаем матрицу
.
В матрице
элемент
заменяем
.
Имеем:
,
.
Обе матрицы не являются приведенными. Преобразуем их по той же схеме, как это делали выше.
,
.
,
.
Так как
,
то далее рассматриваем матрицу
.
Последние две дуги гамильтонова цикла
определяем из матрицы
:l(1; 4) иl(3;
2).
Таким образом, получаем решение, которое состоит из следующих дуг: (5; 3), (4;5), (2; 1), (1; 4), (3; 2). Гамильтонов цикл имеет вид 145321, длина цикла тоже равна 95 км.
Сравним константу приведения
с константами приведения
альтернативных вариантов (
):
:
;
:
;
:
.
Это значит, что получили оптимальное решение.
Весь процесс отыскания оптимального плана можно изобразить в виде дерева ветвления:
Полученные гамильтоновы циклы 123541 или 145321 можно изобразить в виде орграфа.
Это означает следующее: коммивояжер сначала посещает город 1, потом – город 2, затем – город 3, после – город 5, и, наконец, город 4, а потом возвращается в город 1. При этом длина всего пути составит 95 км. Второе решение говорит о том, что коммивояжер может ехать в обратную сторону.
С помощью метода ветвей и границ с
использование современных ЭВМ можно
решать задачи коммивояжера для
.
В связи с малой эффективностью точных
методов получили широкое применение
эвристические. В настоящее время
существует более ста приближенных
методов решения задачи коммивояжера,
среди которых наиболее простметод
ближайшего соседа. Он реализует
требование включать в искомый замкнутый
цикл вершину, ближайшую к только что
найденной. Алгоритм «ближайшего соседа»
состоит в последовательном добавлении
к начальной вершине следующей ближайшей
к ней и т.д. Метод очень прост, однако
степень приближения к оптимальному
решению существенно зависит от выбора
начальной вершины. Поэтому алгоритм
целесообразно применять, начиная с
каждой вершины, и затем выбрать замкнутый
цикл наименьшей длины. Отметим, что если
ближайший сосед для некоторой вершины
уже вошел в цикл, то берется следующая
по близости вершина и т.д. Например,
используя данный метод для полного
взвешенного графа сnвершинами, потребуется рассмотретьn!
гамильтоновых циклов, из которых
выбирается цикл наименьшей длины.
Классическая задача коммивояжера, только в другой формулировке, нашла применение и при организации производства в машиностроении – задача о переналадке оборудования при переходе линии на обработку деталей, схожих по конструкции и габаритам.