inteligencia artificial del juego abalone

14
Universidad Cat ´ olica “Nuestra Se ˜ nora de la Asunci ´ on” Sede Regional Asunci ´ on Facultad de Ciencias y Tecnolog ´ ıa Departamento de Ingenier ´ ıa Electr ´ onica e Inform ´ atica Lenguajes de Programaci ´ on I Ing. Carlos Cardozo Ing. Rodrigo Villalba Ing. Vicente Gonz´ alez Colm´ an, Alberto <[email protected]> Ram´ ırez, Pedro <[email protected]> Trabajo Final Abalone R 1 · 0 27 de junio de 2011

Upload: pedro-daniel-ramirez-lopez

Post on 18-Feb-2017

69 views

Category:

Design


2 download

TRANSCRIPT

Page 1: Inteligencia Artificial del Juego ABALONE

Universidad Catolica

“Nuestra Senora de la Asuncion”

Sede Regional Asuncion

Facultad de Ciencias y Tecnologıa

Departamento de Ingenierıa

Electronica e Informatica

Lenguajes de Programacion IIng. Carlos Cardozo

Ing. Rodrigo VillalbaIng. Vicente Gonzalez

Colman, Alberto <[email protected]>Ramırez, Pedro <[email protected]>

Trabajo Final

Abalone R© 1 · 027 de junio de 2011

Page 2: Inteligencia Artificial del Juego ABALONE

INDICE 2

Indice

1. Introduccion 3

2. Abalone 42.1. Conceptos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . 42.2. Movimientos posibles . . . . . . . . . . . . . . . . . . . . . . . . . 42.3. Jugadas Sumito y Situaciones Especiales . . . . . . . . . . . . . . 5

3. Algoritmo de juego utilizado 83.1. Parte logica de la solucion . . . . . . . . . . . . . . . . . . . . . . 83.2. Movimiento de lınea . . . . . . . . . . . . . . . . . . . . . . . . . 83.3. Movimiento de lado . . . . . . . . . . . . . . . . . . . . . . . . . 9

4. Elaboracion del entorno grafico 104.1. Entorno grafico y logica . . . . . . . . . . . . . . . . . . . . . . . 104.2. Manejo de senales y eventos . . . . . . . . . . . . . . . . . . . . . 114.3. Ilusion o que cosa . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

5. Inteligencia Artificial 125.1. Busqueda Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . 125.2. Implementacion de la IA . . . . . . . . . . . . . . . . . . . . . . . 12

6. Implementacion Maquina versus Maquina 13

7. Puntos fuertes del algoritmo 13

8. Puntos debiles del algoritmo 13

9. Dificultades principales encontradas en el desarrollo 14

Page 3: Inteligencia Artificial del Juego ABALONE

1 Introduccion 3

1. Introduccion

Por mas de 3000 anos los juegos de mesa se juegan por los seres humanos.Ellos juegan el uno contra el otro, una de las maneras de divertirse y formar supensamiento estrategico.Uno de estos juegos es abalone. Fue inventado en 1987por Laurent Levi y Lalet Michel. Abalone pertenece al grupo de los clasicos jue-gos de mesa. Hoy en dıa es muy popular. Los torneos se celebran regularmente,pero hasta ahora no hay muchas investigaciones realizadas en este juego.

Hoy en dıa los juegos de tablero son aun famosos. La variedad de juegosdiferentes aumenta mas y mas y va desde los juegos de cartas y juegos condados de mas extenso juego de salon que puede contener peones, azulejos, dadosy cartas. Para jugar estos es para divertirse en grande, pero tambien es unacompetencia entre los jugadores. Una meta es desafiar a los oponentes y ganarlespor trabajo estrategias sofisticadas e inteligentes. A menudo, el juego contienelos aspectos del azar, por ejemplo, tirar los dados o tomar una carta de unabaraja. Uno no puede prever exactamente lo que sucedera. Ası, el juego puedeser mas emocionante.

