1

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

但是,如果起点和目标之间有墙怎么办。我无法用语言解释,但我会展示一张图片。

如果 A* 选择最接近目标的节点,为什么路径不是红色圈出的那条?但是那个被绿色包围了。我真的不明白 A* 尤其是当有无法通过的单元格/瓦片/节点/等时。(墙壁)。此外,您可以在1:20看到我在视频http://www.youtube.com/watch?v=DINCL5cd_w0(路径查找算法(A*、Dijkstra、双向 BFS))中制作的这张图片

4

2 回答 2

3

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

  1. 最接近目标
  2. 最短的

路径成本 f(n) 等于上一步的成本 g(n) 加上一个基于到目标距离的因子 h(n)。因此,对于路径通过的每一个额外的网格空间,路径的成本都会增加。这将有效地在短路径和直接到达目标的路径之间建立平衡。

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

有一个 Udacity 课程:编程机器人汽车,其中有关于 A*(和类似)算法的好部分。

于 2012-06-14T14:42:53.733 回答
2

正如您所说,A* 根据 f(n)=g(n)+h(n) 选择当前最佳路径,其中 g(n) 是当前计算的成本,h(n) 是对剩余成本的估计。只有目前最有希望的节点(具有最小 f(n) 的节点)才会被扩展。因此,当蓝色和紫色的路径分叉时(我们称其为 A 点),它会直奔墙壁,因为那里的 h(n) 更小,整个 f(n) 变得更小。

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

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

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

于 2012-06-14T14:51:16.250 回答