Как добиться лучшего движения ИИ, используя минимакс с альфа-бета-обрезкой

Я реализую простую игру TicTacToe просто для того, чтобы опробовать Minimax с алгоритмом отсечения альфа-бета-версии, и я застрял …
Проблема, с которой я сталкиваюсь: ИИ не реагирует правильно на последний ход игрока, и я не могу понять, где моя ошибка.
Вот минимаксный код:

int minimax( int depth, int alpha, int beta, bool maximizer ) {
std::vector<point> moves;
getPossibleMoves( moves );
if( depth == 0 || moves.size() == 0 ) {
return evaluateBoard();
}
if( maximizer ) {
for( std::vector<point>::iterator i = moves.begin(); i != moves.end(); i++ ) {
board[( *i ).x][( *i ).y] = COMPUTER;
int score = minimax( depth - 1, alpha, beta, false );
if( score > alpha ) {
alpha = score;
bestMove = ( *i );
}
board[(*i).x][(*i).y] = EMPTY;
if( alpha >= beta ) break;
}
} else {
for( std::vector<point>::iterator i = moves.begin(); i != moves.end(); i++ ) {
board[( *i ).x][( *i ).y] = HUMAN;
int score = minimax( depth - 1, alpha, beta, true );
if( score < beta ) {
beta = score;
bestMove = ( *i );
}
board[( *i ).x][( *i ).y] = EMPTY;
if( alpha >= beta ) break;
}
}
return maximizer ? alpha : beta;
}

Переменная ‘bestMove’ является членом класса, и начальный вызов:

int bm = minimax( 4, -0xffffff, 0xffffff, true );

Я был бы очень признателен за помощь.

2

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]