Estoy llevando a cabo el desarrollo de un juego del Othello, implementando el algoritmo Minimax con poda Alfa-Beta.
El algoritmo funciona sin ningún tipo de problema cuando los turnos son alternos, es decir, cuando va tirando una vez cada jugador. Sin embargo, la máquina ya no rinde igual cuando se encuentra con la posibilidad de jugar 2 turnos consecutivos.
En el Othello, cuando el rival se queda sin poder realizar ningún movimiento, entonces tira dos veces el mismo jugador, con lo cual, en estos casos el algoritmo tendría que tener en cuenta eso, y no minimizar el siguiente turno, sino volverlo a maximizar, porque es turno del mismo jugador.
La cuestión es que creo que no lo estoy haciendo bien. He puesto lo siguiente:
if (count($possibleMoves) > 0)
{
$heirResult = IAController::miniMaxAlphaBeta($board_aux, $prof + 1, $rival, $turn2, -$beta, -$alpha);
}
else
{
$heirResult = IAController::miniMaxAlphaBeta($board_aux, $prof + 1, $color, $turn, -$beta, -$alpha);
}
No sé si en vez de -$beta, -$alpha debería volver a pasar como parámetros $alpha, $beta, o si hay alguna otra opción, porque no está realizando el cálculo correctamente en esos casos.