【发布时间】:2016-03-22 05:05:14
【问题描述】:
我正在尝试使用 minimax(和 alpha beta 修剪)构建 Connect 4 游戏,主要是为了向自己证明我可以做到。然而,我遇到的一个大概念问题是如何实际利用极小极大算法。我这样做的方式是我有一个 AI 类,它有一个函数是执行返回 int 的 minimax 算法。
public int minimax(Board board, int depth, int alpha, int beta, String player) {
if(depth == 0 || board.getScore() >= 512) {
return board.getScore();
}
else if(player.equals("computer")) {
int temp = -1000000;
for(Integer[] moves : board.availableMoves) {
board.putPiece(player, moves[0]);
temp = Math.max(temp, minimax(board, depth-1, alpha, beta, "human"));
board.removePiece(moves[0], moves[1]);
alpha = Math.max(alpha, temp);
if (alpha >= beta) {
break;
}
}
return temp;
}
else {
int temp = 1000000;
for(Integer[] moves : board.availableMoves) {
board.putPiece(player, moves[0]);
temp = Math.min(temp, minimax(board, depth+1, alpha, beta, "computer"));
board.removePiece(moves[0], moves[1]);
beta = Math.min(beta, temp);
if(alpha >= beta) {
break;
}
}
return temp;
}
}
这是由 Game 类的一个名为 computerMove() 的函数调用的。
public int computerMove() {
Board tempBoard = board;
int bestMove = 0;
AI ai = new AI();
ai.minimax(board, difficulty, -1000000, 1000000, "computer");
return bestMove;
}
但是,我该如何处理返回的 int 呢?我如何利用它来实际移动这块?返回的 int 只是我能得到的最好的板子,对吧?它没有特别告诉我应该做的位置或棋盘。
非常感谢任何和所有帮助。
谢谢,
【问题讨论】:
-
从递归方法中,您不仅应该返回目标函数值,即极小值,还应该返回从当前位置移动的值,这将导致该值。
标签: java artificial-intelligence minimax