Algoritmo MiniMax
DEFINICION
El algoritmo MiniMax es el algoritmo ms conocido (y utilizado) para juegos de
2 adversarios, movimientos alternos (ahora tu, ahora yo). No se puede
utilizar en juegos donde hay azar, sino perfectamente definido como las tres
en raya y el ajedrez.
En teora de juegos, Minimax es un mtodo de decisin para minimizar la
prdida mxima esperada en juegos con adversario. Este clculo se hace de
forma recursiva.
El funcionamiento de Minimax puede resumirse como elegir el mejor
movimiento para ti mismo suponiendo que tu contrincante escoger el peor
para ti.
Se utilizar una estrategia de profundidad limitada para explorar el conjunto de
jugadas. Como es imposible hacer una exploracin exhaustiva de todas las
jugadas, se hace una bsqueda limitada en profundidad. Significa que en lugar
de estudiar todas las posibles situaciones hasta el fin de la partida, se buscaran
por ejemplo todas las situaciones de aqu 3 turnos (un modo de poda).
FUNCIONAMIENTO DEL ALGORITMO MINIMAX
Aclaraciones Iniciales
Identificaremos a cada jugador como el jugador MAX y el jugador MIN. MAX
ser el jugador que inicia el juego, el cual supondremos que somos nosotros, y
nos marcaremos como objetivo encontrar el conjunto de movimientos que
proporcionen la victoria a MAX (nosotros) independientemente de lo que haga
el jugador MIN.
Deber existir una funcin de evaluacin heurstica que devuelva valores
elevados para indicar buenas situaciones, y valores negativos para indicar
situaciones favorables al oponente.
La calidad de nuestras jugadas vendr determinada por la profundidad a la que
lleguemos en cada exploracin. Cuanto mas profunda sea, mejor jugaremos,
pero mayor coste tendr el algoritmo.
En este juego de las tres en raya se puede llegar a la profundidad mxima
puesto que se trata de 9 movimientos fijos, en otros como el ajedrez o las
damas es muy necesario limitar la profundidad y aplicar medidas que
aumenten la eficiencia.
Funcionamiento del algoritmo
1. Generacin del rbol de juego. Se generarn todos los nodos hasta
llegar a un estado terminal o determinando una profundidad concreta (poda o
corte). Se considera el nodo raz como la situacin actual del juego.
Vamos aplicando el algoritmo por un nmero fijo de iteraciones hasta alcanzar
una determinada profundidad. En estas aplicaciones la profundidad suele ser el
nmero de movimientos o los incluso el resultado de aplicar diversos pasos de
planificacin en un juego de estrategia. En este caso el nmero mximo es 9.
2. Clculo de los valores de la funcin de utilidad para cada nodo
terminal.Para cada resultado final, cmo de beneficioso me resulta si estamos
en MAX o cuanto me perjudicar si estamos en MIN.
3. Calcular el valor de los nodos superiores a partir del valor de los
inferiores. Alternativamente se elegirn los valores mnimos y mximos
representando los movimientos del jugador y del oponente, de ah el nombre
de Minimax.
4. Elegir la jugada valorando los valores que han llegado al nivel
superior.
El algoritmo explorar los nodos del rbol asignndoles un valor numrico
mediante una funcin de utilidad, empezando por los nodos terminales y
subiendo hacia la raz.
La funcin de utilidad como se ha comentado, definir lo buena que es la
posicin para un jugador cuando la alcanza.
Versiones ms avanzadas como el minimax con poda alfa beta hacen que se
reduzca considerablemente el nmero de nodos a visitar por lo que el tiempo
de clculo se reduce ampliamente.
Al aplicar el algoritmo, se suceden una serie de estados que se resumen en la
fotografa. Un estado -1 significa que MAX gana, 0 empate o -1 pierde.
Resumen
El minimax aporta una herramienta de proceso recursiva muy til
Se pueden aplicar modificaciones al algoritmo para hacerlo ms eficiente
En el juego de las tres en raya:
Gana el +1, pierde el -1 y empate 0
La profundidad mxima es de 9, como el nmero de jugadas posible
No hay restricciones sobre la validez de un movimiento, simplemente
que no se haya hecho antes, por lo que el coste del clculo es bajo (no hay que
aplicar reglas complejas).
Almacenar las soluciones intermedias no es excesivamente complejo
Generar los diferentes tableros con las soluciones intermedias a explorar
no es costoso pero podra ser un problema en otros juegos y limitar la
profundidad por memoria
La mquina nunca pierde, el juego est completado
Las partidas entre jugadores mquina siempre quedan en tablas.
Explicacin ms detallada del funcionamiento del algoritmo.
Supongamos un partida de las tres en raya y que ahora le toca el turno del
ordenador. Como nodo padre (raz) ponemos la situacin del tablero, y como
nodo hijos los posibles movimientos que puede hacer el ordenador (el
ordenador es el jugador MAX). En el siguiente nivel, por cada movimiento que
ha hecho el ordenador en el nivel anterior, suponemos los posibles
movimientos que puede hacer el jugador humano (Jugador MIN). As
seguiremos hasta llegar a un nodo terminal, que es cuando hay un desenlace
de la partida (fin de la misma). Puede pasar que gane el ordenador, el humano
o empate. Como se puede apreciar a cada nivel se alterna el humano y la
maquina, es por eso que se llame el algoritmo Minimax.
Vamos a suponer con un cuadrado los nodos MAX y con un crculo los nodos
MIN.
Cada vez que llegamos a un nodo terminar hay que realizar un evaluacin
(mediante una funcin) y lo que hace esa evaluacin es sopesar que tal buena
es la solucin a la que conduce el nodo terminal, y para poder valorarla se le
asigna un valor numrico. En este caso de las tres en raya podramos utilizar
estos valores:
+1. Cuando gana el Ordenador
0 Cuando se produce empate
-1 . Cuando gana el Humano.
El algoritmo de la imagen superior evala cada nivel del rbol de abajo a
arriba. Y en los niveles MAX elegir los caminos que le lleven a puntuaciones
de la evaluacin ms alta, que en este caso MAX es lo que favorece al
ordenador. En los niveles MIN tratar de elegir los caminos donde la evaluacin
sea mas baja para perjudicar al jugador humano.
El Algoritmo empieza la evaluacin del ltimo nivel. Podemos ver que gana la
maquina en el primero y cuarto nodo. Subimos al nivel superior MAX, por lo
que podemos al padre el valor superior, en este caso como solo hay un nodo se
pone el valor. Cuando subimos al siguiente nivel que es Min, ponemos el
de valor menor (Min es el jugador Humano). Y como el nodo Padre es MAX,
selecciona el de valor mayor, en este caso el nodo de la derecha con valor 0,
por lo que el siguiente movimiento es el indicado en ese nodo.
Una vez el jugador humano seleccione casilla, se vuelve a realizar este
proceso.
VENTAJAS ALGORITMO MINIMAX
Capacidad de aprender de acuerdo a una base de datos histrica de
movimientos realizados.
Algoritmo casi infalible
DESVENTAJAS ALGORITMO MINIMAX
Algoritmo de complejidad elevada a la hora de implementar.
Es de aprendizaje lento
Solo vale para enfrentarse a un oponente a la vez.
MEJORAS DEL ALGORITMO MINIMAX
Hay muchas tcnicas para mejoras la inteligencia y el rendimiento del
algoritmo minimax, como puede ser por ejemplo:
Poda Alfa-beta
Para juegos con un factor de ramificacin elevado, esta profundidad no podr
ser muy grande, ya que el clculo necesario para cada decisin ser
prohibitivo. Su tiempo de exploracin ser muy grande. Para mejorarlo hay que
utilizar heursticos con poda, es decir se utilizar una tcnica de ramificacin y
poda.
Poda de inutilidades, es una evolucin de la Poda Alfa-beta
Bsqueda Sesgada
Algoritmo NegaMax, se trata de una versin mas compacta del
minimax. En vez de utilizar dos rutinas(una para Max y otra para MIN), lo que
hace es utilizar la puntuacin negada utilizando la relacin matemtica:
Max(a,b) = -min(-a,-b)
Aunque es una versin reducida de minimax es posible aplicarle la poda AlfaBeta.
Continuacin Heurstica
Bajada progresiva
Etc.
En teora de juegos, Minimax es un mtodo de decisin para minimizar la
prdida mxima esperada en juegos con adversario y con informacin perfecta.
Este clculo se hace de forma recursiva.
El funcionamiento de Minimax puede resumirse como elegir el mejor
movimiento para ti mismo suponiendo que tu contrincante escoger el peor
para ti.
La receta del algoritmo Minimax:
1. Generacin del rbol de juego. Se generarn todos los nodos hasta llegar a
un estado terminal o determinando una profundidad concreta.
Vamos aplicando el algoritmo por un nmero fijo de iteraciones hasta alcanzar
una determinada profundidad. En estas aplicaciones la profundidad suele ser el
nmero de movimientos o los incluso el resultado de aplicar diversos pasos de
planificacin en un juego de estrategia.
2. Clculo de los valores de la funcin de utilidad para cada nodo terminal.
Para cada resultado final, cmo de beneficioso me resulta si estamos en MAX o
cuanto me perjudicar si estamos en MIN.
3. Calcular el valor de los nodos superiores a partir del valor de los inferiores.
Alternativamente se elegirn los valores mnimos y mximos representando los
movimientos del jugador y del oponente, de ah el nombre de Minimax.
4 . Elegir la jugada valorando los valores que han llegado al nivel superior.
El algoritmo explorar los nodos del rbol asignndoles un valor numrico
mediante una funcin de utilidad, empezando por los nodos terminales y
subiendo hacia la raz. La funcin de utilidad como se ha comentado, definir lo
buena que es la posicin para un jugador cuando la alcanza.
Versiones ms avanzadas como el minimax con poda alfa beta hacen que se
reduzca considerablemente el nmero de nodos a visitar por lo que el tiempo
de clculo se reduce ampliamente.
Y para terminar comentar un ejemplo csico, el tres en raya (juego del gato,
tatet, triqui, tres en gallo, michi, la vieja o tic tac toe). Se trata de hacer una
fila de tres para ganar y evitar que el oponente la haga antes que tu.
Al aplicar el algoritmo, se suceden una serie de estados que se resumen en la
fotografa. Un estado -1 significa que MAX gana, 0 empate o -1 pierde.
Se distinguen los nodos terminales con jugada finalizada y los del trayecto. En
este juego se puede llegar a la profundidad mxima puesto que se trata de 9
movimientos fijos, en otros como el ajedrez o las damas es muy necesario
limitar la profundidad y aplicar medidas que aumenten la eficiencia.
El cdigo se adjunta en python muy comentado. El bloque principal, y a partir
de ahi todo lo dems en el documento adjunto, es el siguiente:
?
0
1
0
2
0
3
0 b = Board()
4 turn = 1
0 while True:
5
print Turno %i. % turn
0
jugadorHumano(b, Jugador_X)
6
if b.gameOver():
0
break
7
0
jugadorMaquina(b, Jugador_O)
8
if b.gameOver():
0
break
9
turn += 1
1
0
1
1
1
2
Donde se crea una instancia del tablero, necesaria para detallar los elementos
que intervienen en juego y e ir aplicando el algoritmo. Se pueden intercambiar
jugadores o incluso hacer que jueguen dos mquinas o dos humanos
simplemente modificando estas lineas de arriba.
En resumen.
o
El minimax aporta una herramienta de
proceso recursiva muy til
Se pueden aplicar modificaciones al
algoritmo para hacerlo ms eficiente
En el tres en raya:
o
Gana el 1, pierde el -1 y empate 0
La profundida mxima es de 9, como el
nmero de jugadas posible
La cota superior de nodos a visitar es en
el peor caso (primer movimiento) 9
factoria -A> 9!
No hay restricciones sobre la validez de
un movimiento, simplemente que no se
haya hecho antes, por lo que el coste
del clculo es bajo (no hay que aplicar
reglas complejas).
Almacenar las soluciones intermedias no
es excesivamente complejo
Generar los diferentes tableros con las
soluciones intermedias a explorar no es
costoso pero podra ser un problema en
otros juegos y limitar la profundidad por
memoria
La mquina nunca pierde, el juego est
completado
Las partidas entre jugadores mquina
siempre quedan en tablas.
El tiempo que tarda un jugador pc en procesar la primera jugada es de
4047,181 ms en un ordenador medio, el que tarda cuando procesa la jugada
que lo hace ganador en el ltimo movimiento 0,568 ms y cuando procesa la
que lo deja en tablas 0,337. La diferencia de tiempo de clculo entre los
primeros movimientos cuando quedan muchas opciones y el resto es 8000
veces mayor, por lo que el tema de la eficiencia habr que tocarlo.
ALGORITMO MINIMAX
Algoritmo de decision
para minimizar la prdida maxima aplicada en
juegos de adversarios
Informacin completa (cada jugador conoce el estado del otro)
Eleccin del mejor movimiento
para cada jugador, suponiendo que el
contrincante escoger el peor
El espacio de estados se
representa mediante rboles alternados,
donde:
o Nodo:
Representa
una
situacin del juego
o Sucesores de un nodo:
Situaciones del juego a las que
aplicando sus reglas
o Nivel:
Contiene todas
se accede
por
movimientos legales
las situaciones posibles para uno
de los
jugadores
El algoritmo Minimax es un procedimiento recursivo y el corte
recursin est dado por alguna de las siguientes condiciones:
o Gana algn jugador
o Se han explorado N capas,
siendo N el lmite establecido
de la
o Se ha agotado el tiempo
o Se ha llegado a una
de exploracin
situacin esttica donde no hay
grandes cambios
de un nivel a otro.
Representacin de los juegos
Posicin inicial.
Conjunto
de
operadores
reglas
del
juego (definen movimientos legales)
Estado terminal
Funcin
de
utilidad,
ej.
gana,
pierde,
empata
Pasos del Algoritmo Minimax
1. Generacin
del rbol de juego. Se generarn todos los nodos hasta
llegar a un estado terminal.
2. Clculo
de los valores de la funcin de utilidad para cada nodo
terminal.
3. Calcular
el valor de los nodos superiores a partir del valor de los
inferiores.
Alternativamente
se
elegirn
los
valores
mnimos
mximos representando los movimientos del jugador y del oponente,
de ah el nombre de Minimax.
4. Elegir la jugada valorando los
valores que han llegado al nivel superior.
El algoritmo explorar los nodos
del rbol asignndoles un valor
numrico mediante una funcin de utilidad, empezando por los
nodos terminales y subiendo hacia la raz.
Colocar 0 1 en los nodos terminales dependiendo si gana MIN o
MAX
La funcin de utilidad definir lo buena que es la posicin para un
jugador cuando la alcanza.
Se requiere de una estrategia
que garantice llegar a estados
terminales ganadores independientemente
de
lo que
haga el
oponente.
Un valor positivo indica la ventaja de un jugador y uno negativo la
ventaja del otro.
El
jugador
que
espera
valores
positivos
se
conoce
como
negativos
se
conoce
como
maximizador
El
jugado
que
espera
valores
Minimizador
El maximizador busca movimientos que lo conduzcan al mayor
nmero positivo
El minimizador busca movimientos que lo conduzcan al menor
nmero negativo
P. ejemplo:
Nivel MAX
2
2
1
7
Nivel MIN
Nivel MAX
El maximizador:
O puede esperar a llegar a un valor de 8 o Sabe que el
minimizador puede escoger un movimiento que lo
lleve a un
valor de 1
Desde el punto de vista de el maximizador, el minimizador puede
escoger 2 1
Los resultados de un nivel determinan la accin y el resultado del
nivel inmediato superior
Clculo de valores de la funcin de utilidad
Calcular el valor minimax del nodo J: V(J)
SI J es Terminal, V(J) ev(J)
SI NO
Genera los sucesores de J: J1, J2, Jn
EJEMPLO
Evala V(J1), V(J2), , V(Jn)
de izq a der
Funcionamiento
Minimax
en un rbol generado para un juego
SI J es nododeMax
ENTONCES
imaginario.
V(J) max[V(J1), V(J2),
, V(Jn)]
SI J es nodo Min ENTONCES
Los posibles valores de la funcin de utilidad tienen un rango de [1-9].
V(J) min[V(J1), V(J2),
En los movimientos del
contrincante suponemos que escoger los
movimientos que minimicen nuestra utilidad
, V(Jn)]
En nuestros movimientos suponemos que escogeremos los movimientos
que maximizan nuestra utilidad.
1er. Paso: Calcular los nodos terminales, en verde.
2. Paso: Calcular el cuarto nivel, movimiento MIN, minimizando lo
elegido (5, 2 y 1).
3er. Paso: Calcular el tercer nivel, movimiento MAX, maximizando
la
utilidad (5, 9).
El segundo nivel es un movimiento MIN (5, 3 y 1).
Finalmente llegamos al primer nivel,
el movimiento actual, elegiremos
el nodo que maximize nuestra utilidad (5).
Aplicacin: El Juego del Gato
Dos jugadores MIN y MAX
Los jugadores colocan fichas en un tablero de
3X3
MAX usa las fichas X
MIN usa las fichas O
MAX gana
Reglas:
Inicialmente el tablero est vaco
MAX empieza y se alternan los
movimientos
MAX gana si obtiene una lnea de 3 Xs
MIN gana si obtiene una lnea de 3 Os
Existe la posibilidad de empate
MIN gana
Empate
Espacio de Estado para el juego del gato
Procedimiento
Se desarrolla una bsqueda por niveles, generando los nodos del cada nivel
Se aplica una funcin de evaluacin a cada nodo
La funcin de evaluacin considera los siguientes factores:
Nmero de casillas restantes
Posicin de casillas vacas
La funcin de evaluacin devolver los siguientes valores:
Positivos
altos:
Si
la
situacin
de uno de los
jugadores es ventajosa
Negativos altos: Si la situacin del otro jugador es ventajosa
Cero: Si ninguno de los jugadores tiene ventaja
Funcin de evaluacin para el juego del gato
Si s no es ganadora para cualquiera de los jugadores (MAX o MIN):
f(s)=No. filas abiertas para MAX - No. Filas,
f(s)= No. Lneas que no contiene una O No.
esto es:
Si s es ganadora para el jugador MAX
f(s)= (mayor nmero positivo posible)
Si s es ganadora para el jugador MIN
f(s)=
-(mayor nmero negativo posible)
MAX elegir los nodos de mayor evaluacin
MIN elegir los nodos de menor evaluacin
Caso prctico de Funcin de evaluacin para el juego del
Se define la funcin de evaluacin:
f(s)=NMAX(s)-NMIN(s)
donde:
S: Situacin o distribucin del tablero
f(s):Funcindeevaluacindeltablero (nodo del espacio de estados)
NMAX(s):
No.
de
filas,
columnas
diagonalesabiertasparaMAX(dondean
puede ganar)
NMIN(s): No. de filas, columnas o diagonales
abiertas
ganar)
para
MIN(dondeanpuede
1.Etapa del Espacio de Estados
2. Etapa del Espacio de Estados
3. Etapa del Espacio de Estados