如何找到节点之间的最短路径?

时间:2013-04-20 18:35:39

标签: algorithm math graph-theory graph-algorithm shortest-path

我正在研究一个地图应用程序,它可以找到用户想要的东西之间的最短路径。用户想要的每件事(例如面包或煤气)都有多个可能的位置。目前,我只是计划用户与每个项目的最近实例之间的路由到用户;这并不总是最好的路线。如下图所示,最快的路由有时涉及访问更远的节点的集群: enter image description here 对于每个项目,我有多达50个可能的节点(位置)。如何规划访问每个节点的最短路径(按任意顺序)?虽然指向如何解决这个问题的具体例子的指针很棒,但我真正想要的只是朝着正确的方向开始解决这个问题。

3 个答案:

答案 0 :(得分:1)

通过引入新图 G'可以找到解决此问题的方法:

  • G'中的节点是原始图表中的简单路径
  • 当两个节点对应于部分路径 p p' s.t时,存在边缘。 p 可以通过添加节点扩展到 p'

在此图表中(这是巨大的,所以不要在内存中明确表示),您可以使用A *搜索等方式找到所需的游览。

答案 1 :(得分:0)

少量物品

如果您的项目数量很少,您可以通过在新图表上使用Djikstra来解决它。

为每个位置组合和您收集的项目创建一个节点。

使用Djikstra查找从开始到收集所有项目的任何节点的最短路径。

对于L个位置和N个项目,这些新节点将有L * 2 ^(N-1),因此这仅适用于小N.

大量物品

我发现蚁群优化给我最近看过的类似problem的结果非常好,所以这也值得一看。

答案 2 :(得分:0)

您可能需要查看chapter 3 of this dissertation,了解解决车辆路径问题的技术概述。

首先,我会根据每个节点到下一个最近的资源节点的距离为每个节点分配一个权重,例如一个距离面包节点距离为5的气体节点和距离沃尔玛节点的距离为8的气体节点。体重为13;现在转到具有最低权重+距离当前位置的气体节点。

这种启发式问题在于它没有考虑到面包和沃尔玛节点之间的距离 - 它们可能彼此相邻,或者它们可能彼此相距13。另一种启发式方法是找到由Gas-Bread-Walmart三角形(或方形或五边形等形成的子图形的centroid,具体取决于您需要访问的位置类型),加上距质心的距离到子图中的点,并将其用作顶点权重。