0
私はMinimaxを実装しようとしています(アルファベットのプルーニングを使用しています)。 「currentBoardは」makeMoveとremoveFigureの両方が新しいボードを返すにもかかわらず。Minimax:バックトラックのためのボードのコピーを保存する
それでは、どのように私は正しいバックトラッキングのために古いボードを「保存」することができ、最初のボードが、評価された葉からのものではありません?
Psの:ボードが単純なハッシュマップなので、移動を元に戻す代わりにコピーを使用したいので、このように簡単にできると思います。
ここに
public int alphaBeta(Board currentBoard, int depth, int alpha, int beta, boolean maximisingPlayer) {
int score;
if (depth == 0) {
return Evaluator.evaluateLeaf(whichColorAmI, currentBoard);
}
else if (maximisingPlayer) {
ArrayList<Move> possibleMoves= new ArrayList<Move>();
possibleMoves=getPossibleMoves(whichColorAmI, currentBoard);
for (Move iterMoveForMe : possibleMoves) {
if(currentBoard.figureAt(iterMoveForMe.to)!=null){
currentBoard = currentBoard.removeFigure(iterMoveForMe.to);
}
currentBoard= currentBoard.moveFigure(iterMoveForMe.from, iterMoveForMe.to);
score = alphaBeta(currentBoard, depth-1, alpha, beta, false);
if(score>=alpha){
alpha=score;
if(depth==initialDepth){
moveToMake=iterMoveForMe;
}
}
if (alpha>=beta) {
break;
}
}
return alpha;
}
else {[Minimizer...]
}
チェスのためのAIを書くときに私は同じ問題を抱えていました。私の解決策が正しいかどうかはわかりませんが、私はボードの要素の守備的なコピーを作成しました。 –