SlideShare una empresa de Scribd logo
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 <albertocolman81@gmail.com>
Ram´ırez, Pedro <pedroramirez22@gmail.com>
Trabajo Final
AbaloneR
1 · 0
27 de junio de 2011
´INDICE 2
´Indice
1. Introducci´on 3
2. Abalone 4
2.1. Conceptos b´asicos . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2. Movimientos posibles . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3. Jugadas Sumito y Situaciones Especiales . . . . . . . . . . . . . . 5
3. Algoritmo de juego utilizado 8
3.1. Parte l´ogica de la soluci´on . . . . . . . . . . . . . . . . . . . . . . 8
3.2. Movimiento de l´ınea . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.3. Movimiento de lado . . . . . . . . . . . . . . . . . . . . . . . . . 9
4. Elaboraci´on del entorno gr´afico 10
4.1. Entorno gr´afico y l´ogica . . . . . . . . . . . . . . . . . . . . . . . 10
4.2. Manejo de se˜nales y eventos . . . . . . . . . . . . . . . . . . . . . 11
4.3. Ilusi´on o que cosa . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5. Inteligencia Artificial 12
5.1. B´usqueda Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . 12
5.2. Implementaci´on de la IA . . . . . . . . . . . . . . . . . . . . . . . 12
6. Implementaci´on M´aquina versus M´aquina 13
7. Puntos fuertes del algoritmo 13
8. Puntos d´ebiles del algoritmo 13
9. Dificultades principales encontradas en el desarrollo 14
1 Introducci´on 3
1. Introducci´on
Por m´as de 3000 a˜nos 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 su
pensamiento estrat´egico.Uno de estos juegos es abalone. Fue inventado en 1987
por Laurent Levi y Lalet Michel. Abalone pertenece al grupo de los cl´asicos 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 a´un famosos. La variedad de juegos
diferentes aumenta m´as y m´as y va desde los juegos de cartas y juegos con
dados de m´as extenso juego de sal´on que puede contener peones, azulejos, dados
y cartas. Para jugar estos es para divertirse en grande, pero tambi´en es una
competencia entre los jugadores. Una meta es desafiar a los oponentes y ganarles
por trabajo estrategias sofisticadas e inteligentes. A menudo, el juego contiene
los aspectos del azar, por ejemplo, tirar los dados o tomar una carta de una
baraja. Uno no puede prever exactamente lo que suceder´a. As´ı, el juego puede
ser m´as emocionante.
Una categor´ıa especial de juegos son los juegos cl´asicos, llamada placa. Estos
son juegos para dos jugadores en el que ambos jugadores tienen informaci´on
perfecta, es decir, no hay cartas ocultas o alguna informaci´on oculta a otros.
Otro aspecto importante es que no contienen ning´un tipo de acciones basadas
en la suerte. Por lo tanto, los jugadores tienen un control absoluto sobre sus
acciones. Sobre todo, el juego puede ser descrito en algunas frases. Las reglas
son simples. Sin embargo, el n´umero de diferentes movimientos posibles es alto,
lo que hace que el juego se vuelva complejo y un reto. Ejemplos famosos de estos
juegos son el ajedrez y Go y por supuesto el abalone.
2 Abalone 4
2. Abalone
En esta secci´on el juego ser´a explicado en detalle. En primer lugar, se da
alguna informaci´on b´asica. Despu´es los posibles movimientos y luego en el juego,
situaciones especiales se discuten.
2.1. Conceptos b´asicos
El abalone es un juego de dos jugadores estrat´egico. El tablero de juego tiene
una forma hexagonal con 61 campos. Cada jugador tiene 14 canicas. Un jugador
tiene el rojo los, el otro las azules. Los dos jugadores tienen que moverse en las
curvas. 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 varias
formaciones de inicio de los m´armoles. Los dos m´as populares cu´ales son la
formaci´on est´andar que se propone por los inventores del juego. El segundo se
llama Daisy belga. Esta es una formaci´on de uso frecuente en torneos, porque
las posiciones son m´as 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. M´ultiples canicas s´olo se puede mover si est´an adyacentes. Adem´as, todas
las canicas se deben mover en la misma direcci´on. Es posible mover en l´ınea
m´armoles, lo que significa que a lo largo de el eje de su posici´on actual (v´ease la
figura 2.3). Otra posibilidad es hacer un paso de costado, es decir, una decisi´on
que no a lo largo del eje de las canicas, pero hacia los lados (V´ease la figura
2.4).
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 costado
se lleva a cabo el jugador s´olo puede mover los m´armoles un campo m´as. Un
movimiento que se sigue permitiendo incluso si una fila de canicas del mismo
color se divide por el movimiento.
S´olo se mueve si los campos de las canicas que se mueven est´an vac´ıas. El
movimiento en l´ınea es posible con una de las dos condiciones siguientes de
requisito: O bien el campo detr´as de la canica ´ultima est´a vac´ıa o el jugador es
capaz de realizar un movimiento Sumito. El movimiento Sumito es aquel en los
que las canicas del oponente son empujadas.
2.3. Jugadas Sumito y Situaciones Especiales
Un movimiento Sumitoes un movimiento en donde unas cuantas canicas del
oponente son impulsados por los m´armoles del propio jugador. Una situaci´on
Sumito se alcanza en caso de que hay una fila de canicas, donde en un lado s´olo
hay m´armoles negros y en otro lado hay m´armoles blancos. Entre los m´armoles
no debe haber una brecha. Si el n´umero de canicas de un jugador supera el
n´umero de la otra m´armoles jugador se encuentra en una situaci´on de Sumito.
Para determinar esta situaci´on para cada jugador a lo sumo tres canicas de
cada jugador se tienen en cuenta ya que un jugador no puede moverse m´as de
tres canicas por turno. En realidad, hay s´olo existen tres diferentes situaciones
Sumito:
√
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 jugador
negro puede elegir uno de ellos moviendo una fila de sus canicas a la derecha.
2.3 Jugadas Sumito y Situaciones Especiales 6
Figura 3: Situaciones Sumito
Otro t´ermino importante en el abalone es la situaci´on llamada Pac. En
esa situaci´on de ninguno de los jugadores es capaz de realizar un movimiento
Sumito, porque el n´umero 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 m´armoles en la parte superior del tablero se disponen en una situaci´on
pac simple de 2 contra 2. Los m´armoles en el centro se encuentran en una
situaci´on Pac tambi´en. Aunque hay 4 canicas negro contra 3 bolas blancas es
una situaci´on Pac. Esto se debe a que a un jugador se le permite mover 3 canicas
como m´aximo. Por lo tanto, es una situaci´on Pac de 3 en 3.
2.3 Jugadas Sumito y Situaciones Especiales 7
La configuraci´on de canicas en el fondo hay situaci´on Sumito, porque no hay
no hay espacio libre detr´as del m´armol blanco. Para lograr el objetivo del juego,
se debe expulsar seis canicas del oponente fuera del tablero, el jugador tiene que
realizar un movimiento Sumito en una posici´on en donde el oponente est´a en el
borde del tablero de juego. Despu´es de este movimiento una de las canicas del
oponente se pierde.
Figura 5: Situaci´on de ataque, muestra un movimiento de expulsi´on
3 Algoritmo de juego utilizado 8
3. Algoritmo de juego utilizado
Primeramente explicaremos la parte l´ogica de nuestro juego, como se real-
iz´o una divisi´on o abstracci´on de la parte l´ogica y la interfaz gr´afica el cual fue
realizado en GTK+.
3.1. Parte l´ogica de la soluci´on
B´asicamente se utiliz´o una matriz donde se representaban mediante carac-
teres las bolillas rojas(R) , azules(A), espacios vacios(O) y las posiciones inv´ali-
das( ); se realiza la carga de la matriz mediante un archivo de texto, con el cual
se 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 se
cumplan 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 an´alisis, por lo tanto al tener un inicio o
sea alguna bolilla roja o azul(representado por “R” y “A” en nuestra matriz
respectivamente) y un destino(optamos siempre que el destino es un espacio
vac´ıo “O”) se podr´ıa analizar lo intentado y ejecutar o no tal movimiento. La
l´ogica utilizada se podr´ıa resumir en un lenguaje sencillo de la siguiente manera:
1. Capturo posici´on inicial, toda vez que sea“R” o “A”.
2. Capturo posici´on final o destino toda vez que sea un lugar vac´ıo “O”.
3. Llamo a la funci´on que analiza si se encuentra dentro de los l´ımites acept-
ables, es decir como m´aximo tres bolillas de un color con dos bolillas del
otro color, esto hace como m´aximo cinco posiciones incluyendo el destino.
4. Si se encuentra entre los l´ımites, obtengo la zona a analizar, aqu´ı cuento
la cantidad de rojos “R”, azules “A” y espacios vac´ıos “O” encontrados,
si los rojos y azules est´an todos adyacentes entre s´ı, si la cantidad de
espacios vac´ıos encontrados es cero y si la cantidad de la bolilla a querer
mover(condicionado por el turno del jugador sea rojo o azul) es mayor
ejecuto 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 solo
actualiza la matriz logrando el objetivo, adem´as de esto el algoritmo utiliza un
tipo de orientaci´on, es decir hacia donde se debe analizar, definida por la zona
capturada, esta orientaci´on se da de seis formas, superior, inferior, derecho,
izquierdo, y las combinaciones de estas.
3.3 Movimiento de lado 9
3.3. Movimiento de lado
Este caso es muy similar a lo descrito anteriormente, s´olo que aqu´ı nos vale-
mos de una se˜nal del entorno gr´afico de GTK+, primero ablaremos de la l´ogica,
b´asicamente el jugador se posiciona sobre una bolilla(origen) y utiliza el scroll
para 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 la
cantidad de scroll dados se da la secuencia de selecci´on 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 ver´a que
las bolillas se seleccionan con esta secuencia; en el fondo de la l´ogica esto es un
movimiento simple(un origen y un destino), s´olo que al obtener la cantidad de
scroll dados se analiza la zona a querer mover sean espacios vacios, al hacer
scroll sobre la posicion de destino se verifica que el destino sea un espacio vac´ıo,
y las adyacencias de izquierda a derecha tambi´en, dadas por la cantidad que el
contador 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 item
anterior
El algoritmo es de vuelta muy sencillo, esta vez vali´endonos del GTK+ y las
se˜nales del scroll, se tiene inicio, cantidad de scroll, destino, analizador,
ejecutor, de vuelta analizador arroja un true o false aceptando o no la jugada
y ejecutor tan s´olo actualiza la matriz.
4 Elaboraci´on del entorno gr´afico 10
4. Elaboraci´on del entorno gr´afico
El entorno gr´afico como se comento fu´e realizado en GTK+, es un caso men-
cionar que nos valimos de herramientas para la elaboraci´on de esta, comentando
y analizando entre el compa˜nero de grupo nos hicimos la siguiente pregunta, al
querer crear paginas web nos topamos con editores para ello(introducci´on a la
inform´atica), al crear una base de datos sencillo nos topamos con editores para
MySql(teor´ıa y aplicaci´on a la inform´atica I), y al querer realizar entornos gr´afi-
cos..Es por ello que un primer enfoque fue descargar tutoriales y ejemplos de
c´odigos en GTK+, el cual nos ayudo bastante para entender el funcionamento
del mismo, como maneja las se˜nales, los eventos, los empaquetamientos ,etc.
Pero al intentar realizar esto a gran escala se nos volvi´o algo tedioso escribir
tantas l´ıneas de c´odigo para ello, por lo tanto en el tiempo de investigaci´on
encontramos a GLADE, es un programa que permite crear, manipular, person-
alizar entornos gr´aficos en GTK+, de manera totalmente gr´afica, fue de bastante
ayuda para la elaboraci´on de todo el trabajo. As´ı que vale la pena recomendarlo
en su versi´on 2.12, pu´es las 3.x utilizan el lenguaje xml para su elaboraci´on si
bien es lo mismo porque s´olo se deben utilizar librer´ıas de glade para utilizar-
los, se escogi´o los 2.x en donde el c´odigo generado es totalmente en C, una vez
obtenido esto tan s´olo resta manejar las se˜nales y los eventos de manera ´optima.
4.1. Entorno gr´afico y l´ogica
Bueno una vez concretado la parte l´ogica del juego nos enfocamos al en-
torno gr´afico y c´omo “mezclar” de la mejor manera ambas, primero generamos
el tablero con gtk table atach, con el cual representamos una matriz de 21*11,
y a las posicones v´alidas del juego(bolillas rojas, azules y vacios), relacionamos
una caja de eventos, que saltan s´olo con los click y el scroll mencionado, para
llevar a cabo movimiento de linea y lado respectivamente, as´ı a cada caja de
eventos, relacionamos una posic´on de nuestra matriz, y cada se˜nal generada por
el usuario nos sirve para manipular nuestra matriz y utilizarla como material de
memoria, en realidad el GTK+ lo manejamos como un vector de 231 elemem-
tos, en el c´odigo se ver´a la funci´on mat2celda y la funci´on celda2mat que
realizan las conversiones de la matriz al vector de GTK+ y viceversa, adem´as
se encontrar´a la funci´on posici´on valida que arroja true o false si la posicion
es v´alida o no, es decir como se tienen s´olo 61 celdas v´alidas en el abalone, y
utilizamos una matriz de 21*11 que totalizan 231 elementos existe esta funci´on
que indica si tal posici´on es del abalone o una parte del entorno gr´afico con-
siderado como inv´alido, esto nos sirve para la carga de im´agenes, si es inv´alido
carga una imagen gris, si en tal posici´on se encuentra una “R”, se carga una
imagen que simula una bolilla roja, si en tal posici´on se encuentra una“A”, se
carga una imagen que simula una bolilla azul, y si se encuentra una “O”, se
carga una imagen que da la ilusi´on de una posici´on vac´ıa.
4.2 Manejo de se˜nales y eventos 11
4.2. Manejo de se˜nales y eventos
Como se mencion´o, mediante la funcion posicion valida se relacion´o los 61
campos del abalone a una caja de eventos, si el usuario hace click sobre una de
estas posiciones, se genera una se˜nal que es atrapada y analizada para realizar
una jugada de l´ınea, si el usuario realiza scroll’s, estas se˜nales son atrapadas y
analizadas para llevar a cabo el movimiento de lado, con esto logramos separar
l´ogicamante las jugadas mencionadas para atacar al problema de la forma “di-
vide y vencer´as”, 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 se
analiza a la matriz con la l´ogica implementada, si existe algo favorable(jugada
aceptada, bolillas seleccionadas, etc) son enviados de vuelta a GTK+ mediante
la funci´on mat2celda, es decir estas funciones son el traductor entre GTK+ y
nuestra l´ogica ya sea para manipular la matriz o actualizar el GTK+.
4.3. Ilusi´on o que cosa
Ahora veremos como el usuario puede darse cuenta c´omo se seleccionan las
bolillas, al hacer un click sobre una bolilla, se realiza en el GTK+ un cambio de
imagen, que da la ilusi´on que est´a seleccionado, s´olo se cambia la imagen, esto
tambi´en se realiza cuando se realiza cualquier tipo movimiento, todo esto sin
dejar de lado a nuestro elemento de memoria, la matriz al encontrar una bolilla
rojo “R”, se cambia por una imagen verde para dar la ilusi´on de selecci´on, y a
la matriz se lo carga con “V” para recordar que esa bolilla est´a seleccionada, lo
mismo ocurre para deseleccionar.
5 Inteligencia Artificial 12
5. Inteligencia Artificial
La inteligencia artificial que realizamos tiene tres niveles de complejidad,
easy, medium, hard, esto se describe a continuaci´on.
5.1. B´usqueda Monte Carlo
La idea general es simular un cierto n´umero de juegos a partir de la actual
situaci´on real sobre el tablero de juego. Para cada posible movimiento una serie
de juegos son simuladas y los resultados de cada uno de estos juegos son puntu-
ados. Despu´es de todas simulaciones terminadas, la inteligencia artificial toma
la decisi´on con el mayor puntuado ya que es probablemente el movimiento m´as
prometedor.
Para mayor comodidad en la b´usqueda de Monte-Carlo se explica[1] por
medio de seudo c´odigo.
1. Obtener todos los movimientos posibles en la situaci´on actual del juego
2. Para cada uno de estos movimientos:
Tomar el movimiento actual
Simulaci´on de una serie de juegos con la situaci´on real
Evaluar el resultado de cada juego simulado que acumulan ellos
3. Tome la decisi´on con el mayor valor para el juego normal los jugadores
que eligen al azar de un movimiento de todos los movimientos posibles se
utilizan en la b´usqueda simple de Monte-Carlo.
5.2. Implementaci´on de la IA
Con lo mencionado anteriormente se implementa la b´usqueda tipo monte-
carlo para que la IA realice su mejor jugada, lo que se hace es sencillamente se
punt´ua las bolillas de acuerdo a la distancia del centro del tablero del abalone,
as´ı mientras m´as alejado se est´a del mismo esta ser´a la jugada a realizar, pues
mientras se aleje del borde del tablero es m´as dif´ıcil hecharlo del tablero, una
vez hecho esto se da una puntuaci´on grande a una judada de empuje y una
mayor a´un a una jugada para hechar fuera del tablero, es decir, si se tiene una
situaci´on de ir al centro, empujar o hechar fuera del tablero, la l´ogica opta por
esta ultima, pu´es su objetivo principal es hechar toda vez que pueda las canicas
como primera opci´on. Esto se lleva a cabo con un archivo de texto en el cual
est´an puntuados radialmente del centro las bolillas, as´ı por cada jugada simula-
da se eval´ua las situaciones, se las punt´ua y despu´es de todas las simulaciones
se toma una decisi´on.
6 Implementaci´on M´aquina versus M´aquina 13
6. Implementaci´on M´aquina versus M´aquina
El juego entre dos ordenadores se llev´o a cabo mediante las especificaciones
en xml dadas por los profesores, los parsers para llevar a cabo esto fueron inves-
tigados y luego implementados mediante tutoriales encontrados en la web, he
aqu´ı nuestra fuente de conocimiento el cual lo explicar´a mejor de lo que nosotros
lo har´ıamos, por favor pinche aqu´ı.
7. Puntos fuertes del algoritmo
La jugada de l´ınea la realiza una sola funci´on, lo mismo para la jugada de la-
do; una buena separaci´on entre los dos tipos de jugadas, un entorno gr´afico bien
estudiado y bastante amigable a nuestro criterio, con opciones de elecci´on del
tipo de tablero que desea jugar(standard, belgian), opciones de reinicio de juego,
opciones de elecci´on del tipo de juego(humano versus humano, humano versus
m´aquina y m´aquina versus m´aquina), adem´as una ayuda o help para ayudar a
entender el juego al usuario, como tambi´en los acerca de o about de los creadores
del juego, efectos de selecci´on y deselecci´on de las bolillas, opciones de nivel de
juego sea easy(f´acil), medium(medio) y hard(experto) en el tipo de jugada hu-
mano versus m´aquina, mensajes de advertencia al intentar cerrar las ventanas,
pantalla de bienvenida al juego abalone(splash), opciones muy amigable de se-
lecci´on de turno, carga de nombre de jugador, selecci´on del directorio donde se
guardar´an los archivos xml, en el tipo de juego m´aquina versus m´aquina, opci´on
de juego humano versus humano que es para una pr´actica del juego, as´ı como
se practica el ajedrez contra “uno mismo” esta opci´on est´a disponible en el
abalone.
8. Puntos d´ebiles del algoritmo
Una no muy buena implementaci´on del tipo de juego m´aquina versus m´aquina,
por falta de tiempo para una comprensi´on completa del xml(a profundidad),
funciona pero falta mejorar, es lo que se llama the first approx :).
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 c´odigo es que
al jugar el juego humano versus m´aquina de repente se mataba el programa; si,
de la nada explotaba, nos llev´o dos d´ıas encontrar el error, cuando las esperanzas
estaban por el piso un compa˜nero recordo las palabras sabias de un profesor,
“es importante utilizar fclose”, si es as´ı, por m´as que el sistema operativo se
encarga de cerrar ´estos una vez finalizado el programa, esto no ocurre en el
tiempo de ejecuci´on; el dolor de cabeza de d´ıas era porque se nos olvid´o cerrar
un archivo(el de puntuaci´on), de la nada y sin aviso previo el programa se
cerraba, y la soluci´on era s´olo eso un fclose, as´ı que gracias Carlos Cardozo.
Adem´as de esto hubo inconvenientes menores, como que se llegaba a un
punto en donde se deb´ıa cambiar gran parte de la estructura constru´ıda por no
encontrar una soluci´on, un cambio casi completo de la forma de cargar el tablero
abalone, utilizando los elementos de memoria auxiliar como el archivo de texto
con el cual se logr´o el estilo belgian y standard.
Y vale la pena mencionar que se nos facilit´o la realizaci´on del entorno gr´afico
utilizando el GLADE 2.12 el cual nos ahorr´o miles de l´ıneas de c´odigo, una
amigable 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 Campos
and Thibault Langlois.
[3] Multi-Player Games: Algorithms and Approaches, Nathan Reed Sturte-
vant.
[4] Inteligencia Artificial, Un Enfoque Moderno, Stuart J. Russell y Peter
Norvig.
Ultima revisi´on 27 de junio de 2011

