打破A *可接受性导致指数加速?

时间:2013-05-27 06:12:10

标签: a-star heuristics

我一直在研究滑动拼图拼图的通用版本,其中拼贴没有数字。相反,每个位置都有一个平铺或一个洞,并用布尔值表示为true或false(tile或hole)。

搜索的目的是采用具有n个图块的初始状态和具有n个目标位置的目标状态,并使用A *来找到如何移动图块以便填充每个目标位置的解决方案。以下是4x3网格的示例:

Initial State:
T F T F
F F T F
F F T T

Goal State
T T T T
T F F F
F F F F

我一直致力于不同的启发式方法来做到这一点,最成功的逻辑就是这样:

int heuristicVal = 0

for every tile (i)...
int closest = infinity
for every goal location (j)...
if (manhattan distance of ij < closest) closest = manhattan distance of ij
end for
heuristicVal += closest
end for

return heuristicVal

不幸的是,在两个或多个图块被启发式引导到同一目标位置的情况下,这仍然太慢。我尝试将heuristicVal乘以瓷砖的数量,然后突然出现指数加速。在28秒之前出现的问题花了不到1秒钟。

编辑:事实证明,这种变化并不总能产生最佳解决方案。但是,我不明白为什么它加速了这么多,或者为什么它仍然找到了正确的(虽然不是最理想的)答案,尽管不再被允许。

1 个答案:

答案 0 :(得分:1)

如果您破坏了可接纳性,A *将无法正常工作。请注意不再正常并不意味着你永远不会得到最佳结果 - 你不再保证得到一个。您最终还是可以更快地在解决方案上融合,但如果该解决方案不正确,那又有什么意义呢?