A *搜索的最佳启发式

问题描述

我正在使用A *搜索实现Ricochet Robots游戏。游戏的目的是将特定的机器人放置在棋盘的特定位置。板上可以有几堵墙,还有3个可以移动的机器人。

我使用曼哈顿距离作为启发式方法,但搜索并非在我尝试的所有情况下都有效,有时会出现无限循环。我相信这是由于董事会中存在障碍。

这种情况下最好的启发式方法是什么?

这是a *搜索功能代码。它接收启发式功能作为输入。该节点是具有当前状态和当前板的对象。

//example not real calculation
[
 [33.755787,-116.359998],[44.968046,-94.420307],[44.333304,-91.493768]
]

解决方法

A *使用的启发法绝不能高估成本。由于可以在Ricochet机器人中使用一次移动来移动任意距离,因此Manhatten Distance不能作为一种启发式方法。

我唯一能想到的有效试探法是“如果不在同一行+列上,则为2;否则,如果不是最终目标,则为1”,因为不可能进行对角线移动。