正确制定A *算法

时间:2009-01-03 11:38:39

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

我正在研究A *路径寻找算法的定义,它似乎在不同的地方有所不同。

区别在于通过节点的后继者时发现的操作,并且发现后继者在关闭列表中。

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

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

1 个答案:

答案 0 :(得分:9)

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

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

每个一致的启发式功能也是可以接受的。虽然一致性是一个比可接受性更严格的要求,但是必须非常努力地编写可接受但不一致的启发式函数。

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

参考:小组 A *搜索:最小化估算的总解决方案费用 4.1知情(启发式)搜索策略 人工智能:A现代方法