miniMax()返回从上一个/端子板开始的移动,如何使其返回到该端子板的移动?

问题描述 投票:0回答:1

我的miniMax()方法返回一个无效动作,并尝试将其应用于当前电路板,但是我认为,此返回的动作是电路板终端节点上的最佳动作。我希望它返回通往该板的最佳动作,这是我的miniMax()

public int miniMax(Board board, int depth, boolean maximizingPlayer, int alpha, int beta) {
        if (depth == 0 || isTerminalNode(board)) {
            return evaluateBoard(board);
            // return rand.nextInt((100000 - 10) + 10) + 100000;
        }

        if (maximizingPlayer) {
            int value = Integer.MIN_VALUE;
            for (String move : getPossibleMoves(board, board.getCurrentPlayer())) {

                Board b = new Board(board);
                b.apply(move);

                // Board b = board.clone();
                // b.apply(move);

                int result = Math.max(value, miniMax(b, depth - 1, false, alpha, beta));

                if (alpha < result) {
                    alpha = result;
                    bestMove = move;
                }

                if (alpha >= beta) {
                    break; // beta cut-off
                }
            }

            return alpha;
        } else {
            int value = Integer.MAX_VALUE;
            for (String move : getPossibleMoves(board, board.getEnemyPlayer())) {

                Board b = new Board(board);
                b.apply(move);

                // Board b = board.clone();
                // b.apply(move);

                int result = Math.min(value, miniMax(b, depth - 1, true, alpha, beta));

                if (beta > result) {
                    beta = result;
                }

                if (beta <= alpha) {
                    break; // alpha cut-off 
                }
            }

            return beta;
        }
    }

完成此操作后,它也无法正常工作:

    for (int i = 0; i < possibleMovesForBoard.size(); i++) {
        String move = possibleMovesForBoard.get(i);
        Board b = new Board(board);
        b.apply(move);
        int score = miniMax(b, 1, true, Integer.MIN_VALUE, Integer.MAX_VALUE);
        if (score > lastScore) {
            bestMove =  move;
            lastScore = score;
            System.out.println("This is my best move: " + bestMove);
        }
    }
java minimax alpha-beta-pruning
1个回答
0
投票

您可以在递归方法的所有深度中分配全局变量bestMove = move;,即使您只需要在每次递归移动中将其分配一次,也就是在递归的初始入口点,即如果depth == maxdepth

© www.soinside.com 2019 - 2024. All rights reserved.