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