Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Семинар_9_ДМ_задача о коммивоярже.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
669.18 Кб
Скачать

1.3.Алгоритм Литтла.

Пусть известна матрица весов некоторого орграфа, вершины которого занумеруем числами от 1 до :

,

где – вес дуги, соединяющей вершины и j, где .

Символ ставится для блокировки дуг графа, которые явно не включаются в гамильтонов цикл, т.е. в расчет не берутся дуги и . Можно показать, что оптимальность решения не меняется от прибавления некоторого числа к строке или столбцу матрицы .

Алгоритм Литтла разбивается на несколько шагов.

Шаг 1. Приведение исходной матрицы.

В каждом столбце и в каждой строке матрицы  нужно получить хотя бы один нуль. Для этого, например, в первом столбце выбираем минимальный элемент и вычитаем его из всех элементов первого столбца. Аналогично поступаем с остальными столбцами. Если при этом в некоторых строках не появляются нули, то для них осуществляем ту же процедуру.

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

Шаг 2. Определение степеней нулей.

Находим степени каждого нуля – сумму минимальных элементов строки и столбца , в которых стоит этот нуль, без учета самого нуля. Нуль с максимальной степенью определяет дугу , которая вероятнее всего войдет в гамильтонов цикл. Например, если нуль с максимальной степенью находится на пересечении второй строки и третьего столбца, то дуга , вероятнее всего, войдет в гамильтонов цикл.

Шаг 3. Ветвление.

На самом деле, дуга, соответствующая максимальной степени нуля, может, как входить в гамильтонов цикл, так и не входить в него. Поэтому дальше нужно рассмотреть сразу два случая.

Первый случай. Возможно, дуга вошла в гамильтонов цикл. Блокируем ее, полагая . Строку и столбец вычеркиваем. Если требуется, приводим полученную матрицу меньшего порядка с константой приведения .

Второй случай. Дуга не вошла в гамильтонов цикл. Полагаем . Если требуется, приводим полученную матрицу с константой приведения .

Если , то шаги 2, 3 повторяем с матрицей .

Если , то шаги 2, 3 повторяем с матрицей . И так до тех пор, пока не дойдем до матрицы второго порядка, содержащей два нуля:

,

где и – некоторые числа или . Эти нули соответствуют двум последним дугам гамильтонова цикла: , . При этом .

Если , где , то задача решена. Если же для некоторого получается , то всю процедуру следует провести с матрицей . На последнем этапе получим новое значение функции : . Это значение сравниваем с , то есть новый процесс продолжается до тех пор, пока новые .

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

Задача коммивояжера: Коммивояжер должен посетить пять городов, заезжая в каждый город по одному разу. Расстояние между городами следующие: между первым городом и вторым – 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). Гамильтонов цикл имеет вид 123541, длина цикла равна 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). Гамильтонов цикл имеет вид 145321, длина цикла тоже равна 95 км.

Сравним константу приведения с константами приведения альтернативных вариантов ( ):

: ;

: ;

: .

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

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

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

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