4_ Коммивояжер
.pdfЗадача о назначениях
0.Выделить в каждой строке min элемент. Сосчитать столбцы с - минимальными элементами, если все, то STOP.
1.Выберем столбец без -основы и обозначим его S1.
2.Увеличим S1 на максимальное так, чтобы все -минимальные элементы остались -минимальными. Получим для строки i1 новый-минимальный элемент ci1S1 — альтернативная основа для строки i1.
3.Для строки i1 столбец j(i1) с -основой пометим меткой S2.
4.Увеличим S1 и S2 на максимальное так, чтобы все -основы остались -минимальными элементами. Найдем новую альтернативную основу в одном из столбцов S1 или S2. Пусть она оказалась в строке i2. Пометим столбец j(i2) меткой S3 и будем продолжать этот процесс до тех пор пока не встретим столбец с двумя или более основами.
5.Произведем замену основ, начиная со строки, где лежит последняя альтернативная основа (строка ik).
21 |
Лекция 4. Задача коммивояжера |
|
|
36 |
44 |
37 |
41 |
|
|
|
|
|
32 |
|
48 |
57 |
43 |
|
|
|
|
|
49 |
41 |
|
39 |
60 |
|
|
|
|
|
38 |
34 |
35 |
|
52 |
|
|
|
|
|
40 |
43 |
47 |
37 |
|
|
|
|
|
|
22 14 18 21 30
16 15 17 19 21
20 22 18 21 19
14 21 20 16 18
14 17 15 20 18
22 |
Лекция 4. Задача коммивояжера |
|
Эвристические алгоритмы построения допустимого решения
Алгоритм АБ «Иди в ближайший из непройденных городов»
1.Выбираем произвольный город i1.
2.Находим ближайший город к i1, обозначаем его i2 и помечаем город
i1:
ci1i2 min ci1 j . j i1
3.На k-м шаге находим ближайший город к ik, обозначаем его ik+1 и помечаем город ik :
ci i |
min ci j . |
|
k k 1 |
j i1 ,...,ik |
k |
|
|
Теорема 4. Для любого r > 1 найдется пример I задачи коммивояжера такой, что
AБ(I) r OPT(I)
даже при условии, что cij cik + ckj, для всех 1 i, j, k n.
23 |
Лекция 4. Задача коммивояжера |
|
Трудный пример для алгоритма АБ
Имеется 15 городов, расположенных на окружности длиной 15 единиц,
OPT(I) =15. |
|
|
с1 |
|
|
|
|
Алгоритм АБ получает 27 единиц: |
c3 1 |
1 |
|
c12 1 c13 |
|
||
|
|
|
|||||
|
|
|
|
|
|
||
1 |
|
1 |
|
|
|
|
|
c2 |
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c7 |
2 |
|
|
|
|
2 |
c11 |
|
|
|
|
|
|
|
|
1 |
|
3 |
|
|
|
|
1 |
|
|
|
|
|
|
||
|
|
|
|
3 |
|
|
c14 |
c4 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
2 |
|
1 |
1 |
1 |
|
|
|
|
1 |
c9 |
|
|
|
|
|
|||
|
|
|
|
|
|
||
c6 |
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
c10 |
|
c5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
c15 |
1 |
|
c8 |
1 |
|
|
|
|
|
|
24 |
Лекция 4. Задача коммивояжера |
|
Алгоритм с гарантированной точностью для Евклидовой задачи
Остовное дерево. Дан связный граф G = (V, E), каждому ребру e E приписан вес we 0. Найти в G остовное дерево с минимальным суммарным весом ребер.
Алгоритм Краcкала AK дает точное решение задачи и нижнюю оценку для задачи коммивояжера:
AK(I) OPT(I).
25 |
Лекция 4. Задача коммивояжера |
|
Двойной обход остовного дерева
Обходим остовное дерево по правилу алгоритма «Поиск в глубину». Получаем маршрут, проходящий через все вершины. Листья посещаются один раз, но внутренние вершины посещаются несколько раз.
26 |
Лекция 4. Задача коммивояжера |
|
Перестройка остовного дерева
Движемся вдоль стрелок и помечаем вершины. Если очередная вершина уже помечена, то пропускаем ее и двигаемся дальше, пока не найдем непомеченную вершину или не вернемся в первую вершину. Цепочку дуг для помеченных вершин заменяем прямой дугой в непомеченную или первую вершину.
27 |
Лекция 4. Задача коммивояжера |
|
Оценка точности алгоритма
Теорема 5. Если матрица (cij) удовлетворяет неравенству треугольника, то алгоритм перестройки двойного обхода остовного дерева AST получает Гамильтонов цикл не более чем в 2 раза хуже оптимального для любого примера I задачи коммивояжера, то есть
AST (I) 2 OPT(I).
Доказательство. Для длины двойного обхода имеем
2 AK (I) 2 OPT(I).
Пусть новое ребро e, не содержащееся в двойном обходе, заменяет цепочку ребер {e1, e2,…, ek}. Из неравенства треугольника следует, что
k
we wei ,
i 1
то есть AST (I) 2 AK (I) 2 OPT(I).
28 |
Лекция 4. Задача коммивояжера |
|
Теорема 6. Полученная оценка точности
AST (I) 2 OPT(I)
является неулучшаемой.
Доказательство. Приведем пример семейства исходных данных задачи коммивояжера, на котором оценка 2 достигается асимптотически.
Рассмотрим следующий пример на полного графа с n вершинами, вес толстых ребер равен 1, остальных – 2. Вес оптимального решения n:
29 |
Лекция 4. Задача коммивояжера |
|
Для этого примера минимальное остовное дерево имеет вид:
Алгоритм перестройки двойного обхода может получить решение:
Длина этого Гамильтонова цикла AST 2n -2 Оптимальное решение задачи OPT(I) n
Таким образом, при n получаем AST (I) / OPT(I) 2.
30 |
Лекция 4. Задача коммивояжера |
|