Задача коммивояжера (англ. Travelling salesman problem, сокращённо TSP) занимает особое положение в комбинаторной оптимизации и исследовании операций и представляется значимой проблемой транспортной логистики и маршрутизации (сферы планирования транспортных перевозок). Задача коммивояжера стала известна в отечественной литературе в 1960-1970 годах как задача о бродячем торговце.
В данной задаче рассматривается n городов и матрица попарных расстояний между ними. Коммивояжеру необходимо объехать все n городов, при том каждый город должен посещаться ровно один раз, и, в конце концов, вернуться в исходный город. Единственным условием и смыслом задачи коммивояжера является поиск самого выгодного маршрута посещения городов. Критерием выгодности маршрута может служить общее время в пути, суммарная стоимость дороги или суммарно пройденное расстояние. С математической точки зрения, это задача нахождения гамильтонова цикла наименьшего веса в связном взвешенном неориентированном графе.
Постановка задачи коммивояжера относится к задачам за пределами класса NP, которые не легче NP-полных задач, и называются NP-трудными. Все точные алгоритмы фактически представляют собой оптимизированный полный перебор вариантов. В некоторых случаях эти алгоритмы достаточно быстро находят решения, но в общем случае приходится перебирать все n! циклов. Несмотря на простоту постановки, задача коммивояжера относится к числу трансвычислительных, так как с помощью метода полного перебора не сможет быть решена за время нескольких миллиардов лет никакими компьютерами. Все это служит толчком для математиков к нахождению и
разработке новых численных методов для решения задачи коммивояжера, с которой не получается справиться уже полвека.
Первоначально проблематика задачи коммивояжера была описана еще в 1832 году в книге с названием «Коммивояжер — как он должен вести себя и что должен делать для того, чтобы доставлять товар и иметь успех в своих делах — советы старого курьера». При дальнейшем исследовании и рассмотрении задача нашла применение в сфере маркетинга, а также областях управленческой деятельности, где имела место значительная территориальная рассредоточенность объектов на местности. Примерами практического применения предоставленного класса задач может служить определение оптимальных маршрутов:
- обслуживания территориально рассредоточенных торговых точек потребителей для доставки товаров;
- сбора почтовых отправлений из почтовых ящиков;
- обслуживания технических объектов военного назначения;
- составления графика движения школьных автобусов по заданным остановкам и другие.
- доставки бутилированной воды;
- сбора сотрудников для доставки вахтовым методом.
Дан взвешенный связный неориентированный граф G=(V,E), где V — множество вершин в графе, E — множество рёбер. Таким образом, вершины будут соответствовать городам, а ребра — дорогам, соединяющим эти города. Главной целью моей дипломной работы является разработка и реализация Windows-приложения на языке C# для нахождения решения Евклидовой задачи коммивояжера на основе алгоритма Кристофидеса с использованием подхода Татта. Алгоритм Кристофидеса является 3/2 - приближенным алгоритмом решения задачи коммивояжера. Таким образом, заменяя в нем шаг прямого поиска минимального совершенного паросочетания на эвристический метод, основанный на подходе Татта, получаем модифицированный алгоритм решения задачи коммивояжера. Стоит отметить, что задачей нового алгоритма является упрощение поиска пути коммивояжера при получении решения близкого к оптимальному. Приложение включает несколько этапов, использующие следующие элементарные алгоритмы:
1. Алгоритм нахождения минимального остовного дерева.
2. Алгоритм Флойда.
3. Алгоритм расчета определителя матрицы.
4. Алгоритм Татта для поиска паросочетаний.
5. Алгоритм Дейкстры.
6. Алгоритм нахождения Эйлерова цикла.
7. Алгоритм нахождения Гамильтонова цикла основе Эйлерова цикла для Евклидовой задачи коммивояжера.
В программе используются два метода поиска кратчайших расстояний: алгоритм Флойда и алгоритм Дейкстры. Стоит отметить, что алгоритм Флойда использован только для поиска матрицы кратчайших расстояний, а алгоритм Дейкстры (реализованный мной в курсовой работе) - для поиска самого пути от заданной вершины до всех остальных. Таким образом, применение уже готовой структуры поиска и вывода кратчайшего расстояния было целесообразным.
Требуется предоставить способ вывода оптимального маршрута коммивояжера и его вес.
Также целью данной дипломной работы является сравнение реализованного алгоритма с 1-приближенным алгоритмом Кристофидеса (реализованным мной в бакалаврской работе) по относительной погрешности и времени работы. Относительную погрешность для метрических данных небольшой размерности можно вычислить с помощью точного решения, находящегося в пакете Mathematica.
В результате выполнения данной дипломной работы было реализовано Windows-приложение на языке С# для решения евклидовой задачи коммивояжера. Полученное приложение позволяет решить задачу двумя алгоритмами. Для каждого из них найти сам путь, вес пути коммивояжера, а также провести линейное сравнение алгоритмов.
Помимо своей основной задачи, данное приложение может быть использовано для решения задач поиска: минимального остовного дерева, кратчайших расстояний и путей между вершинами графа (алгоритм Флойда и алгоритм Дейкстры), определителя матрицы, Эйлерова цикла и расчета его пути, минимального совершенного паросочетания в произвольном графе. Все перечисленные подзадачи являются необходимыми этапами для нахождения решения приближенного алгоритма. Решения по приближенным алгоритмам выводятся на экран и при желании пользователя могут быть записаны в файл.
Таким образом, приложение предоставляет возможность получения данных для статистического анализа. В итоге приложение получилось удобным, полезным и эффективным.
И второй не менее важный результат данной работы - это проведения анализа сравнения алгоритмов. По результатам данной работы, с большой долей вероятности можно сказать, что значение длины пути коммивояжера, найденной по приближенному алгоритму с использованием подхода Татта, при размерностях задачи до 100 вершин в среднем на 15% улучшает результаты 1 -приближенного алгоритма. Поэтому очевидным является целесообразность использования нового приближенного алгоритма с применением подхода Татта для решения задачи коммивояжера.И учитывая факт NP-полноты задачи, это позволяет решать задачу, используя приближенный алгоритм без существенной потери качества решения.
1. Пападимитриу, Х.Х. Комбинаторная оптимизация: алгоритмы и сложность /Х.Х.Пападимитриу, К.Стайглиц - М.: «Мир»,1984. - 512с.
2. Кристофидес, Н. Теория графов /Н.Кристофидес - М.: «Мир», 1987. - 432с.
3. Кормен,Т.Х.Алгоритмы: построение и анализ, 2-е издание /Т.Х.Кормен,
4. И.Лейзерсон, Р.Л.Ривест, К.Штайн : Пер. с англ. - М.: Издательский дом «Вильямс», 2005. - 1296с.
4. Иванов Б. Н. Дискретная математика. Алгоритмы и программы: Учеб.пособие./Б.Н.Иванов - М.: Лаборатория Базовых Знаний, 2001. - 288с.
5. Матрица Татта http://e-maxx.ru/ [Электронный ресурс]. - Режим доступа: http://e-maxx.ru/algo/tutte matrix