【问题标题】:Shortest path A* f(n) = g(n) + h(n)最短路径 A* f(n) = g(n) + h(n)
【发布时间】:2012-06-14 14:34:33
【问题描述】:

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

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

如果A*选择离目标最近的节点,为什么路径不是红圈的那条?但是那个被绿色包围了。我真的不明白 A* 尤其是当有无法通过的单元格/瓦片/节点/等时。 (墙壁)。另外,您可以在 1:20

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

【问题讨论】:

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


    【解决方案1】:

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

    1. 离目标最近
    2. 最短

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

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

    有一个 Udacity 课程:Programming a Robotic Car,其中有一个关于 A*(和类似)算法的好部分。

    【讨论】:

    • 啊,所以它还考虑了当前路径的长度,从起始节点到您所在的当前节点。这就是原因。谢谢!
    • 每次扩展路径,都会给路径的总分增加一个因素。该因素基于到目标的距离。然后它首先扩展得分最低的路径。
    【解决方案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 的每个值与当前已追踪路径的值。

    【讨论】:

      猜你喜欢
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-05
      相关资源
      最近更新 更多