我正在编写一个程序来播放Dots和Boxes,我希望通过在迭代深化方案中根据他们的启发式值来排序我在alphaBeta中考虑的移动来提高我的时间效率。基本上,我想进入搜索树,每次迭代都会增加深度,并使用alphaBeta评估每个节点。在每次连续迭代中,我考虑节点的顺序将由来自前一次迭代的节点的启发式值决定。但是,我无法理解如何实施。有人可以为标准alphaBeta程序如何使用迭代加深进行搜索提供伪代码吗?谢谢!
答案 0 :(得分:3)
嗯,Iterative Deepening并不是很难实现。如果你已经有了执行搜索的功能,我们称之为for(int distance = 1; distance < MAX_DISTANCE && !outOfTime(); distance++) {
bestmove = alphaBetaAtRoot(position, distance);
}
play(bestmove);
,它会执行固定距离的搜索,你只需重复调用它,从距离1开始:
{{1}}
但重要的是,您实施了Transposition Table。否则,您将无法从更好的移动排序中受益,因为每次搜索都只是从零知识开始。
答案 1 :(得分:1)
我找到了以下链接:https://github.com/nealyoung/CS171/blob/master/AI.java 我希望能帮助你。