阿尔法贝塔修剪minimax实施

我正在尝试使用alpha-beta修剪的minimax算法为游戏创建一个AI玩家。 我尝试正确实施它遇到了一些麻烦。 我有两个功能可供使用,一个用于评估给定玩家的当前棋盘状态(返回一些分数)getBoardScore,另一个用于返回所有可能的棋盘状态(从给定棋盘状态一个给定的玩家)getPossibleBoards。

我的AI通过首先调用alphaBeta来传递当前棋盘状态。 然后它从alphaBeta函数递归修改的变量'bestBoard'中设置一个新的棋盘状态。 这里是我的alphaBeta函数的代码:

 static int MAX = -1;
 static int MIN = 1;
 Board node;
 Board bestBoard;   

public int alphaBeta(Board node, int depth, int alpha, int beta, int player) {

    if (depth == 0 || node.gameFinished()) {
        return node.getBoardScore(player);
    }

    ArrayList<Board> childNodes = node.getPossibleBoards(player); //All valid moves from current the board state
    if (player == MAX) {
        for (Board currentBoard: childNodes) {
            int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player);      
            if (alpha < result) {
                alpha = result;
                    bestBoard = currentBoard;
            }
            if (beta <= alpha) {
                break; //alpha cut-off                            
            }
        }                    
    return alpha;
    }
    else { 
        for (Board currentBoard: childNodes) {
            int result = alphaBeta(currentBoard, depth-1, alpha, beta, -player);
            if (beta > result) {
                beta = result;
                    bestBoard = currentBoard;
            }
            if (beta <= alpha) {
                    break; //alpha cut-off
            }                            
        }
        return beta;
    }
}

我的问题是,它只是将我的bestBoard变量设置为最后看到的棋盘状态(而不是最佳状态)。 我似乎无法弄清楚我应该在哪里设置bestBoard变量(或者如果在设置它之前应该有一些条件)。 任何人都可以将我指向正确的方向吗? 谢谢


我认为问题在于,只有当您处于搜索的第一层时,才需要保存bestBoard

链接地址: http://www.djcxy.com/p/56349.html

上一篇: Alpha beta pruning for minimax implementation

下一篇: MiniMax with Alpha Beta Pruning for Othello not working