Algoritmo Minimax, un jugador incansable

Publicado por el 25/08/2010 | 6 Comentarios

En teoría de juegos, Minimax es un método de decisión para minimizar la pérdida máxima esperada en juegos con adversario y con información perfecta. Este cálculo 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. Generación del árbol de juego. Se generarán todos los nodos hasta llegar a un estado terminal o determinando una profundidad concreta.

Vamos aplicando el algoritmo por un número fijo de iteraciones hasta alcanzar una determinada profundidad. En estas aplicaciones la profundidad suele ser el número de movimientos o los incluso el resultado de aplicar diversos pasos de planificación en un juego de estrategia.

2. Cálculo de los valores de la función de utilidad para cada nodo terminal.

Para cada resultado final, cómo 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 elegirán los valores mínimos y máximos 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 asignándoles un valor numérico mediante una función de utilidad, empezando por los nodos terminales y subiendo hacia la raíz. La función de utilidad como se ha comentado, definirá lo buena que es la posición para un jugador cuando la alcanza.

Versiones más avanzadas como el minimax con poda alfa beta hacen que se reduzca considerablemente el número de nodos a visitar por lo que el tiempo de cálculo se reduce ampliamente.

Y para terminar comentar un ejemplo cásico, 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 fotografía. 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 máxima 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 código se adjunta en python muy comentado. El bloque principal, y a partir de ahi todo lo demás en el documento adjunto, es el siguiente:

b = Board()
turn = 1
while True:
	print “Turno %i.” % turn
	jugadorHumano(b, Jugador_X)
	if b.gameOver():
		break

	jugadorMaquina(b, Jugador_O)
	if b.gameOver():
	break
	turn += 1

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 máquinas o dos humanos simplemente modificando estas lineas de arriba.

En resumen.

En el tres en raya:

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 cálculo 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.

Puedes descargar una implementación en el clásico tres en raya.

Fuente

6 Comentarios en "Algoritmo Minimax, un jugador incansable"

  1. En alguna que otra práctica o proyecto de la carrera he tenido que utilizar MinMax aunque en mi caso utilizaba la versión con poda alfa y beta (concretamente Negamax).

    Negamax es una pequeña mejora que se hace a la poda alfa y beta asumiendo que el valor óptimo para A es la negación del equivalente en B. Puedes obtener más información del algoritmo aquí:

    http://en.wikipedia.org/wiki/Negamax

    Saludos.

  2. adrigm dice:

    David Saltares, yo no he tocado mucho el tema del Minimax, No conocía Negamax ¡a ver si nos escribes algo sobre el tema!

  3. genize dice:

    ola gostaria d esaber mais sobre o uso do minimax em sala de aula.

  4. Mary Aular dice:

    bnas me podrian pasar una informacion que juegos pueden aplicarse en el agedres

  5. ingles dice:

    gracias por el articulo, ya me esta ayudando a entender algo mas de minimax, que hasta ahora no lo cojo bien :(

  6. Francisco Jesús dice:

    Muchas gracias por el artículo, me ha ayudado a ver algo más claro el algoritmo MINIMAX.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>