Una categorıa especial de juegos son los juegos clasicos, llamada placa. Estosson juegos para dos jugadores en el que ambos jugadores tienen informacionperfecta, es decir, no hay cartas ocultas o alguna informacion oculta a otros.Otro aspecto importante es que no contienen ningun tipo de acciones basadasen la suerte. Por lo tanto, los jugadores tienen un control absoluto sobre susacciones. Sobre todo, el juego puede ser descrito en algunas frases. Las reglasson simples. Sin embargo, el numero de diferentes movimientos posibles es alto,lo que hace que el juego se vuelva complejo y un reto. Ejemplos famosos de estosjuegos son el ajedrez y Go y por supuesto el abalone.

Page 4: Inteligencia Artificial del Juego ABALONE

2 Abalone 4

2. Abalone

En esta seccion el juego sera explicado en detalle. En primer lugar, se daalguna informacion basica. Despues los posibles movimientos y luego en el juego,situaciones especiales se discuten.

2.1. Conceptos basicos

El abalone es un juego de dos jugadores estrategico. El tablero de juego tieneuna forma hexagonal con 61 campos. Cada jugador tiene 14 canicas. Un jugadortiene el rojo los, el otro las azules. Los dos jugadores tienen que moverse en lascurvas. El jugador rojo comienza el juego.

El objetivo del juego es para expulsar canicas del oponente en el juego bordo.El jugador que primero expulsa 6 canicas del oponente gana el juego. Hay variasformaciones de inicio de los marmoles. Los dos mas populares cuales son laformacion estandar que se propone por los inventores del juego. El segundo sellama Daisy belga. Esta es una formacion de uso frecuente en torneos, porquelas posiciones son mas bien ofensiva a principios del juego.

Estas dos formaciones se ilustran en las figuras de abajo.

(a) Standard (b) Belgian Daisy

Figura 1: Formaciones de inicio del abalone

2.2. Movimientos posibles

En cada turno el jugador puede mover uno, dos o tres canicas de su col-or. Multiples canicas solo se puede mover si estan adyacentes. Ademas, todaslas canicas se deben mover en la misma direccion. Es posible mover en lıneamarmoles, lo que significa que a lo largo de el eje de su posicion actual (vease lafigura 2.3). Otra posibilidad es hacer un paso de costado, es decir, una decisionque no a lo largo del eje de las canicas, pero hacia los lados (Vease la figura2.4).

Page 5: Inteligencia Artificial del Juego ABALONE

2.3 Jugadas Sumito y Situaciones Especiales 5

(a) Lınea (b) Lado

Figura 2: Movimientos posibles

Independiente de si un movimiento en lınea o un movimiento de costadose lleva a cabo el jugador solo puede mover los marmoles un campo mas. Unmovimiento que se sigue permitiendo incluso si una fila de canicas del mismocolor se divide por el movimiento.

Solo se mueve si los campos de las canicas que se mueven estan vacıas. Elmovimiento en lınea es posible con una de las dos condiciones siguientes derequisito: O bien el campo detras de la canica ultima esta vacıa o el jugador escapaz de realizar un movimiento Sumito. El movimiento Sumito es aquel en losque las canicas del oponente son empujadas.

2.3. Jugadas Sumito y Situaciones Especiales

Un movimiento Sumitoes un movimiento en donde unas cuantas canicas deloponente son impulsados por los marmoles del propio jugador. Una situacionSumito se alcanza en caso de que hay una fila de canicas, donde en un lado solohay marmoles negros y en otro lado hay marmoles blancos. Entre los marmolesno debe haber una brecha. Si el numero de canicas de un jugador supera elnumero de la otra marmoles jugador se encuentra en una situacion de Sumito.Para determinar esta situacion para cada jugador a lo sumo tres canicas decada jugador se tienen en cuenta ya que un jugador no puede moverse mas detres canicas por turno. En realidad, hay solo existen tres diferentes situacionesSumito:

√dos canicas contra uno

√tres bolas contra uno

√tres canicas en contra de dos

En la figura 3 todas las posibles situaciones de Sumito se ilustran. El jugadornegro puede elegir uno de ellos moviendo una fila de sus canicas a la derecha.

Page 6: Inteligencia Artificial del Juego ABALONE

2.3 Jugadas Sumito y Situaciones Especiales 6

Figura 3: Situaciones Sumito

