alpha-beta剪枝搜索

来源:互联网 发布:c语言逗号运算符举例 编辑:程序博客网 时间:2024/04/29 16:09

   // basic Alpha-Beta search;

     move bestmove;


    
int alphabeta(int depth, int alpha, int beta, bool isMyTurn) {

     
if (gameOver || depth == 0{
      
return evaluation();
     }


       generateLegalMoves();

        
// you may  change the search order to make the search faster

     
for (each move m) {
      
do move m;
      score 
= -alphabeta(depth - 1-beta, -alpha, ! isMyTurn );
      
if (score > alpha) {

             alpha 
= score;

             
if(at the Level 1)     

              bestmove 
= m;
      }

      undo move
-m;
      
if (alpha >= beta) {
       
break;
      }

     }

     
return alpha;
    }

Initial call  :  alphabeta(depth,  - infinite,  infinite,  isMyTurn);

不理解上面的代码的话,看看下面的极小极大搜索

极小极大搜索

//极大搜索

int Max(int depth)
{
 
int best = -INFINITY;
 
if (depth == 0)     
   
{
  
return evaluation();
 }

 generateLegalMoves();
 
for (each move m) {
   
{
  
do move m;
  val 
= Min(depth - 1);       // call the Min search
      undo move m;
  
if (val > best)
     
{
   best 
= val;
  }

 }

 
return best;
}

 
int Min(int depth) // Min search
{
 
int best = INFINITY;
 
if (depth <= 0)
   
{
  
return evaluation();
 }

 GenerateLegalMoves();
 
for (each move m) {
  
do move m;
  val 
= Max(depth - 1);    // call the Max search
       undo move m;
  
if (val < best)
     
{
   best 
= val;
  }

 }

 
return best;
}

负极大搜索

极小极大搜索可以统一用负极大搜索代替

int NegaMax(int depth)
{
 
int best = -INFINITY;
 
if (depth == 0)
   
{
  
return evaluation();
 }

 GenerateLegalMoves();
   
for (each move m) {
  
do move m; 
  val 
= - NegaMax(depth - 1);
  undo move m;
  
if (val > best)
     
{
   best 
= val;
  }

 }

 
return best;
}

 

原创粉丝点击