¿Que es el algoritmo minimax?

Comprendiendo Minimax: Cómo las Máquinas Toman Decisiones Óptimas


El Minimax es un tipo de algoritmo de “backtracking” que se utiliza en la toma de decisiones y teoría de juegos para encontrar el mejor movimiento que puede realizar un jugador, asumiendo que su oponente también juega de forma óptima. En el Minimax existe un jugador llamado maximizador, que intenta conseguir la mayor puntuación posible, y un minimizador, que intenta obtener la menor puntuación posible. Cada estado del tablero, es decir cada posible distribución de las piezas, tiene un valor asociado que se calcula de forma diferente según el juego. También tiene en cuenta las jugadas que se han hecho anteriormente y las que se pueden realizar en un futuro. Esto lleva de forma inmediata a visualizar el algoritmo como un árbol de juego donde se evalúa cada estado del tablero buscando el mejor movimiento posible.(Javier et al., n.d.)

Para que el algoritmo Minimax actúe es clave tener una función de evaluación. Una función de evaluación en ajedrez podría evaluar parámetros como el número de piezas que tiene cada bando. Y en función de la cantidad de piezas que tenga cada uno dará un valor que representará cuál de los dos bandos tiene superioridad (en este caso el bando con más piezas), pero normalmente se evalúan más parámetros como la estructura de peones, la seguridad del rey, la coordinación de las piezas... Por tanto el algoritmo basándose en esta función de evaluación tomará las decisiones.

Basándonos en esta función de evaluación, ahora podemos definir el objetivo general durante el juego para cada jugador. Las blancas intentan maximizar ese valor que da la función de evaluación mientras que las negras intentan minimizarlo.

El concepto de árbol de juego permite representar el funcionamiento del algoritmo minimax en un caso real de una partida de ajedrez, y permite entender de forma simplificada cómo funciona. En teoría de juegos, un árbol de juego es un gráfico que representa todos los posibles estados del juego, por lo que es útil para medir su complejidad. Cada nodo se corresponde con un posible estado del juego y cada rama con uno de los posibles movimientos de los jugadores. En el siguiente ejemplo sencillo, se parte de un estado del tablero cualquiera en el turno del jugador azul (el que utiliza el Minimax) y se supone que en cada nodo sólo hay dos posibles movimientos. Estos posibles movimientos serán dos ramas separadas del árbol que llegarán a dos nuevos estados del tablero distintos, pero ahora será el turno del jugador rojo. Podemos repetir el procedimiento hasta que estén representados todos los posibles estados o hasta que se decida parar. El número de jugadas que pueden analizarse estará definido por el parámetro profundidad, en la siguiente ilustración el árbol de juego representado está a profundidad 4.

Ahora es el momento de utilizar la función de evaluación en las posiciones finales y obtener un valor para cada una (en este ejemplo son valores aleatorios). También es importante recordar que en el turno del jugador azul se intentará maximizar el valor y en el turno del rojo se buscará minimizar. Cabe mencionar que la evaluación se comienza desde el último nodo hasta el primero, es decir, desde la posición más futura hasta la actual en la que se quiere decidir qué jugada hacer.

La función de evaluación asigna a todos los nodos del árbol. Y a partir de los valores asignados trazará un camino escogiendo los nodos que ofrezcan la mejor jugada para ambos colores.

Por lo tanto, sabiendo que de nuevo es el turno del jugador azul se puede asignar el valor de 4 (es mayor que el valor de la otra rama,-4) al nodo inicial y ya estaría completado el árbol de juego.