我正在编写一个程序来玩点和框,我想通过在迭代深化方案中基于启发式值对alphaBeta中考虑的移动进行排序来提高我的时间效率。本质上,我想进入搜索树,在每次迭代中增加深度,并使用alphaBeta评估每个节点。在每个后续迭代中,我认为节点的顺序将由上一次迭代中节点的启发式值决定。但是,我在理解如何实现方面有困难。有人可以提供伪代码来说明如何将标准alphaBeta程序修改为使用迭代加深进行搜索吗?谢谢!
好吧,迭代加深并不是很难实现。如果您已经具有执行搜索的功能,可以将其称为alphaBetaAtRoot
,它执行固定距离的搜索,您只需从距离1开始重复调用即可:
for(int distance = 1; distance < MAX_DISTANCE && !outOfTime(); distance++) { bestmove = alphaBetaAtRoot(position, distance); } play(bestmove);
不过,重要的是要实现转置表。否则,您将不会从更好的移动顺序中受益,因为每次搜索都将以零知识开始。