我正在研发国际象棋引擎,现在尝试实施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;
}
答案 0 :(得分:0)
你做了一个相当复杂的任务:) MiniMax实现本身几乎没问题,看看WIKI页面:
我认为最小化玩家应该使用最佳移动= +无穷大(在您的情况下为Integer.MAX_VALUE)
但是,既然你说你的节目播放得很糟糕,我会提供另一个观察。我认为只有你有一个非常好的评估函数(在你的情况下是EvaluatePieceScore()方法),算法才会起作用。这就是&#34;艺术&#34;隐藏。你确定你的方法实现足够好吗?我之所以这么说,是因为通常人们主要花费在实现这个功能而不是算法本身。
希望这有帮助