A*寻路,计算G成本

A* Pathfinding, Calculating G cost

我在理解如何始终如一地计算正确的 G 成本以实现 A* 寻路时遇到了一些困难。据我了解,这是从起始节点移动到当前节点的成本,但我不完全了解的是如何找到用于增加 G 成本的值。我见过使用 10 和 14 等数字的示例,但这些是任意的吗?它是否取决于实现?

当我开发一个 2D 游戏时,我似乎不得不为 G 成本找到一个 "sweet spot"(我应该注意到它似乎接近正在开发的地砖的宽度用作节点),然后我一直在寻找最短路径。

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

你来定义它们。当你 "walk a step" 时你添加到 G 的数量是你告诉算法你真正喜欢什么路径的方式(H 只是对一堆 G 增量求和的可接受的近似值,可以帮助它更快地找到你想要的东西)。使用 10 和 14 是 1 和 sqrt(2) 的近似值,有点像如果你有欧几里德距离但你在每一步都被限制在摩尔邻域内会发生什么,有时这被称为 "diagonal distance" 或 "octile distance"(尽管该术语更恰当地保留用于使用准确的 sqrt(2))。因此,这个选择并非完全凭空而来。

但这 取决于您,选择不同的成本会使 A* 更喜欢(或 "not prefer")某些路径,例如,如果您使对角线成本相同由于 "straight" 成本,它会非常喜欢对角线移动,它不一定会避免来回曲折(只要曲折走正确的路,这将是免费的,例如路径 /\ 会与 -- 的长度相同)。使用高对角线成本 (>2) 将使它找到的路径大部分看起来像您使用 von Neumann 邻域,除了在 "emergencies" 中它仍然能够沿对角线移动。在 1 和 2 之间,差异不太明显,但有时会出现在障碍物周围。

因此使用低于 sqrt(2) 的对角线成本往往会使 "strange" 路径不必要地曲折,使用高于 sqrt(2) 的对角线成本往往会使 "dumb" 路径无法采用对角快捷方式。但是你可能想要那个,特别是如果它匹配 "actual cost" (如果你有的话),例如单位花费的步行时间或类似的东西。再一次,在我自己的一个游戏中,我故意使对角线成本高于基于步行时间的成本,以使路径看起来更自然(否则它太曲折了)。

黄色是"explored"。由于实现细节,底部路径绕道而行,对角线成本为 10(它从 NW 开始顺时针添加节点,并使用稳定插入 open 而不是像堆这样聪明的东西,因此具有相等 F 的节点被打破平局首先添加的)。