我仍然对A * Search的想法很新。我理解A *搜索的一些启发式方法,例如直线距离(欧几里德距离),曼哈顿距离和错位瓷砖(用于8个益智游戏)。
对于二维网格世界, 哪个是比直线距离更好的可接受启发式算法。我对曼哈顿距离有所了解。还有其他建议吗?
答案 0 :(得分:1)
使用A *时,启发式必须包含两个属性,以便搜索最佳(找到最佳解决方案)。
实际上很难提出非单调(也称为不一致)的启发式算法,所以我们坚持第一个要求。
如果从未高估两个节点之间的距离(在这种情况下为点),则允许启发式。因此,如果允许对角线运动,曼哈顿距离启发式不是可以接受的 - 仅仅因为毕达哥拉斯定理(两个导管的组合长度,比连字符的平方根长),所以在此情况下,直线距离启发式是更好的 - 因为它是可以接受的。
然而,如果在2D网格中不允许对角线移动,则两种启发法都是可接受的,因为它们都不会高估距离,但是曼哈顿距离启发式是首选,因为它可以做出更好的估计,即估计更接近实际距离
答案 1 :(得分:0)
使用与允许的移动一致的启发式:
Amit Patel为这个主题制作了精彩的参考资料。请参阅他在RedBlobGames.com的页面,了解A *及其关于斯坦福大学Game Programming Page的页面,了解几个网格世界的启发式方法。他的斯坦福页面还描述了几种在不需要最优性时减小开放集大小的方法。
A *还有一些扩展,可以利用网格中的对称性和不断的移动成本。 Daniel Harabor在他的博士论文中介绍了两篇 - 跳跃点搜索(JPS)和矩形对称缩减(RSR)。他在AiGameDev.com
上发表的一篇文章中描述了这些内容