Más contenido relacionado

PDF
Notas Hípicas por Elvis Quinta La Rinconada 130425.pdf
PDF
Catalogo de peças rd 350
PDF
Notas Hípicas por Elvis Quinta Valencia 190725.pdf
PDF
Reunion 7 Hipodromo Nacional de Valencia 120425.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 200425.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 150625.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 011224.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 130725.pdf
Notas Hípicas por Elvis Quinta La Rinconada 130425.pdf
Catalogo de peças rd 350
Notas Hípicas por Elvis Quinta Valencia 190725.pdf
Reunion 7 Hipodromo Nacional de Valencia 120425.pdf
Notas Hípicas por Elvis Quinta La Rinconada 200425.pdf
Notas Hípicas por Elvis Quinta La Rinconada 150625.pdf
Notas Hípicas por Elvis Quinta La Rinconada 011224.pdf
Notas Hípicas por Elvis Quinta La Rinconada 130725.pdf

La actualidad más candente (15)

PDF
Notas Hípicas por Elvis Quinta Valencia 290325.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 060725.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 010625.pdf
PDF
LISTA 05 – FAMÍLIAS COM 0 OU 1 CRITÉRIO; #POCONET
PDF
Notas Hípicas por Elvis Quinta Valencia 020825.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 260725.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 080625.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 270425.pdf
PDF
DSI Inches to Decimal - Millimeter Conversion Chart
PDF
Notas Hípicas por Elvis Quinta La Rinconada 100825.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 040525.pdf
PDF
Notas Hípicas por Elvis Quinta La Rinconada 060425.pdf
PDF
Traqueos La Rinconada viernes 110725.pdf
PDF
Dnv spare parts recommendation
PDF
Reunion 2 Hipodromo Nacional de Valencia 010225.pdf
Notas Hípicas por Elvis Quinta Valencia 290325.pdf
Notas Hípicas por Elvis Quinta La Rinconada 060725.pdf
Notas Hípicas por Elvis Quinta La Rinconada 010625.pdf
LISTA 05 – FAMÍLIAS COM 0 OU 1 CRITÉRIO; #POCONET
Notas Hípicas por Elvis Quinta Valencia 020825.pdf
Notas Hípicas por Elvis Quinta La Rinconada 260725.pdf
Notas Hípicas por Elvis Quinta La Rinconada 080625.pdf
Notas Hípicas por Elvis Quinta La Rinconada 270425.pdf
DSI Inches to Decimal - Millimeter Conversion Chart
Notas Hípicas por Elvis Quinta La Rinconada 100825.pdf
Notas Hípicas por Elvis Quinta La Rinconada 040525.pdf
Notas Hípicas por Elvis Quinta La Rinconada 060425.pdf
Traqueos La Rinconada viernes 110725.pdf
Dnv spare parts recommendation
Reunion 2 Hipodromo Nacional de Valencia 010225.pdf
Publicidad