Otro termino importante en el abalone es la situacion llamada Pac. Enesa situacion de ninguno de los jugadores es capaz de realizar un movimientoSumito, porque el numero de canicas del mismo color son iguales. Por lo tanto,existen tres diferentes situaciones Pac:

√una canica contra una

√dos canicas en contra de dos

√tres canicas contra tres

En la figura 4 algunas situaciones y pac-pac, como se ilustra:

Figura 4: Situaciones Pac

Los marmoles en la parte superior del tablero se disponen en una situacionpac simple de 2 contra 2. Los marmoles en el centro se encuentran en unasituacion Pac tambien. Aunque hay 4 canicas negro contra 3 bolas blancas esuna situacion Pac. Esto se debe a que a un jugador se le permite mover 3 canicascomo maximo. Por lo tanto, es una situacion Pac de 3 en 3.

Page 7: Inteligencia Artificial del Juego ABALONE

2.3 Jugadas Sumito y Situaciones Especiales 7

La configuracion de canicas en el fondo hay situacion Sumito, porque no hayno hay espacio libre detras del marmol blanco. Para lograr el objetivo del juego,se debe expulsar seis canicas del oponente fuera del tablero, el jugador tiene querealizar un movimiento Sumito en una posicion en donde el oponente esta en elborde del tablero de juego. Despues de este movimiento una de las canicas deloponente se pierde.

Figura 5: Situacion de ataque, muestra un movimiento de expulsion

Page 8: Inteligencia Artificial del Juego ABALONE

3 Algoritmo de juego utilizado 8

3. Algoritmo de juego utilizado

Primeramente explicaremos la parte logica de nuestro juego, como se real-izo una division o abstraccion de la parte logica y la interfaz grafica el cual fuerealizado en GTK+.

3.1. Parte logica de la solucion

Basicamente se utilizo una matriz donde se representaban mediante carac-teres las bolillas rojas(R) , azules(A), espacios vacios(O) y las posiciones invali-das( ); se realiza la carga de la matriz mediante un archivo de texto, con el cualse puede elegir el inicio tipo Standard y tipo Belgian Daisy descrito anterior-mente, una vez concretado esto lo que se realiza es buscar la manera de que secumplan los movimientos que se realizan en el abalone.

3.2. Movimiento de lınea

En esta parte del trabajo lo que realizamos es definir un inicio y un final,con el cual acotabamos la zona de analisis, por lo tanto al tener un inicio osea alguna bolilla roja o azul(representado por “R” y “A” en nuestra matrizrespectivamente) y un destino(optamos siempre que el destino es un espaciovacıo “O”) se podrıa analizar lo intentado y ejecutar o no tal movimiento. Lalogica utilizada se podrıa resumir en un lenguaje sencillo de la siguiente manera:

1. Capturo posicion inicial, toda vez que sea“R” o “A”.

2. Capturo posicion final o destino toda vez que sea un lugar vacıo “O”.

3. Llamo a la funcion que analiza si se encuentra dentro de los lımites acept-ables, es decir como maximo tres bolillas de un color con dos bolillas delotro color, esto hace como maximo cinco posiciones incluyendo el destino.

4. Si se encuentra entre los lımites, obtengo la zona a analizar, aquı cuentola cantidad de rojos “R”, azules “A” y espacios vacıos “O” encontrados,si los rojos y azules estan todos adyacentes entre sı, si la cantidad deespacios vacıos encontrados es cero y si la cantidad de la bolilla a querermover(condicionado por el turno del jugador sea rojo o azul) es mayorejecuto la jugada.

El algoritmo es algo sencillo, inicio, fin, analizador y ejecutor; el anal-izador nos arroja un true o false de acuerdo a lo descrito y el ejecutor tan soloactualiza la matriz logrando el objetivo, ademas de esto el algoritmo utiliza untipo de orientacion, es decir hacia donde se debe analizar, definida por la zonacapturada, esta orientacion se da de seis formas, superior, inferior, derecho,izquierdo, y las combinaciones de estas.

Page 9: Inteligencia Artificial del Juego ABALONE

3.3 Movimiento de lado 9

3.3. Movimiento de lado

