首页 文章

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

提问于
浏览
4

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

2 回答

  • 1

    那么,Iterative Deepening并不是很难实现 . 如果你已经有了执行搜索的功能,那么我们称之为 alphaBetaAtRoot ,它执行固定距离的搜索,你只需重复调用它,从距离1开始:

    for(int distance = 1; distance < MAX_DISTANCE && !outOfTime(); distance++) {
      bestmove = alphaBetaAtRoot(position, distance);
    }
    play(bestmove);
    

    但重要的是,您实现了Transposition Table . 否则,您将无法从更好的移动排序中受益,因为每次搜索都将从零知识开始 .

  • 3

    我找到了以下链接:https://github.com/nealyoung/CS171/blob/master/AI.java我希望能帮到你 .

相关问题