Destacado (20)

PPTX
Presentation1
PPTX
CMC-bjorn Uijens (Trendlab)
PDF
Book store 3.4
PPTX
The king’s day
PDF
Eclat Alto de Pinheiros
PDF
W Paulista
PDF
Adictos a la aprobación_PSICOLOGÍA PRÁCTICA
PPT
2.parola di vita luglio2012 - villa d'adige
PPTX
Metodos de estudio
PPTX
Cómo se si el video se subió a youtube
PDF
WordPress with Non Profits
DOCX
Preentrega sisuniukanamaria
PPTX
web 2.0: youtube
PPTX
Top Ten Learning Theories for Digital and Collaborative Learning
PDF
Augusta 953
PPTX
From individual’s digital competence to digitally competent learning organisa...
PPTX
REFERENCIAS WORD
PPTX
PDF
Presentacion adicciones
PPTX
Técnicas de estudio
Presentation1
CMC-bjorn Uijens (Trendlab)
Book store 3.4
The king’s day
Eclat Alto de Pinheiros
W Paulista
Adictos a la aprobación_PSICOLOGÍA PRÁCTICA
2.parola di vita luglio2012 - villa d'adige
Metodos de estudio
Cómo se si el video se subió a youtube
WordPress with Non Profits
Preentrega sisuniukanamaria
web 2.0: youtube
Top Ten Learning Theories for Digital and Collaborative Learning
Augusta 953
From individual’s digital competence to digitally competent learning organisa...
REFERENCIAS WORD
Presentacion adicciones
Técnicas de estudio
Publicidad

Similar a Inteligencia Artificial del Juego ABALONE (20)

PDF
PDF
62247853 cartilla-de-ajedrez
PDF
E book juegos para combatir el aburrimiento en tiempos de confinamiento
PDF
1 curso de iniciación
PDF
1 curso de iniciación
PDF
140685350 aperturas-semiabiertas-maestroajedrez
PPT
Juegos2
DOCX
Guía de ajedrez
PDF
Ajedrez para ninos_jose_luis_brasero
PPTX
Teoria de juegos - Juegos secuenciales y juego del pirata
PDF
247730438 ajedrez-para-ninos-jose-luis-brasero
PPTX
Ef3 delgado valdivia melanny jessenia mayo 05 producto 1
PDF
Conecta 4 en C
DOCX
Búsqueda entre adversarios
DOCX
Proyecto
PPTX
Busqueda entre adversarios
PPT
PPT
El ajedrez , un recurso educativo
PPTX
Presentación final del proyecto de POO
62247853 cartilla-de-ajedrez
E book juegos para combatir el aburrimiento en tiempos de confinamiento
1 curso de iniciación
1 curso de iniciación
140685350 aperturas-semiabiertas-maestroajedrez
Juegos2
Guía de ajedrez
Ajedrez para ninos_jose_luis_brasero
Teoria de juegos - Juegos secuenciales y juego del pirata
247730438 ajedrez-para-ninos-jose-luis-brasero
Ef3 delgado valdivia melanny jessenia mayo 05 producto 1
Conecta 4 en C
Búsqueda entre adversarios
Proyecto
Busqueda entre adversarios
El ajedrez , un recurso educativo
Presentación final del proyecto de POO

