к.г.н. Рябов Юрий Владимирович aka SS_Rebelious [email protected] АЛГОРИТМ РЕШЕНИЯ ЗАДАЧИ КОМИВОЯЖЁРА И ПРОБЛЕМЫ ПОСЫЛЬНОГО НА ГРАФЕ C ИСПОЛЬЗОВАНИЕМ ТРИАНГУЛЯЦИИ ДЕЛОНЕ И ДОПОЛНИТЕЛЬНОЙ ОПТИМИЗАЦИИ МАРШРУТА 1 Определения Задача коммивояжёра: ● Нахождение замкнутого маршрута с наименьшей стоимостью, проходящего через все данные точки. 2 Определения Проблема посыльного: ● Нахождение маршрута с наименьшей стоимостью, проходящего через все данные точки. 3 Мотивация ● ● В настоящее время очень мало свободно распространяемых программных продуктов, позволяющих решить указанные задачи в геоинформационных средах. Единственный модуль — PgRouting — расширение для СУБД PostgreSQL. Реализованный в этом модуле генетический алгоритм не позволяет построить оптимальный маршрут при решении проблемы посыльного даже для проблемы в 20 точек. 4 Результат работы PgRouting для 20 точек 5 Оптимальный маршрут 6 Идея ● ● ● В среднем, 99,28% рёбер графа, соответствующего оптимальному решению задачи коммивояжёра, совпадают с рёбрами триангуляции Делоне. Значит, поиск оптимального пути на рёбрах триангуляции Делоне потенциально может дать приемлемый результат и значительно сократит количество потенциально исследуемых маршрутов. Поиск оптимального пути на графе можно производить при помощи случайных блужданий. Путь, найденный при помощи случайных блужданий можно оптимизировать. 7 Идея ● ● Обеспечение определённых качества маршрута снижает на его стоимость: Большая часть маршрута должна совпадать с рёбрами триангуляции Делоне. Не должно быть самопересечений. 8 Алгоритм 1. Полный граф, соединяющий все точки по которым необходимо проложить маршрут, условно разбивается на 2 под-графа (рёбрам присваиваются соответствующие атрибуты): ● А) граф, чьи рёбра совпадают с триангуляцией Делоне; ● Б) граф, в который входят все остальные рёбра. Каждому ребру присваивается вес, который обратно пропорционален стоимости передвижения по данному ребру. 9 Алгоритм 2. В каждую итерацию алгоритма (количество итераций заранее ограничено определённым значением или заданным временем работы) 1 «агент» помещается на начальную точку и псевдослучайным способом, ориентируясь на веса рёбер, доступных для передвижения, пытается проложить маршрут в конечную точку. В первую очередь, для передвижения рассматриваются те точки, к которым из данной точки можно пройти по рёбрам из под-графа А, если таких точек нет, то выбор основывается на точках доступных по под-графу Б. 1 0 Алгоритм 3. В каждую итерацию, при достижении «агентом» точки назначения, полученный граф проверяется на самопересечения. Выявленные самопересечения устраняются. 4. В каждую итерацию, маршруты с устранёнными самопересечениями подвергаются оптимизации, которая заключается в том, что поочерёдно каждая пара соседних точек маршрута меняется местами и, если стоимость маршрута от такой перестановки понизилась, такое изменение последовательности точек закрепляется. 1 1 Алгоритм 5. В каждую итерацию, веса (W) рёбер графа, попавших в оптимизированный маршрут, модифицируются на величину ΔW обратно пропорционально стоимости маршрута — С. Если найденный маршрут оказался самым оптимальным из уже найденных, то модификация весов рёбер — положительная (вес рёбер маршрута увеличивается) и она пропорционально номеру итерации n: ΔW=C*n. В противном случае — вес рёбер уменьшается, пропорционально константе k: ΔW = -C/k. Wn=Wn-1+ΔW, где Wn — вес ребра маршрута рассчитанный для итерации n, Wn-1 — текущий вес ребра (вес ребра в итерацию n-1). 1 2 Алгоритм 6. После того, как поиск новых путей прекращается, наиболее оптимальный маршрут разбивается на участки скользящим окном в M точек и шагом в m точек (m < M) на участки. Для каждого участка в окне происходит попытка найти оптимальный маршрут от первой точки маршрута в данном окне до последней точки маршрута в данном окне и оптимальный маршрут ищется только на под-графе А (веса которого сброшены до изначальных значений). Это решение задачи посыльного. 7. Последняя процедура оптимизации идентична описанной на этапе №4 (перестановка соседних точек). На выходе получаем окончательное решение. 1 3 Результат Алгоритм (DTSO) тестировался на 2-х примерах из библиотеки TSPLIB: «att48» и «eil76». Для каждой проблемы алгоритм работал 100 раз. Каждый расчёт был ограничен 100 секундами. Таблица: Сравнение средних результатов решений различных алгоритмов за 100 секунд. GA — genetic algorithm, HS — harmony search; PSO — particle swarm optimization, QA — quantum annealing, SA — simulated annealing, TS — tabu search, 2-OPT — greedy 2-opt heuristic, and OPT — optimal solution. Проб лема DTS O GA HS PSO QA SA TS 2OPT OPT att48 337 398 524 883 485 342 385 570 335 eil76 578 785 1284 1783 1170 582 642 887 538 1 4 Результат «att48» 1 5 Результат «att48» 1 6 Результат «eil76» 1 7 Результат «eil76» 1 8 Достоинства ● ● ● ● Позволяет получить лучшие результаты при гораздо меньшем (1-2 порядка) количестве обследованных маршрутов. Может работать с направленным и с ненаправленным графом. Есть потенциал для улучшения результата за счёт параллелизации. За счёт обеспечения определённого качества маршрута (преимущественно прокладывается на рёбрах триангуляции Делоне, устраняются самопересечения) может быть использован, для получения первичного маршрута в других алгоритмах, которые построены на оптимизации маршрута, но которым необходим изначальный маршрут для начала процесса оптимизации. 1 9 Недостатки ● ● Текущая реализация не позволяет получить удовлетворительных результатов для проблем с количеством точек более 200 (в том числе, из-за производительности библиотеки NetworkX). Результат в значительной степени зависит от настраиваемых параметров. Необходимо провести дополнительные исследования по автоматическому определению оптимальных параметров. 2 0 Спасибо за внимание! Рябов Юрий Владимирович [email protected] 2 1