理解不一致的启发式

时间:2014-02-06 15:54:29

标签: algorithm a-star heuristics

假设我有一个网格,其中一些方块被指定为“目标”方块。我正在使用A *来导航这个网格,尝试使用非对角线移动至少访问每个目标方块。一旦访问了目标广场,就不再将其视为目标广场。 Think Pac Man,四处走动,试图吃掉所有的点。

我正在寻找一致的启发式方法来给A *辅助导航。我决定尝试在任何给定位置尝试“将曼哈顿距离返回到最近的未访问目标”启发式。我被告知这不是一致的启发式,但我不明白为什么。

将一个方格移向最近的目标广场的成本为1,曼哈顿距离也应减少一个。在目标广场上着陆将增加启发式的值(因为它现在将寻找下一个最近的未访问目标)或结束搜索(如果目标是最后一个未访问的目标)

H(N)< c(N,P)+ h(P)似乎总是成立。是什么让这个算法不一致,或者我的导师错了?

1 个答案:

答案 0 :(得分:4)

如果你问如何使用A *来找到通过所有目标的最短路径,答案是:你不能(只有一次迭代) 。这是Travelling Salesman Problem,NP-Complete问题。要使用A *来解决这个问题,您需要尝试目标排序的每个排列。然后,可以使用A * 解决从单开始到单个目标的每条路径(因此您需要为每个排列多次运行算法)

但是,如果你问如何使用A *来找到从单个开始到任何一个多个目标的最短路径,那么你的解决方案工作正常,你的启发式确实是一致的。多个一致启发式的最小值仍然是一致的启发式算法,即easy to prove