我正在为国际象棋编写minimax算法。
对于没有α-β修剪的minimax和α-β修剪的minimax,我得到了不同的最终结果值。
我的伪代码在下面。有人能帮我吗?
极大极小()

public int miniMax(int depth, Board b, boolean maxPlayer) {
    if(depth == 0)
        return evaluateBoard(b);
    if(maxPlayer) {
        int bestMoveVal = 0;
        for( each Max player's moves) {
            // make a move on a temp board
            int eval = miniMax(depth - 1, tempBoard, false);
            bestMoveVal = Math.max(bestMoveVal, eval);
        }
        return bestMoveVal;
    }
    else {
        int bestMoveVal = 0;
        for (each Min player's moves) {
            // make a move on a temp board.
            int eval = miniMax(depth - 1, tempBoard, true);
            bestMoveVal = Math.max(bestMoveVal, eval);
        }
        return bestMoveVal;
    }
}

阿尔法贝塔()
public int alphabeta(int depth, Board b, int alpha, int beta, boolean maxPlayer) {
        if(depth == 0)
            return evaluateBoard(b);
        if(maxPlayer) {
            for(each max player's moves) {
                // make a move on a temp board
                int eval = alphabeta(depth - 1, temp, alpha, beta, false);
                alpha = Math.max(alpha, eval);
                if(beta <= alpha) //beta cut off;
                    break;
            }
            return alpha;
        }
        else {
            for(each of min's moves) {
                // make a move on a temp board
                int eval = alphabeta(depth - 1, temp, alpha, beta, false);
                beta = Math.min(beta, eval);
                if(beta <= alpha)
                    break; // alpha cut off;
            }
            return beta;
        }
    }

board代表一个board。对于每一个移动,我都在passed board对象的副本上进行移动,然后将这个临时板传递到进一步的调用。
evaluateBoard(Board b)接受一个板并根据给定的板场景计算分数。

最佳答案

代码中的一个大问题是alphabeta不是递归的,它应该是递归的它调用miniMax
alphabeta中的递归调用应该调用alphabeta,否则它是根本错误的也就是说,alpha-beta修剪应用于每个深度级别,而不仅仅是顶层。
minMax函数中,你有bestMoveVal = Math.max(bestMoveVal, eval);用于最小化和最大化玩家。

关于algorithm - minimax算法通过alpha beta修剪返回不同的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24836262/

10-11 04:32