Sistemas de optimización de recursos: Optimización de la base de maná en “Magic: The Gathering©” Juan González Adrados Moisés Sanchez Solano Universidad Carlos III de Madrid Universidad Carlos III de Madrid [email protected] [email protected] RESUMEN una baraja (mazo) libremente de acuerdo a las reglas de cada tipo de juego en particular. En la presente memoria se describen las técnicas de realización de un sistema de optimización del número de tierras de maná a introducer en una baraja compuesta por unas determinados hechizos. A partir de un amplio elenco de cartas disponibles (unas 11.500 en el caso de Magic) cada jugador confecciona su propio mazo, dando pie a una infinidad de estrategias y desarrollos de partidas, las cuales, puede afirmarse que cada una es distinta. Keywords Magic, mana, tierras, optimización, búsqueda. Logo de “Magic: The Gathering” 1. INTRODUCCIÓN El concepto de Juego de cartas coleccionable (JCC) nace en 1993 con Magic: The Gathering juego creado por Richard Garfield, aunque anteriormente existían un tipo de juego de carta predecesora denominada actualmente juego de baraja de colección (JBC); las cuales presentaban reglas más simples y una menor complejidad en comparación al JCC, jugándose a partir de una baraja con cartas predefinidas y en el que cada carta traía generalmente una imagen con un tema en específico según el tipo de baraja y juego. Richard Garfield Juego de cartas coleccionables, es el término usado para referirse a los juego de cartas no predefinidas y existentes en gran cantidad y de variados tipos y características que le otorga individualidad a cada carta; con las cuales pueden construirse Los mazos se caracterizan por ser igualmente transportables fácilmente, lo cual hace que pueda jugarse en cualquier lugar contra cualquier persona, haciendo así un juego social que puede practicarse con un variado número de jugadores, dando lugar a tantas situaciones de partida que, aunque un mazo de un jugador sea superior a un rival concreto, igualmente puede suceder que este jugador se vea en serios aprietos contra otro. Los grandes torneos reúnen a cientos y miles de jugadores, estando el récord en 1300 jugadores. La otra característica que le da nombre y las diferencia de los naipes tradicionales es que son coleccionables. Así, las cartas se dividen en frecuencias, habitualmente: Común, Infrecuente y Rara, siendo de menos a más difícil de conseguir. Dichas cartas se adquieren en sobres sellados cuyo contenido es aleatorio, con lo que no se sabe exactamente que se obtiene en cada sobre. Por ello, no se compran las cartas que deseamos, si no que se entra en un mercado secundario de coleccionismo, donde las cartas adquieren su valor por su frecuencia, antigüedad, estado y sobre todo calidad y efectividad en partidas, obedeciendo a conceptos de oferta y demanda. Así, consecuentemente, tenemos la vertiente de juego y de coleccionable, logrando la fórmula que ha logrado captar la atención de miles de jugadores en todo el mundo y dando lugar a tiendas especializadas donde pueden adquirirse tanto en formato sellado como carta suelta, así como grandes comunidades de Internet dedicadas a informar sobre el juego, estrategias y mazos ganadores, e intercambio y valoración de cartas. 1.1 Suerte Vs. Habilidad El Magic, como muchos otros juegos, combina azar y suerte con habilidad y talento. Una queja común es, sin embargo, de que hay mucha suerte involucrada con el recurso básico del juego: las tierras. Muchas tierras o muy pocas (“Mana Flood” o “Mana Screw” en la jerga del juego respectivamente) en el inicio del juego principalmente, pueden arruinar la posibilidad de un jugador de alcanzar la victoria sin que siquiera haya cometido un error. Una respuesta común a esta queja es que la influencia de la suerte en el juego puede ser minimizada armando apropiadamente un mazo sólido que haya sido “testeado” extensivamente. Una cantidad precisa de tierras y buenas técnicas de mezclado del mazo pueden reducir la posibilidad de cualquier problema de mana. (Ej: Un mazo con hechizos de un solo color y de muy bajo coste necesita menos tierras que un mazo de muchos colores y hechizos más costosos). Sobre este punto precisamente es sobre el que nos centraremos en el presente trabajo: la cantidad precisa de tierras necesarias para optimizar los recursos de nuestra baraja. Para ello primero debemos hacer una breve definición del sistema del juego. 2. SISTEMA DE JUEGO 2.1 Estructura de la partida Las habilidades de cada carta se activan pagando un coste, ya sea con maná, sacrificando cartas permanentes o simplemente girándolas, con esto último no se pueden volver a jugar hasta que vuelvan a enderezarse, cosa que ocurre al principio del siguiente turno del jugador, salvo que haya alguna carta que indique lo contrario. Hay otro grupo de habilidades que solo pueden usarse si se cumple una condición, como que el turno esté en el paso de mantenimiento o que se hayan jugado alguna cantidad de hechizos durante ese turno. Al primer grupo de habilidades se las llama activadas, y al segundo disparadas. El cementerio es la pila de cartas que han dejado la zona de juego (cartas destruidas o sacrificadas) o de hechizos no permanentes que ya se han resuelto. En el mundo de Magic hay cinco colores, que se corresponden con un tipo determinado de magia. Cada color tiene una filosofía propia y puntos fuertes y débiles que se deben ponderar para decidir el tipo de mazo que se va a construir. Cada Color es representado por un bioma. En la parte de atrás de las cartas se pueden ver cinco esferas de color ("el pentágono de colores") que representan los cinco colores de Magic: según el sentido de las agujas del reloj y empezando por arriba son blanco, azul, negro, rojo y verde. Aparte de estos colores hay combinaciones de ellos, como las cartas "híbridas" , que son de dos colores a la vez y su coste se puede pagar con cualquiera de los dos colores; o bien multicolores (también llamadas "Doradas"), que se bajan por maná de dos o más colores. Cada jugador debe derrotar a su enemigo usando sus poderes: criaturas mágicas, artefactos, y encantamientos, extrayendo el poder o maná de sus tierras, algunas también con sus propios poderes. El juego fue ideado para jugar dos jugadores, aunque se han agregado nuevas reglas para jugar con más participantes, casi siempre en números pares ya que si es un número impar, por ejemplo 3 jugadores, puede que 2 se alíen para derrotar al otro, lo que constituye una práctica incorrecta. Cada jugador empieza con 20 puntos de vida y un mazo (biblioteca) de al menos 60 cartas (en algunos torneos especiales está permitido usar mazos de 40), de las cuales aproximadamente (por consideraciones estratégicas) un tercio son tierras productoras de maná, la energía requerida para jugar las demás cartas. Las cartas que no son tierras se pueden agrupar colectivamente como hechizos. Requieren una determinada cantidad de maná para ser jugadas, generalmente una combinación de maná de un solo color e incoloro. Se dividen en las cartas que generan un efecto permanente (criaturas, encantamientos, artefactos e incluso las tierras son permanentes existentes en juego) y las que van al cementerio (por norma general) después de ser usadas (instantáneos y conjuros). Un jugador pierde cuando se queda sin puntos de vida, cuando intenta robar una carta y su biblioteca está vacía, o si la condición de alguna carta así lo indica. El último jugador que queda es el ganador, aunque existen cartas que indican nuevas formas de ganar una vez que un jugador las pone en juego, como ganar la partida si ese jugador consigue determinados puntos de vida o si consigue tener en juego cierto número de criaturas, también existen habilidades por las cuales un jugador no puede perder el juego. Cartas Magic de cada uno de los cinco colores e incolora 2.2 La base de maná Como ya se ha visto en los apartados anteriores, uno de los pilares fundamentales del juego es la relación maná/hechizos. Para poder jugar hechizos es necesario disponer del maná necesario para pagar su coste, por lo que sin maná no hay hechizos y sin hechizos no hay victoria. El coste de un hechizo es el número de manas necesarios para jugarlo, que se dividen en coloreados, que deben ser pagados con el maná del color correspondiente, o incoloros, que pueden ser pagados con cualquier tipo de maná. Dado que la creación de un sistema para la confección de barajas es prácticamente inviable, ya que aunque se pueden discernir que hace una baraja mejor que otra, ni las comunidades de profesionales son capaces de ponerse de acuerdo sobre como llegar hasta la mejor construcción. La inmensa cantidad de cartas disponibles e interacciones entre ellas, factores imprevisibles como el “metajuego” o distribución de tipos de barajas en un torneo hacen que sea imposible asegurar que una determinada construcción de baraja sea estrictamente mejor que otra. Sin embargo, el estudio de la adecuación de la base de maná una vez establecido el resto de la baraja es algo más asequible, ya que podemos basarnos en un factor muy básico: si la configuración nos permite jugar los hechizos deseados en los turnos requeridos con una probabilidad aceptable. Este es uno de los grandes problemas al que se enfrenta un jugador a la hora de construir una baraja: maximizar las posibilidades de jugar nuestros hechizos a través de la creación de una base de maná adecuada. Casi todos los jugadores noveles (y muchos de los no tan noveles) se centran en los hechizos descuidando la base de maná. Es común ver entre los jugadores que empiezan una distribución del tipo una tierra por cada dos hechizos, sin tener en cuenta que los requisitos no son los mismos para cada baraja, pues dependen de los costes. Igualmente si la baraja es de dos colores se tiende a tomar la decisión salomónica de usar la mitad de tierras de un tipo y la mitad de otro con independencia de los requisitos de color de la baraja. Esta falta de consideración en la construcción de los mazos lleva a problemas de disponibilidad de maná durante las partidas, lo que constituye sin duda uno de las causas más frustrantes de perder partidas: tener acceso a los hechizos y habilidades y no poder usarlos por falta de maná (lo que se denomina “mana screw”) o tener un exceso de productores de maná cuando los que necesitamos son los recursos en los que gastarlos (“mana flood”). Para ello es necesario crear nuestra base de maná optimizando la capacidad de jugar nuestros hechizos evitando generar más maná del que podemos consumir. 2.3 Tipos de barajas En Magic se distinguen básicamente tres tipos de barajas y las combinaciones entre ellas: agresivas (agro), de control y de combo (más agro-control, control-combo y agresivo con combo). Aunque parezca que sólo los costes de los hechizos se deben tener en cuenta a la hora de crear la base de maná, es también de destacada importancia el estilo de la baraja: 2.3.1 Barajas agresivas Las barajas agresivas intentan ganar mediante la reducción de las vidas del oponente a 0. Para ello, deben de ser capaces de generar amenazas para el rival lo más pronto posible, antes de que el rival haga lo propio (si juega agro), controle la partida (control) o directamente nos elimine (combo). Debido a esto es necesario explotar los recursos desde el primer momento y mantener una buena curva de maná (termino que se expondrá más adelante). 2.3.2 Barajas de control Los mazos de control se basan en eliminar las amenazas del rival (disrupción). Su base es la ventaja de cartas (es decir, de recursos), la que obtienen bien eliminando varias amenazas del rival gastando un único hechizo o simplemente añadiendo formas de robar más cartas. Su objetivo es llegar a un punto donde para cada amenaza del rival cuenten con varias respuestas, usando algún rematador con la seguridad de la partida controlada. Requieren unas exigencias de maná más elevadas que las del anterior tipo, ya que los hechizos que generan ventaja de cartas suelen ser más caros de jugar, y como tienden a alargar la partida tienen más tiempo para juntar productores y jugar hechizos de elevado coste como amenazas. 2.3.3 Barajas agro-control Mezclan las amenazas rápidas de una baraja agresiva con elementos de disrupción de las de control. Su objetivo es jugar una criatura pronto y mermar las vidas del rival mientras ganan el tiempo necesario para sentenciar la partida con los hechizos de disrupción. Son de las más difíciles de crear y jugar, ya que aunque tienen recursos para todo, sus salidas son menos explosivas que las de las agresivas y sus opciones de eliminar amenazas más restringidas que las de las de control. Dado que necesitan jugar amenazas rápidas necesitan una curva de maná baja como las agresivas. 2.3.4 Barajas de combo e híbrido de combo Los mazos de combo se basan en explotar la interacción de dos o más cartas para crear un efecto beneficioso (sinergia). Aunque la sinergia es necesaria en todas las barajas, las de combo explotan combinaciones especiales con las que crear bucles o efectos elevados. Es difícil hablar de ellas de manera general, dado que dependiendo del tipo de interacción así será la construcción de la baraja, pero por regla general se basan igual que las agresivas en ser lo más rápidas posible, por lo que también optimizan al curva de maná, aunque tienen ciertas variaciones de construcción no relevantes a efectos de este trabajo. Los híbridos de combo son rarísimos de ver y se suelen caracterizar como el otro tipo, ya que los pocos que se han visto son principalmente barajas agresivas con alguna interacción especial que les permita ganar de golpe o barajas de control que optan por usar alguno de pocas piezas a modo de rematador de partida. 2.4 La curva de maná En Magic se denomina curva de maná a la proporción de hechizos de costes progresivos. Para limitar la capacidad de jugar hechizos de costes altos (si no tenemos en cuenta los hechizos que proporcionan maná) la única manera de agregar maná es a través de las tierras, las cuales están limitadas poder jugarse a razón de una por turno. Por ello, en barajas de curva rápida como las agresivas, las de combo y las de agro-controles imprescindible jugar un hechizo en el turno uno, otro en el dos otro en el tres y a partir de ahí seguir jugando amenazas continuadas sin tener un exceso de tierras. Dado que las barajas de control tienen costas más altos, y no solo eso, sino que suelen llevar hechizos que les permitan robar cartas o manipular al baraja, el estudio de sus estadísticas se presenta excesivamente complejo de manera generalista, por lo que nos centraremos en las barajas de curva rápida. Análisis de una curva de maná. 2.5 Karoo: tierras que entran giradas y requieren devolver una tierra que controles a tu mano, pero a cambio producen más de un maná. Shocklands: tierras que agregan maná de un color a elegir entre dos, pero a cambio entran giradas a menos que pagues dos vidas (por eso se les llama Shocklands, por su semejanza con la carta "Shock", que hace dos daños). Fetchlands: estas tierras permiten buscar un tipo de tierra concreto (indicado en la carta) a cambio de girarla, sacrificarla y pagar una vida. Taplands: tierras que agregan maná de un color a elegir entre dos, pero a cambio entran giradas. Painlands: estas tierras agregan o bien maná incoloro, o maná a elegir entre dos colores a cambio de pagar una vida. Hay una Painland especial llamada City of Brass (Ciudad de bronce), que agrega maná de cualquier color a cambio de perder 1 vida cada vez que es girada. Dual lands: tierras que pueden producir mána de dos colores distintos y entran en juego enderezadas. Se consideran tierras básicas según el color que producen. Searchlands: son como las Fetchlands pero estas entran en juego giradas y no te producen daño al sacrificarlas. Storagelands: estas tierras te permiten girarlas para agregarles contadores de almacenamiento ,pueden generar mana incoloro o puedes girarlas para extraerle cualquier número de contadores y así generar una cantidad de mana (de un determinado color o combinaciones de color) igual al número de contadores extraídos. Ability lands: tierras que agregan incoloro, pero a cambio tienen algún tipo de habilidad, por lo que suelen consumir maná más que generarlo. Productores de maná Aunque a efectos de la intención de realizar una aplicación que permita optimizar la base de maná sólo se tendrán en cuenta las tierras, para la teoría en la que se basará dicha aplicación es necesario saber que no sólo las tierras producen maná, sino que también hay todo tipo de hechizos que lo producen. Estos se dividirán en aquellos que una vez jugados producen maná de forma constante y los que tienen un solo uso. Normalmente estas cartas cumplen el rol de aceleradores de maná, ya que permiten obtener más maná en un turno del que se hubiese obtenido al ritmo de tierra por turno. Como dato curioso cabe destacar que las cartas más caras del juego, objetos de coleccionismo con una docena de años de antigüedad y cuyo precio va desde los 250 a los 1500 euros, son simples productores de maná, lo que viene a indicar lo importante que es esta para el juego, aunque muchos de los jugadores que oyen hablar de estas cartas se quedan altamente sorprendidos de que pueda valer tanto algo que “sólo da maná”. 2.6 Tipos de tierras Nuevamente, aunque para nuestro análisis posterior nos centremos en las tierras básicas, es conveniente para entender al teoría conocer los distintos tipos de tierras y que impacto tienen sobre el juego. Básicas: hay una por cada color. Entran enderezadas y agregan un único maná. En esta categoría también se incluyen aquellas que entran enderezadas y dan maná de un colora efectos de curvar. Hay muchísimas más, con ventajas y desventajas dependiendo de los objetivos de cada mazo, pero estas son las más jugadas en barajas de forma general. 2.7 Reglas para la construcción de barajas Antes de seguir hablando sobre como optimizar un baraja es necesario exponer las dos restricciones que tiene la construcción de barajas: El mínimo de cartas de una baraja es de 40 para limitado (formato en el que la baraja se hace con cartas obtenidas al azar) y de 60 para construido (en el que la baraja es llevada por los jugadores). Obviamente, cuanto más se aproxime la baraja a la 60 cartas más probabilidad hay de robar cada hechizo, y puesto que el objetivo e robar los mejores, lo ideal es llevar 60 cartas exactas. A excepción de las tierras básicas, el límite es de cuatro copias por cada carta igual. 3. OPTIMIZACIÓN Y ESTADÍSTICA Como todo juego de azar en el que se pueden establecer los conjuntos de sucesos posibles la estadística ofrece la posibilidad de predecir el comportamiento de una baraja., si bien no de manera exacta, ya que para algo es aleatorio, por lo menos establecer un comportamiento medio. Dado que como se ha expuesto anteriormente este trabajo se va a centrar en la distribución de la base de maná se presupondrá que los hechizos incluidos están bien configurados. Para el análisis de una baraja se usan de manera habitual el cálculo de probabilidades simplificado y el análisis de George Baxter, aunque correctos existen una escala de valoración diseñada por Sean DeCoursey, que es la más completa en cuanto a factores estudiados de la baraja. 3.1 Análisis de George Baxter Probabilidades de robo La manera a priori más sencilla de calcular la cantidad de tierras que debe tener nuestra baraja es simplemente aplicar las probabilidades de robo de tierras en función de las cartas robadas y las necesidades de los hechizos. 3.3 Análisis de Sean DeCoursey Se basa en el análisis en diversas variables que modelan los diferentes aspectos del comportamiento de la baraja en lo que respecta a la producción y uso del maná. Para hacer estos cálculos se usan funciones estadísticas aproximadas, por lo que los cálculos pueden no ser los mejores. 3.3.1 3.2 Se suma la cantidad total de maná que producen todas las cartas de la baraja si llegasen a usarse simultáneamente. Este índice da una idea de la capacidad de producir maná de al baraja en general en partidas largas, por lo que es relevante en el caso de barajas de tipo control. Análisis de George Baxter Una vez establecido el numero de tierras hay que analizar las necesidades de color. Para ello, se siguen los siguientes pasos: 1. Se determinan los cuantas cartas de cada color hay. 2. Se determinan las cantidades de color que son necesarias mirando el total de símbolos de color en las cartas. 3. Se asignan valores a las cartas según su importancia en la baraja. 4. Se pasan loa valores ponderados a porcentajes. 5. Se multiplican los porcentajes por el número de fuentes de maná. Este análisis es el que usan algunos programas de los que permiten analizar barajas, como por ejemplo el MagicWorkstation. 3.3.2 Potencial de maná Porcentaje de maná Se suman todos los productores de maná y se le añaden aquellas cartas capaces de localizar a las primeras, dividiendo el total entre el número de cartas de la baraja. A diferencia del anterior, con este se tienen en cuenta la capacidad de robar productores de maná al principio. Es importante en el caso de las fetchlands, ya que los primeros turnos darán las tierras que se necesiten para producir maná, pero harán que avanzada la partida se despliegue menos maná al haber ido extrayendo tierras de la baraja. 3.3.3 Aceleración Se divide el número de cartas de la baraja entre el número de aceleradores y se multiplica el total por el número de cartas que se robarán hasta el turno donde se jugará el acelerador. Este resultado se multiplica por las posibilidades de alcanzar el maná suficiente como para jugar el acelerador en el turno adecuado, para obtener el porcentaje de las veces que de media se llegará a la aceleración en el turno esperado. 3.3.4 Curva de color Por cada uno de los tres primeros turnos se multiplican las tierras que permitan jugar los hechizos de costes uno, dos y tres por las cartas que se robarán hasta ese punto y este resultado se divide entre el número de cartas de la baraja. Esta medida indica las posibilidades de cumplir con los requisitos de la curva de maná para los tres primeros turnos y debe de ser optimizada en barajas agresivas o de combo. Tener en cuenta el siguiente factor, ya que es necesario llegar a una situación de compromiso entre el mana screw (determinado por la curva de color) y el mana flood (determinado por la densidad de maná). 3.3.5 Densidad de maná Se calcula restando al porcentaje de maná: las fetchlands, los costes de las tierras con funcionalidades añadidas y los costas de las habilidades activadas. Este índice indica el nivel de utilización de las tierras, ya que no es sólo importante conseguir tener la mayor cantidad de tierras posibles si no sacarles el máximo rendimiento. Cuanto más bajo sea este número, más aprovechadas estarán las tierras a media partida cuando no hay hechizos que jugar. 3.3.6 Índice de daños Se multiplican los daños que causa la tierras por su probabilidad de usarse en los primeros cuatro turnos, obteniendo el daño medio. Por otro lado se suman todos los daños que producen las tierras y se divide entre la media para obtener la varianza de daños. Estos valores expresan los daños medios que se sufren debido a las tierras y la variación que se puede esperar en el peor caso, sumándola a la media. 4. ALGORITMO DE OPTIMIZACIÓN DE TIERRAS ELEGIDO El objetivo de nuestro sistema se centra en buscar la mejor combinación de tierras de maná a partir de cualquier baraja base compuesta únicamente por hechizos. Realizar un análisis exhaustivo de todas las posibles combinaciones de tierras posibles incluyendo tierras especiales así cómo todos los factores que pueden influir en la calidad de cada solución requeriría una gran cantidad de recursos tanto computacionales (no podemos tener en cuenta todas las posibilidades en las que puede ordenarse una baraja) cómo humanos, por lo que finalmente se ha optado por simplificar el análisis mucho más de lo esperado en un principio. La primera simplificación llevada a cabo fue suprimir la posibilidad de utilizar tierras especiales, es decir, aquellas que permiten utilizar más de un maná o elegir el color, en ocasiones con algún inconveniente que hace que no resulten siempre recomendables o bien menos apropiadas que otras, dependiendo de la situación. Una posibilidad para modelar estas cartas podría haber sido asignar un valor “calidad” a cada tierra especial, que a través del cual decidir si utilizarla o no. No obstante, este factor sería general y no tendría en cuenta las posibilidades de combinar las ventajas e inconvenientes específicos de la carta con las posibilidades que ofrece el resto de la baraja. Nuestra baraja base estará compuesta por tanto únicamente por hechizos, no dando la posibilidad de analizar el empleo de tierras especiales. En un principio se pensó en optimizar también el número total de cartas a utilizar, lo cual es bastante sencillo, ya que el valor óptimo es 60, por lo que eligiríamos el mínimo número de cartas posible, pero sin llegar nunca a estar por debajo de 60 cartas (el caso de juego de 40 cartas no se tiene en cuenta directamente ya que suele emplearse en el juego en el que las cartas son aleatorias por lo que no podríamos optimizar en función de estas). Para ello, se pensó en que la baraja base de entrada tuviese un número de cartas de hechizo superior a las necesitadas, y cada hechizo tuviera una valoración. En función de la valoración irían descartandose hechizos hasta que la suma total de cartas (hechizos más número de tierras óptimo para dichos hechizos) fuera inferior a 60, quedándonos con la baraja elegida en la iteración anterior a la que nos dió un número total de cartas inferior a 60. Por tanto unicamente nos centraremos en la elección del número de tierras básicas de cada uno de los cinco colores para una batería de hechizos dada cómo base (almacenada en un fichero). El algoritmo de optimización implementado para este objetivo lo dividimos en dos fases: 4.1 Optimización del número de tierras de cualquier color En el algoritmo diseñado inicialmente para el cálculo de la cantidad de tierras, se ha establecido la necesidad típica de las barajas agresiva: de jugar tierra durante los tres primeros turnos para jugar como mucho un par más durante el resto de la partida, que desde el punto de vista del jugador agresivo no debería pasar más allá del sexto-séptimo turno. Para que se cumplan estos requisitos se calculan las probabilidades de tener al menos una tierra en el turno uno, al menos dos en el turno dos y el equivalente en el turno tres. Obviamente con estas restricciones cualquier sistema experto deducirá simplemente que cuantas más tierras mejor, en contraposición a lo que se ha dicho anteriormente sobre la necesidad de robar no sólo tierras (mana flood). Para ello se añade una restricción más que será la probabilidad de no haber robado más de cinco tierras para el turno octavo. Ahora el sistema debe optimizar todas las probabilidades haciendo los cálculos estadísticos pertinentes: Probabilidad de robar al menos “x” cartas: 1 - ∑ probabilidad de robar exactamente 0,1,2 ... x-1 Probabilidad de robar menos de “x” cartas: ∑ probabilidades de robar exactamente o,1,2 ... x-1 Probabilidad de robar 0 cartas: П probabilidad de cada robo Probabilidad de cada robo: numero de casos favorables numero de casos posibles - numero de robos anteriores Finalmente, dada la complejidad que ha supuesto realizar este análisis de probabilidades, así cómo su integración en la valoración de cada caso, se ha optado por calcular el número óptimo total de tierras a la utilización de una función que depende del número total de maná de cualquier color requerido por todos los hechizos, así cómo el número de colores distintos que componen los hechizos de la baraja: Por tanto, con el algoritmo empleado en este paso, la solución viene determinada directamente por una función que depende directamente de las variables de entrada, por lo que no existe en ningún caso un algoritmo de optimización mediante búsqueda. Esta tarea se desarrollará por tanto exclusivamente en el siguiente paso. 5. XPRESS MP En un principio se trató de hacer la optimización utilizando la herramienta Xpress MP de la compañía Dashoptimization. Este programa permite realizar la búsqueda de la solución óptima para un determinado problema mediante la propia aplicación de manera gráfica o utilizando el lenguaje Mosel, pero también permite utilizar la resolución de problemas dentro de programas realizados en otros lenguajes, incluyendo Java. La implementación de la resolución del problema con Xpress en Java es bastante sencilla. Tan sólo es necesario: Crear las variables que componen el problema. En este caso serían cinco, una para cada color de tierra. Es importante tener en cuenta al definir estas variables que se trata de números enteros y no reales (el número de cartas debe de ser entero). Definir un objetivo, es decir, una función a maximizar para los distintos valores de las variables del problema. Definir unas restricciones (constrains). En este caso sería un número fijo que deben sumar todas las variables, el número de tierras de cualquier color calculado en el paso anterior. Solucionar el problema. El propio programa se encarga de buscar la solución óptima, siendo para el usuario transparente el algoritmo de búsqueda empleada por el programa, aunque debe tenerse en cuenta que dependiendo de las restricciones asignadas la eficiencia de la resolución puede variar. El empleo de una fórmula directa es más sencillo en este caso que en el siguiente, para el cual no se conocen funciones fiables. 4.2 Optimización del número de tierras de cada color En este segundo paso del algoritmo de optimización buscaremos el número de tierras óptimo que deben de asignarse a cada color a partir de un número total de tierras (de todos los colores) calculado en el paso anterior. El algoritmo elegido consiste en la búsqueda de la combinación de tierras de cada color que maximiza una función de evaluación. La dificultad se centra por tanto en la elección y cálculo de dicha función de evaluación. A continuación se muestra gráficamente la solución al problema del ejemplo más sencillo. Aquél en que la función a maximizar es un beneficio (profit), el cual depende de dos variables (asignadas a cada eje) que representan recursos, y en el que existen dos restricciones (dos rectas que definen el área de soluciones válidas). La función de evaluación elegida consiste en valorar la necesidad de tierras de cada color para los primeros turnos. No se consideran todos los turnos (aparte de por la gran necesidad de recursos que necesaria) por el hecho de que cuando ya han transcurrido una serie de turnos es de suponer que (salvo una probabilidad extremadamente baja) se contará con una gran cantidad de tierras de cada color, por lo que no será necesario analizar estos casos. Por tanto, el color de las tierras se asignará de forma que ofrezcan una mayor probabilidad de disponer de cada color cuanto más sea necesario dicho color. La función a maximizar elegida es la suma de los productos de la necesidad de requerir cada color por la probabilidad de disponer de este, evaluado para un reducido número de turnos, es decir: Cómo puede observarse, la solución óptima es tan sencilla cómo asignar todos los recursos a una de las variables, tomando su valor máximo, mientras que la otra variable tomaría el valor cero. Dependiendo de la pendiente de la función del beneficio, también podría darse el caso de que la solución sea asignar los recursos a la otra variable (y ninguno a la primera), pasando por las posibilidades de existir un rango de soluciones óptimas (que serían dos lados del área de soluciones válidas) o bien una única solución en la cual ambas variables tomarían valores no nulos y que vendría dada por la otra esquina del área de regiones válidas. A la hora de implementarlo con nuestro caso surge el problema de que la función a maximizar (suma de los productos de la probabilidad de disponer de tierras de cada color con la probabilidad de requerirlo) no es lineal (la , ya que la probabilidad de disponer de tierras de cada color no es directamente proporcional al número de tierras disponibles de cada color, sino que depende de la función (aproximada pero prácticamente exacta): El exponente número de cartas robadas indica (cómo todo exponente) el número de veces que se ha de multiplicar dicha expresión por sigo misma, sin embargo, en cada término de la expresión el número de cartas totales disminuiría en una unidad, por lo que esta formula no sería completamente exacta a pesar de ser un muy buena aproximación. En esta expresión la variable (en realidad variables) del problema serían el número de tierras de cada color y cómo puede observarse es un término con un gran exponente (el número de cartas robadas serían 7 para el primer turno). Con las librerías en Java de Xpress se pueden utilizar expresiones de orden superior al lineal, pero no de orden superior al cuadrático, pero no potencias de orden superior, cómo resulta ser el caso. Si intentamos multiplicar dos expresiones de orden cuadrático cuyo resultado es una expresión de orden superior al cuadrático, el resultado es una excepción del tipo java.lang.ArithmeticException. Por ello se intentó modificar la expresión de la probabilidad de disponer de un determinado color reduciéndola a una simple aproximación: multiplicar la probabilidad de sacar una carta de tierra de dicho color al sacar una única carta de la baraja, por el número de cartas robadas (7 para el primer turno). De esa forma, se supone que la probabilidad de que al sacar dos veces una carta de toda la baraja sea una de las deseadas, es el doble que la probabilidad de sacarla en un único intento, lo cual en realidad es falso, pero en determinados casos se aproxima a la realidad. La fórmula de probabilidad sería por tanto: ∑ Pr ob . requerirColor Pr ob . disponerColor = colores Pr ob . requerirColor numCartasRobadas ∑ colores numCartasTotales numTierrasColor Lo cual es una función completamente lineal, formada por la suma de cada una de las variables del problema multiplicadas por un determinado valor (el cual es calculado directamente sin necesidad de optimización a partir de lo datos iniciales del problema), del tipo: N A x i i i1 Por lo que es posible Xpress. El código en únicamente para el significantemente más Xpress) resultaría: maximizarla muy fácilmente utilizando Java para la función de maximización primer turno (para sucesivos sería larga la introducción de la fórmula en import com.dashoptimization.*; public class magic { public static void main(String[] args) { XPRB bcl; /* Numero de tierras de cada color: */ XPRBvar xW, xB, xG, xU xR; XPRBprob problema; bcl = new XPRB(); /* Inicializar BCL */ problema = bcl.newProb("Magic"); /* Crear problema*/ /****VARIABLES****/ xW = problema.newVar("blanco"); xB = problema.newVar("negro"); xG = problema.newVar("verde"); xU = problema.newVar("azul"); xR = problema.newVar("rojo"); /* Asignar a las variables la condición de enteros */ xW.setType(XPRB.UI); Lo cual es una expresión que depende linealmente del número de tierras de cada color que añadamos a la baraja, por lo que se podrá utilizar con Xpress. Por tanto, la función a maximizar en esta implementación sería: xB.setType(XPRB.UI); xG.setType(XPRB.UI); xU.setType(XPRB.UI); xR.setType(XPRB.UI); /****OBJETIVO****/ /* Función a maximizar */ problema.setObj( xW.mul(pR(W)).add( xB.mul(pR(B)).add( xG.mul(pR(G)).add( xU.mul(pR(U)).add( xR.mul(pR(R))))))); /****RESTRICCION(ES)****/ /* Definir número de cartas fijo */ problema.newCtr("numeroTierras", xW.add(xB.add(xG.add(xU.add(xR)))) caso no disponemos de restricciones que puedan dar lugar a que en algún caso se combinen valores de cada variable. Por tanto, la función de maximización utilizada no sirve, debido al error que se ha introducido al realizar la aproximación de la función de probabilidad. La función de probabilidad aproximada era lineal, por lo que cada vez que se incrementaba en un valor la variable número de tierras de un color, la probabilidad crecía siempre un valor fijo (llegando incluso a superar la probabilidad de 1, lo cual en el caso real es imposible), por lo que a la hora de asignar una nueva tierra a un determinado color siempre resultaba mejor asignársela al color con mayor peso. Esto no hubiera ocurrido si hubiéramos podido implementar la función exacta, ya que si se fueran asignando las tierras una a una, al principio se asignarían al color de mayor peso, pero conforme hubiera un gran número de tierras de un color la probabilidad de tener tierras de dicho color apenas se incrementaría por añadir una tierra más, por lo que se añadirían a otros colores, resultando un reparto de tierras entre todos los colores utilizados. A continuación puede observarse una gráfica en la que se compara la función aproximada (lineal) con la función exacta. ).eql(numTierras()) ); /****RESOLVER/MAXIMIZAR****/ problema.maxim(""); } } Debe tenerse en cuenta que aunque este es la parte del código que interacciona con las funciones de Xpress, faltaría añadir todas aquellas funciones que realizan calculos directos de probabilidades en función de los datos de entrada (baraja). Cómo puede observarse en el código, faltarían por implementar las funciones: numTierras(): Calcula directamente el número de tierras a utilizar a partir de los datos de entrada. pR(int i): Producto de la probabilidad de requerir el color “i” por el número de cartas robadas en el primer turno (7) entre el número de cartas totales de la baraja (incluyendo tierras). Los valores resultantes de la optimización se extraerían después de resolver el problema utilizando la función get.Sol(), invocada sobre la variable. A la hora de comprobar los resultados nos encontramos que los valores no son los esperados, el número de tierras que se asignan a cada color es cero para todos los colores excepto para aquél cuya función “probabilidad de requerir el color por el número de cartas robadas en el primer turno entre el número de cartas totales de la baraja” es mayor, es decir, se le ha asignado más peso en la función lineal a maximizar. Esto se debe a que nos encontramos una función lineal cómo la del ejemplo, en el cual observábamos los mismos resultados (una variable valía cero y la otra el máximo), sin embargo en nuestro En la gráfica puede observarse cómo para los primeros valores la función aproximada se aproxima a la real, sin embargo, para muy pocos valores. Y mientras que la función aproximada crece linealmente, la función real cuantas más tierras añadamos, menos crece la probabilidad, la cual nunca supera uno. 6. IMPLEMENTACÍON EXCLUSIVAMENTE EN JAVA Dada la dificultad para implementar las formulas estadísticas más complejas en Xpress MP se ha decidido crear una pequeña aplicación en Java para demostrar algunos de los sistemas anteriormente expuestos. Cabe recordad que dicha aplicación se centra en el ajuste de tierras para una baraja agresiva sin ningún tipo de acelerador y contando sólo con tierras básicas. Aunque este ejemplo es muy sencillo y no tiene prácticamente ninguna aplicación real, es interesante para comprobar la manera de implementar un optimizador. http://www.it.uc3m.es/jvillena/irc/indice.html La función utilizada para el cálculo del número de tierras óptimo así cómo la función de evaluación empleada para calificar una determinada combinación de número de tierras para cada color son las descritas anteriormente. [2] Página de Dash Optimization: El algoritmo empleado para buscar los valores de las variables (tierras de cada color) que maximiza la función ha sido el de “búsqueda exhaustiva”. Es decir, probar todas las combinaciones posibles. El uso de dicho algoritmo se debe a que no existen otras restricciones que condicionen dejar de explorar un determinado camino, cómo podrían emplearse en algoritmos de vuelva atrás (“backtracking”). Una restricción que podría añadirse sería la posibilidad de evitar aquellas combinaciones en las cuales se asignan tierras de colores no utilizados por ningún hechizo de la baraja. Esto podría añadirse simplemente en el momento de calcular la función de evaluación y evitaría realizar este cálculo. http://www.dashoptimization.com/home/downloads/pdf/embed.p df http://www.dashoptimization.com/home/secure/documentation/bc l/dhtml/javadoc/index.html http://www.dashoptimization.com/home/downloads/evalguide.pd f http://www.dashoptimization.com/home//cgi-bin/example.pl [3] Aplicaciones de optimización con Xpress MP: http://www.optiware.co.kr/filedown/books/book.pdf [4] Estrategias de métrica de mana: http://mtgsalvation.com/500-mtgsclassics-tmm2.html [5] Página oficial de Magic: The Gathering: http://www.magicthegathering.com 7. CONCLUSIONES Mediante sistemas de optimización se pueden conseguir calcular las soluciones que maximizan determinadas funciones. A la hora de diseñar dichos sistemas resulta vital la creación de un modelo que sea lo suficientemente complejo cómo para poder obtener unos resultados significativos pero siempre dentro de nuestros propios límites y de las herramientas de cálculo. Xpress MP es un programa que permite modelar estos sistemas de optimización, así cómo realizar la resolución del problema a partir del modelo que hayamos creado. Es una herramienta bastante potente que, aparte de tener su propio lenguaje de modelado y sus propias herramientas que muestren gráficamente las soluciones, permite su integración en programas realizados con otros lenguajes de programación. Sin embargo, es limitado y no permite la utilización de expresiones de orden superior. Dada la complejidad del análisis estadístico de este tipo de juego los jugadores profesionales concluyen que la mejor manera de probar la eficacia de una baraja así como las modificaciones que necesita es a través de un testeo intensivo, es decir, jugar numerosas partidas de prueba contra los posibles adversarios, comprobando su eficacia a si como el efecto de las modificaciones por el antiguo sistema del ensayo y error. Si bien esto abre un nuevo abanico de posibilidades como la creación de sistemas de testeo o de valoración de los resultados obtenidos, la complejidad de estos sería incluso superior a la de los análisis expuestos en esta memoria. 8. BIBLIOGRAFÍA [1] Material de la asignatura Inteligencia de Redes de Comunicaciones: [6] Programas analizadores de barajas: http://www.magicworkstation.com [7] Comunidad de jugadores de Magic: http://www.starcitygames.com [8] Foro sobre Magic: The Gathering: http://www.ntgsalvation.com