Есть ли способ использовать API Карт Google для возврата "оптимизированного" маршрута с учетом набора путевых точек (другими словами, "достаточно хорошее" решение проблемы коммивояжера), или он всегда возвращает маршрут с точками в указанном порядке?
Оптимальная маршрутизация карт с помощью Google Maps
Ответ 1
Он всегда дает их в порядке.
Итак, я думаю, вам нужно будет найти расстояние (или время) между каждой парой точек, по одному, а затем решить проблему коммивояжера самостоятельно. Возможно, вы могли бы убедить Google Maps добавить эту функцию. Я думаю, что то, что составляет "достаточно хорошее" решение, зависит от того, что вы делаете и насколько быстро оно должно быть.
Ответ 2
В Google Maps API DirectionsRequest есть опция, называемая optimizeWaypoints, которая должна делать то, что вы хотите. Это может обрабатывать только до 8 путевых точек.
Кроме того, существует библиотека с открытым исходным кодом (MIT), которую вы можете использовать с API Карт Google для получения оптимального (до 15 местоположений) или довольно близкого к оптимальному (до 100 местоположений) маршрутов.
См. http://code.google.com/p/google-maps-tsp-solver/
Вы можете увидеть библиотеку в действии www.optimap.net
Ответ 3
В типичной проблеме TSP предположение состоит в том, что можно перемещаться непосредственно между любыми двумя точками. Для наземных дорог это никогда не бывает. Когда Google вычисляет маршрут между двумя точками, он выполняет эвристическую оптимизацию остовного дерева и обычно имеет довольно близкий к оптимальному пути.
Чтобы вычислить маршрут TSP, сначала нужно попросить Google рассчитать парное расстояние между каждыми node на графике. Я думаю, для этого требуется n * (n-1)/2 calcs. Затем можно было бы провести эти расстояния и выполнить оптимизацию TSP.
OpenStreetMaps.org имеет приложение Java WebStart, которое может делать то, что вы хотите. Конечно, расчеты выполняются на стороне клиента. Проект является открытым исходным кодом и может стоить взгляда.
Вы пытаетесь найти оптимальный путь прямой линии между местоположениями или оптимальный маршрут движения? Если вы просто хотите заказать очки, если вы можете получить координаты GPS, это станет очень простой проблемой.
Ответ 4
Только что нашел http://gebweb.net/optimap/ Это выглядит красиво и просто. Онлайн-версия с использованием карт Google.
Ответ 5
У Google есть готовое решение для Проблемы Продавца Путешествия. Это OR-Tools (инструменты Google Operations Research), которые вы можете найти здесь: https://developers.google.com/optimization/routing/tsp
Что вам нужно сделать в основном это 2 вещи:
-
Получите расстояния между каждыми двумя точками с помощью API Карт Google: https://developers.google.com/maps/documentation/distance-matrix/start.
-
Затем вы передадите расстояния в массиве в OR-Tools, и он найдет для вас очень хорошее решение (для определенных случаев с миллионами узлов было найдено, что решения гарантированно находятся в пределах 1% от оптимального маршрута).
Вы также можете отметить, что:
В дополнение к поиску решений классической задачи коммивояжера, OR-Tools также предоставляет методы для более общих типов TSP, включая следующие:
-
Проблемы с асимметричной стоимостью - Традиционный TSP является симметричным: расстояние от точки A до точки B равно расстоянию от точки B до точки A. Однако стоимость доставки предметов из точки A в точку B может не совпадать с стоимостью доставки их из от точки B до точки A. OR-Tools также может обрабатывать проблемы, которые имеют асимметричные затраты.
-
TSP, которые собирают призы и получают выгоду от посещения узлов
-
TSP с временными окнами
Дополнительные ссылки:
- OR-инструменты на Github: https://github.com/google/or-tools
- Начните: https://developers.google.com/optimization/introduction/get_started