计算机博弈 Negamax 负极值算法
Posted _刘文凯_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机博弈 Negamax 负极值算法相关的知识,希望对你有一定的参考价值。
在计算机博弈大赛中Negamax算法是Max-Min算法的一种变形,在代码实现上,它可以更加的简洁
原理
敌对方一定不会选择使我能获胜的节点,也就是一方要最大值,一方要最小值,只不过最小值用负值来表示了。递归的value计算公式如下:
value= -NegaMax( p, d-1)
注意其中的负号,d是深度,p是此刻状态。负极大值算法的核心在于:父节点的值是各子节点的值的负数的极大值。
图解
伪代码:
public int negamax(Board board, int depth, int alpha, int beta, int sign){
if(depth == null || board.getPossibleMovesNumber(colour) == 0){
return calculateBoardFunction(board);
}
else{
List<Move> possibleMoves = board.getPossibleMoves();
foreach(Move move in possibleMoves){
Board newBoard = board.clone();
newBoard.makeMove(move);
alpha = Math.max(alpha, -negamax(newBoard, depth-1, -beta, -alpha, -sign);
if(alpha >= beta){
break;
}
}
return alpha;
}
以上是关于计算机博弈 Negamax 负极值算法的主要内容,如果未能解决你的问题,请参考以下文章
MATLAB教程案例13基于SA模拟退火优化算法的函数极值计算matlab仿真及其他应用
MATLAB教程案例12基于GA遗传优化算法的函数极值计算matlab仿真及其他应用