我有一个问题,试图找出如何实现一个交错等距地图的路径查找系统。
我读了A*算法,试图看看它在等距图上的表现,结果把我带到了这里。
所以问题就出在这里(我对廉价的显示器感到抱歉)
所以,我现在在绿色瓷砖(2,3)上,我试图找到红色瓷砖(3,1)的路径。
基于a*算法,我试图计算相邻瓷砖的f值(我只对这3个瓷砖进行了计算)。
由于图像显示的f值(2,1)小于(2,2),这是所有问题的根源,因此j+2和j-2的对角线平铺将(几乎)每次f值低于“逻辑”选项。
所以不是去(2,2),而是去(2,1)。
我怎样才能解决这个问题?有人能告诉我该怎么做吗?
最佳答案
根据给定的值,看起来你的h不admissible。因为从(2,3)到(2,2)需要10,我想从(2,2)到(3,1)应该需要10,但是你的H说需要20(即你高估了)。
一个可能的h是到目标的直接距离(类似于Manhattan distance或欧几里德)。
在我们的第一步,我们探索所有的邻居。我们的g值如下:(G
=绿色,R
=红色)
14
10 10
14 R 14
10 10
G 14
让我们把h当作曼哈顿距离,其中14是对角线跳跃,10是向直接邻居移动。这实际上是这个例子的最佳启发式,因为它与实际距离完全相同。一旦道路上有障碍,情况就会不同。
然后我们得到h值:
34
24 30
14 R 34
10 24
G 14
所以我们的f值(=g+h)是:
48
34 40
28 R 48
20 34
G 28
然后你找到最小值,也就是20,探索它所有的(未探索的)邻居,找到最小值,这就是本例中的目标。
请注意,只要一个邻居是目标,而不是我们当前正在探索的节点,就很容易停止。一个可接受的启发式方法不能保证我们能找到到达目标的最优路径。