有没有办法使用Google Maps API在给定一组航路点(换句话说,对旅行商问题的“足够好的”解决方案)的情况下取回“优化”路线,或者它是否总是返回路线与指定顺序的点?
答案 0 :(得分:22)
Google Maps API DirectionsRequest中有一个名为optimizeWaypoints的选项,它可以执行您想要的操作。但是,这最多只能处理8个航路点。
或者,有一个开源(MIT许可证)库,您可以使用Google Maps API来获得最佳(最多15个位置)或非常接近最佳(最多100个位置)路径。
请参阅http://code.google.com/p/google-maps-tsp-solver/
您可以在www.optimap.net
中查看正在运行的库答案 1 :(得分:5)
它总是按顺序给它们。
所以我认为你必须找到每对点之间的距离(或时间),一次一个,然后自己解决旅行商问题。也许您可以说服谷歌地图添加该功能。我认为构成“足够好”的解决方案取决于你正在做什么以及它需要多快。
答案 2 :(得分:4)
在典型的TSP问题中,假设是可以在任意两点之间直接行进。对于地面道路,情况永远不会如此。当Google计算两点之间的路线时,它会进行启发式生成树优化,并且通常会产生一个非常接近最佳路径。
要计算TSP路线,首先必须要求Google计算图表中每个节点之间的成对距离。我认为这需要n *(n-1)/ 2个计算。然后可以采用这些距离并对它们执行TSP优化。
OpenStreetMaps.org有一个Java WebStart应用程序可以做你想要的。当然,计算正在客户端运行。该项目是开源的,可能值得一看。
您是在尝试在不同位置或最佳行驶路线之间找到最佳直线路径吗?如果您只想订购积分,如果您可以获得GPS坐标,那么这将成为一个非常容易的问题。
答案 3 :(得分:4)
刚刚找到http://gebweb.net/optimap/它看起来很简单。使用谷歌地图的在线版本。
答案 4 :(得分:1)
Google已为Travel Salesman问题提供了现成的解决方案。您可以在这里找到OR-Tools(Google的运筹学工具):https://developers.google.com/optimization/routing/tsp
您需要做的基本上是两件事:
使用Google Maps API获取每两个点之间的距离:https://developers.google.com/maps/documentation/distance-matrix/start
然后,您将数组中的距离输入到OR-Tools,它将为您找到一个非常好的解决方案(对于某些具有数百万个节点的实例,发现解决方案一定在最佳游览的1%)。
您还应该注意:
除了为经典的旅行推销员找到解决方案之外 问题,OR-Tools还提供了更通用类型的方法 TSP,包括以下内容:
非对称成本问题-传统的TSP是对称的:从A点到B点的距离等于从B点到B点的距离 从A点到B点的运输费用 可能不等于将它们从B点运送到A点的成本。 OR-Tools还可以处理成本不对称的问题。
奖励收集TSP,通过访问节点获得收益
带有时间窗口的TSP
其他链接: