【问题标题】:Java - Alpha beta pruning for minimax implementationJava - 用于极小极大实现的 Alpha beta 修剪
【发布时间】:2016-10-02 20:22:49
【问题描述】:

我正在尝试使用带有 alpha-beta 修剪的 minimax 算法为游戏创建 AI 播放器。我在尝试正确实施它时遇到了一些麻烦。我有 2 个函数可以使用,一个用于评估给定玩家的棋盘当前状态(返回一些分数)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 应该包含什么?这不会解决您的问题,但我建议使用 negamax 公式,而不是为 min 和 max 使用两个几乎相同的代码。

标签: java artificial-intelligence minimax alpha-beta-pruning


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多