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