lunes, 27 de junio de 2016
Implementación Del Podado Alfa-Beta Al Algoritmo Minimax (Tres En Raya Con Algoritmo Minimax)
La unica función que habremos de modificar es la siguiente:
def minimax(tablero, turno_player, alfa = (-31, None), beta = (31, None), profundidad = 5):
"""Implementacion del algoritmo minimax con podado alfa-beta a nuestro tres en raya.
ARGUMENTOS:
-tablero. String de longitud 9 que contiene los valores del tablero.
-turno_player. Booleano que indica el turno, si es positivo significa que le toca al jugador humano.
-profundidad. Valor numerico que limita el numero de veces que la funcion se llama a si misma (dificultad) y que incita a la maquina
a realizar los movimientos que impliquen alargar la partida lo maximo posible (intentando ganar siempre)."""
if ganador(tablero) == MAQUINA: return (+30 - profundidad, None) #gana pc
elif ganador(tablero) == JUGADOR: return (-30 - profundidad, None) #pierde pc
elif VACIO not in tablero or profundidad < 1: return (0, None) #empatan
elif turno_player: #turno de jugador
for a in range(9):
if tablero[a] == " ":
valor = minimax(tablero[:a] + JUGADOR + tablero[a + 1:], not turno_player, alfa, beta, profundidad - 1)[0]
if valor < beta[0]: beta = (valor, a) #jugador intenta causar el MENOR beneficio a pc
if beta[0] <= alfa[0]: break
return beta
else: #turno de pc
for a in range(9):
if tablero[a] == " ":
valor = minimax(tablero[:a] + MAQUINA + tablero[a + 1:], not turno_player, alfa, beta, profundidad - 1)[0]
if valor > alfa[0]: alfa = (valor, a) #pc intenta causar el MAYOR beneficio a si mismo
if beta[0] <= alfa[0]: break
return alfa
Si bien hay que tener en cuenta que ahora al llamar a la función, se ha de especificar el argumento profundidad.
ANTES
a = minimax(tablero, False, dificultad)[1] #algoritmo minimax limitado segun la dificultad
AHORA
a = minimax(tablero, False, profundidad = dificultad)[1] #algoritmo minimax limitado segun la dificultad
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario