2017-01-20 50 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

謝謝!我沒有意識到換位表的必要性。我已經做了更多的閱讀,這對我有很大的幫助。 –