Más de SNPP (20)

PDF
proyecto electrico 1 plano de una instalacion.pdf
PDF
proyecto electrico 2 plano de una instalacion.pdf
PDF
RR00X_RESUMEN.pdf
PDF
RR_TAYI.pdf
PDF
1. panel de le ds
PDF
7. incubadora de huevos
PDF
6. visualizacion remota de consumo de agua en tiempo real
PDF
5. alimentador de animales domesticos smart feeder
PDF
3. radar medidor de velocidad
PDF
2. soft starter monofasico
PDF
Operadores y expresiones
PDF
6.2 cadenas de caracteres
PDF
6.1 vectores
PDF
5.5 instruccion for
PDF
5.4 instruccion do-while
PDF
5.3 instruccion while
PDF
5.2 instruccion switch
PDF
5.1 instruccion if-else
PDF
4. entrada y salida de datos
PDF
3.6 funciones de biblioteca
proyecto electrico 1 plano de una instalacion.pdf
proyecto electrico 2 plano de una instalacion.pdf
RR00X_RESUMEN.pdf
RR_TAYI.pdf
1. panel de le ds
7. incubadora de huevos
6. visualizacion remota de consumo de agua en tiempo real
5. alimentador de animales domesticos smart feeder
3. radar medidor de velocidad
2. soft starter monofasico
Operadores y expresiones
6.2 cadenas de caracteres
6.1 vectores
5.5 instruccion for
5.4 instruccion do-while
5.3 instruccion while
5.2 instruccion switch
5.1 instruccion if-else
4. entrada y salida de datos
3.6 funciones de biblioteca

Último (20)

PDF
Semana del 30 de junio al 04 de julio de 2025.pdf
PDF
Saldarriaga-Roa-Aprender-Arquitectura.pdf
PDF
Calendario socio productivo Baré ultimo.pdf
PDF
Act. 2.1 Recursos Naturales y su Clasificación..pdf
PPTX
MISCELANIA - constitución política 410-5.pptx
PDF
AMTD-609_FORMATOALUMNOTRABAJOFINAL602.pdf
PPTX
AT_04_Equipo_Gestión_Pedagógica_innovacion.pptx
PDF
Curso online para participar en exel o deribados
PPTX
El-Ingles-Una-Lengua-Directamente-Derivada-del-Latin.pptx
PPTX
Conferencia orientadora Sinapsis y Receptores.pptx
PPTX
teorias del pblamiento completo. pptx
PPTX
convulsiones.pptxiiuhbutghiopkhrfxdddxfvk
PPTX
13 y 14.pptxmjgyggguuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
PPTX
Derechos Reales Unidad ix facultad de con
PDF
Análisis de Comunidad | Seminario Espacio y Hábitat
PPTX
Plantilla Oficial bbvbcvbcvbcvbcvbcvbcbcvbcvb
PPTX
Diseño de proyectos de innovación pedagogica.pptx
PPTX
Presentacion de caso clinico (1).pptxhbbb
PPTX
Dispensaciones la garcia, el gobierno humano, etc
PDF
programa-regular-abril-julio-2025-ii (1).pdf
Semana del 30 de junio al 04 de julio de 2025.pdf
Saldarriaga-Roa-Aprender-Arquitectura.pdf
Calendario socio productivo Baré ultimo.pdf
Act. 2.1 Recursos Naturales y su Clasificación..pdf
MISCELANIA - constitución política 410-5.pptx
AMTD-609_FORMATOALUMNOTRABAJOFINAL602.pdf
AT_04_Equipo_Gestión_Pedagógica_innovacion.pptx
Curso online para participar en exel o deribados
El-Ingles-Una-Lengua-Directamente-Derivada-del-Latin.pptx
Conferencia orientadora Sinapsis y Receptores.pptx
teorias del pblamiento completo. pptx
convulsiones.pptxiiuhbutghiopkhrfxdddxfvk
13 y 14.pptxmjgyggguuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
Derechos Reales Unidad ix facultad de con
Análisis de Comunidad | Seminario Espacio y Hábitat
Plantilla Oficial bbvbcvbcvbcvbcvbcvbcbcvbcvb
Diseño de proyectos de innovación pedagogica.pptx
Presentacion de caso clinico (1).pptxhbbb
Dispensaciones la garcia, el gobierno humano, etc
programa-regular-abril-julio-2025-ii (1).pdf

