二维网格世界中更好的 A* 搜索启发式算法

Better A* Search Heuristic in a 2-d grid world

我对 A* 搜索的想法还是陌生的。我了解 A* 搜索的一些启发式算法,例如直线距离(欧几里德距离)、曼哈顿距离和错位的瓷砖(用于 8 益智游戏)。

对于二维网格世界, 这是比直线距离更好的可接受启发式。我的想法是曼哈顿距离。还有其他建议吗?

当使用 A* 时,启发式算法必须具备两个属性,以便搜索是最优的(找到最佳解决方案)。

  • 启发式必须是可接受的
  • 启发式必须是单调的

实际上很难提出非单调(也称为不一致)启发式,所以让我们坚持第一个要求。

如果启发式从不高估两个节点(在本例中为点)之间的距离,则它是可接受的。因此,如果允许对角线移动,曼哈顿距离启发式是 可接受的 - 仅仅是因为毕达哥拉斯定理(两个导管的组合长度,比假设的平方根长),所以在这种情况下,直线距离启发式更好——因为它是可以接受的。

然而,如果在二维网格中不允许对角线移动,那么两种启发式算法都是可以接受的,因为它们都不会高估距离,但是 hte manhattan distance heuristic 是首选,因为它可以做出更好的估计,即估计更接近实际距离.

使用与允许的移动一致的试探法:

  • 对于4 方向,使用曼哈顿距离 (L1)
  • 对于 8 方向,使用切比雪夫距离 (L-Infinity)
  • 对于任意方向,您可以使用欧几里得距离,但替代地图表示可能更好(例如使用Waypoints)

A​​mit Patel 为这个主题提供了极好的参考资料 material。请参阅他位于 RedBlobGames.com for an introduction to A* and his page on Stanford's Game Programming Page 的页面,了解几种网格世界启发式方法的描述。他的斯坦福页面还描述了几种在不需要最优性时减少开放集大小的方法。

A​​ 也有一些扩展,可以利用具有恒定移动成本的网格中的对称性。 Daniel Harabor 在他的博士论文中介绍了两个——Jump Point Search (JPS) 和 Rectangular Symmetry Reduction (RSR)。他在 AiGameDev.com

上发表的一篇文章中描述了这些