私はminimax(そしてalpha beta pruning)を使ってConnect 4のゲームを構築しようとしています。しかし、私が持っている大きな概念的な問題は、実際にミニマックスアルゴリズムを利用する方法です。私がやる方法は、intを返すminimaxアルゴリズムを実行する1つの関数を持つAIクラスがあることです。Java用のMinimaxアルゴリズムをConnect 4用に実装
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;
}
}
これは、computerMove()というGameクラスの関数によって呼び出されます。
public int computerMove() {
Board tempBoard = board;
int bestMove = 0;
AI ai = new AI();
ai.minimax(board, difficulty, -1000000, 1000000, "computer");
return bestMove;
}
しかし、返されるintはどうすればよいですか?どのように実際に作品を移動するためにそれを利用するのですか?返されるintは、単に私が得ることができる最高のボードですよね?それは、特に私が行うべき場所やボードについて何も教えてくれません。
何かすべてのヘルプは大歓迎です。
おかげで、
再帰的な方法から、minimaxである目的関数値だけでなく、その値につながる現在の位置からの移動も返さなければなりません。 –