Задача коммивояжера (проект) — различия между версиями
Gusakov (обсуждение | вклад) (Новая страница, с помощью формы Новый_проект) |
Gusakov (обсуждение | вклад) |
||
Строка 45: | Строка 45: | ||
* удв: Алгоритм, который выдаёт какое-нибудь решение и оценку сверху на ошибку | * удв: Алгоритм, который выдаёт какое-нибудь решение и оценку сверху на ошибку | ||
* хор: 2-приближение с помощью эйлерова цикла | * хор: 2-приближение с помощью эйлерова цикла | ||
− | * отл: 3/2-приближение с использованием паросочетания | + | * отл: 3/2-приближение с использованием поиска паросочетания |
Версия 10:59, 17 ноября 2014
Ментор | Алексей Гусаков |
Учебный семестр | Весна 2015 |
Учебный курс | 1-й курс |
Что это за проект?
Задача коммивояжера заключается в отыскании самого выгодного маршрута, проходящего через заданные города с последующим возвратом в исходный город. Для этой простой задачи нет (и скорее всего не будет) решения, правильно работающего за полиномиальное время. Однако, существуют подходы, дающие неплохие практические результаты. Мы изучим два таких подхода: переборный и приближённый. В первом подходе изучим техники, позволяющие быстро находить правильное решение для 50-100 городов, во втором - быстро находить решение, которое доказуемо "не сильно" (в 1.5 раза) отличается от правильного. Результатом работы будет библиотека, реализующая один из двух подходов.
Чему вы научитесь?
- Основам теории графов
- Основам приближённых алгоритмов
- Как использовать линейное программирование (и что это такое), чтобы оптимизировать перебор
- Писать код без ошибок (ну почти что)
- Визуализировать решение
Какие начальные требования?
- Программирование на C/C++ (в рамках прослушанного курса)
- Желание разбираться в алгоритмах
Какие будут использоваться технологии?
- git, github
- gtest
Темы вводных занятий
- Основы теории графов (что это такое, базовые алгоритмы: минимальное остовное дерево, Эйлеровы циклы)
- Приближённые алгоритмы, 2-оптимальное решение, паросочетания, 3/2-оптимальное решение
- Алгоритмы: перебор с возвратом, метод ветвей и границ, эвристики 2-opt и 3-opt, линейное программирование
Направления развития
Поскольку задача имеет некоторую практическую ценность, уже существует великое множество методов, помимо рассмотренных. Так например, для точного решения, помимо приведённых эвристик, могут быть полезны генетические алгоритмы, а для специального случая, когда расстояние между городами равно расстоянию на плоскости, существует полиномиальный алгоритм, находящий маршрут с любой наперёд заданной точностью.
Критерии оценки
Как уже сказано, есть два пути решения задачи - точный и приближённый. Точный путь:
- удв: Алгоритм работает на графе до 20 вершин, с помощью визуализатора можно понять, как всё работает
- хор: Реализованы 2-opt и 3-opt, алгоритм работает для 50 вершин
- отл: Метод ветвей и границ с линейным программированием
Приближённый путь:
- удв: Алгоритм, который выдаёт какое-нибудь решение и оценку сверху на ошибку
- хор: 2-приближение с помощью эйлерова цикла
- отл: 3/2-приближение с использованием поиска паросочетания