2017-01-20 49 views
1

我正在编写一个程序来播放点和框,并且我想通过在迭代深化方案中基于它们的启发式值来订购我在alphaBeta中考虑的动作来提高我的时间效率。本质上,我想进入搜索树,每次迭代增加深度,并用alphaBeta评估每个节点。在每次连续迭代中,我认为节点的顺序将由先前迭代中的节点的启发式值决定。但是,我无法理解这将如何实施。有人可以提供一个标准alphaBeta程序如何使用迭代加深进行搜索的伪代码?谢谢!如何通过alpha beta修剪实现迭代加深

回答

1

那么,Iterative Deepening是不是很难实现。如果你已经有一个函数来执行搜索,姑且称之为alphaBetaAtRoot,其执行与固定的距离搜索,你只需要调用它反复,从距离1:

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

什么是重要的,虽然是你实施了一个Transposition Table。否则,您不会从更好的移动排序中受益,因为每次搜索都只是从零知识开始。

+0

谢谢!我没有意识到换位表的必要性。我已经做了更多的阅读,这对我有很大的帮助。 –