viernes, 8 de abril de 2011

MINIMAX

Teorema Minimax

John von Neumann es el creador del teorema minimax, quien dio la siguiente noción de lo que era un juego:

"Un juego es una situación conflictiva en la que uno debe tomar una decisión sabiendo que los demás también toman decisiones, y que el resultado del conflicto se determina, de algún modo, a partir de todas las decisiones realizadas."

También afirmó que:

"Siempre existe una forma racional de actuar en juegos de dos participantes, si los intereses que los gobiernan son completamente opuestos."

La demostración a esa afirmación se llama Teoría Minimax y surge en 1926.

Este teorema establece que en los juegos bipersonales de suma nula, donde cada jugador conoce de antemano la estrategia de su oponente y sus consecuencias, existe una estrategia que permite a ambos jugadores minimizar la pérdida máxima esperada. En particular, cuando se examina cada posible estrategia, un jugador debe considerar todas las respuestas posibles del jugador adversario y la pérdida máxima que puede acarrear. El jugador juega, entonces, con la estrategia que resulta en la minimización de su máxima pérdida. Tal estrategia es llamada óptima para ambos jugadores sólo en caso de que sus minimaxes sean iguales (en valor absoluto) y contrarios (en signo). Si el valor común es cero el juego se convierte en un sinsentido.

Algoritmo Minimax con movimientos alternativos




Pasos del algoritmo Minimax:

1. Generación del árbol de juego. Se generarán todos los nodos hasta llegar a un estado terminal.
2. Cálculo de los valores de la función de utilidad para cada nodo terminal.
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 evaluación, empezando por los nodos terminales y subiendo hacia la raíz. La función de utilidad definirá lo buena que es la posición para un jugador cuando la alcanza. En el caso del ajedrez los posibles valores son (+1, 0,-1) que se corresponden con ganar, empatar y perder respectivamente. En el caso del backgammon los posibles valores tendrán un rango de [+192,-192], correspondiéndose con el valor de las fichas. Para cada juego pueden ser diferentes.

Si Minimax se enfrenta con el dilema del prisionero escogerá siempre la opción con la cual maximiza su resultado suponiendo que el contrincante intenta minimizarlo y hacernos perder.

Min y Max

Muy pocos juegos de mesa son para un único jugador, ¿cómo podemos añadir esta eventualidad en nuestro árbol? Piensa sobre ello, cuando jugamos nuestros movimientos estamos intentando maximizar nuestra puntuación, así que nuestro oponente querrá minimizar nuestra puntuación. Vamos a mirar a un árbol de juego - aunque este está limitado a una profundidad de 2 capas. Este es nuestro árbol de juego con evaluaciones asignadas a los nodos finales:




Ahora, los valores asignados son para juegos representando los juegos que eligen nuestro oponente. N1 es el juego actual, N2-N4 son nuestros tres posibles movimientos y N5-N13 son los posibles movimientos que hará a continuación nuestro oponente. Como nuestro oponente intentará minimizar nuestras posibilidades de ganar*, calcularemos el mínimo valor para cada nodo y se lo asignaremos a su padre. N2 será igual a 0, N3 igual a 3 y N4 igual a 2. Al hacer una elección para nuestro mejor posible movimiento, escogeremos el máximo de estos valores - que es 3 (N3).

Ejemplo

En el siguiente ejemplo puede verse el funcionamiento de Minimax en un árbol generado para un juego imaginario. Los posibles valores de la función de utilidad tienen un rango de [1-9]. En los movimientos del contrincante suponemos que escogerá los movimientos que minimicen nuestra utilidad, en nuestros movimientos suponemos que escogeremos los movimientos que maximizan nuestra utilidad.

El primer paso será calcular los nodos terminales, en verde. Posteriormente calcularemos el cuarto nivel, movimiento min, minimizando lo elegido (5, 2 y 1). Después podremos 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 maximice nuestra utilidad (5).


Optimización

En la práctica el método Minimax es impracticable excepto en supuestos sencillos. Realizar la búsqueda completa requeriría cantidades excesivas de tiempo y memoria.

Claude Shannon en su texto sobre ajedrez de 1950 (Programming a Computer for Playing Chess) propuso limitar la profundidad de la búsqueda en el árbol de posibilidades y determinar su valor mediante una función heurística. Para optimizar Minimax puede limitarse la búsqueda por nivel de profundidad o por tiempo de ejecución. Otra posible técnica es el uso de la poda alfa-beta. Esta optimización se basa en la suposición que el jugador contrario no nos permitirá jugar nuestras mejores jugadas.

1 comentario:

  1. integrantes del equipo:

    chávez herrera jean carlos
    clemente clemente javier de jesús
    gómez pérez david ismael
    gómez ruiz carlos eduardo
    gutiérrez escobedo alejandro

    ResponderEliminar