最短路径A * f(n)= g(n)+ h(n)

时间:2012-06-14 14:34:34

标签: algorithm distance path-finding shortest-path a-star

当你使用A *时,它会选择最接近目标的最佳节点吗? (使用f(n)= g(n)+ h(n)) (使用曼哈顿距离为h(n))

但是如果在开始和目标之间有隔离墙怎么办?我无法用文字解释,但我会展示一张照片。

如果A *选择最接近目标的节点,为什么路径不是被红色包围的路径?但那个环绕着绿色的人。我真的不明白A *特别是当有无法通过的细胞/瓷砖/节点/等时。 (墙)。此外,您可以在 1:20

中看到我在此视频http://www.youtube.com/watch?v=DINCL5cd_w0(路径搜索算法(A *,Dijkstra,双向BFS))中制作的这张照片

2 个答案:

答案 0 :(得分:3)

A *还会考虑当前路径的长度以及到目标的距离。扩展了所有可能的路径,但优先考虑的是:

  1. 最接近目标
  2. 最短
  3. 路径成本f(n)等于前一步骤的成本g(n)加上基于到目标的距离的因子h(n)。因此,对于路径经过的每个额外网格空间,路径的成本增加。这将有效地在短路径和直接移动到目标的路径之间创造平衡。

    因此,当您的示例路径再次连接时,它是最短的紫色路径,因此将是首先展开的路径,并且最终将首先到达目标。

    有一个Udacity课程:Programming a Robotic Car在A *(和类似的)算法上有很好的部分。

答案 1 :(得分:2)

正如你所说,A *选择当前最佳路径基于f(n)= g(n)+ h(n),其中g(n)是当前计算的成本,h(n)是对当前计算的成本的估计。剩余成本。目前只有最有希望的节点(f(n)最小的节点)将被扩展。因此,当蓝色和紫色路径发散(让我们称之为点A)时,它会直接朝向墙壁,因为h(n)较小而整个f(n)变小。

请记住,h函数通常是问题的放松 - 在你的情况下,它可能是与目标的直接距离。因此,整个f变小。如果当前f变得大于对未预期路径的估计,则将考虑另一条路径。

因此,它不经过紫色路径的可能原因是蓝色路径中每个点的f的当前值总是小于紫色路径中的f。

这对我来说很奇怪,因为你的g总是在增加,并且蓝色路径中有许多点比目标A更远离目标。但是,如果你想确定,你应该做一些调试和验证每个未预测点的f,g和h的每个值与当前pusued路径的值。