【问题标题】:Create an optimal route on the map for a set of co-ordinates在地图上为一组坐标创建最佳路线
【发布时间】:2012-11-27 11:55:15
【问题描述】:

我有一组坐标,我将从一个位置的地址中提取。 现在,我的任务是为这些点生成一条最佳路径。 我怎样才能完成这项任务?我已经看到了为两点生成路线的示例。但是当有多个目的地要覆盖时,我无法想象它的规模更大。 我正在将此功能用于 android 应用程序。

【问题讨论】:

  • 您需要学习“旅行推销员”算法/问题。这是不平凡的。 (不确定“旅行”的美国拼写,可能只是一个“l”)
  • Android 不使用 Google Maps API V3。 (已删除标签)

标签: android google-maps geolocation location


【解决方案1】:

如果您必须按特定顺序访问它们,问题可以简化为求解两点的路径:只需使用相邻的坐标对以相同的方式解决问题,然后将路径缝合在一起,将起点连接到终点点。

如果您必须以任何顺序访问它们并优化行进距离,那么您正在解决traveling salesman problem 实际上是 NP-Hard。唯一确切的解决方案是尝试所有排列,实际上,它与前面的情况类似,但是对于大量点的练习将花费太多时间。首先,求解每对点的最短路径,只保留距离以节省内存。这将需要 n(n-1)/2 次操作。接下来,生成坐标集的每个排列,并使用先前计算的数据计算与它们关联的路径。距离最短的排列(以及与之相关的路径)将是您的最佳序列。使用第一段中提到的方法再次生成路径。

算法的第一步可能看起来很耗时,但实际上第二步是非多项式的。有运行速度更快的非精确解决方案,但它们的可靠性各不相同。您将不得不反复试验来确定它们是否适合您的应用程序。

【讨论】:

  • 我一直在网上分析很多TSP解决方案。但我无法区分哪一个对我有利。 TSP Solveranother one 另一个。
【解决方案2】:

这是一个“寻路”或“路由”问题:

http://en.wikipedia.org/wiki/Pathfinding

而且它经常面临 Dijikstra 算法:

http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm

或将其概括称为“A* 算法”:

http://en.wikipedia.org/wiki/A-star_algorithm

最近几年,这些东西已经演变成“收缩层次”算法:

http://en.wikipedia.org/wiki/Contraction_hierarchies

这样更快更高效。

那里有一些寻路/路由引擎。最好的可以说是开源路由机:

http://project-osrm.org/

您可以在那里找到更多引擎。只需谷歌搜索“地图路由”或“寻路”即可。

通常,引擎是您必须通过网络访问的(RESTful)Web 服务,而不是可以嵌入到 Java/Android 项目中的库。

【讨论】:

  • 我正在寻找可以在我的项目中使用的 Java 中的 TSP 求解器。但我几乎找不到一个。我还研究了vehicle routing problem,但我找不到它的实现。仍在谷歌搜索,我希望我能尽快到达某个地方。我也对遵循哪种方法感到困惑。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多