Este caso es muy similar a lo descrito anteriormente, solo que aquı nos vale-mos de una senal del entorno grafico de GTK+, primero ablaremos de la logica,basicamente el jugador se posiciona sobre una bolilla(origen) y utiliza el scrollpara seleccionar de izquierda a derecha con la cantidad de scroll dados se eje-cuta un contador el cual tiene como lımite superior tres e inferior uno, con lacantidad de scroll dados se da la secuencia de seleccion 1-2-3-2-1-2-3-2-1, es de-cir toda vez que el usuario se posicione sobre una bolilla y haga scroll vera quelas bolillas se seleccionan con esta secuencia; en el fondo de la logica esto es unmovimiento simple(un origen y un destino), solo que al obtener la cantidad descroll dados se analiza la zona a querer mover sean espacios vacios, al hacerscroll sobre la posicion de destino se verifica que el destino sea un espacio vacıo,y las adyacencias de izquierda a derecha tambien, dadas por la cantidad que elcontador tiene. En resumen, se tiene:

1. Capturo inicio toda vez que sea una bolilla “R” o “A”

2. Cuento scroll dados por el usuario, con la secuencia indicada

3. Capturo destino toda vez que sea un espacio vacıo “O”

4. Analizo el origen y destino(movimiento simple) y las adyacencias(de izquier-da a derecha) dadas por el valor del contador

5. Realizo o ignoro la jugada a querer realizar con lo devuelto por el itemanterior

El algoritmo es de vuelta muy sencillo, esta vez valiendonos del GTK+ y lassenales del scroll, se tiene inicio, cantidad de scroll, destino, analizador,ejecutor, de vuelta analizador arroja un true o false aceptando o no la jugaday ejecutor tan solo actualiza la matriz.

Page 10: Inteligencia Artificial del Juego ABALONE

4 Elaboracion del entorno grafico 10

4. Elaboracion del entorno grafico

El entorno grafico como se comento fue realizado en GTK+, es un caso men-cionar que nos valimos de herramientas para la elaboracion de esta, comentandoy analizando entre el companero de grupo nos hicimos la siguiente pregunta, alquerer crear paginas web nos topamos con editores para ello(introduccion a lainformatica), al crear una base de datos sencillo nos topamos con editores paraMySql(teorıa y aplicacion a la informatica I), y al querer realizar entornos grafi-cos..Es por ello que un primer enfoque fue descargar tutoriales y ejemplos decodigos en GTK+, el cual nos ayudo bastante para entender el funcionamentodel mismo, como maneja las senales, los eventos, los empaquetamientos ,etc.Pero al intentar realizar esto a gran escala se nos volvio algo tedioso escribirtantas lıneas de codigo para ello, por lo tanto en el tiempo de investigacionencontramos a GLADE, es un programa que permite crear, manipular, person-alizar entornos graficos en GTK+, de manera totalmente grafica, fue de bastanteayuda para la elaboracion de todo el trabajo. Ası que vale la pena recomendarloen su version 2.12, pues las 3.x utilizan el lenguaje xml para su elaboracion sibien es lo mismo porque solo se deben utilizar librerıas de glade para utilizar-los, se escogio los 2.x en donde el codigo generado es totalmente en C, una vezobtenido esto tan solo resta manejar las senales y los eventos de manera optima.

4.1. Entorno grafico y logica

Bueno una vez concretado la parte logica del juego nos enfocamos al en-torno grafico y como “mezclar” de la mejor manera ambas, primero generamosel tablero con gtk table atach, con el cual representamos una matriz de 21*11,y a las posicones validas del juego(bolillas rojas, azules y vacios), relacionamosuna caja de eventos, que saltan solo con los click y el scroll mencionado, parallevar a cabo movimiento de linea y lado respectivamente, ası a cada caja deeventos, relacionamos una posicon de nuestra matriz, y cada senal generada porel usuario nos sirve para manipular nuestra matriz y utilizarla como material dememoria, en realidad el GTK+ lo manejamos como un vector de 231 elemem-tos, en el codigo se vera la funcion mat2celda y la funcion celda2mat querealizan las conversiones de la matriz al vector de GTK+ y viceversa, ademasse encontrara la funcion posicion valida que arroja true o false si la posiciones valida o no, es decir como se tienen solo 61 celdas validas en el abalone, yutilizamos una matriz de 21*11 que totalizan 231 elementos existe esta funcionque indica si tal posicion es del abalone o una parte del entorno grafico con-siderado como invalido, esto nos sirve para la carga de imagenes, si es invalidocarga una imagen gris, si en tal posicion se encuentra una “R”, se carga unaimagen que simula una bolilla roja, si en tal posicion se encuentra una“A”, secarga una imagen que simula una bolilla azul, y si se encuentra una “O”, secarga una imagen que da la ilusion de una posicion vacıa.

