1. Búsqueda entre Adversarios
Juegos
Los juegos son una de las áreas más interesantes y más antiguas en el campo de la
inteligencia artificial. Fueron uno de los primeros problemas en ser abordados cuando las
computadoras se volvieron programables y como era de esperar se obtuvieron resultados
muy importantes en esta área, siendo así que hasta cierto punto las máquinas han superado
a las personas en algunos juegos como son el ajedrez, damas y otros juegos en los cuales
campeones mundiales se han visto superados por las computadoras.
La importancia de los juegos en la inteligencia artificial nace de los entornos multiagente
en los cuales los agentes deben considerar las acciones de otros y como estas les afectan.
Esto se lo puede apreciar mejor en entornos multiagente competitivos en los cuales los
intereses de los agentes entran en conflicto y se crean los problemas de búsqueda entre
adversarios.
En la Inteligencia artificial uno de los más estudiados son los llamados “Juegos de Suma
cero” los cuales son entornos deterministas, totalmente observables en los cuales existen
dos agentes cuyas acciones se alternan y los cuales poseerán valores de utilidad iguales y
opuestos, algunos ejemplos de estos juegos son: ajedrez, damas, tres en raya etc. Estos
juegos se caracterizan porque cada jugador conoce las posibles jugadas del contrario, no
interviene el azar en la elección de la mejor jugada y por tanto se genera un árbol finito.
Sin embargo este árbol puede llegar a ser de un tamaño realmente considerable incluso
para los juegos más sencillos. Como ejemplo de esto podemos tomar como referencia el
ajedrez (ejemplo tomado de (Alcalá)) considerando su árbol de la siguiente manera:
Juega blancas:
Peón 1 escaque x8
Peón 2 escaques x8
Caballo x4
20 movimientos posibles
Juega negras:
Las mismas posibilidades
A nivel 2 hay 400 posibilidades
A nivel 4 hay unas 20.000 posibilidades
2. Como podemos notar se comienza a formar un patrón en el cual el crecimiento es
exponencial y por tanto desarrollar el árbol completo genera más posibilidades que
átomos hay en la galaxia. El tiempo necesario para recorrer un árbol de tal magnitud es
inimaginable y por tanto demasiado costoso por estos motivo que resulta sumamente
importante buscar formas de optimizar el tiempo y también así poder tomar la decisión
más óptima. Es por eso que se han creado técnicas como la poda que nos permite ignorar
ciertas partes del árbol que no marcan ninguna diferencia para obtener la opción final y
las funciones de evaluación heurísticas que nos permiten aproximar la utilidad verdadera
de un estado sin tener que realizar una búsqueda completa.
Decisiones Óptimas
Al juego se lo define como una clase de problemas de búsqueda.
Consta de los siguientes componentes:
El estado inicial.
Una función sucesor, que devuelve una lista de pares (movimiento, estado)
Un test terminal, que determina cuándo termina el juego (por estructura o
propiedades o función utilidad)
Una función utilidad conocida también como función objetivo donde se determina
el estado terminal
Pero en los juegos no solo consiste en realizar un conjunto de movimientos y llegar al
objetivo o función utilidad el cual es ganar, también se analiza la estrategia más óptima
dependiendo de los movimientos que realice el adversario.
Minimax
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. Minimax es un algoritmo
recursivo.
El espacio de estados se representa mediante árboles alternados, donde:
Nodo: Representa una situación del juego
Sucesores de un nodo: Situaciones del juego a las que se accede por movimientos
legales aplicando sus reglas
Nivel: Contiene todas las situaciones posibles para uno de los jugadores
3. El algoritmo Minimax es un procedimiento recursivo y el corte de la recursión está dado
por alguna de las siguientes condiciones:
Gana algún jugador
Se han explorado N capas, siendo N el límite establecido
Se ha agotado el tiempo de exploración
Se ha llegado a una situación estática donde no hay grandes cambios de un nivel
a otro.
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 utilidad, empezando por los nodos terminales y subiendo
hacia la raíz.
Colocar 0 ó 1 en los nodos terminales dependiendo si gana MIN o MAX
La función de utilidad definirá lo buena que es la posición 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 maximizador
El jugador que espera valores negativos se conoce como minimizador
El maximizador busca movimientos que lo conduzcan al mayor número positivo
El minimizador busca movimientos que lo conduzcan al menor número negativo
Ejemplo:
4. • El maximizador:
Puede esperar llegar a un valor de 8
Sabe que el minimizador puede escoger un movimiento que lo lleve a un valor de
1
Desde el punto de vista del maximizador, el minimizador puede escoger 2 ó 1
Los resultados de un nivel determinan la acción y el resultado del nivel inmediato
superior
EJEMPLO
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.
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 maximice nuestra utilidad (5).
5. Decisiones óptimas en multi-jugador
Son las decisiones óptimas que deben tomar diversos adversarios en conflicto, pudiendo
definirse como el estudio de modelos matemáticos que describen el conflicto y la
cooperación entre entes inteligentes que toman decisiones. Tales decisiones se consideran
estratégicas, es decir, que los entes que participan en el juego actúan teniendo en cuenta
las acciones que tomarían los demás, es decir cualquier agente tiene que considerar las
acciones de otros agentes, y esto sería un entorno multiagente ya sean cooperativos o
competitivos.
Los juegos de suma cero son aquellos que todo lo que gana un participante es igual a todo
lo que pierde el otro participante.
Un caso de un juego suma cero:
El ajedrez, cada vez que un jugador le gana una pieza a su contrincante, este pierde
esa pieza, y el resultado será un ganador y un perdedor, es decir que todo lo que
beneficia a uno de los jugadores perjudica al otro jugador.
Un caso de un juego suma no cero, que sería un juego multi-jugador, con cuatro jugadores
en vez de dos.
Partido de tenis de dobles, ya no es uno contra uno, es dos contra dos, si el
compañero marca un punto se gana, es decir lo que haga el compañero, puede
beneficiar o no, ambos ganan o ambos pierden.