【问题标题】:Correct formulation of the A* algorithmA* 算法的正确表述
【发布时间】:2010-09-29 08:47:43
【问题描述】:

我正在查看 A* 寻路算法的定义,它似乎在不同地方的定义有所不同。

不同之处在于遍历一个节点的后继节点时执行的操作,发现后继节点在封闭列表中。

  • 一种方法(由Wikipediathis article 建议)说:如果继任者在封闭列表中,则忽略它
  • 另一种方法(例如建议的herehere)说:如果继任者在封闭列表中,则检查其成本。如果它高于当前计算的分数,请从封闭列表中删除该项目以供将来检查。

我很困惑 - 哪种方法是正确的?直觉上,第一个对我来说更有意义,但我想知道定义上的差异。其中一个定义是错误的,还是它们在某种程度上是同构的?

【问题讨论】:

    标签: algorithm artificial-intelligence path-finding a-star dijkstra


    【解决方案1】:

    只有当到达任何重复状态的最优路径总是最先被遵循时,第一种方法才是最优的。如果启发式函数具有一致性(也称为monoticity)的属性,则此属性成立。如果对于每个节点 nn 的每个后继节点 n',启发式函数是一致的,从 n 到达目标的估计成本不大于从 @ 到达 n' 的步骤成本987654326@ 加上从n 达到目标的估计成本。

    如果启发式函数仅仅是可接受的,则第二种方法是最优的,也就是说,它永远不会高估达到目标的成本。

    每个一致的启发式函数也是可接受的。尽管一致性是比可接纳性更严格的要求,但必须非常努力地构造出可接纳但不一致的启发式函数。

    因此,尽管第二种方法更通用,因为它适用于严格更大的启发式函数子集,但第一种方法在实践中通常就足够了。

    参考:人工智能:A 一书的 4.1 知情(启发式)搜索策略小节 A* 搜索:最小化总估计解决方案成本现代方法

    【讨论】:

    • 抱歉,您能详细说明一下吗?我认为替换已关闭列表中的项目没有任何联系。毕竟,返回封闭列表仅对循环或负权重有意义。还是不行?
    • 连接是如果第一个状态的路径是最便宜的,您不需要替换关闭列表中的状态。一致性属性保证了这个条件成立。
    • 请注意,如果您在封闭列表中的项目只是通常情况下的节点,那么即使您没有循环,您也可以返回到封闭列表:例如如果一个节点可以通过多条路径到达。
    • 很好的答案。我在同一个问题上挣扎了好几天。终于有道理了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 2014-10-29
    • 2019-04-04
    • 1970-01-01
    • 2016-10-28
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多