Java 极小极大值只下到最左边的叶子

Java 极小极大值只下到最左边的叶子,java,algorithm,max,min,othello,Java,Algorithm,Max,Min,Othello,所以我为我的奥赛罗游戏买了一个小棋盘游戏。在这个游戏中,AI应该使用Alpha-Beta剪枝搜索算法来决定要做什么。我使用了以下伪代码形式Geeksforgeks: function minimax(node, depth, isMaximizingPlayer, alpha, beta): if node is a leaf node : return value of the node if isMaximizingPlayer : bes

所以我为我的奥赛罗游戏买了一个小棋盘游戏。在这个游戏中,AI应该使用Alpha-Beta剪枝搜索算法来决定要做什么。我使用了以下伪代码形式Geeksforgeks:

function minimax(node, depth, isMaximizingPlayer, alpha, beta):

    if node is a leaf node :
        return value of the node

    if isMaximizingPlayer :
        bestVal = -INFINITY 
        for each child node :
            value = minimax(node, depth+1, false, alpha, beta)
            bestVal = max( bestVal, value) 
            alpha = max( alpha, bestVal)
            if beta <= alpha:
                break
        return bestVal

    else :
        bestVal = +INFINITY 
        for each child node :
            value = minimax(node, depth+1, true, alpha, beta)
            bestVal = min( bestVal, value) 
            beta = min( beta, bestVal)
            if beta <= alpha:
                break
        return bestVal

现在当我开始游戏时,这是起跑板,我打电话给人工智能进行移动。当执行minimax调用时,它返回深度为12的值2。深度12是我的树中的叶节点/板。在使用调试器运行它之后,我的实现似乎没有遍历回树。它所做的一切就是转到最左边的树并返回它的计算结果

您是否在调试器中运行了代码?是的,但调试递归方法非常困难。出于某种原因,我的代码总是只返回第一个叶节点中的最后一个板状态。就像它没有在探索任何其他节点一样。你在调试器中运行过你的代码吗?是的,但是调试递归方法太难了。出于某种原因,我的代码总是只返回第一个叶节点中的最后一个板状态。就像它没有探索任何其他节点一样。
//Called when it's the AI's turn to make a move. 
    public Board makeMove(Board board) {
        setRoot(board);
        int alpha = Integer.MIN_VALUE;
        int beta = Integer.MAX_VALUE;

        int val = alphaBetaSearch(tree.getRoot(), 0, true, alpha, beta);
        Board resultBoard = //Should be AI Board/move

        setRoot(resultBoard);
        return resultBoard;
    }

    private int alphaBetaSearch(Node node, int depth, boolean maximizing, int alpha, int beta) {
        currentDepth = depth;
        if (node.isLeaf()) {
            return evaluateUtility(node.getBoard());
        }

        if (maximizing) {
            int bestValue = Integer.MIN_VALUE;
            for (Node child : node.getChildren()) {
                int value = alphaBetaSearch(child, depth + 1, false, alpha, beta);
                bestValue = Integer.max(bestValue, value);
                alpha = Integer.max(alpha, bestValue);
                if (beta <= alpha) {
                    break;
                }
                return alpha;
            }

        } else {
            int bestValue = Integer.MAX_VALUE;
            for (Node child : node.getChildren()) {
                int value = alphaBetaSearch(child, depth + 1, true, alpha, beta);
                bestValue = Integer.min(bestValue, value);
                beta = Integer.min(beta, bestValue);
                if (beta <= alpha) {
                    break;
                }
                return beta;
            }
        }
        return 0; //Not sure what should be returned here
    }

    private int evaluateUtility(Board board) {
        int whitePieces = board.getNumberOfWhiteCells();
        int blackPieces = board.getNumberOfBlackCells();
        int sum = (blackPieces - whitePieces);
        return sum;
    }
EMPTY EMPTY EMPTY EMPTY
EMPTY WHITE BLACK EMPTY
EMPTY BLACK WHITE EMPTY
EMPTY EMPTY EMPTY EMPTY