MinMax算法不能正常工作

我正在研究一个国际象棋引擎,现在正在努力实现Minimax算法。 目前我已经编写了一个mimimax代码,但它并不能正常工作。 考虑到我不是一个好的棋手,我几分钟之内就击败了引擎。

我希望有人善意地研究我的极小极大码,并告诉我我写的是正确的。

提前致谢。

这是我的代码:

private int MiniMax(Game game, int depth){

    return Max(depth);
}
private int Max(int depth){
    if (depth <= 0
            || this.chessgame.getGameState() == Game.GAME_STATE_END_YELLOW_WON
            || this.chessgame.getGameState() == Game.GAME_STATE_END_BROWN_WON){ 
        return EvaluatePieceScore();
        }
    int max = -Integer.MIN_VALUE;
    List<Move> moves = generateMoves(false);

     for(Move allMove : moves){
           executeMove(allMove);
           int score = -Mini(depth - 1);
           undoMove(allMove);

            if( score > max){
                max = score;
            }
        }
    return max;
}

private int Mini(int depth) {
    if (depth <= 0
            || this.chessgame.getGameState() == Game.GAME_STATE_END_YELLOW_WON
            || this.chessgame.getGameState() == Game.GAME_STATE_END_BROWN_WON){ 
        return EvaluatePieceScore();
        }
    int min = Integer.MIN_VALUE;
    List<Move> moves = generateMoves(false);

     for(Move allMove : moves){
           executeMove(allMove);
           int score = -Max(depth - 1);
           undoMove(allMove);

            if( score > min){
                min = score;
            }
        }
    return min;
}

你做了一个相当复杂的任务:) MiniMax实现本身几乎没问题,看看WIKI页面:

Minimax算法

我认为最小化球员应该以最佳动作= +无穷大(在你的情况下为Integer.MAX_VALUE)

但是,既然你声明你的程序玩得不好,我会提供另一个观察。 我认为只有在您的案例中有一个非常好的评估函数(EvaluatePieceScore()方法)时,该算法才能正常工作。 这是“艺术”隐藏的地方。 你确定你的方法实现是否足够好? 我是这样说的,因为通常人们花费主要精力来实现这个功能,而不是算法本身。

希望这可以帮助

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

上一篇: MinMax algorithm not working properly

下一篇: Minimax Algorithm Tic Tac Toe Intermediate State