java – 如何使用alpha beta修剪实现迭代加深
作者:互联网
我正在编写一个程序来播放Dots和Boxes,我希望通过在迭代深化方案中根据他们的启发式值在alphaBeta中考虑我考虑的移动来提高我的时间效率.基本上,我想进入搜索树,每次迭代都会增加深度,并使用alphaBeta评估每个节点.在每次连续迭代中,我考虑节点的顺序将由来自前一次迭代的节点的启发式值决定.但是,我无法理解如何实现这一点.有人可以为标准alphaBeta程序如何使用迭代加深进行搜索提供伪代码吗?谢谢!
解决方法:
那么,Iterative Deepening并不是很难实现.如果你已经有了执行搜索的功能,那么我们称之为alphaBetaAtRoot,它执行固定距离的搜索,你只需重复调用它,从距离1开始:
for(int distance = 1; distance < MAX_DISTANCE && !outOfTime(); distance++) {
bestmove = alphaBetaAtRoot(position, distance);
}
play(bestmove);
但重要的是,您实施了Transposition Table.否则,您将无法从更好的移动排序中受益,因为每次搜索都将从零知识开始.
标签:java,minimax,alpha-beta-pruning,iterative-deepening 来源: https://codeday.me/bug/20190623/1266300.html