Juego de las Damas

Anuncio
INGENIERÍA DE TELECOMUNICACIÓN
Inteligencia en redes de comunicaciones
Juego de las Damas
Arias Fernández, Carlos
García del Amo, Isidro
Inteligencia en Redes de Comunicaciones
Juego de las Damas
Cómo se originó realmente el juego de las Damas
Los historiadores afirmaron hasta 1986 que el juego de las damas era un invento
francés. Otros decían incluso que era un invento de los egipcios. Y así hasta la fecha
nadie sabía su origen. A pesar de que la mayoría de los importantes libros fueron
escritos en España desde el año 1547 hasta 1901, España no fue tomada en cuenta.
Después de una investigación de diez años por parte de Govert Westerveld
(Monnickendam - Holanda, 1947) , la cosa ha cambiado en beneficio de los españoles, y
es que ahora reconocen que efectivamente España fue la madre creadora del juego de
las Damas, gracias a los árabes. Existen básicamente dos formas de jugar. Una es el
juego español con 12 fichas, y otro es el juego con 20 fichas.
Fue Alfonso X, gran impulsor de la cultura y aún de la amalgama de estas, quién
primero realiza un compendio de los juegos conocidos y practicados en su época, que
dio lugar al celebre "Juegos de ajedrez, dados y tablas" publicado en Sevilla en el año
1283.
En tan reconocida obra, única en el mundo antiguo, no se da cuenta ni descripción del
juego de Damas que conocemos, lo que nos indica claramente que ni siquiera muy
avanzado el siglo XIII se tenía noticias de tal juego y por lo tanto es de invención
posterior. Nada tienen que ver otros juegos descritos, el más próximo de los cuales es el
alquerque, por lo que las suposiciones de si alguno de estos nombres (¿Tablas?)
corresponde a las Damas carecen de fundamento. Esto termina también con la falacia de
que el juego de Damas es de mayor antigüedad que el Ajedrez.
El ajedrez, por ser muy conocido, no es preciso describirle y por supuesto también es
conocido por Alfonso X, que lo sitúa en primer lugar. El tipo de tablero y piezas es de
origen antiguo, probablemente oriental, llegando a España a través de los árabes, desde
donde se difundió al resto del mundo. Lo primero que hago notar es que el juego traído
por los árabes no es el ajedrez que conocemos, sino el antiguo ajedrez oriental, el cual
fue modificado sustancialmente en España originando el ajedrez moderno que se juega
en todo el mundo. También en el ajedrez las primeras obras escritas (aparte de Alfonso
X) son españolas, como el célebre incunable de Lucena, punto de partida del ajedrez
actual. El antiguo ajedrez es anterior a las Damas, pero seguramente también el ajedrez
actual, aunque puede que no por mucho espacio de tiempo; el incunable de Lucena es
más antiguo que el Torquemada, pero las fechas son próximas, aunque las aportaciones
de uno a otro juego (del Ajedrez a las Damas, ya que en sentido contrario no existen)
como es el mismo tablero de juego, indican claramente que el Ajedrez moderno se
originó en tiempo algo (aunque relativamente poco) anterior a las Damas.
En el estado que se encontraban los juegos después de Alfonso X el Sabio, se tenía por
un lado el Ajedrez, cada vez más pujante, y por otro el Alquerque, bastante limitado en
su espacio de juego y con tablero en desuso, ya que además era relativamente fácil de
jugar para expertos.
Esta es la situación que hizo, en el siglo XV, que el tablero bicolor se impusiera
definitivamente y que alguien tuviese la idea de situar las doce piezas del alquerque
(para cada bando) en filas opuestas del tablero de ajedrez, cubriendo por tanto un solo
color y haciendo que de forma natural se conservase solamente el movimiento diagonal
2
Inteligencia en Redes de Comunicaciones
Juego de las Damas
de las piezas, siguiendo con las capturas mediante salto. Es muy posible que en un
principio las fichas fuesen los peones del ajedrez, sustituyendo por pieza superior si se
coronaba; la primera descripción gráfica del tablero de juego (Timoneda) representa a
las fichas como peones de ajedrez.
En tal situación el armazón del juego ya estaba consolidado, aunque las características
que le harían único vinieron después; en primer lugar se introdujo el concepto de
coronación al llegar a primera fila contraria, sin duda proveniente del ajedrez moderno.
Posteriormente se dotó a la pieza coronada de una fuerza inusual, haciendo que pudiese
mover en cualquier sentido diagonal y con cualquier desplazamiento o captura si esta
fuera posible. Estas dos últimas y geniales aportaciones configuraron definitivamente el
juego de Damas. Por tanto el juego de Damas es el resultado de:
•
Los peones y movimiento diagonal (no los otros) del alquerque español.
•
La forma de captura mediante salto del alquerque.
•
El tablero de ajedrez
•
La promoción de pieza en otra superior, idea proveniente del ajedrez.
•
Añadiendo los siguientes conceptos:
•
Disposición inicial de los peones en el tablero.
•
Exclusión de todo movimiento no diagonal (utilizar casillas de un solo color).
•
Exclusión de movimiento retrogrado para el peón (en Alquerque es posible).
•
Movimiento largo y en cualquier sentido diagonal de la pieza coronada, con
semejanza en el alfil del ajedrez
•
Capturas con pieza coronada mezcla de dos conceptos:
•
El movimiento largo tipo alfil
•
El salto tipo Alquerque
•
Libertad de salto de captura a cualquier casilla posterior libre, no contemplado
anteriormente en otro juego.
Por lo tanto el juego de Damas es la conjunción del Ajedrez con el Alquerque español,
aumentado con nuevos y revolucionarios conceptos que harían de las Damas un juego
único, nuevo y triunfante. Esta amalgama queda definitivamente establecida en el
último tercio del siglo XV, algo posterior a la creación definitiva del ajedrez actual.
3
Inteligencia en Redes de Comunicaciones
Juego de las Damas
Algoritmos de búsqueda
Algunos juegos como las damas o el ajedrez, por tener información completa de inicio
son idóneos para la búsqueda de caminos en un sistema complejo, pudiendo después
aplicar lo descubierto a otros campos de la computación o de la ciencia en general.
El primer juego que se intento computarizar y para el que se desarrolló un programa fue
precisamente el juego de las damas. Posteriormente otros juegos fueron tratados en este
aspecto, llegando al momento actual en que es el ajedrez el más estudiado y al que
mayores esfuerzos se dedican en pos de la consecución del jugador perfecto, como
sucedió con los programas Deep Blue y actualmente, 3DFritz.
Las técnicas y algoritmos que se usan para todos estos juegos son básicamente los
mismos, cambiando solo alguna particularidad del juego tratado, como la generación de
jugadas, etc. Por todo ello, los algoritmos que se detallarán a continuación son válidos
para las damas, el ajedrez...
Ya en los años 50, Shannon describió los mecanismos que podían usarse en un
programa jugara al ajedrez y Turing describió un programa para jugar al ajedrez pero
no lo construyó. En los 60, Samuel construyó el primer programa de juegos importante
y operativo, el cual jugaba a las damas y podía aprender de sus errores para mejorar su
comportamiento.
Los juegos proporcionan una tarea estructurada en la que es muy fácil medir el éxito o
el fracaso. En comparación con otras aplicaciones de inteligencia artificial, por ejemplo
comprensión del lenguaje, los juegos no necesitan grandes cantidades de conocimiento.
En un primer momento se pensó que se podrían resolver por búsqueda exhaustiva en el
árbol del juego, es decir, un árbol que contenga todos los movimientos posibles de
ambos jugadores. Considerando por ejemplo el juego de las damas, en el comienzo de la
partida un jugador puede realizar 7 movimientos, por lo que en el árbol de juego habría
49 nodos en el segundo nivel. Por el contrario, en el juego de ajedrez, en el comienzo de
la partida un jugador puede realizar 20 movimientos, por lo que en el árbol de juego
habría 400 nodos en el segundo nivel, así la complejidad aumentaría exponencialmente
en cada nivel de profundidad del árbol Resulta evidente que una simple búsqueda
directa no es posible de realizar en la práctica, y por lo tanto es necesario algún tipo de
procedimiento de búsqueda heurística.
Resulta evidente que la elección del camino a seguir será más acertada cuántas más
capas se exploren antes de tomar la decisión. Se utiliza una función de evaluación
estática (heurística) para elegir el movimiento más prometedor. Por ejemplo, Turing usó
la sencilla función B/N (piezas blancas / piezas negras) para evaluar una posición dada
de un tablero de ajedrez. Shannon utilizó una función lineal de funciones de evaluación
simples para evaluar un tablero de damas:
c1 * ventaja piezas + c2 * avance + c3 * amenazas dobles + ...
En la función anterior, con un mecanismo de aprendizaje, los pesos o ponderaciones ci
se incrementan o disminuyen siempre que sus componentes sugieran movimientos que
conducen a la victoria o al fracaso respectivamente.
4
Inteligencia en Redes de Comunicaciones
Juego de las Damas
En juegos y otros dominios la solución se encuentra mediante un proceso de búsqueda
que debe combinarse de ser posible con una técnica directa. Por ejemplo en el ajedrez,
las aperturas y los finales están ya estudiados y se almacenan en una base de datos.
También sucede esto en las damas, en los que suele almacenarse en una base de datos
los finales de las partidas,
Cabe distinguir, ahora, para desarrollar los algoritmos o estrategias a utilizar, entre
juegos sin adversario y juegos con adversario:
Juegos sin adversario: estrategia A*
Para juegos simples unipersonales (por ejemplo puzzle-8) puede usarse el algoritmo A*
(Hart, 1968) que se describe en esta sección. Este algoritmo implementa una búsqueda
primero el mejor.
Se utiliza una función de evaluación estática f formada por:
f=g+h
La función g es una función de coste de llegar del estado inicial al estado
evaluado.
La función h es una estimación del coste de llegar desde el estado evaluado al
estado final u objetivo del juego.
En cada paso del algoritmo se selecciona el mejor nodo que no se ha expandido hasta el
momento, es decir, aquel que tiene menor valor de función f. Este nodo se agrega a una
lista de nodos explorados y sus nodos sucesores se agregan a la lista de nodos
pendientes de ser explorados...
Juegos con adversario: algoritmo Minimax
En juegos bipersonales el algoritmo más usado es el denominado Minimax. El
procedimiento de búsqueda Minimax es una búsqueda en profundidad (DFS) de
profundidad limitada.
La idea consiste en comenzar en la posición actual y usar el generador de movimientos
posibles para generar las posibles posiciones sucesivas hasta un cierto límite de niveles.
A continuación se aplica la función de evaluación estática a las posiciones obtenidas y
se elige la mejor posición para el jugador correspondiente, llevando los valores un nivel
hacia atrás para continuar la evaluación en todos los niveles anteriores. Se supone una
función de evaluación estática que devuelve valores elevados para indicar buenas
situaciones y valores negativos para indicar buenas situaciones para el oponente. Visto
de esta manera, la meta es maximizar el valor de la función estática de la siguiente
posición de tablero.
El nombre del algoritmo deriva de considerar que, dada una función estática que
devuelve valores en relación al jugador maximizante, éste procura maximizar su valor
mientras que su oponente procura minimizarlo. En un árbol de juego donde los valores
de la función estática están en relación al jugador maximizante, se maximiza y
minimiza alternadamente de un nivel a otro.
5
Inteligencia en Redes de Comunicaciones
Juego de las Damas
Poda alfa-beta de la búsqueda Minimax
Los procedimientos de búsqueda en profundidad (DFS) pueden mejorar su eficiencia
usando una técnica de ‘branch and bound’ (ramificación y acotación), con la cual una
solución parcial se abandona cuando se comprueba que es peor que otra solución
conocida o umbral. La estrategia de poda del algoritmo Minimax es llamada poda alfabeta, puesto que dado que existen dos jugadores (maximizador y minimizador), existen
dos valores umbrales alfa y beta para acotar la búsqueda de cada uno respectivamente:
el valor alfa representa la cota inferior del valor que puede asignarse en último término
a un nodo maximizante y el valor beta representa la cota superior del valor que puede
asignarse en último término a un nodo minimizante.
Otros algoritmos
El algoritmo Minimax, aún con los refinamientos descriptos, contiene algunos aspectos
problemáticos, como por ejemplo, no considera el tiempo y confía fuertemente en la
suposición de que el oponente elija el camino óptimo. Por ello, otros algoritmos que
pueden utilizarse pueden ser:
Minimax dependiente de adversario
Según realiza la exploración del árbol de juego, el algoritmo Minimax supone que el
oponente siempre elige el camino óptimo. Si se está frente a un adversario muy
inteligente, éste podría llegar a explorar más capas que las exploradas por el algoritmo y
por lo tanto tomar otra decisión que la supuesta. Aún suponiendo que el algoritmo
siempre explora a una mayor profundidad que el adversario, éste último puede
equivocarse y no elegir el camino óptimo. La consecuencia es que el algoritmo elige el
movimiento basándose en una suposición errada. Ante una situación de derrota, según
sugiere Berliner (1977), podría ser mejor asumir el riesgo de que el oponente puede
cometer un error. Por tanto, cuando se debe elegir entre dos movimientos buenos, uno
ligeramente mejor que el otro, podría resultar mejor elegir el menos mejor si al asumir
el riesgo de que el oponente se equivoque nos conduce a una situación muchos más
ventajosa. Pero para tomar esta clase de decisiones correctamente, el algoritmo debería
modelar el estilo de juego de cada oponente en particular. Esto permitiría estimar la
probabilidad de que cometa distintos errores. Sin lugar a dudas, esto es muy difícil de
lograr y se necesita contar con técnicas de aprendizaje para que el algoritmo obtenga
conocimiento sobre su oponente a lo largo del juego.
Profundización iterativa
La profundización iterativa es una idea que se utilizó por primera vez en un programa
llamado CHESS 4.5 (Slate y Atkin, 1977). El nombre profundización iterativa hace
referencia a que se realizan iteraciones de búsquedas cada vez más profundas.
La principal razón para realizar iteraciones de búsquedas de diferentes profundidades
incrementales, en lugar de realizar una búsqueda a la profundidad deseada, es que los
programas de juegos pueden estar sujetos a restricciones de tiempo. Mediante esta
técnica la primera iteración realiza una búsqueda de profundidad uno, la segunda
iteración realiza una búsqueda de profundidad dos, etc. hasta que el tiempo destinado al
movimiento se agote. El problema de la limitación de tiempo debe considerarse en
juegos como el ajedrez, aunque no en el juego de las damas, por lo menos, en lo que a
las reglas del juego se refiere.
6
Inteligencia en Redes de Comunicaciones
Juego de las Damas
Algoritmos utilizados
Para el desarrollo de este programa se ha utilizado un algoritmo Minimax, fijando un
nivel máximo de profundidad en el árbol de seis niveles, que corresponde a tres
movimientos de la máquina más los movimientos de respuesta del adversario.
En cada nodo del árbol se almacena la información correspondiente al estado de la
partida si se llevase a cabo dicho movimiento. Por ello, recorriendo el árbol se busca el
movimiento que maximice la diferencia entre el número de piezas con las que juega la
máquina y el número de piezas con las que juega el adversario (el usuario). Debemos
tener en cuenta para determinar el número de piezas que pueden existir dos tipos de
fichas para cada jugador: peones (piezas de salida) y damas. Debido a las mayores
posibilidades de movimiento y acción de la dama, se le ha dado un peso a cada ficha: 1
punto por peón y 3 por dama. Así, se maximiza, para todos los movimientos posibles
para la máquina y solamente para el mejor o los mejores para el adversario, la función
3*damasMaquina + peonesMaquina - 3*damasUsuario - peonesUsuaruio
Es decir, se considerarán todos los movimientos que puede realizar la máquina, pero
consideraremos que el usuario hará el mejor de sus movimientos, para ello,
recorreremos el árbol de movimientos solamente para el mejor (o los mejores si el
camino no es único) de los movimientos para cada caso del usuario.
Si el resultado de la búsqueda del mejor movimiento no es único, entonces se ha
recurrido a la aleatoriedad para determinar el movimiento a realizar. A cada uno de
estos movimientos posibles se le asigna un peso dependiendo del número de nodos del
último nivel de profundidad (que dependan de él) que permitan llegar a un máximo de
la función explicada anteriormente. Por tanto, cuantos más caminos llevan a dicho
resultado, mayor será la probabilidad de seguir ese camino. Esta aleatoriedad permite
que la máquina no sea tan determinista ante situaciones idénticas desde el punto de vista
del análisis del árbol de movimientos.
El gestor de jugadas lleva una particularidad en este juego en relación con el ajedrez, ya
que ciertos movimientos son obligatorios (en el juego de las Damas, es obligatorio el
comer piezas si se puede), y dentro de varios movimientos obligatorios habrá que elegir
uno de ellos, motivo por el que se aplicó el dar pesos a cada tipo de ficha, como se
indicó anteriormente.
Implementación
El programa fue desarrollado en Java, utilizando un entorno de desarrollo Java 2 SDK
1.3.1. El programa permite al usuario elegir con que fichas jugar, teniendo en cuenta
que de cara al interfaz gráfico se han sustituido las piezas blancas por amarillas y las
negras por azules, siendo por tanto las amarillas las que mueven primero al comenzar la
partida.
Para que el usuario realice un movimiento, debe pulsar la casilla inicial y después la
casilla final haciendo un click simple con el ratón. Si el movimiento no es posible
(porque no sea un movimiento posible del juego, o siendo posible, hay algún otro
7
Inteligencia en Redes de Comunicaciones
Juego de las Damas
movimiento que es obligatorio y el actual no lo es), se muestra una ventana de dialogo
al usuario indicándole esta situación e invitando a repetir el movimiento.
Los movimientos se almacenan en los nodos de un árbol n-ario (pues el número de
jugadas nunca es fijo) para lo que se han utilizado vectores. Para crear el árbol y
recorrerlo para determinar el mejor movimiento posible se utilizan métodos recursivos
para permitir variar la profundidad del árbol.
El programa está formado por las siguientes clases:
DamasApp.java
•
Clase que muestra la primera ventana de la aplicación
para elegir piezas blancas o negras.
Tablero.java
•
Clase que se encarga de inicializar el interfaz gráfico y
de recoger los eventos del ratón y pasar la información
correspondiente al gestor del juego, la clase Damas.
Interfaz_tablero.java
•
Clase que muestra por pantalla el tablero del juego y
las piezas en la posición correspondiente en cada
momento.
Damas.java
•
Clase que gestiona la partida. Contiene información
del estado actual de la partida, comprueba que el
movimiento realizado por el usuario sea correcto, y
contiene una referencia a Arbol_Mov, árbol con los
movimientos del juego.
Arbol_Mov.java
•
Clase con estructura de árbol n-ario con información
de todos los movimientos posibles. Permite elegir un
movimiento (considerado óptimo) para la máquina
mediante un algoritmo minimax. Cada nodo del árbol
es de la clase Movimiento.
Movimiento.java
•
Clase que contiene la información necesaria para cada
movimiento, como casilla inicial, casilla final, número
de piezas que quedan en el tablero...
8
Inteligencia en Redes de Comunicaciones
Juego de las Damas
Conclusiones
Con el fin de probar la inteligencia del programa desarrollado, se han realizado pruebas
con varios niveles de profundidad del árbol de movimientos, obteniéndose mejores
resultados del juego de la máquina al aumentar este nivel.
Se ha fijado en 6 niveles de profundidad, ya que con 8 niveles no siempre puede crearse
el árbol de movimientos por falta de memoria. Por ello, se ha optado con utilizar 6
niveles en el programa. Inclusive con 6 niveles de profundidad, dependiendo de si el
número de damas de ambos jugadores es alto, no siempre ha sido posible crear el árbol,
saltando un java.lang.OutOfMemoryException, excepción que solamente se produce
cuando ni el GarbageCollector puede liberar la cantidad de memoria requerida. En el
caso de que sea imposible crear el árbol de movimientos, se ha optado por intentar crear
el árbol con menor profundidad (4 niveles, 2 por cada jugador). De este modo, aunque
se barajen menos posibilidades, podrá seguir siendo un buen movimiento por observar 4
movimientos hacia el futuro.
Cabe destacar que el tiempo de respuesta es prácticamente nulo siempre que el número
de damas en el tablero no sea significativo.
No se han desarrollado técnicas para detectar empates, aunque la partida pueda seguir
llevándose a cabo, como por ejemplo, dos damas contra una dama, situación que sólo
tendría un ganador si se cometiese un gran e improbable error de algún jugador.
En una pequeña comparativa del juego de las Damas con el Ajedrez, podemos señalar
que mientras que en el Ajedrez es mayor la complejidad y el tamaño del árbol en
anchura (más posibles movimientos en cada nivel del árbol), en las Damas es mayor la
complejidad en el desarrollo y creación del árbol de movimientos, ya que una pieza
debe seguir comiendo piezas rivales mientras pueda, y en el Ajedrez una pieza
solamente comerá una pieza contraria, no siendo además este movimiento obligatorio.
La construcción del árbol ha sido una de las tareas más complejas que se han
desarrollado en esta práctica.
Muchos programas encontrados que simulan un jugador de Damas (al igual que los
programas de Ajedrez), utilizan bases de datos para mejorar los últimos movimientos de
las partidas, cuando ya quedan pocas piezas sobre el tablero. De esta forma, pueden
almacenarse finales de partidas ya jugadas y tomar un camino fijo hacia la victoria. Para
este programa no se ha seguido esta técnica ya que se ha optado por un único algoritmo
a utilizar durante toda la partida, que se ha intentado lo suficientemente genérico para
cualquier situación que pueda darse en una partida.
9
Descargar