A *寻路,计算G成本

时间:2016-04-08 07:11:42

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

我很难理解如何一致地计算A * Pathfinding实现的正确G成本。据我了解,这是从起始节点移动到当前节点的成本,但我不完全理解的是如何找到用于增加G成本的值。我见过使用10和14这样的数字的例子,但这些都是随意的,是否取决于实现?

当我开发2D游戏时,似乎我几乎不得不为G成本找到一个“最佳点”(我应该注意到它似乎接近于用作节点的地砖的宽度)在我不断找到最短路径之前。

对此事的任何澄清都会很棒。

1 个答案:

答案 0 :(得分:3)

你定义它们。当你“走一步”时你添加到G的数量就是你如何告诉算法你真正喜欢哪条路径(H只是一个可接受的近似值,可以总结一堆G增量,帮助它更快地找到你想要的东西)。使用10和14是1和sqrt(2)的近似值,类似于如果你有欧几里德距离会发生但你在每一步都被约束到摩尔邻域,有时这被称为“对角距离”或“距离” “(尽管更准确地说该术语是用于使用精确的sqrt(2))。因此,这种选择并非完全无处可寻。

取决于您,选择不同的成本会使A *更喜欢(或“不喜欢”)某些路径,例如,如果您将对角线成本与“直接”成本相同,它会非常喜欢对角线移动,它不一定会避免来回曲折(只要zig以正确的方式移动就会自由,例如路径/\与{{1}的长度相同}})。使用高对角线成本(> 2)将使其找到大多看起来像您使用冯诺伊曼邻域的路径,除了在“紧急情况”中它仍然能够沿对角线移动。在1到2之间,差异不太明显,但有时会出现障碍。

因此,使用低于sqrt(2)的对角成本往往会产生不必要的锯齿形“奇怪”路径,使用高于sqrt(2)的对角线成本往往会使“哑”路径无法采取对角线快捷方式。但是你可能想要这样,特别是如果它与“实际成本”(如果你有的话)相匹配,例如单位所花费的步行时间或类似的东西。然后,在我自己的一个游戏中,我故意使对角线成本高于基于步行时间的成本,使路径看起来更自然(否则它过于曲折)。

paths with different diagonal costs

黄色被“探索”。由于实现细节,底部路径绕过对角线成本10(它从NW开始顺时针添加节点并使用稳定插入--而不是像堆一样聪明的东西,因此具有相等F的节点被打破首先加入了。)