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