Estrategias de búsqueda con Adversarios. Minimax y poda alfa-beta

Anuncio
Equipo
nº:
Práctica
IA
Nº 8
Alumnos:
………………………………………………………………………
Semana 8
Dic. 2004
…………… ………………………………………………………………………
El objetivo de esta práctica es estudiar los métodos de búsqueda con adversarios
utilizados en juegos.
¿Dónde obtener el código necesario para realizar esta práctica?
El código necesario para realizar esta práctica es el mismo utilizado en la
práctica 5.
Búsquedas con Adversarios
En esta práctica nos centraremos en estudiar las estrategias de búsqueda cuando
existe un adversario, es decir, juegos. Los juegos que van a interesarnos son los vistos
en clases denominados de información completa y sin azar, concretamente serán el tictac-toe y el n en raya. El primero consiste en alinear k fichas de nuestro color en el
tablero pudiendo poner en cualquier casilla libre, mientras que en el segundo el objetivo
es el mismo pero las fichas solo se pueden poner en la primera fila o bien sobre otra
ficha. La definición de las estructuras que definen cada uno de estos problemas se puede
encontrar en los ficheros domains\ttt.lisp y domains\cognac.lisp
respectivamente.
Para estos problemas el estado inicial, a diferencia de los problemas de búsqueda
vistos en las prácticas anteriores, varía únicamente en el tamaño del tablero y el número
de fichas que deben estar alineadas para ganar. Otra diferencia es que al ser un problema
con adversario, en el proceso de búsqueda intervienen dos agentes que pueden ser un
humano contra una estrategia o bien enfrentar a dos estrategias entre si.
La definición de los problemas se realiza de la siguiente forma:
(make-ttt-game)
(make-cognac-game)
Ambos problemas corresponden a estructuras que poseen dos campos que
definen las dimensiones del tablero (n) y el número de fichas (k) que deben alinearse
para ganar. A continuación se define un tablero de 5x5 y 5 fichas alineadas:
(make-ttt-game :n 5 :k 5)
(make-cognac-game :n 5 :k 5)
El primer jugador se representa mediante X y el segundo mediante O, no
obstante al ser un campo (players) de la estructura estos pueden ser modificados por
cualquier átomo.
(make-ttt-game :players ‘(Y T))
(make-cognac-game :players ‘(B N))
Estrategias de Búsqueda
Las estrategias de búsqueda que están implementadas en el código son el método
minimax, el minimax con profundidad de exploración limitada y la poda alpha-beta.
Las funciones que implementan cada uno de estos métodos se encuentran en el fichero
algorithms\minimax.lisp, y las funciones que las implementan son:
(defun minimax-decision (state game) …
(defun minimax-cutoff-decision (state game eval-fn limit) …
(defun alpha-beta-decision (state game eval-fn &optional (limit 4)) …
Aunque las funciones anteriores son las que implementan los métodos, cuando
se lanza un juego realmente lo que se enfrentan son dos agentes con una estrategia cada
uno. Así existe un agente que utiliza la estrategia minimax que es game-agent, uno
que utiliza la estrategia alpha-beta con profundidad de exploración limitada a 4 que es
alpha-beta-ttt-agent y luego existen dos agentes más que son human-gameagent y random-game-agent que en el primer caso pregunta al usuario donde
quiere mover y el segundo es un agente que elige posiciones para jugar de forma
aleatoria. Excepto el agente alpha-beta-ttt-agent que se define en el fichero
agents\ttt-agents.lisp, el resto se define en el fichero agents\psagents.lisp , siendo todos ellos estructuras con el campo algorithm indicando
cual es la estrategia a utilizar.
Para iniciar una partida se debe llamar a la función run-game con un juego y
dos agentes. Por ejemplo a continuación se inicia una partida entre un jugador humano y
un agente con estrategia aleatoria para el juego del tic-tac-toe con tablero de tamaño 4.
(run-game (make-ttt-game :n 4) :agents ‘(human-game-agent random-gameagent))
Si se quiere utilizar algún otro agente no hay más que indicarlo en el argumento
agents, teniendo en cuenta que el primer agente es el que empieza la partida. Para el
agente humano las posiciones de las casillas válidas se indican como una lista
(columna fila).
Ejercicios
1. Ejecutar una partida del tic-tac-toe para tablero de tamaños 3 y 4 respectivamente y
jugando el alumno contra el agente aleatorio y el agente alpha-beta, y comentar los
resultados obtenidos en cada partida.
2. Repetir el ejercicio anterior para el problema del n en raya.
3. Ejecutar una partida del tic-tac-toe para tablero de tamaño 3 del agente minimax
contra el alpha-beta. Con la función time calcula el tiempo para la conclusión de la
partida y el resultado que se obtiene.
4. Ejecutar una partida del n en raya para el tablero de tamaño 3 del agente minimax
contra el alpha-beta. Computa el tiempo con la función time y el resultado y
compara la duración de la partida con el ejercicio anterior, explicando los datos
obtenidos.
5. Definir dos nuevos agentes en el fichero ps-agents.lisp denominados
minimax8-game-agent y minimax15-game-agent que utilicen como
estrategias el método minimax con búsqueda limitada a profundidad 8 y 15
respectivamente. Lanzar un juego del n en raya del agente humano contra cada uno
de estos agentes y comentar los resultados.
Descargar