python idastar vs astar解决8拼图

时间:2012-01-17 23:40:47

标签: python algorithm

我开始刷新我的知识,所以我实现了一些路径查找算法来解决8-Puzzle。

我想知道为什么我的IDA *实现有更长的路径。它应该像A *一样最佳。

% python puzzle8.py -a idastar -d hard
IDASTAR - RESULT in 161.6099:
1 | 2 | 3
4 | 5 | 6
7 | 8 | N

cost: 0 total_cost: 121
...
nodes 28

% python puzzle8.py -a astar -d hard
Max nodes 665 loops 1085
ASTAR - RESULT in 0.3148:
1 | 2 | 3
4 | 5 | 6
7 | 8 | N

cost: 0 total_cost: 115
...
nodes 24

代码在gist https://gist.github.com/1629405

更新

代码现在指向正常工作版本。

% python puzzle8.py -a idastar -d hard
IDASTAR - RESULT in 234.4490: 

1 | 2 | 3
4 | 5 | 6
7 | 8 | N
...
nodes 24

但我仍然想知道为什么IDA *在 python 下比A *花费的时间更长。

更新2:

代码被更改打印现在访问过的节点。

IDASTAR创建 4184368 ASTAR 1748 节点。

1 个答案:

答案 0 :(得分:4)

因为IDASTAR的实现会在每次迭代时将限制增加10,这只能保证您的解决方案不会超过最佳解决方案9。将增量更改为1,您应该获得最佳结果(但需要更长时间)。