-
Описание двух постановок задачи: стандартная задача коммивояжёра и метрическая
-
Доказательство теоремы, что если P != NP, то для стандартной задачи коммивояжёра не существует константных алгоритмов приближения.
-
Описание алгоритма, дающего 2-приближение для метрической задачи на основе остовного дерева.
-
Описание алгоритма, дающего 1.5-приближение для метрической задачи на основе остовного дерева и паросочетания.
Имплементация алгоритма, дающего 1.5-приближение для метрической задачи.
Зависимости: numpy
Использование:
-
Загрузить файлы MetricTSP.py и main.py в одну папку.
-
Установить numpy: pip install numpy.
-
Запустить main.py: python3 main.py.
-
Ввести кол-во вершин и рёбра графа.
-
На выходе получить: mst - минимальное остовное дерево, min_perfect_matching - минимальное совершенное паросочетание в подграфе из вершин с нечетными степенями в остовном дереве, eul_cycle - построенный по mst + matching эйлеров цикл, ham_cycle - полученный из эйлерова цикла гамильтонов цикл - ответ на задачу.
Имплементация алгоритма сжатия соцветий, находящего совершенное паросочетание минимального веса в произвольном графе. Алгоритм был взаимствован с https://github.com/dilsonpereira/Minimum-Cost-Perfect-Matching и изменён под конкретную задачу.
IPython-notebook с проведением тестов работы реализованного алгоритма.