如何使用alpha beta修剪实现迭代深化

时间:2017-01-20 05:03:40

标签: java minimax alpha-beta-pruning iterative-deepening

我正在编写一个程序来播放Dots和Boxes,我希望通过在迭代深化方案中根据他们的启发式值来排序我在alphaBeta中考虑的移动来提高我的时间效率。基本上,我想进入搜索树,每次迭代都会增加深度,并使用alphaBeta评估每个节点。在每次连续迭代中,我考虑节点的顺序将由来自前一次迭代的节点的启发式值决定。但是,我无法理解如何实施。有人可以为标准alphaBeta程序如何使用迭代加深进行搜索提供伪代码吗?谢谢!

2 个答案:

答案 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 我希望能帮助你。