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.