Page 11: Inteligencia Artificial del Juego ABALONE

4.2 Manejo de senales y eventos 11

4.2. Manejo de senales y eventos

Como se menciono, mediante la funcion posicion valida se relaciono los 61campos del abalone a una caja de eventos, si el usuario hace click sobre una deestas posiciones, se genera una senal que es atrapada y analizada para realizaruna jugada de lınea, si el usuario realiza scroll’s, estas senales son atrapadas yanalizadas para llevar a cabo el movimiento de lado, con esto logramos separarlogicamante las jugadas mencionadas para atacar al problema de la forma “di-vide y venceras”, entonces se hace click en un campo que contiene la caja de even-tos, luego esto es transformado a las coordenadas de la matriz(celda2mat) y seanaliza a la matriz con la logica implementada, si existe algo favorable(jugadaaceptada, bolillas seleccionadas, etc) son enviados de vuelta a GTK+ mediantela funcion mat2celda, es decir estas funciones son el traductor entre GTK+ ynuestra logica ya sea para manipular la matriz o actualizar el GTK+.

4.3. Ilusion o que cosa

Ahora veremos como el usuario puede darse cuenta como se seleccionan lasbolillas, al hacer un click sobre una bolilla, se realiza en el GTK+ un cambio deimagen, que da la ilusion que esta seleccionado, solo se cambia la imagen, estotambien se realiza cuando se realiza cualquier tipo movimiento, todo esto sindejar de lado a nuestro elemento de memoria, la matriz al encontrar una bolillarojo “R”, se cambia por una imagen verde para dar la ilusion de seleccion, y ala matriz se lo carga con “V” para recordar que esa bolilla esta seleccionada, lomismo ocurre para deseleccionar.

Page 12: Inteligencia Artificial del Juego ABALONE

5 Inteligencia Artificial 12

5. Inteligencia Artificial

La inteligencia artificial que realizamos tiene tres niveles de complejidad,easy, medium, hard, esto se describe a continuacion.

5.1. Busqueda Monte Carlo

La idea general es simular un cierto numero de juegos a partir de la actualsituacion real sobre el tablero de juego. Para cada posible movimiento una seriede juegos son simuladas y los resultados de cada uno de estos juegos son puntu-ados. Despues de todas simulaciones terminadas, la inteligencia artificial tomala decision con el mayor puntuado ya que es probablemente el movimiento masprometedor.

Para mayor comodidad en la busqueda de Monte-Carlo se explica[1] pormedio de seudo codigo.

1. Obtener todos los movimientos posibles en la situacion actual del juego

2. Para cada uno de estos movimientos:

Tomar el movimiento actual

Simulacion de una serie de juegos con la situacion real

Evaluar el resultado de cada juego simulado que acumulan ellos

3. Tome la decision con el mayor valor para el juego normal los jugadoresque eligen al azar de un movimiento de todos los movimientos posibles seutilizan en la busqueda simple de Monte-Carlo.

5.2. Implementacion de la IA

Con lo mencionado anteriormente se implementa la busqueda tipo monte-carlo para que la IA realice su mejor jugada, lo que se hace es sencillamente sepuntua las bolillas de acuerdo a la distancia del centro del tablero del abalone,ası mientras mas alejado se esta del mismo esta sera la jugada a realizar, puesmientras se aleje del borde del tablero es mas difıcil hecharlo del tablero, unavez hecho esto se da una puntuacion grande a una judada de empuje y unamayor aun a una jugada para hechar fuera del tablero, es decir, si se tiene unasituacion de ir al centro, empujar o hechar fuera del tablero, la logica opta poresta ultima, pues su objetivo principal es hechar toda vez que pueda las canicascomo primera opcion. Esto se lleva a cabo con un archivo de texto en el cualestan puntuados radialmente del centro las bolillas, ası por cada jugada simula-da se evalua las situaciones, se las puntua y despues de todas las simulacionesse toma una decision.

