Версия TLDR: Наиболее важная проблема заключается в том, что в задаче TSP вместо нахождения кратчайшего гамильтонова цикла существуют хорошие способы поиска наилучшего пути (я полагаю, тот, который посещает большинство узлов).) длиной не более X с фиксированной начальной точкой.
Полная версия:
Меня интересуют некоторые идеи дляПроблема, которая включает в себя TSP.Во-первых, пример реальной проблемы TSP состоит в том, что у вас есть N географических мест для посещения, и вам нужны маршруты проезда для оптимального маршрута (или почти оптимального) для посещения всех, либо туда и обратно, либо от А до Я. Есть хороший JSреализация для этого в http://www.gebweb.net/optimap/ и решатель JS TSP доступны в http://code.google.com/p/google-maps-tsp-solver/.
Теперь рассмотрим, что у вас есть N = 100 - 1000+ местоположений.На этом этапе вы не можете рассчитать маршрут с любым разумным количеством времени / ресурсов, но даже если бы это было возможно, это не очень полезно для большинства реальных сценариев.Допустим, вы выбрали фиксированную начальную точку и, исходя из этого, из этих 1000+ местоположений вы хотите сгенерировать оптимальный подчиненный маршрут , который вписывается в (относительно небольшое) максимальное ограничение (например,маршрут, который может быть пройден за 1 день или 1 неделю).Как это можно решить в реальном времени?Мои мысли смягчаются:
Построить матрицу продолжительности из начальной точки (этот шаг выполним даже в нескольких тысячах точек) и выбрать небольшое подмножество точек, которые находятся ближе всего к начальной точке.В идеале это подмножество должно быть достаточно большим, чтобы его полное посещение было определенно> 1024 * максимальное ограничение , но достаточно маленьким для быстрой обработки, по крайней мере, с помощью эвристических алгоритмов.
Найтиоптимальный маршрут с учетом местоположений, выбранных на шаге 1. Но вместо маршрута, который посещает все точки из этого набора, мне нужен лучший маршрут, который удовлетворяет максимальное ограничение , поэтому он не должен посещать все точки (это может посетить все, но это был бы крайний случай).Я особенно не уверен в том, как было бы лучше эффективно решить этот вопрос?
Любые ссылки или идеи приветствуются, особенно для пункта 2.
Отказ от ответственности : Конечно, суть проблемы не зависит от языка, я использую JS / Google Maps в качестве примера реального приложения.