python idastar vs astar解决8个难题

python idastar vs astar解决8个难题,python,algorithm,Python,Algorithm,我开始更新我的人工智能知识,所以我实现了一些pathfind算法来解决8字谜 我想知道为什么我的IDA*实现有一条更长的路要走。它应该是最佳的,就像一个* % 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

我开始更新我的人工智能知识,所以我实现了一些pathfind算法来解决8字谜

我想知道为什么我的IDA*实现有一条更长的路要走。它应该是最佳的,就像一个*

% 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
代码基于要点

更新:

代码现在指向一个正在工作的版本

% 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创建4184368ASTAR1748节点。

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

谢谢,我将代码更改为现在将限制增量为1。但另一个问题是,为什么在idastar中要花这么长时间才能完成?idastar要经过多少次迭代?它总共扩展了多少节点,而不仅仅是在上一次迭代中?回答这些问题,你应该有你自己的答案。哦,是的。更改代码maxnode现在对每个查看的节点计数。ASTAR有1748个节点和IDASTAR 4184368个节点。你可以从每次迭代增加10个限制开始,然后对正确的限制进行二元搜索,取最后一个不起作用的限制和最后一个起作用的限制之间的中点,从而获得更好的(如果不是最好的话)。