Inteligencia Artificial del Juego ABALONE

  • 1. 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 <albertocolman81@gmail.com> Ram´ırez, Pedro <pedroramirez22@gmail.com> Trabajo Final AbaloneR 1 · 0 27 de junio de 2011
  • 2. ´INDICE 2 ´Indice 1. Introducci´on 3 2. Abalone 4 2.1. Conceptos b´asicos . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Movimientos posibles . . . . . . . . . . . . . . . . . . . . . . . . . 4 2.3. Jugadas Sumito y Situaciones Especiales . . . . . . . . . . . . . . 5 3. Algoritmo de juego utilizado 8 3.1. Parte l´ogica de la soluci´on . . . . . . . . . . . . . . . . . . . . . . 8 3.2. Movimiento de l´ınea . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.3. Movimiento de lado . . . . . . . . . . . . . . . . . . . . . . . . . 9 4. Elaboraci´on del entorno gr´afico 10 4.1. Entorno gr´afico y l´ogica . . . . . . . . . . . . . . . . . . . . . . . 10 4.2. Manejo de se˜nales y eventos . . . . . . . . . . . . . . . . . . . . . 11 4.3. Ilusi´on o que cosa . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 5. Inteligencia Artificial 12 5.1. B´usqueda Monte Carlo . . . . . . . . . . . . . . . . . . . . . . . . 12 5.2. Implementaci´on de la IA . . . . . . . . . . . . . . . . . . . . . . . 12 6. Implementaci´on M´aquina versus M´aquina 13 7. Puntos fuertes del algoritmo 13 8. Puntos d´ebiles del algoritmo 13 9. Dificultades principales encontradas en el desarrollo 14
  • 3. 1 Introducci´on 3 1. Introducci´on Por m´as de 3000 a˜nos 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 su pensamiento estrat´egico.Uno de estos juegos es abalone. Fue inventado en 1987 por Laurent Levi y Lalet Michel. Abalone pertenece al grupo de los cl´asicos 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 a´un famosos. La variedad de juegos diferentes aumenta m´as y m´as y va desde los juegos de cartas y juegos con dados de m´as extenso juego de sal´on que puede contener peones, azulejos, dados y cartas. Para jugar estos es para divertirse en grande, pero tambi´en es una competencia entre los jugadores. Una meta es desafiar a los oponentes y ganarles por trabajo estrategias sofisticadas e inteligentes. A menudo, el juego contiene los aspectos del azar, por ejemplo, tirar los dados o tomar una carta de una baraja. Uno no puede prever exactamente lo que suceder´a. As´ı, el juego puede ser m´as emocionante. Una categor´ıa especial de juegos son los juegos cl´asicos, llamada placa. Estos son juegos para dos jugadores en el que ambos jugadores tienen informaci´on perfecta, es decir, no hay cartas ocultas o alguna informaci´on oculta a otros. Otro aspecto importante es que no contienen ning´un tipo de acciones basadas en la suerte. Por lo tanto, los jugadores tienen un control absoluto sobre sus acciones. Sobre todo, el juego puede ser descrito en algunas frases. Las reglas son simples. Sin embargo, el n´umero de diferentes movimientos posibles es alto, lo que hace que el juego se vuelva complejo y un reto. Ejemplos famosos de estos juegos son el ajedrez y Go y por supuesto el abalone.
  • 4. 2 Abalone 4 2. Abalone En esta secci´on el juego ser´a explicado en detalle. En primer lugar, se da alguna informaci´on b´asica. Despu´es los posibles movimientos y luego en el juego, situaciones especiales se discuten. 2.1. Conceptos b´asicos El abalone es un juego de dos jugadores estrat´egico. El tablero de juego tiene una forma hexagonal con 61 campos. Cada jugador tiene 14 canicas. Un jugador tiene el rojo los, el otro las azules. Los dos jugadores tienen que moverse en las curvas. 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 varias formaciones de inicio de los m´armoles. Los dos m´as populares cu´ales son la formaci´on est´andar que se propone por los inventores del juego. El segundo se llama Daisy belga. Esta es una formaci´on de uso frecuente en torneos, porque las posiciones son m´as 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. M´ultiples canicas s´olo se puede mover si est´an adyacentes. Adem´as, todas las canicas se deben mover en la misma direcci´on. Es posible mover en l´ınea m´armoles, lo que significa que a lo largo de el eje de su posici´on actual (v´ease la figura 2.3). Otra posibilidad es hacer un paso de costado, es decir, una decisi´on que no a lo largo del eje de las canicas, pero hacia los lados (V´ease la figura 2.4).
  • 5. 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 costado se lleva a cabo el jugador s´olo puede mover los m´armoles un campo m´as. Un movimiento que se sigue permitiendo incluso si una fila de canicas del mismo color se divide por el movimiento. S´olo se mueve si los campos de las canicas que se mueven est´an vac´ıas. El movimiento en l´ınea es posible con una de las dos condiciones siguientes de requisito: O bien el campo detr´as de la canica ´ultima est´a vac´ıa o el jugador es capaz de realizar un movimiento Sumito. El movimiento Sumito es aquel en los que las canicas del oponente son empujadas. 2.3. Jugadas Sumito y Situaciones Especiales Un movimiento Sumitoes un movimiento en donde unas cuantas canicas del oponente son impulsados por los m´armoles del propio jugador. Una situaci´on Sumito se alcanza en caso de que hay una fila de canicas, donde en un lado s´olo hay m´armoles negros y en otro lado hay m´armoles blancos. Entre los m´armoles no debe haber una brecha. Si el n´umero de canicas de un jugador supera el n´umero de la otra m´armoles jugador se encuentra en una situaci´on de Sumito. Para determinar esta situaci´on para cada jugador a lo sumo tres canicas de cada jugador se tienen en cuenta ya que un jugador no puede moverse m´as de tres canicas por turno. En realidad, hay s´olo existen tres diferentes situaciones Sumito: √ 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 jugador negro puede elegir uno de ellos moviendo una fila de sus canicas a la derecha.
  • 6. 2.3 Jugadas Sumito y Situaciones Especiales 6 Figura 3: Situaciones Sumito Otro t´ermino importante en el abalone es la situaci´on llamada Pac. En esa situaci´on de ninguno de los jugadores es capaz de realizar un movimiento Sumito, porque el n´umero 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 m´armoles en la parte superior del tablero se disponen en una situaci´on pac simple de 2 contra 2. Los m´armoles en el centro se encuentran en una situaci´on Pac tambi´en. Aunque hay 4 canicas negro contra 3 bolas blancas es una situaci´on Pac. Esto se debe a que a un jugador se le permite mover 3 canicas como m´aximo. Por lo tanto, es una situaci´on Pac de 3 en 3.
  • 7. 2.3 Jugadas Sumito y Situaciones Especiales 7 La configuraci´on de canicas en el fondo hay situaci´on Sumito, porque no hay no hay espacio libre detr´as del m´armol blanco. Para lograr el objetivo del juego, se debe expulsar seis canicas del oponente fuera del tablero, el jugador tiene que realizar un movimiento Sumito en una posici´on en donde el oponente est´a en el borde del tablero de juego. Despu´es de este movimiento una de las canicas del oponente se pierde. Figura 5: Situaci´on de ataque, muestra un movimiento de expulsi´on
  • 8. 3 Algoritmo de juego utilizado 8 3. Algoritmo de juego utilizado Primeramente explicaremos la parte l´ogica de nuestro juego, como se real- iz´o una divisi´on o abstracci´on de la parte l´ogica y la interfaz gr´afica el cual fue realizado en GTK+. 3.1. Parte l´ogica de la soluci´on B´asicamente se utiliz´o una matriz donde se representaban mediante carac- teres las bolillas rojas(R) , azules(A), espacios vacios(O) y las posiciones inv´ali- das( ); se realiza la carga de la matriz mediante un archivo de texto, con el cual se 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 se cumplan 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 an´alisis, por lo tanto al tener un inicio o sea alguna bolilla roja o azul(representado por “R” y “A” en nuestra matriz respectivamente) y un destino(optamos siempre que el destino es un espacio vac´ıo “O”) se podr´ıa analizar lo intentado y ejecutar o no tal movimiento. La l´ogica utilizada se podr´ıa resumir en un lenguaje sencillo de la siguiente manera: 1. Capturo posici´on inicial, toda vez que sea“R” o “A”. 2. Capturo posici´on final o destino toda vez que sea un lugar vac´ıo “O”. 3. Llamo a la funci´on que analiza si se encuentra dentro de los l´ımites acept- ables, es decir como m´aximo tres bolillas de un color con dos bolillas del otro color, esto hace como m´aximo cinco posiciones incluyendo el destino. 4. Si se encuentra entre los l´ımites, obtengo la zona a analizar, aqu´ı cuento la cantidad de rojos “R”, azules “A” y espacios vac´ıos “O” encontrados, si los rojos y azules est´an todos adyacentes entre s´ı, si la cantidad de espacios vac´ıos encontrados es cero y si la cantidad de la bolilla a querer mover(condicionado por el turno del jugador sea rojo o azul) es mayor ejecuto 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 solo actualiza la matriz logrando el objetivo, adem´as de esto el algoritmo utiliza un tipo de orientaci´on, es decir hacia donde se debe analizar, definida por la zona capturada, esta orientaci´on se da de seis formas, superior, inferior, derecho, izquierdo, y las combinaciones de estas.
  • 9. 3.3 Movimiento de lado 9 3.3. Movimiento de lado Este caso es muy similar a lo descrito anteriormente, s´olo que aqu´ı nos vale- mos de una se˜nal del entorno gr´afico de GTK+, primero ablaremos de la l´ogica, b´asicamente el jugador se posiciona sobre una bolilla(origen) y utiliza el scroll para 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 la cantidad de scroll dados se da la secuencia de selecci´on 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 ver´a que las bolillas se seleccionan con esta secuencia; en el fondo de la l´ogica esto es un movimiento simple(un origen y un destino), s´olo que al obtener la cantidad de scroll dados se analiza la zona a querer mover sean espacios vacios, al hacer scroll sobre la posicion de destino se verifica que el destino sea un espacio vac´ıo, y las adyacencias de izquierda a derecha tambi´en, dadas por la cantidad que el contador 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 item anterior El algoritmo es de vuelta muy sencillo, esta vez vali´endonos del GTK+ y las se˜nales del scroll, se tiene inicio, cantidad de scroll, destino, analizador, ejecutor, de vuelta analizador arroja un true o false aceptando o no la jugada y ejecutor tan s´olo actualiza la matriz.
  • 10. 4 Elaboraci´on del entorno gr´afico 10 4. Elaboraci´on del entorno gr´afico El entorno gr´afico como se comento fu´e realizado en GTK+, es un caso men- cionar que nos valimos de herramientas para la elaboraci´on de esta, comentando y analizando entre el compa˜nero de grupo nos hicimos la siguiente pregunta, al querer crear paginas web nos topamos con editores para ello(introducci´on a la inform´atica), al crear una base de datos sencillo nos topamos con editores para MySql(teor´ıa y aplicaci´on a la inform´atica I), y al querer realizar entornos gr´afi- cos..Es por ello que un primer enfoque fue descargar tutoriales y ejemplos de c´odigos en GTK+, el cual nos ayudo bastante para entender el funcionamento del mismo, como maneja las se˜nales, los eventos, los empaquetamientos ,etc. Pero al intentar realizar esto a gran escala se nos volvi´o algo tedioso escribir tantas l´ıneas de c´odigo para ello, por lo tanto en el tiempo de investigaci´on encontramos a GLADE, es un programa que permite crear, manipular, person- alizar entornos gr´aficos en GTK+, de manera totalmente gr´afica, fue de bastante ayuda para la elaboraci´on de todo el trabajo. As´ı que vale la pena recomendarlo en su versi´on 2.12, pu´es las 3.x utilizan el lenguaje xml para su elaboraci´on si bien es lo mismo porque s´olo se deben utilizar librer´ıas de glade para utilizar- los, se escogi´o los 2.x en donde el c´odigo generado es totalmente en C, una vez obtenido esto tan s´olo resta manejar las se˜nales y los eventos de manera ´optima. 4.1. Entorno gr´afico y l´ogica Bueno una vez concretado la parte l´ogica del juego nos enfocamos al en- torno gr´afico y c´omo “mezclar” de la mejor manera ambas, primero generamos el tablero con gtk table atach, con el cual representamos una matriz de 21*11, y a las posicones v´alidas del juego(bolillas rojas, azules y vacios), relacionamos una caja de eventos, que saltan s´olo con los click y el scroll mencionado, para llevar a cabo movimiento de linea y lado respectivamente, as´ı a cada caja de eventos, relacionamos una posic´on de nuestra matriz, y cada se˜nal generada por el usuario nos sirve para manipular nuestra matriz y utilizarla como material de memoria, en realidad el GTK+ lo manejamos como un vector de 231 elemem- tos, en el c´odigo se ver´a la funci´on mat2celda y la funci´on celda2mat que realizan las conversiones de la matriz al vector de GTK+ y viceversa, adem´as se encontrar´a la funci´on posici´on valida que arroja true o false si la posicion es v´alida o no, es decir como se tienen s´olo 61 celdas v´alidas en el abalone, y utilizamos una matriz de 21*11 que totalizan 231 elementos existe esta funci´on que indica si tal posici´on es del abalone o una parte del entorno gr´afico con- siderado como inv´alido, esto nos sirve para la carga de im´agenes, si es inv´alido carga una imagen gris, si en tal posici´on se encuentra una “R”, se carga una imagen que simula una bolilla roja, si en tal posici´on se encuentra una“A”, se carga una imagen que simula una bolilla azul, y si se encuentra una “O”, se carga una imagen que da la ilusi´on de una posici´on vac´ıa.
  • 11. 4.2 Manejo de se˜nales y eventos 11 4.2. Manejo de se˜nales y eventos Como se mencion´o, mediante la funcion posicion valida se relacion´o los 61 campos del abalone a una caja de eventos, si el usuario hace click sobre una de estas posiciones, se genera una se˜nal que es atrapada y analizada para realizar una jugada de l´ınea, si el usuario realiza scroll’s, estas se˜nales son atrapadas y analizadas para llevar a cabo el movimiento de lado, con esto logramos separar l´ogicamante las jugadas mencionadas para atacar al problema de la forma “di- vide y vencer´as”, 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 se analiza a la matriz con la l´ogica implementada, si existe algo favorable(jugada aceptada, bolillas seleccionadas, etc) son enviados de vuelta a GTK+ mediante la funci´on mat2celda, es decir estas funciones son el traductor entre GTK+ y nuestra l´ogica ya sea para manipular la matriz o actualizar el GTK+. 4.3. Ilusi´on o que cosa Ahora veremos como el usuario puede darse cuenta c´omo se seleccionan las bolillas, al hacer un click sobre una bolilla, se realiza en el GTK+ un cambio de imagen, que da la ilusi´on que est´a seleccionado, s´olo se cambia la imagen, esto tambi´en se realiza cuando se realiza cualquier tipo movimiento, todo esto sin dejar de lado a nuestro elemento de memoria, la matriz al encontrar una bolilla rojo “R”, se cambia por una imagen verde para dar la ilusi´on de selecci´on, y a la matriz se lo carga con “V” para recordar que esa bolilla est´a seleccionada, lo mismo ocurre para deseleccionar.
  • 12. 5 Inteligencia Artificial 12 5. Inteligencia Artificial La inteligencia artificial que realizamos tiene tres niveles de complejidad, easy, medium, hard, esto se describe a continuaci´on. 5.1. B´usqueda Monte Carlo La idea general es simular un cierto n´umero de juegos a partir de la actual situaci´on real sobre el tablero de juego. Para cada posible movimiento una serie de juegos son simuladas y los resultados de cada uno de estos juegos son puntu- ados. Despu´es de todas simulaciones terminadas, la inteligencia artificial toma la decisi´on con el mayor puntuado ya que es probablemente el movimiento m´as prometedor. Para mayor comodidad en la b´usqueda de Monte-Carlo se explica[1] por medio de seudo c´odigo. 1. Obtener todos los movimientos posibles en la situaci´on actual del juego 2. Para cada uno de estos movimientos: Tomar el movimiento actual Simulaci´on de una serie de juegos con la situaci´on real Evaluar el resultado de cada juego simulado que acumulan ellos 3. Tome la decisi´on con el mayor valor para el juego normal los jugadores que eligen al azar de un movimiento de todos los movimientos posibles se utilizan en la b´usqueda simple de Monte-Carlo. 5.2. Implementaci´on de la IA Con lo mencionado anteriormente se implementa la b´usqueda tipo monte- carlo para que la IA realice su mejor jugada, lo que se hace es sencillamente se punt´ua las bolillas de acuerdo a la distancia del centro del tablero del abalone, as´ı mientras m´as alejado se est´a del mismo esta ser´a la jugada a realizar, pues mientras se aleje del borde del tablero es m´as dif´ıcil hecharlo del tablero, una vez hecho esto se da una puntuaci´on grande a una judada de empuje y una mayor a´un a una jugada para hechar fuera del tablero, es decir, si se tiene una situaci´on de ir al centro, empujar o hechar fuera del tablero, la l´ogica opta por esta ultima, pu´es su objetivo principal es hechar toda vez que pueda las canicas como primera opci´on. Esto se lleva a cabo con un archivo de texto en el cual est´an puntuados radialmente del centro las bolillas, as´ı por cada jugada simula- da se eval´ua las situaciones, se las punt´ua y despu´es de todas las simulaciones se toma una decisi´on.
  • 13. 6 Implementaci´on M´aquina versus M´aquina 13 6. Implementaci´on M´aquina versus M´aquina El juego entre dos ordenadores se llev´o a cabo mediante las especificaciones en xml dadas por los profesores, los parsers para llevar a cabo esto fueron inves- tigados y luego implementados mediante tutoriales encontrados en la web, he aqu´ı nuestra fuente de conocimiento el cual lo explicar´a mejor de lo que nosotros lo har´ıamos, por favor pinche aqu´ı. 7. Puntos fuertes del algoritmo La jugada de l´ınea la realiza una sola funci´on, lo mismo para la jugada de la- do; una buena separaci´on entre los dos tipos de jugadas, un entorno gr´afico bien estudiado y bastante amigable a nuestro criterio, con opciones de elecci´on del tipo de tablero que desea jugar(standard, belgian), opciones de reinicio de juego, opciones de elecci´on del tipo de juego(humano versus humano, humano versus m´aquina y m´aquina versus m´aquina), adem´as una ayuda o help para ayudar a entender el juego al usuario, como tambi´en los acerca de o about de los creadores del juego, efectos de selecci´on y deselecci´on de las bolillas, opciones de nivel de juego sea easy(f´acil), medium(medio) y hard(experto) en el tipo de jugada hu- mano versus m´aquina, mensajes de advertencia al intentar cerrar las ventanas, pantalla de bienvenida al juego abalone(splash), opciones muy amigable de se- lecci´on de turno, carga de nombre de jugador, selecci´on del directorio donde se guardar´an los archivos xml, en el tipo de juego m´aquina versus m´aquina, opci´on de juego humano versus humano que es para una pr´actica del juego, as´ı como se practica el ajedrez contra “uno mismo” esta opci´on est´a disponible en el abalone. 8. Puntos d´ebiles del algoritmo Una no muy buena implementaci´on del tipo de juego m´aquina versus m´aquina, por falta de tiempo para una comprensi´on completa del xml(a profundidad), funciona pero falta mejorar, es lo que se llama the first approx :).
  • 14. 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 c´odigo es que al jugar el juego humano versus m´aquina de repente se mataba el programa; si, de la nada explotaba, nos llev´o dos d´ıas encontrar el error, cuando las esperanzas estaban por el piso un compa˜nero recordo las palabras sabias de un profesor, “es importante utilizar fclose”, si es as´ı, por m´as que el sistema operativo se encarga de cerrar ´estos una vez finalizado el programa, esto no ocurre en el tiempo de ejecuci´on; el dolor de cabeza de d´ıas era porque se nos olvid´o cerrar un archivo(el de puntuaci´on), de la nada y sin aviso previo el programa se cerraba, y la soluci´on era s´olo eso un fclose, as´ı que gracias Carlos Cardozo. Adem´as de esto hubo inconvenientes menores, como que se llegaba a un punto en donde se deb´ıa cambiar gran parte de la estructura constru´ıda por no encontrar una soluci´on, un cambio casi completo de la forma de cargar el tablero abalone, utilizando los elementos de memoria auxiliar como el archivo de texto con el cual se logr´o el estilo belgian y standard. Y vale la pena mencionar que se nos facilit´o la realizaci´on del entorno gr´afico utilizando el GLADE 2.12 el cual nos ahorr´o miles de l´ıneas de c´odigo, una amigable 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 Campos and Thibault Langlois. [3] Multi-Player Games: Algorithms and Approaches, Nathan Reed Sturte- vant. [4] Inteligencia Artificial, Un Enfoque Moderno, Stuart J. Russell y Peter Norvig. Ultima revisi´on 27 de junio de 2011