私はtic-tac-toe用のminimaxを実装しようとしています。問題は、必ずしも期待通りではないということです。私はそれをデバッグしようとしましたが、正しい動きを選択しない場合、その動きのスコアが何らかの理由で「負の無限大」であることがわかりました。私のMinimaxは常に最良の移動を選択するとは限りません
`
function minimaxMove(board) {
let nextMove = null;
const mmRecurse = function (board, lastPlayer, depth) {
let winner = checkGameState(board);
if(winner == state.AIplayer) {
return -1000 + depth;
} else if(winner == state.playerIs) {
return depth - 1000;
}
let nextPlayer = lastPlayer == state.playerIs ? state.AIplayer : state.playerIs;
let moves = [], scores = [];
for(let i = 0; i < state.board.length; i++) {
let boardCopy = board.slice();
if(boardCopy[i] == "E") {
boardCopy[i] = nextPlayer;
moves.push(i);
scores.push(mmRecurse(boardCopy, nextPlayer, depth+1));
}
}
if(depth === 0) {
nextMove = moves[scores.indexOf(Math.max.apply(null,scores))];
console.log(moves, scores, nextMove);
} else {
if(depth == 9) {
return 0;
}
if(nextPlayer == state.AIplayer) {
return Math.max.apply(null, scores);
} else if(nextPlayer == state.playerIs){
return Math.min.apply(null, scores)
}
}
}
mmRecurse(board, state.playerIs, 0);
state.turn = state.playerIs;
return nextMove;
}
`
時にはそれが時にはそれが右に移動を選択していない、正常に動作します:ここで コードです。
あなたは実際のフィドルを作成できますか? –
@IvanModric - https://jsfiddle.net/Askerov/ypgv4e8e/ - ここに。 – askerovlab