УДК 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/