Sistema Experto para la construcción de mazos de “Magic

Transcription

Sistema Experto para la construcción de mazos de “Magic
Sistema Experto para la construcción de mazos de
“Magic: The Gathering©”
Carlos Navarro del Dujo
Rubén Hidalgo López
Universidad Carlos III de Madrid
Avenida Universidad, 30. Leganés, C.P. 28911
Madrid, España.
+34 91 624 87 48
Universidad Carlos III de Madrid
Avenida Universidad, 30. Leganés, C.P. 28911
Madrid, España.
+34 91 624 87 48
[email protected]
[email protected]
ABSTRACT
En este paper se describe el funcionamiento del sistema experto
construido para ser un asistente en la construcción de mazos de
cartas para el juego de cartas coleccionable: “Magic: The
Gathering©”, y las motivaciones que han llevado a construirlo.
Términos Generales
JCC: Juegos de Cartas Coleccionables.
1.1 Falta de medios
La calidad de las cartas del mazo determina las probabilidades de
victoria a priori, pues durante la partida puede ocurrir una serie de
circunstancias que cambien esas probabilidades a priori. Por ello,
parece bastante lógico intentar aumentar la probabilidad de
victoria lo más posible antes de iniciar la partida, ya que durante
esta habrá muchas variables en el juego que no controlaremos
(como la suerte a la hora de jugar antes nuestras mejores cartas).
IA: Inteligencia Artificial.
1. INTRODUCCIÓN
Los JCC son unas de las aficiones que más seguidores tiene
dentro de los juegos de rol. Su gran baza es sin duda la sencillez
que tiene jugar una partida: solamente es necesario dos personas
para jugar y un mazo de cartas (conjunto de cartas con el que se
juega un partida.) por persona. Además, en menos de una hora
pueden jugarse varias partidas lo cual da un dinamismo y
variabilidad al juego que otros juegos de rol no proporcionan.
Otro aspecto positivo de los JCC es que cada jugador puede
personalizar su mazo (elemento básico del juego que es, en
general, distinto de cualquier otro) añadiendo las cartas que
quiera, dentro siempre de unos límites. Esto permite adaptar los
mazos de los jugadores a sus gustos personales, de modo que todo
jugador estará siempre contento con el mazo que juega. Esta
libertad de elección, provoca en la práctica que los jugadores
noveles terminen construyendo mazos “malos” por preferir cartas
por asuntos ajenos a su calidad, como el dibujo de la carta o el
tipo de criatura que representa (un dragón, un caballero, un
elfo...). Consecuencia directa de ello es que sus probabilidades de
victoria frente a otros mazos mejor construidos es ciertamente
reducido, independientemente de cómo se desarrolle la partida. El
fallo en la construcción les condena casi irremediablemente a la
derrota, y este hecho es ciertamente frustrante. El jugador novel o
newbie, aunque juegue bien sus cartas, terminará perdiendo la
partida casi irremediablemente. Si nos ponemos a analizar un
poco el tema podemos distinguir las dos razones principales que
provocan la construcción de un mazo con pocas probabilidades de
victoria.
“Magic: The Gathering©” es propiedad de Wizards of the Coast, Inc.,
empresa subsidiaria de Hasbro, Inc. Todos los derechos reservados.
Entonces si queremos aumentar nuestras probabilidades de
victoria tendremos que jugar buenas cartas y las buenas cartas
cuestan más dinero que las cartas peores. No es que la calidad sea
proporcional al precio (función directa), sino más bien que con
cartas muy baratas es muy difícil hacer un mazo competitivo (con
probabilidades de victoria al menos moderadas). Por eso quien
desembolsa una cierta cantidad de dinero, tiene mayor
probabilidad de victoria que quien apenas gasta unos euros. Eso
puede parecer un poco injusto para jugadores noveles o para
aquellos que no quieren gastar mucho dinero, pues para tener
posibilidades reales de victoria es necesario gastar una cantidad de
dinero de la que o no se dispone o simplemente no se quiere
gastar.
Para hacer frente a esa “injusticia” en los JCC existen ciertos tipos
de subjuego (llamados formatos) que permiten evitar estas
diferencias, de modo que cada jugador cuenta con cartas de
similar nivel, que se le proporcionan antes de empezar a jugar
(típicamente antes de un torneo o competición). Este formato se
denomina limitado. Algunos aspectos sobre este formato serán
introducidos posteriormente, a lo largo del paper.
1.2 Falta de conocimientos
Ciertamente ésta es la razón principal por la que los jugadores
noveles o newbies construyen mazos malos, aunque se disponga
de medios economicos para ellos. Esto esa así por que si no se
tiene suficiente experiencia y conocimiento del juego, es muy
difícil construir un buen mazo. De hecho, es más fácil jugar
medianamente bien que construir un mazo medianamente bien.
La mayoría de los jugadores conocen las reglas básicas e
interacciones entre las cartas, de modo que cualquier jugador con
un buen mazo y que sea sencillo de jugar podrá ganar una partida
más fácilmente que otro jugador, quizás con más conocimientos
pero un peor mazo. Es por ello que es tan importante construir un
buen mazo.
Donde mejor se puede apreciar que la falta de conocimiento
influye en las probabilidades de victoria de un mazo es en el
formato limitado. Éste, como ya hemos visto antes, nivela el
gasto de cada jugador, pero hace que las diferencias en el
conocimiento de juego (no de las reglas) afloren. De hecho, éste
es el formato más complejo, pues los jugadores deben construir su
mazo en un tiempo limitado (de 30 a 50 minutos) en función de
las cartas que se les proporcione. Esto hace que los jugadores
noveles que se aproximan a torneos de este formato terminen
jugando mazos extremadamente malos, lo que provoca que su
número de victorias sea muy reducido y por tanto su ánimo
descienda.
Por ello la herramienta pretende proporcionar un mecanismo que
permita ayudar en la construcción de un mazo a jugadores sin
apenas nivel, de modo que no se desanimen y mantengan la
ilusión en el juego. Además, a partir de las decisiones que toma la
herramienta, así como los consejos que muestra, el jugador puede
ir mejorando poco a poco en su diseño de mazos y por tanto ir
aprendiendo a construir mejor sus mazos por si mismo gracias al
uso de la herramienta.
2. MOTIVACIÓN Y OBJETIVOS
El propósito principal de este trabajo es la obtención de un
herramienta de completado de barajas dado un cierto número de
cartas a priori. Es por ello un problema de optimización abordable
con técnicas de IA pues debemos encontrar las mejores cartas que
completan una serie de cartas dadas a partir de los conocimientos
sobre el tema que tenga un experto. Ha de decirse que los
conocimientos utilizados para construir la herramienta (los
conocimientos del experto) son los que puede tener casi cualquier
jugador que lleve suficiente tiempo jugando a esto. El
conocimiento de los JCC, como de cualquier juego, se adquiere
con el tiempo, por lo que los jugadores noveles no lo tienen por no
llevar suficiente tiempo jugando aunque si conozcan las reglas
básicas. Es como jugar al ajedrez, mucha gente conoce las reglas
básicas del juego que determinan como mover cada una de las
piezas, con el tiempo terminan jugando de forma competitiva y
tras muchos años pueden terminar jugando como auténticos
maestros.
La herramienta se particulariza para un JCC concreto: “Magic:
The Gathering©”, por ser el JCC con más aficionados y por tanto
quien más usuarios posibles tiene. Podría pensarse en desarrollar
mejor una herramienta genérica que fuese válida para cualquier
JCC. El problema es que construir dicha herramienta es poco
menos que inviable. Esto es así por que para su diseño sería
necesario abstraer un concepto común a todos los juegos y
suficientemente importante para el juego como para justificar el
desarrollo de una herramienta que use técnicas de IA para resolver
el problema que plantea ese concepto. El único modo para
encontrar ese concepto sería haber jugado, o al menos conocer
suficientemente, varios de ellos y los autores de esta herramienta
sólo conocen (aunque eso sí, con cierta profundidad) uno de ellos:
“Magic: The Gathering©”.
Como hemos mencionado unas líneas antes, la herramienta se
encarga no del diseño completo del mazo, sino simplemente de
completarlo dado una serie de cartas. Un diseño completo
obviamente será más útil para un jugador novel, por que si de
partida introduce cartas malas, aunque sean optimas las cartas que
lo completan, el mazo terminará teniendo pocas probabilidades de
victoria. El motivo por el que nos hemos limitado a una
herramienta de completado es sencillo: “Magic: The Gathering©”
es un juego excesivamente complejo en lo que se refiere a la
formación de un mazo, y por tanto no es posible reducir a un
conjunto de reglas o casos de uso los conceptos que hay detrás de
la construcción completa de un mazo. De hecho es difícil
encontrar herramientas, incluso comerciales que consigan dado
un pool (conjunto) de cartas generar una baraja completa.
Inicialmente el propósito del trabajo había sido ese, construir una
baraja desde cero, pero estudiando las necesidades de la
herramienta detalladamente se vio que era un propósito demasiado
presuntuoso. Este estudio de las necesidades de una herramienta
para un diseño completo se detallan posteriormente en este paper.
La herramienta, por sus destinatarios (jugadores noveles) debe ser
fácil de usar y debe obtener ya no solo resultados razonables, sino
interpretables. Con interpretables nos referimos al hecho de que el
jugador debe ver una relación entre las cartas que proporciona y la
que se le recomienda que introduzca, de modo que realizando este
“completado” un número suficiente de veces el usuario pueda
inferir que cosas hacer para construir su propio mazo, sin
necesidad ya de usar la herramienta.
Además de la configuración óptima de maná, la herramienta
proporciona una serie de recomendaciones o advertencias al
usuario que le serán de gran ayuda para mejorar la construcción
de su mazo, de modo que pueda ir aumentando progresivamente
sus conocimientos en la construcción de mazos. Estas
recomendaciones o advertencias las trataremos en detalle más
adelante.
3. BREVE DESCRIPCION DEL JUEGO
En este punto parece necesaria ya una descripción aunque sea
muy básica del juego.
“Magic: The Gathering©” es un juego de cartas en el que cada
jugador tiene su propio mazo, típicamente de 60 cartas. Dichas
cartas son elegidas por el jugador y con ellas debe conseguir
reducir el total de vida de su oponente a 0 (una partida se empieza
con 20 puntos de vida). Si bien el objetivo es quitarle todos los
puntos de vida al oponente, la estrategia para quitárselos, no tiene
por que ser quitárselos los antes posible (o al menos no todas las
estrategias persiguen eso) sino lo suficientemente rápido (antes de
que nos los quiten a nosotros). De modo que las cartas a jugar no
serán necesariamente las cartas que quiten más puntos de vida al
adversario, sino aquellas que nos permitan asegurar que le
quitaremos los 20 puntos de vida dentro de la estrategia elegida
(agresiva, conservadora...)
Inicialmente cada jugador toma (roba) siete cartas aleatorias de su
mazo. La partida se divide en turnos de modo que al comienzo de
cada uno de estos los jugadores toma una carta del mazo sin verla
(roban una carta) y tiene la preferencia a la hora de jugar sus
cartas. En vista de esto, ya puede verse la influencia que tiene el
azar en el juego. Dado que las cartas que se tienen en cada
momento (en cada turno) para poder jugar es completamente
aleatorio, la suerte al robar las cartas determina enormemente la
probabilidad de victoria. Es por ello que si el mazo está
correctamente construido las probabilidades de robar cartas útiles
en cada momento será mayor, y por tanto también serán mayores
las probabilidades de victoria.
Los dos grandes tipos de cartas son hechizos y tierras. Los
hechizos son las cartas que nos permitirán directa o
indirectamente quitarle los 20 puntos de vida a nuestro oponente.
Las tierras son las cartas que nos permiten "pagar" dichos
hechizos. Haremos un símil con el dinero para aclararnos. Piense
en las tierras no como billetes, sino como fuentes de billetes. En
“Magic: The Gathering©”, las tierras son fuentes de maná (los
productores de maná son un tipo de cartas que analizaremos más
adelante) de modo que un maná es equivalente a un billete.
Entonces las tierras permiten generar un billete por turno. Estos
billetes no se acumulan entre turnos, de modo que sino lo
gastamos en el turno anterior se pierden. Cada hechizo tiene un
coste que puede ser una combinación de cualquier cantidad de
maná y de cualquier color y que se paga con el maná que
producen las tierras.
Otro concepto importante es el concepto de color. Los colores
que hay en “Magic: The Gathering©” son: rojo, negro, blanco,
verde y azul. Para pagar los costes de cada uno de los colores
existen 5 tipos de tierras: montañas para el rojo, islas para el azul,
llanuras para el blanco, bosques para el verde y pantanos para el
negro. Todas estas tierras permiten también pagar el maná
incoloro. Se habla de tierras básicas por que no tienen ninguna
habilidad especial a parte de producir maná de un determinado
color. En contraposición, existen las tierras no básicas que además
de poder proporcionar maná de algún color o de varios, tiene
algún efecto adicional.
Para aclararnos sobre el tema de los colores pondremos un
ejemplo, también con el dinero. Los distintos colores son como
distintos tipos de billetes: dólares, euros, libras o rupias. Cuando
tengamos que pagar un hechizo solo lo podremos hacer con los
billetes requeridas y no con otras, del mismo modo que los
hechizos solo pueden ser pagados por el maná del color requerido.
Para pagar el maná incoloro podremos usar cualquier billete, ya
que todas valen lo mismo a la hora de pagar este tipo de maná, del
mismo modo que el maná de cualquier color nos permite pagar el
maná incoloro.
Haremos una última consideraron sobre el juego que nos permitirá
entender correctamente lo que hace la herramienta. Solamente
vamos a considerar en la herramienta un tipo de hechizo
particular: los productores de maná. Este tipo de carta está más
cerca de las tierras que de los hechizos, pues como puede
deducirse de su nombre su objetivo es producir maná. Por
sencillez bajo este grupo se incluyen tanto los productores (carta s
que generan maná) como los buscadores de maná (hechizos que
permiten buscar una tierra en el mazo y ponerlo en juego).
4. ALCANCE DE LA HERRAMIENTA
Como ya hemos comentado la idea inicial era la de crear un
herramienta que permitiera generar un mazo completo en función
de un pool de cartas. De este modo la herramienta seleccionaría
las mejores cartas de entre las existentes y devolvería el mejor
mazo posible en función del pool proporcionado
Entonces era necesario indicar a la herramienta cuales son las
mejores cartas para que pueda seleccionarlas la herramienta y así
construir el mejor mazo posible. La forma más sencilla para
indicar la calidad de una carta era etiquetar cada carta con un
valor (subjetivo): su calidad. De este modo el sistema
simplemente tendría que elegir las mejores cartas entre las
entregadas, y con ellas construiría la baraja. Esto es en la práctica
poco menos que inviable, pues suponía catalogar previamente
(obviamente el usuario no sabe la calidad de una carta, si lo
supiera posiblemente no tendría que hacer uso de esta
herramienta) las miles de cartas distintas que existen en “Magic:
The Gathering©”. En principio este escollo es salvable,
simplemente reduciendo el número de cartas posibles a un
subconjunto del total como por ejemplo una ampliación (conjunto
de cartas relacionas por su aparición temporal en el juego) o
formato (tipo de subjuego que limita el tipo de cartas que pueden
jugarse, típicamente por su aparición temporal en el juego, por
ejemplo, que sólo se puedan jugar cartas que hayan aparecido en
el último año), lo cual reduciría el alcance de la herramienta pero
la haría viable.
El segundo problema con el que nos encontramos a la hora de
diseñar una herramienta que construyera un mazo completo fue el
hecho de como clasificar dichas cartas. Esta clasificación es
necesaria, como puede intuirse ya, por que construir un mazo no
es algo tan sencillo como coger las mejores cartas, sino no seria
algo tan complicado como hemos dicho que es. Cada carta tiene
una función y puede agruparse dentro de algún tipo (removal,
roba cartas, productores de maná...). De modo que debe elegirse
cartas con distintas funciones para la construcción del mazo.
Pensemos en las cartas como jugadores de fútbol. Si le
entregamos al sistema muchos buenos porteros y malos defensas,
delanteros y medio campistas el sistema elegiría 11 porteros para
nuestro equipo. Quizás sean los mejores pero no nos valen para
formar un equipo. Lo primero que se nos ocurrirá para solventar
esto es elegir solo un portero y los 4 mejores defensas de entre los
que nos proporcionen. Lo que ocurre es que no tenemos en mente
el número total de distintos tipos de cartas, ni tampoco que no
existe una fórmula fija que nos dice que tipos de cartas hay que
meter en el mazo para que el mazo tengas más probabilidades de
victoria. Existen decenas de tipos en los que encuadrar una carta y
cientos de ideas sobre que tipos de cartas jugar o no. Piense por
ejemplo en laterales, mediapuntas, extremos o carrileros en un
equipo de fútbol. Pero a fin de cuentas si tomásemos un
subconjunto significativo de entre todos los tipos para construir la
herramienta podríamos finalmente implementarla.
Ahora bien, pensemos en cuantas elegir de cada grupo. Eso es
algo completamente abierto. Una de las principales aspectos
positivos de “Magic: The Gathering©” es que no hay fórmulas
maravillosas. Jugar “X” cartas de un cierto tipo no garantiza tener
mejor mazo que si se juegan “Y” cartas de este tipo o de otro tipo.
Piense de nuevo en un equipo de fútbol, ¿que es mejor jugar un
1-4-4-2 o algo más agresivo 1-3-4-3 o algo más conservador 1-45-1? Ni en el fútbol ni en “Magic: The Gathering©” existen reglas
para esto. Eso es lo que hace ambas cosas tan atrayentes. La única
vía en este caso es asumir que nos quedamos con una cierta
cantidad fija de cada tipo, por ejemplo jugar siempre un 1-4-4-2,
de modo que siempre generamos el mismo "tipo" de mazos con la
pérdida de generalidad que esto supone. Además, se debería
proporcionar a la herramienta
una cantidad de cartas
suficientemente grande o bien usar cartas de tipos “parecidos”
(como el típico central reconvertido a lateral). Esto no siempre
será posible, pues será función del conjunto de cartas que nos
proporcionen. En estos casos la herramienta tendría que mostrar
un mensaje de advertencia o similar, indicando que con el
conjunto de cartas proporcionado no se pude formar un mazo
suficientemente bueno. Pero aun así, la herramienta podría
construir un mazo completo en un número elevado de ocasiones y
por tanto seguir siendo útil.
Hasta ahora, todos los problemas mencionados son problemas
secundarios, pues se pueden solventar reduciendo el alcance de la
herramienta. Pero finalmente nos encontramos ante un problema
al que no pudimos hacer frente si queríamos construir un mazo
desde cero: la interacción entre cartas. Uno de los conceptos
más importantes de “Magic: The Gathering©” hace referencia a
una interacción compleja entre cartas: la sinergia. Este concepto
viene a decir que dos cartas que por separado tiene un cierto valor,
juntas (o sea en el mismo mazo) tiene mayor valor que la suma de
sus valores por separado. O sea para entendernos, 1+1=3.Esto
provoca que en muchos casos sea mejor jugar 2 cartas que por
separado tienen un valor menor, pero juntas tienen mayor valor
que otras dos cartas. De hecho, también existe una acepción
contraria al concepto de sinergia, que consiste en que el efecto de
una carta se contrapone al de otra. En ese caso lo mejor es jugar
solo una de esas cartas para evitar la posibilidad de robar (tomar
una carta del mazo) ya que jugar una perjudica a la otra y
viceversa.
De este modo no nos basta con indicar como de buena o mala es
una carta (su calidad), catalogarla dentro de un tipo y elegir
cuantas de ese tipo se van a jugar, si no que también es necesario
determinar su interacción con las demás cartas, y tener esta
interacción muy en cuenta de modo que se fomente la sinergia y
se evitar siempre la “anti-sinergia”. Dado que para expresar la
relación entre cada carta deberíamos introducir un valor para cada
par de cartas, imagine el número de posibles entradas por cada
carta, y el número posible de combinaciones de pares de cartas si
nuestra herramienta trabajase simplemente con 100 cartas, y eso
solo si vemos la interacción entre pares de cartas, no hablemos ya
si queremos ver la interacción que tiene una carta con el resto de
cartas del mazo.
Ya que la herramienta no es capaz de enfrentarse a interacciones
entre cartas y por tanto arrojaría resultados completamente subóptimos (mazos lleno de cartas contrapuestas en los que solo se
mira la calidad individual de cada carta y no la calidad conjunta, o
sinergia), debemos buscar algo que si que pueda hacer la
herramienta y que sea lo suficientemente útil para que haga uso de
ella los jugadores noveles. En este punto pensamos en
restringirnos a un solo tipo de los dos grandes tipos de cartas
existentes: hechizos y tierras. A simple vista parece mucho más
acotado el tipo de tierras que el tipo de hechizos y así es
efectivamente. Entonces podríamos pensar que nuestra
herramienta indicase cuales son las mejores tierras a jugar (ya
sean básicas o no básicas) de las existentes en “Magic: The
Gathering©”. Esto forzaría a que si el usuario no dispone de las
tierras que se le indica, debería conseguirlas para poder seguir el
consejo de nuestra herramienta. A parte de que normalmente se
indicarían las tierra no básicas más caras (y esta herramienta es
para aprender no para dejarse una fortuna en cartas), en las tierras
no básicas también aplica el concepto de sinergia, porque como ya
hemos dicho producen efectos adicionales al de producir maná.
Un ejemplo claro son las fetch land. Este tipo de tierra no básica
permite buscar una tierra básica cualquiera en el mazo. Es obvia
su ventaja, buscamos la tierra que nos haga falta en cada momento
en el mazo y además reducimos la probabilidad de robar una
tierra. Reducir la probabilidad de robar tierras es siempre bueno
pero lo es aun más, cuando tenemos una cierta cantidad de maná
(entre 5 y 8 dependiendo del arquetipo) que nos permite jugar casi
cualquier hechizo de la baraja. Al ser las fetch land cartas tan
buenas, tendrían una muy alta valoración (sino la mayor). Esto
haría que una herramienta basada solo en la valoración indicase
que lo mejor es jugar todo fetch lands. Es trivial ver que si esto
ocurre, no tendríamos ninguna tierra básica que buscar y por tanto
estaríamos dando una solución completamente inaceptable. De
este modo, lo único que nos queda por hacer es que el usuario
indique los hechizos que quiere jugar, incluso si hay alguna tierra
no básica y que la herramienta complete con tierras básicas. Si el
usuario introduce tierras no básicas la herramienta deberá ver su
efecto y en función de este indicar las tierras básicas a jugar.
Así pues, la herramienta indicará la cantidad de tierras básicas de
cada tipo óptimo para completar el mazo. De este modo el usuario
debe proporcionar todas las cartas que va a jugar salvo las tierras
básicas. La utilidad de optimizar la cantidad de tierras básicas, es
tener “siempre” el maná apropiado en cada momento para jugar
nuestros hechizos de modo que no nos preocupemos del maná,
solo de las cartas a elegir. No existe nada más frustrante en
“Magic: The Gathering©” que tener la mano repleta de hechizos
pero no poder jugar ninguno, bien por que no tenemos maná total
suficiente o bien por que no tenemos la combinación de colores
requerida. Esta herramienta garantiza que nos encontraremos en
esta situación el menor número de veces que el diseño de mazos
permite (como las cartas se roban de forma aleatoria nada impide
tomar una mano inicial con todo hechizos y ninguna tierra).
5. ESTADO DEL ARTE
Los sistemas expertos son sistemas informáticos que simulan el
proceso de aprendizaje, de memorización, razonamiento, de
comunicación y de acción de un experto humano.
En nuestro sistema, su efecto es más modesto pues “simplemente”
permite optimizar en función de una serie de datos de entrada la
salida que se proporciona. Además, la herramienta no aprende,
porque no tiene realimentación (no sabe si la decisión que tomó
fue buena o mala de modo que pueda cambiarla, o no, en
situaciones posteriores) y ni siquiera hace uso de un conocimiento
acumulado, ya que no almacena información sino conocimiento a
través de reglas y los hecho se le pasan por fichero, no los tiene
“acumulados”. Lo que si hace la herramienta es tomar decisiones
e interactuar con el usuario de una forma amigable (mediante un
interfaz gráfico), además de ser no subjetiva, de modo que no
ocurre que las preferencias del experto pueden hacer que las
decisiones cambien (prefiere siempre jugar un cierto número de
tierras...)
Una vez
encontrado el experto, hay que traducir sus
conocimientos y experiencia a reglas (heurístico basado en el
conocimiento y la experiencia). Dichas reglas se apoyan en el uso
de procedimientos, para realizar operaciones de manejo de
cadenas, operaciones numéricas, presentar datos... De este modo
el experto define el conocimiento y el sistema lo integra
fácilmente en la aplicación existente
Para el desarrollo de sistemas expertos en el marco de la
asignatura existen principalmente dos herramientas, Prolog y
CLIPS. Nos hemos decantado por el uso de CLIPS. Tanto Prolog
como CLIPS permite representar el conocimiento con modelos
para el razonamiento basado en la lógica, a través de predicados,
hechos, relaciones o reglas (los términos en cada lenguaje son
distintos pero el concepto que subyace es muy similar) de modo
que ambas parecen útiles para el desarrollo de nuestra
herramientas. Entonces la elección por una de las dos
herramientas se basa en el hecho de que nuestra aplicación
necesita un procesamiento intensivo de datos numéricos, cosa
posible con Prolog, pero que no se facilita tanto como en CLIPS.
De hecho CLIPS proporciona una serie de funciones que
permiten no solo manejar número sino también cadenas de
caracteres, listas... que simplifican muchos las operaciones a
realizar. Además CLIPS permite integrarse en aplicaciones en
diferentes lenguajes, con lo cual puede aprovecharse la potencia
de esos lenguajes.
En realidad no usaremos CLIPS directamente, sino a través de
JESS (Java Expert System Shell), o sea a través de la versión Java
de CLIPS. Esto nos va a permitir desarrollar el interfaz gráfico de
manera más fácil y de una forma en la que estamos más
familiarizados. Cómo utilizar la parte gráfica de la herramienta lo
veremos más adelante.
6. FUNCIONAMIENTO DE LA
HERRAMIENTA
Una descripción detallada del funcionamiento está fuera del
alcance de este paper, de modo que nos limitaremos a una
descripción a grandes rasgos.
Una vez que desde el entorno gráfico se llama a la funcionalidad
en CLIPS, lo primero que se hace es cargar una fichero que
contiene los hechos que son las carta a procesar (load facts).
Estas cartas se modelan a través de una plantilla (deftemplate) que
vienen a ser como clases pero sin herencia, de modo que existe
una plantilla para hechizos y otra para tierras no básicas. La salida
de la aplicación (las tierras a jugar) también se modela como un
hecho. Entonces cada carta distinta será una agrupación de
hechos (deffact) que respeta dicha plantilla. No se usan en el
diseño clases y objetos por ser más complejas de usar que las
plantillas y no aportar nada imprescindible para el diseño.
Bajo la asunción de mundo cerrado, se utiliza el motor de
inferencias (colección integrada de algoritmos de resolución de
problemas) que trata de emparejar la lista de hechos (hechizos y
tierras no básicas) con los patrones de la reglas (en nuestro caso,
conjunto de heurísticos definidos para solucionar el problema que
resuelve nuestra herramienta). Si todos los patrones de una regla
están emparejados, se dice que dicha regla está activada
El motor de inferencias en nuestra aplicación hace una serie de
cálculos y optimizaciones a partir de los distintos hechos, que
permite obtener la configuración óptima (bajo los heurísticos que
definen las reglas). Para almacenar dichos cálculos parciales se
hace uso de variables globales. La justificación de esos
heurísticos, así como de los cálculos y optimizaciones que se
realizan está fuera del alcance de este documento.
Cuando el motor de inferencia termina, realizamos unos últimos
ajustes y finalmente salvamos los hechos en un fichero, pues la
configuración de maná se almacena en un hecho. Además también
se almacenan una serie de advertencias o consejos para el usuario
que detallaremos un poco más adelante. De este modo el medio de
comunicación entre la parte gráfica y JESS, será a través de
ficheros con hechos, tanto la entrada que se le suministre a CLIPS
con las cartas que se quiere jugar, como la salida que proporcione
CLIPS con la configuración de maná óptima.
7. CONSEJOS
Ya hemos mencionado que la herramienta muestra una serie de
advertencias o consejos sobre el mazo completo que genera. De
este modo, si el usuario sigue dichos consejos, eliminando o
añadiendo cartas según las pautas que se le indica y vuelve a
introducir el pool de cartas en la herramienta encontrará un mejor
mazo que el que obtuvo inicialmente.
La herramienta muestra principalmente tres tipos de consejos.
7.1 Cantidad de colores jugados.
Los mazos en principio puede componerse de los cinco colores, es
decir, llevar cartas de todos los colores existentes en “Magic: The
Gathering©”. En la práctica los mazos se componen de dos o tres
colores como mucho, más si cabe, en el caso de que jueguen
principalmente tierras básicas. De este modo, si el usuario juega
varias cartas de varios colores la herramienta debera indicarle que
esa no es una buena elección y que reduzca el número de colores.
Pero además, si el usuario solamente usa un color, se le sugerirá
que pruebe a añadir cartas de algún color más, porque
normalmente los mazos de más de un color son mejores que los
mazos de un color.
7.2 Coste promedio de las cartas.
El coste medio permite identificar si el usuario juega hechizos
muy caros (hechizos de coste mayor que 4) o hechizos muy
baratos (hechizos de coste 2 o menos). En general, los mejores
hechizos son los de coste 3 y 4. De este modo los hechizos de
coste mayor suele ser peores y jugarse mucho menos que los de
coste 3 y 4. Los de coste 1 y 2 también son peores que los de
coste 3 y 4 pero tienen la ventaja de necesitar menos maná para
poder jugarse. De este modo, si el usuario juega, en media,
hechizos de coste alto, se le recomendará que introduzca algunos
hechizos de menor coste para bajar esa media. Si los juega de
coste bajo, se le sugerirá que juegue algún hechizo de mayor coste
porque típicamente será mejor que los que ha decidido jugar.
asume o bien que el usuario sabe como introducir las cartas como
hechos o bien que existe alguna herramienta que lo hace.
7.3 Número de productores.
El fichero que usaremos inicialmente es, ciertamente, muy
sencillo ya que el pool de cartas está formado por solamente
cartas de color negro. Si usamos el fichero “PruebaBasica_1.dat”
que contiene 23 hechos que representan 23 hechizo (el número de
hechizos que se juega típicamente en limitado) la herramienta nos
indicará que juguemos 17 tierras de tipo pantano y nos
recomendará que juguemos algún color más y que si lo tenemos,
incluyamos algún productor. También nos indicara que el coste de
nuestros hechizos es adecuado.
Como ya vimos, los productores tienen una función similar a las
tierras. De este modo, en su justa proporción (1 a 3) pueden
ayudar a reducir el número de tierras necesarias a jugar. Si bien
jugar más de 3 no es malo muchas veces, no es necesario y supone
un desperdicio jugar tantos productores de maná. Entonces si se
llega a un número determinado (7) se considera que dicha
cantidad de productores es perjudicial para el buen diseño del
mazo y se recomienda que se quiten. Por otra parte si no se juega
ninguno, se sugerirá que si el jugador tiene alguno lo introduzca
en el pool por que esto mejorará el mazo.
8. ENTORNO DE PRUEBAS
Esta herramienta es especialmente útil en formato limitado, ya que
en este formato el jugador siempre completa su mazo con tierras
básicas. De este modo, lo más normal es jugar, en limitado, 40
cartas (el mínimo número posible de cartas, de modo que sea lo
más probable robar las mejores cartas de las que dispongamos).
De las cuales, típicamente 23 son hechizos y 17 tierras Una
justificación de este hecho esta fuera del alcance de este paper, así
que solo diremos que esta es una regla que usan la inmensa
mayoría de jugadores de limitado.
Entonces las pruebas realizadas son para mazos de este formato,
pues en este formato se pueden encontrar mazos en los que casi
todas sus tierras son básicas. En los demás formatos las tierras
básicas son minoría y por tanto no permiten testear el correcto
funcionamiento de la herramienta, comparando los resultados
obtenidos con la herramienta con los que dan diseñadores de
mazos expertos.
Por sencillez se mostrarán aquí simplemente unas pruebas sobre
mazos de limitado muy sencillos, de modo que sea fácilmente
interpretable por el lector el por qué de los resultados en base a las
justificaciones que haremos de dichos resultados.
Si se examina los ficheros se verá que tienen el formato de
ficheros de entrada con hechos de CLIPS. Es claro que este
formato no tendrían por que conocerlo los usuarios para introducir
sus cartas en la herramienta, por lo que parece natural que exista
una herramienta adicional que traduzca de una descripción más
intuitiva de un carta a un hecho. Esto no se ha hecho así por que
supone un trabajo adicional no relacionado con la asignatura. Esa
herramienta adicional, simplemente parsearía un fichero de texto
con la entrada del usuario para obtener un fichero de hechos, lo
cual es pura programación imperativa. Por ello, la herramienta
Usaremos siempre el mismo fichero de hechos base que iremos
modificando para ver como reacciona la herramienta. De este
modo iremos metiendo y quitando cartas, introduciendo tierras no
básicas o cambiando los colores del mazo. Todos estos pasos nos
ayudarán a entender como funciona la herramienta y aprender
algunos conceptos sobre como construir un mazo para limitado.
Veremos que ocurre si incluimos 3 productores en el mazo
remplazando a algunas cartas de las que tenemos. Esto constituye
la segunda prueba que se encuentra en el fichero
“PruebaBasica_2.dat”. Cuando incluimos una cierta cantidad de
productores se reduce el número de tierras a jugar. De este modo,
la aplicación nos pedirá que volvamos a introducir el fichero pero
con una carta más, ya que ahora no hará falta jugar 17 tierras sino
que con 16 nos bastará. Una vez que introduzcamos el nuevo
fichero con una carta más (“PruebaBasica_2_1.dat”), nos
mostrará que debemos jugar 16 pantanos, así como un par de
felicitaciones por jugar el número adecuado de productores y de
coste medio de cartas. Lo que si que nos seguirá mostrando es una
recomendación que nos incita a jugar más colores.
El aspecto que probaremos ahora es la introducción de una tierra
no básica que produce maná negro. Podríamos introducir una que
no produzca maná negro, pero el efecto de este hecho es difícil de
ver en la construcción del mazo por lo que nos limitaremos a
introducir una tierra que dé maná negro. De modo que ahora el
pool de cartas estará formado por 23 hechizos y una tierra no
básica (fichero “PruebaBasica_3.dat”) además de los productores
introducidos anteriormente. Si hacemos esto, veremos como en
este caso solamente debemos jugar 15 tierras en el mazo, por que
las dos tierras que faltan hasta las 17 finales son la tierra no básica
y los productores introducidos. Las recomendaciones que
mostrará serán las mismas que en el caso anterior.
Ya hemos visto como la herramienta solicita cartas si le hacen
falta, pero no hemos visto que ocurre si le sobran cartas. Esto es
lo que ocurre si introducimos el fichero “PruebaBasica_4.dat”,
en el que se han añadido un par de hechizos más de modo que
ahora contamos con 27 hechizos, 3 de ellos productores y una
tierra no básica. Ya deberíamos ser capaces de vaticinar la
respuesta que dé la herramienta: debemos quitar dos hechizos. Si
quitamos dos hechizos no productores cualquiera ya tendremos
el mazo completo, completado con 15 pantanos. Pero ¿qué
ocurrirá si quitamos, bien la tierra no básica bien un productor?
Animamos a lector a que responda a esta pregunta por si mismo
En este punto ya hemos probado la mayor parte de la
funcionalidad de la herramienta, salvo como se comporta la
herramienta si jugamos más de un color. Para ello usaremos un
fichero de hechos con hechizos de dos colores, algo más de las
mitad de ellos de un color y el resto de otro color
(“pruebaColor_1.dat”). Es fácil prever que la herramienta dará en
este caso un resultado de 9 tierras de un tipo y 8 de otro tipo, pues
el número de tierras a jugar es impar. Ahora esa advertencia que
nos había estado apareciendo constantemente que nos
recomendaba jugar más de un color cambiará a una felicitación
por jugar el número de colores óptimo en limitado.
primera de las pruebas realizadas, para ello se va a seleccionar el
fichero “PruebaBasica_1.dat”.
Finalmente haremos una pruebas más sobre los colores, en este
caso será jugar los 5 colores en una proporción similar. De nuevo,
se distribuirán las tierras convenientemente aunque nos avisará de
que jugamos demasiados colores (“pruebaColor_2.dat”).
Las pruebas realizadas son pruebas muy sencillas como podrá
haber visto. Pero la herramienta es capaz de completar mazos
muchos más complejos en los que se jueguen varios colores, tener
en cuenta convenientemente las tierras no básicas que no den
maná del color que se juega en el mazo... Simplemente estas
pruebas más complejas no se muestran por que se escapa del
alcance de este paper justificar el por qué de las decisiones
realizadas, y si no se realiza dicha justificación el mostrar el
resultado de dichas pruebas no aporta nada.
Figura 2. Selección del fichero de prueba
Tras esto, se mostrará el listado de cartas leído del fichero.
9. INTERFAZ GRÁFICO DE USUARIO
A continuación se muestra una breve guía para el manejo del
interfaz gráfico. El interfaz gráfico se ha realizado usando el
paquete SWING incluido en la versión de Java J2SE 1.5.0.
Figura 3. Listado inicial de cartas
Ahora, solamente es necesario “pedir la ayuda del asistente”
pulsando el botón “Completar Mazo”, al hacer esto, nos mostrará
por pantalla una tabla con las tierras básicas a incluir y una serie
de consejos muy útiles para los jugadores noveles de “Magic: The
Gathering©”
Figura 1. Pantalla Inicial
Una vez se ha arrancado la aplicación, con “java -classpath
jess.jar;. IGU_JCC.IGU_JCC”, hay que seleccionar el fichero del
cual leer el listado de cartas inicial, para ello se pulsará al botón
“Abrir Fichero de Cartas…”. En este caso, se va a mostrar la
en este caso 3, y al volver a pulsar el botón “Completar Mazo”, el
asistente indicará que sigue sobrando una carta.
Y si por error, el usuario introduce un identificador de una carta
que se haya eliminado previamente, al pulsar de nuevo el botón, el
asistente le seguirá indicando que sobra una carta.
Para el caso en que el asistente pide que se añadan nuevos
hechizos, simplemente habrá que escribir en el fichero con el
mazo inicial de cartas, nuevos hechos correspondientes a las
nuevas cartas y pulsar de nuevo el botón “Abrir Fichero de
Cartas…”
Figura 4. Tierras Básicas y consejos del asistente
Si el asistente hubiera encontrado que tenías quitar algunos de los
hechizos, al pulsar el botón “Completar Mazo” habría mostrado
un mensaje indicándolo.
Figura 6. El asistente indica al usuario que hay insertar
nuevas cartas.
10. REFERENCIAS
[1] Manual de JESS. http://herzberg.ca.sandia.gov/jess/docs
[2] Página Oficial de JESS. http://herzberg.ca.sandia.gov/jess/
Figura 5. El asistente indica al usuario que tiene que quitar
cartas.
En el caso en que hay que quitar cartas, se podrá indicar a través
del interfaz gráfico, para ello se deberá escribir el número del
identificador de aquellas cartas que se quieran eliminar y pulsar el
botón “Quitar Cartas”, esto eliminará las cartas de las tablas.
En los campos de texto se tiene que introducir siempre un número
de dos dígitos, y en el caso de que se quiera eliminar una carta con
un identificador menor de 10, por ejemplo la carta cuyo
identificador sea el 2, habrá que teclear 02 en el campo de texto.
Si que eliminar 4 cartas, como es el caso, y se deja alguno de los
campos sin rellenar, por ejemplo que solo se rellenen 3, se
eliminarán las cartas cuyos identificadores se pasaron al asistente,
[3] Comparativa CLIPS vs. JESS.
http://www.comp.lancs.ac.uk/~kristof/research/notes/clipsvsj
ess/
[4] Página Oficial de CLIPS.
http://www.ghg.net/clips/CLIPS.html
[5] Rincón, Mario. La base de maná y sus tierras, las eternas
olvidadas.
http://www.rebellion.es/magicrebel/articulo.php?idNoticia=2
277
[6] API de JAVA.
http://java.sun.com/j2se/1.4.2/docs/api/index.html
[7] Entrada en Wikipedia correspondiente a “Juegos de Cartas
Coleccionables”.
http://es.wikipedia.org/wiki/Juego_de_cartas_coleccionables