Algorithm A*算法的正确公式
我在看A*路径查找算法的定义,在不同的地方,它的定义似乎有所不同 不同之处在于在检查节点的后续节点时执行的操作,发现后续节点位于关闭列表中Algorithm A*算法的正确公式,algorithm,artificial-intelligence,path-finding,a-star,dijkstra,Algorithm,Artificial Intelligence,Path Finding,A Star,Dijkstra,我在看A*路径查找算法的定义,在不同的地方,它的定义似乎有所不同 不同之处在于在检查节点的后续节点时执行的操作,发现后续节点位于关闭列表中 一种方法(由和提出)说:如果继任者在封闭名单上,就忽略它 另一种方法(例如,建议和)说:如果继任者在封闭名单上,检查其成本。如果高于当前计算的分数,则从关闭列表中删除该项目,以备将来检查 我很困惑——哪种方法是正确的?直觉上,第一个对我来说更有意义,但我想知道定义上的区别。其中一个定义是错误的,还是它们在某种程度上是同构的?只有当到达任何重复状态的最佳路
- 一种方法(由和提出)说:如果继任者在封闭名单上,就忽略它
- 另一种方法(例如,建议和)说:如果继任者在封闭名单上,检查其成本。如果高于当前计算的分数,则从关闭列表中删除该项目,以备将来检查
我很困惑——哪种方法是正确的?直觉上,第一个对我来说更有意义,但我想知道定义上的区别。其中一个定义是错误的,还是它们在某种程度上是同构的?只有当到达任何重复状态的最佳路径总是第一个被遵循时,第一种方法才是最优的。如果启发式函数具有一致性(也称为单一性)的属性,则此属性成立。如果对于每个节点
n
和n
的每个后继节点n'
,从n
达到目标的估计成本不大于从n
到达n'
的步骤成本加上从n
达到目标的估计成本,则启发式函数是一致的
第二种方法是最优的,如果启发式函数只是允许的,也就是说,它永远不会高估实现目标的成本
每个一致的启发式函数也是允许的。尽管一致性是比可接受性更严格的要求,但人们必须非常努力地炮制出可接受但不一致的启发式函数
因此,尽管第二种方法更为通用,因为它适用于严格较大的启发式函数子集,但第一种方法在实践中通常是足够的
参考:第4.1节“人工智能:现代方法”中的“A*搜索:最小化总估计解决方案成本”一节。对不起,你能详细说明一下吗?我看不出与替换已关闭列表中的项目有任何关联。毕竟,返回到封闭列表仅对循环或负权重有意义。或者不是吗?联系在于,如果到某个状态的第一条路径最便宜,则不需要替换关闭列表中的状态。consistency属性保证此条件成立。请注意,如果封闭列表中的项目与通常情况一样只是节点,则即使没有循环,也可以返回到封闭列表:例如,如果一个节点可以通过多条路径访问。回答很好。我为这个问题挣扎了好几天。终于有道理了!