【问题标题】:Heuristic for finding the shortest path on a map在地图上寻找最短路径的启发式方法
【发布时间】:2014-07-13 03:22:50
【问题描述】:

我使用Dijkstra algorithm 来查找地图上两个站点之间的最短路径。从一个站点到另一个站点的成本在每个环节都是相同的。

但是,问题在于Dijkstra 试图找到从源到所有站点的成本最低的路径。我希望在找到到达目的地的最低成本路径后停止搜索。

因此,我决定为此使用A* algorithm。但在这种情况下,我无法想出一个好的启发式方法。我可以使用什么作为启发式方法?

【问题讨论】:

标签: a-star heuristics


【解决方案1】:

如果你只是

希望搜索在到达目的地的最低成本路径时停止 已经找到了

,Dijkstra 的算法已经可以有效地做到这一点。一旦目标节点的状态从“灰色”变为“最终”,您就可以让算法返回。引用wikipedia

如果我们只对顶点之间的最短路径感兴趣 和目标,如果 u = target,我们可以在第 13 行终止搜索。

 1  function Dijkstra(Graph, source):
 2      dist[source]  := 0                     // Distance from source to source
 3      for each vertex v in Graph:            // Initializations
 4          if v ≠ source
 5              dist[v]  := infinity           // Unknown distance function from source to v
 6              previous[v]  := undefined      // Previous node in optimal path from source
 7          end if 
 8          add v to Q                         // All nodes initially in Q
 9      end for
10      
11      while Q is not empty:                  // The main loop
12          u := vertex in Q with min dist[u]  // Source node in first case
13          remove u from Q 
14          
15          for each neighbor v of u:           // where v has not yet been removed from Q.
16              alt := dist[u] + length(u, v)
17              if alt < dist[v]:               // A shorter path to v has been found
18                  dist[v]  := alt 
19                  previous[v]  := u 
20              end if
21          end for
22      end while
23      return dist[], previous[]
24  end function

A* 解决了一个不同的方面,并且仅当您对您与目标节点的距离有一个有意义的启发式估计时才有用。

如果

从一个站点到另一个站点的成本是相同的 链接

,即如果路径长度是从起点到终点的链接数,则最短路径减少为depth first search。使用 DFS 算法可能更有效。


补充说明:

在Dijkstra的算法中,当从12行的优先队列的顶部元素u中提取一个节点时,它的距离标签是固定的,不可能找到比u当前更小的距离标签拥有。这就是为什么你可以在13 行中删除。您可以通过类似于数学归纳法的技术来证明这一点。也就是说,在uQ中去掉之后,Dijkstra就不可能找到更短的路径了。

【讨论】:

  • 是的,当从一组未解决的节点中找到目标节点时,我们可以停止搜索这一事实是正确的。 A* 只是 djkistra 算法的另一种变体。为什么说它解决了一个不同的问题,在这种情况下就没有有意义的启发式?
  • 我的意思是 A* 涉及不同的方面,而不是 SP 的立即停止方面。我并不是说没有有意义的启发式。例如,如果到目标的欧几里得距离可用,您可以使用它。但它的目的是希望通过这些附加信息加速解决方案。
  • 我编辑了我的答案,以消除这里没有有意义的启发式的印象。
  • 嗯好的。但是对于只有顶点和边的地图不会有欧几里得距离。那么,您还有什么其他可以建议的启发式方法吗?
  • 据我所知,某种形式的平面距离是最常见的一种。我想不出纯粹抽象图的启发式方法。也许对此更了解的人可以回答这部分。
猜你喜欢
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 2013-06-02
  • 2021-07-05
  • 2012-10-24
  • 2013-10-07
  • 2012-04-08
  • 1970-01-01
相关资源
最近更新 更多