您的位置:首页 > 其它

alpha-beta剪枝搜索

2007-11-21 19:37 423 查看
// 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;


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: