私はJavaでゲームのミニマックスアルゴリズムを作成しており、速度を上げるために、決定木を再帰的に処理しながらゲームの状態を変更しています。ただし、これには、繰り返し処理する移動のリストを変更することが含まれます。
public int minimax(int currentDepth) {
if (currentDepth == depth || board.legalMoves.isEmpty()) {
int eval = board.eval();
board.takeBack(1);
return eval;
}
int x = Integer.MIN_VALUE;
for (Tuple move : board.legalMoves) {
board.move(move);
x = max(x, -1*minimax(currentDepth+1));
board.takeBack(1);
}
return x
}
このboard.move()
メソッドはを変更しますが、元の状態ArrayList legalMoves
にtakeBack(1)
戻します。これは問題を引き起こす可能性がありますか?