Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Поток минимальной стоимости и труднорешаемые задачи. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
2.3. Задача коммивояжера 71
Теорема 2.6. Алгоритм «Ближайшая вставка» имеет слож-
2
ность O(n
).
В [1] при обсуждении алгоритма Ярника — Прима — Дейкстры вводятся необходимые структуры данных (в част-
2
ности, массив БЛЖ), чтобы получить сложность O(n как при незатейливой реализации получается сложность O(n
),так
3
). (Собственно, именно это является заслугой Дейкстры; факти­чески именно он ввел понятие сложности алгоритма и пред­ложил эффективную реализацию алгоритма Прима, как тогда называли этот алгоритм). Мы не будем здесь воспроизводить то, что изложено ранее и сейчас является классикой. Подумай­те сами или поройтесь в литературе.
Минимальный остов может являться хорошим приближе­нием маршрута коммивояжера. На этой идее основан еще один алгоритм с гарантированной оценкой сложности.
Пусть G — эйлеров граф, и все вершины выписаны в том по­рядке, как они встречаются в эйлеровом цикле {v
1,v2
,...,vk},
где ребра образованы соседними вершинами. Предполагается, что читатель хорошо знаком с понятием эйлерова цикла и до­статочным условием его существования.
Определение. Маршрут коммивояжера называется
вписанным в эйлеров, если каждая вершина, кроме первой, выписана один раз в том порядке, в котором она встречает­ся в эйлеровом маршруте. Первая вершина встречается два­жды, в начале и в конце списка.
Неформально изложим алгоритм «Остовный обход».
72 Глава 2. Труднорешаемые задачи
Algorithm 12: Алгоритм «Остовный обход»
1 Построить минимальный остов T заданного графа, где
T — множество ребер;
2 В графе (V, 2T ) построить эйлеров цикл p, заданный
списком вершин, где граф с ребрами 2T получен удвоением ребер, входящих в минимальный остов;
3 Построить маршрут коммивояжера q, вписанный в p; 4 Выдать МК q.
Теорема 2.7. Для произвольного метрического графа G алго- ритм «Остовный обход» гарантирует решение, не более чем в два раза превосходящее оптимальное.
Отметим сразу, что степень каждой вершины в графе
(V, 2T ) четна, значит, существует эйлеров цикл p. Пусть он представлен списком вершин {v
,...,vk}. Пусть vv
1,v2
i+1
— две последовательные вершины во вписанном маршруте ком­мивояжера q, а в эйлеровом цикле p между ними стоят верши­ны {w руте коммивояжера более чем по одному разу раньше, чем v
,...,wj} (т.е. все эти вершины встретились в марш-
1,w2
i
Тогда из неравенства треугольника следует, что
).
(v
i,vi+1
) c(v1,w1)+c(w1,w2)+...+ c(wj,v
i+1
).
Но левая часть этого неравенства входит в МК, а правая — в эйлеров цикл.
Отсюда получаем неравенство qp=2C,гдеC — вес
минимального остова исходного графа G.
Остается вспомнить, что для любого МК, в частности и для Opt(G), верно неравенство C Opt(G). Отсюда и следует требуемое.
В примере из рис. 2.6 минимальным остовом, например, бу­дет множество ребер {(1,2); (2,3); (3,4)}.
Тогда эйлеров цикл p таков: 1—2—3—4—3—2—1. МК q, впи­санный в p: 1—2—3—4—1, вес его равен 25.
2.3. Задача коммивояжера 73
А если алгоритм выберет в качестве минимального остова такое множество ребер {(1,2), (2,3), (1,4)} и построит такой эйлеров маршрут 1—2—4—2—3—2—1, то МК получается таким: 1—2—4—3—1, его вес — 26.
Теорема 2.8. Алгоритм «Остовный обход» имеет слож-
2
ность O(n
).
Конечно, на первом шаге (построения минимального осто­ва) надо применять алгоритм Ярника — Прима — Дейкстры,
2
который имеет сложность O(n
). Построение графа (V, 2T ) име-
ет сложность O(n). Построение эйлерова цикла — O(m), но m =2(n − 1). Построить вписанный маршрут — это просто пробежаться один раз по списку вершин. Отсюда, получается
2
окончательная сложность O(n
).
2.3.3. Стохастические алгоритмы
Труднорешаемые задачи иногда неплохо решать с помощью вероятностных (стохастических) алгоритмов. Разберем этот подход на примере задачи коммивояжера.
Обозначим через А алгоритм, который на входе получает МК, затем случайным образом выбираются две вершины и пе- реставляются местами.
Будем считать, что МК задается массивом СЛЕД, тогда работу алгоритма A можно изобразить следующим образом (на рис. 2.7 изображен вход в алгоритм).
На рис. 2.7 через v+ и w+ обозначены вершины, следую- щие за v и w в МК, а через vи w— их предшественни­ки в МК. Предположим, что переставляются вершины v и w. Тогда вся перестановка заключается в том, что удаляются 4 ссылки СЛЕД[v], СЛЕД[v], СЛЕД[w], СЛЕД[w], а вместо них встают новые. Вся замена изображена ниже на рис. 2.8.
Здесь удаляемые ссылки изображены штриховой линией, а новые и сохраненные ссылки — черными стрелками. То есть из вершины w, вместо того, чтобы идти в вершину w, идем в вершину v ит.д.
74 Глава 2. Труднорешаемые задачи
Рис. 2.7. Вход в алгоритм A
Рис. 2.8. Выход из алгоритма A
Вес нового маршрута тоже легко считается.
T  := T  + c(w,v)+c(v, w+) + c(v−,w)+c(w, v+) −
− c(v−,v) − c(v, v+) − c(w−,w) − c(w, w+).
Таким образом, алгоритм A, переставляющий два элемента в МК, имеет сложность O(1), так как не зависит от размер­ности задачи.
Теперь можно предложить простой алгоритм для задачи коммивояжера. Изложим его неформально.
2.3. Задача коммивояжера 75
Входом является полный взвешенный граф, выходом — МК.
Algorithm 13: Простой стохастический алгоритм
1 Используя какой-нибудь быстрый алгоритм, построить
стартовый МК — p;
2 while не надоест do 3 Построить A(p); 4 if A(p)< pthen
5 положить p := A(p)
6 end 7 end 8 Выдать p.
Как понимать фразу «Используя какой-нибудь быстрый ал­горитм, построить стартовый МК»? Годится, например, алго­ритм «Ближайший сосед», особенно если прогнать его много раз, меняя стартовую вершину, и затем выбрать наилучший.
Для реализации нового оператора «While не надоест» до­статочно использовать любой из следующих методов:
1) поставить счетчик на количество выполнений и выпол­нять названную процедуру столько раз, сколько захочет­ся;
2) поставить ограничение по времени;
3) или использовать какой-нибудь другой способ.
Имеющиеся в литературе данные говорят, что итоговый ре­зультат тем лучше, чем лучше стартовое решение. Обычно этот алгоритм называют «2-окрестности».
Имеющиеся данные (не проверяли) говорят о том, что алго­ритм «3-окрестности» не дает существенного улучшения, так­же не получается существенного улучшения, если пытаться пе­реставляемые вершины поставить наилучшим образом в теку­щий МК.
Слабым местом приведенного алгоритма является то, что он принимает новые решения, только если они лучше старо­го. Алгоритм не позволяет обходить «локальные ямы». Пусть,
76 Глава 2. Труднорешаемые задачи
например, по оси абсцисс изображены последовательные МК (не важно, как они получены) по оси ординат их веса.
Рис. 2.9. Недостаток работы простого стохастического
алгоритма
На рис. 2.9, если алгоритм попал в промежуток (1,4), то он уже никогда не попадет в промежуток (6,9) поскольку мешает бугорок в промежутке (4,6).
Между тем, еще в 1960-е гг. специалисты по линейному про­граммированию при решении очень больших задач заметили, что иногда надо выбирать промежуточные решения, которые хуже, а результат получается лучше!
Устраняет этот недостаток алгоритм, называемый «Моде­лирование отжига». Появился этот метод в применении к за­дачам дискретной оптимизации где-то в самом конце 1980-х гг. Впервые он описан в 1953 г., в работе Н. Метрополиса в физи­ческих задачах.
Пусть состояние некоторой системы описывается энергией
. При каком условии система переходит в состояние с энер-
E
1
гией E энергией (E
? Есть закон Больцмана о переходе системы с одной
2
) в другую (E2). Этот закон Больцмана хорошо
1
работает в природе, а математика, как известно, естественная
2.3. Задача коммивояжера 77
наука! Значит, закон Больцмана должен работать и в матема­тике!
Если E
<E1, то всегда, а если E2 E1?
2
Оказывается, возможно и такое, переход возможен, но с ве­роятностью e
<E1(т. е. показатель экспоненты меньше нуля), то веро-
E
2
(E1−E2)/b
,гдеb — некоторый параметр, и, если
ятность считается равной 1. Для наглядности рекомендуем по-
x
строить график функции e
.
Теперь всё готово для изложения алгоритма «Моделирова­ние отжига».
Пусть E обозначает вес каждого маршрута коммивояжера. Выберем схему остывания: E
>E2>...>En≈ 0.
1
Algorithm 14: Алгоритм «Моделирование отжига»
1 Используя какой-нибудь быстрый алгоритм, построить
стартовый МК — p;
2 for i =1to n do 3 while не надоест do
4 Построить A(p); 5 if A(p)< pthen 6 положить p := A(p) 7 else 8 положить p := A(p) с вероятностью
9 end 10 end 11 end 12 Выдать p.
−(p−A(p))/E
e
i
То есть вначале почти всегда принимаются плохие вариан­ты, но затем они принимаются заметно реже, можно сказать, почти никогда.
Итак, в этом алгоритме на каждом шаге «монетка» броса­ется два раза. Первый — при построении A(p), второй — при выборе вероятности перехода.
78 Глава 2. Труднорешаемые задачи
Конечно, этот алгоритм достаточно сложный, надо хорошо подобрать схему остывания.
Почему этот алгоритм хорошо работает? Объяснение одно.
В природе это работает,
значит, в математике — тоже!
2.3.4. Точные решения. Метод ветвей и границ
Этот метод применяется для самых разных оптимизацион­ных задач. Вкратце можно сказать, что это метод получения точного решения путем разумного сокращения полного пере­бора. Мы здесь разберем этот популярный метод для ЗК.
Пусть G — полный взвешенный граф. Будем анализировать дерево решений, которое будем считать ориентированным, дво­ичным. Каждая вершина в дереве решений соответствует мно­жеству МК. Корень дерева — все МК в графе.
Пусть v — вершина в дереве решений. Тогда через v чим левого сына, а через v все МК, входящие в вершину v.
Пусть имеются алгоритмы:
— правого и через M (v) обозначаем
1
обозна-
0
1) алгоритм выбора ребра e, по которому левому сыну от­вечают все МК, содержащие ребро e, а правому — не со­держащие e (правило ветвления);
2) алгоритм вычисления нижних границ маршрутов из M (v), т. е. такого числа f(v), что для любого МК p из M (v) вы­полняется неравенство pf (v) (правило границ).
Теперь (в общих чертах) можно сформулировать весь алго-
ритм.
2.3. Задача коммивояжера 79
Algorithm 15: Метод ветвей и границ
1 while пока не найдена вершина w с наименьшей
нижней границей, и M (w) состоит из одного МК, а для всех еще не ветвящихся вершин нижняя граница не меньше, чем f(w) do
2 выбирать вершину с наименьшей нижней границей
и ветвить ее
3 end
Ветвление. Общий принцип: выбирать такое ребро e, что-
бы нижняя граница правого сына была как можно больше, чем у левого.
Годится такой метод: выбрать ребро, т. е. ноль в матрице весов так, чтобы сумма вторых элементов в этой матрице была как можно больше.
Границы. Осуществить редукцию матрицы, соответству­ющей данной вершине. Тогда сумма всех констант, использо­ванных при редукции на единственном пути из корня и есть нижняя граница рассматриваемой вершины.
Конечно, тут необходим пример.
Мы продолжим рассмотрение примера, приведенного в предыдущих разделах.
1 2 3 4
1 3 7 8 2 3 6 8 3 7 6 8 4 8 8 8
1 2 3 4
1 0 4 3 3 2 0 3 3 3 3 1 0 0 0 4 0 0 0 0
0 0 3 3
1 2 3 4
1 0 4 5 2 3 3 5 3 2 0 2 4 0 0 0
80 Глава 2. Труднорешаемые задачи
В первой строке слева — исходная матрица, справа — после вычитания минимального элемента в строке, во второй стро­ке — после вычитания минимального элемента в столбце, в по­следних строках и столбцах — соответствующие вторые по ве­личине элементы.
По умолчанию считаем, что матрица всегда состоит из неот­рицательных элементов.
Обозначим через v корень дерева решений. Поскольку сум­ма констант, использованных при редукции, равна 3+3+6+8+0+0+0+2 = 22, то 22 является нижней границей всех МК, потому что в каждой строке и в каждом столбце есть хотя бы один ноль и, возможно, из них и сложим МК. Итак, f(v)=22.
Для нашего примера подходят че­тыре нуля, пусть выбран ноль в пер­вой строке и во втором столбце; иначе говоря, выбрано для ветвления ребро (1,2). Тогда дерево решений выглядит так (см. рис. 2.10).
Какой сын лучше? Конечно, ле­вый, так как у левого матрица стано­вится на единицу меньшей размерно­сти, а у правого только на пересече­нии нужной строки и столбца стано­вится бесконечность (т. е. нельзя брать
Рис. 2.10. Ветвление
вершины v
это ребро).
Ниже приведены матрицы левого и правого сыновей верши­ны v, сверху исходные, снизу после редукции. В левой матрице вычли 3 из первой строки, а в правой—3изпервой и вто­рой. В соответствии с алгоритмом, мы должны ветвить левую вершину и использовать для этого ребро (3,4). Новая нижняя граница для вершины v
равна 25.
00
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]