Page 13: Inteligencia Artificial del Juego ABALONE

6 Implementacion Maquina versus Maquina 13

6. Implementacion Maquina versus Maquina

El juego entre dos ordenadores se llevo a cabo mediante las especificacionesen xml dadas por los profesores, los parsers para llevar a cabo esto fueron inves-tigados y luego implementados mediante tutoriales encontrados en la web, heaquı nuestra fuente de conocimiento el cual lo explicara mejor de lo que nosotroslo harıamos, por favor pinche aquı.

7. Puntos fuertes del algoritmo

La jugada de lınea la realiza una sola funcion, lo mismo para la jugada de la-do; una buena separacion entre los dos tipos de jugadas, un entorno grafico bienestudiado y bastante amigable a nuestro criterio, con opciones de eleccion deltipo de tablero que desea jugar(standard, belgian), opciones de reinicio de juego,opciones de eleccion del tipo de juego(humano versus humano, humano versusmaquina y maquina versus maquina), ademas una ayuda o help para ayudar aentender el juego al usuario, como tambien los acerca de o about de los creadoresdel juego, efectos de seleccion y deseleccion de las bolillas, opciones de nivel dejuego sea easy(facil), medium(medio) y hard(experto) en el tipo de jugada hu-mano versus maquina, mensajes de advertencia al intentar cerrar las ventanas,pantalla de bienvenida al juego abalone(splash), opciones muy amigable de se-leccion de turno, carga de nombre de jugador, seleccion del directorio donde seguardaran los archivos xml, en el tipo de juego maquina versus maquina, opcionde juego humano versus humano que es para una practica del juego, ası comose practica el ajedrez contra “uno mismo” esta opcion esta disponible en elabalone.

8. Puntos debiles del algoritmo

Una no muy buena implementacion del tipo de juego maquina versus maquina,por falta de tiempo para una comprension completa del xml(a profundidad),funciona pero falta mejorar, es lo que se llama the first approx :).

Page 14: Inteligencia Artificial del Juego ABALONE

9 Dificultades principales encontradas en el desarrollo 14

9. Dificultades principales encontradas en el de-sarrollo

La dificultad principal que encontramos entre miles de lıneas de codigo es queal jugar el juego humano versus maquina de repente se mataba el programa; si,de la nada explotaba, nos llevo dos dıas encontrar el error, cuando las esperanzasestaban por el piso un companero recordo las palabras sabias de un profesor,“es importante utilizar fclose”, si es ası, por mas que el sistema operativo seencarga de cerrar estos una vez finalizado el programa, esto no ocurre en eltiempo de ejecucion; el dolor de cabeza de dıas era porque se nos olvido cerrarun archivo(el de puntuacion), de la nada y sin aviso previo el programa secerraba, y la solucion era solo eso un fclose, ası que gracias Carlos Cardozo.

Ademas de esto hubo inconvenientes menores, como que se llegaba a unpunto en donde se debıa cambiar gran parte de la estructura construıda por noencontrar una solucion, un cambio casi completo de la forma de cargar el tableroabalone, utilizando los elementos de memoria auxiliar como el archivo de textocon el cual se logro el estilo belgian y standard.

Y vale la pena mencionar que se nos facilito la realizacion del entorno graficoutilizando el GLADE 2.12 el cual nos ahorro miles de lıneas de codigo, unaamigable interfaz, etc.

Referencias

[1] Master Thesis, Implementing a Computer Player for Abalone using Alpha-Beta and Monte-Carlo Search, Pascal Chorus.

[2] Abalearn: Eficient Self-Play Learning of the game Abalone, Pedro Camposand Thibault Langlois.

[3] Multi-Player Games: Algorithms and Approaches, Nathan Reed Sturte-vant.

[4] Inteligencia Artificial, Un Enfoque Moderno, Stuart J. Russell y PeterNorvig.

Ultima revision 27 de junio de 2011