Artificial intelligence A*寻路,计算G成本

Artificial intelligence A*寻路,计算G成本,artificial-intelligence,path-finding,a-star,Artificial Intelligence,Path Finding,A Star,我在理解如何始终如一地为a*寻路的实现计算正确的G成本方面遇到了一些困难。据我所知,这是从起始节点移动到当前节点的成本,但我不完全理解的是如何找到用于增加G成本的值。我见过使用10和14这样的数字的例子,但是这些数字是任意的吗?这取决于实现吗 当我开发一个2D游戏时,似乎我必须先找到G成本的“最佳点”(我应该注意,它似乎接近用作节点的地板砖的宽度),然后才能始终找到最短路径 对这件事的任何澄清都会很好。你可以定义它们。当你“走一步”时,你加在G上的量就是你告诉算法你真正喜欢的路径的方式(H只是一

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

当我开发一个2D游戏时,似乎我必须先找到G成本的“最佳点”(我应该注意,它似乎接近用作节点的地板砖的宽度),然后才能始终找到最短路径


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

你可以定义它们。当你“走一步”时,你加在G上的量就是你告诉算法你真正喜欢的路径的方式(H只是一个可接受的近似值,它是一组G增量的总和,有助于它更快地找到你想要的路径)。使用10和14是1和sqrt(2)的近似值,有点像如果你有欧几里德距离,但你在每一步都被限制在摩尔邻域,有时这被称为“对角线距离”或“八进制距离”(虽然更恰当地说,这个术语是为使用精确的sqrt(2)保留的)。因此,这一选择并非完全无中生有

但这取决于你,选择不同的成本会使你*更喜欢(或“不喜欢”)某些路径,例如,如果你使对角线成本与“直线”成本相同,它将真正喜欢对角线移动,它不一定会避免来回曲折(只要zig走对了路,这将是免费的,例如路径
/\
的长度将与
--
的长度相同)。使用高对角线成本(>2)将使它找到的路径与您使用的冯·诺依曼邻域相似,除了“紧急情况”中的路径它仍然能够沿对角线移动。在1和2之间,差别要小得多,但它有时会出现在障碍物周围

因此,使用低于sqrt(2)的对角线成本会使“奇怪”的路径不必要地曲折,使用高于sqrt(2)的对角线成本会使“愚蠢”的路径无法走对角线捷径。但您可能需要这样做,尤其是当这与“实际成本”匹配时(如果您有)然后,在我自己的一个游戏中,我故意使对角线的成本高于基于行走时间的成本,以使路径看起来更自然(否则就太曲折了)


黄色是“探索的”。由于实现细节的原因,底部路径需要一个对角线成本为10的迂回路径(它从NW开始顺时针添加节点,并使用一个稳定的插入到
open
中,而不是像堆这样聪明的东西,因此具有相等F的节点会在最先添加的节点上断开连接).

谢谢你的解释。但是,在我创建的游戏中,没有对角线运动,即对角线运动根本不可能。在实现此算法时,通常是假设对角线运动是可能的吗?还是认为它是可选的?我只是觉得奇怪,使用10的代价会导致玩家走得更长路径,而当我增加G时,它最终达到了一个点,它总是选择最短路径,这同样没有对角线移动。@samcp20你可以选择任何你想要的邻域集,它甚至可以在任意图上工作!所以是的,对角线移动是完全可选的。当然,如果你没有对角线运动。不管怎么说,从你的措辞来看,这听起来像是你调整了G而不是H,在这种情况下,使G变小会导致它失败(这使得启发式不可接受,因此它可能找不到最优解)啊,我明白了,等我有机会的时候,我会再做一些实验。再次感谢你的详细解释,非常感谢。