计算机博弈 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 负极值算法的主要内容,如果未能解决你的问题,请参考以下文章