В.И. ДУЛЬКЕЙТ Научный руководитель – Р.Т. ФАЙЗУЛЛИН, д.т.н. РЕШЕНИЕ ЗАДАЧИ КОММИВОЯЖЕРА МЕТОДОМ

advertisement
УДК 004.4(06) Технологии разработки программных систем
В.И. ДУЛЬКЕЙТ
Научный руководитель – Р.Т. ФАЙЗУЛЛИН, д.т.н.
Омский государственный университет
РЕШЕНИЕ ЗАДАЧИ КОММИВОЯЖЕРА МЕТОДОМ
РЕКУРСИВНОГО ПОСТРОЕНИЯ ВСПОМОГАТЕЛЬНОЙ КРИВОЙ
Задача коммивояжера является важной и вместе с тем трудно решаемой задачей [1]. Данная задача возникает в обширном классе приложений, например: распознавание траекторий, образов, построение оптимальных схем движения и т.д. Рассмотрим частный случай – задача коммивояжера с евклидовой метрикой.
Она формулируется следующим образом: пусть на плоскости задано множество точек (отметок) Ai (i=0,…n1), требуется найти перестановку отметок Bi, такую чтобы достигался минимум суммы:
n 1
S   d ( Bi , B( i 1) mod n )  min ,
i 0
где d(A, B) – евклидово расстояние между точками A и B.
Основная идея предлагаемого алгоритма заключается в том, что для нахождения требуемой перестановки строится гладкая вспомогательная кривая (ВК) с быстро убывающими коэффициентами. Для её построения используется быстрое преобразование Фурье (БПФ), которое применяется к векторам содержащим разности между координатами отметок и координатами отметочных точек (оснований перпендикуляров опущенных из отметок к ВК). Причём важной особенностью алгоритма является поэтапное вычисление коэффициентов разложения ВК, с промежуточным уточнением приближаемых векторов.
Алгоритм: Вход: координаты отметок; Выход: искомая перестановка.
Шаг 1. Построить кривую первого приближения, т.е. вычислить несколько первых коэффициентов разложения промежуточной кривой.
Шаг 2. Выполнять итеративно шаги с 3 по 10.
Шаг 3. Выполнить обратное БПФ для векторов с коэффициентами ВК.
Шаг 4. Найти отметочные точки для текущей ВК.
Шаг 5. Порядок следования отметочных точек задаёт некоторую перестановку отметок, которая определяет гамильтонов цикл. Вычислить длину этого цикла.
Шаг 6. Если длина цикла
окажется минимальной из всех
предыдущих, то запомнить соответствующую перестановку.
Шаг 7. По динамике изменения длины цикла можно определить, когда завершить итеративный процесс (например, при монотонном увеличении длины
цикла на протяжении последних
нескольких итераций).
Шаг 8. Построить новые вектора следующим образом: в отметочных точках взять разность
между координатой отметки и
Рис. 1. Последовательная работа алзначением компоненты вектора,
в остальных точках провести
горитма (светлым изображены ВК
линейную интерполяцию.
ранних итераций).
Шаг 9. Применить прямое
БПФ, далее в полученных векторах все коэффициенты с номерами больше чем I+3 (I – номер итерации) положить равными нулю.
Шаг 10. Сложить коэффициенты, полученные на предыдущем шаге, с коэффициентами ВК, получив новый набор коэффициентов ВК.
Шаг 11. Вернуть перестановку, порождающую гамильтонов цикл минимальной длины (данная перестановка была получена на шаге 6 одной из итераций).
Название
примера и
число отметок
Berlin52
A280
Bier127
Ch130
Lin105
Точное
решение
Результат
предложенного
алгоритма
7542
2586
118282
6110
14379
7993
2929
121680
6484
15279
Результат алгоритма
ИБ
8980
3169
129397
7467
20213
Таблица1.
Сравнение результатов алгоритмов
«иди в ближайший» (ИБ) и предложенного алгоритма с известными точными решениями [2].
________________________________________________________________________________
ISBN 5-7262-0555-3. НАУЧНАЯ СЕССИЯ МИФИ-2005. Том 14
1
Список литературы
1.
Гэри М., Джонсон
Д. Вычислительные машины и труднорешаемые задачи. М.: Мир, 1982.
2.
www.iwr.unieidelberg.de/groups/comopt/softwa
re/TSPLIB95/tsp/
Download