Alpha-Beta剪枝算法


最近做了一個中國象棋項目,其中用到了Alpha-Beta剪枝算法,在此做個記錄。

Alpha-Beta剪枝算法是一種傳統的搜索算法, 它在博弈算法中有着非常廣泛的運用,它大大減少了相同搜索深度下的計算量。

Alpha-Beta剪枝算法是由最大值和最小值算法得來的,該算法是一個0總和算法,即一方要在可選的情況下使其優勢最大化,使對手優勢最小化,而開始的時候為0.

example:

假設方框是極大值的節點,圓是極小值的節點,B的值為18,D的值為16,而C是極小值,因此C<=16,A取max(B,C),因而沒有必要考慮C的其他子節點。

Alpha-Beta剪枝算法(遞歸偽代碼):

 1 int AlphaBeta(int depth, int alpha, int beta){
 2    if (depth == 0) {
 3       return Evaluate();
 4     }
 5     GenerateLegalMoves();
 6     while (MovesLeft()) {
 7         MakeNextMove();
 8       val = -AlphaBeta(depth - 1, -beta, -alpha);
 9       UnmakeMove();
10      if (val >= beta) {
11         return beta;
12      }
13      if (val > alpha) {
14        alpha = val;
15      }
16     }
17    return alpha;
18 }

參考:http://www.xqbase.com/computer/search_alphabeta.htm

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM