计算机博弈 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仿真及其他应用

MATLAB教程案例11基于PSO粒子群优化算法的函数极值计算matlab仿真及其他应用

亚像素数值极值检测算法总结

PSO粒子群算法(鸟群算法)计算二元函数极值(C语言实现matlab工具箱实现)