<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta>
      <issn pub-type="ppub">1613-0073</issn>
    </journal-meta>
    <article-meta>
      <title-group>
        <article-title>Diseño y Optimización de un Agente Autónomo para el Juego Magic: the Gathering</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Pablo Ganivet Pérez</string-name>
          <email>pabloganivet@correo.ugr.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Antonio M. Mora García</string-name>
          <email>amorag@ugr.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff2">2</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Nuria Medina Medina</string-name>
          <email>nmedina@ugr.es</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Optimización</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Algoritmo Evolutivo</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Algoritmo Genético</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>OpenMTG.</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Workshop</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff3">3</xref>
          <xref ref-type="aff" rid="aff4">4</xref>
        </contrib>
        <contrib contrib-type="editor">
          <string-name>Agente Autónomo, Inteligencia Artificial, Magic: The Gathering, Juego de Cartas Táctico,</string-name>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Autonomous Agent</institution>
          ,
          <addr-line>Artificial Intelligence, Magic: The Gathering</addr-line>
          ,
          <country>Tactical Card Game</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Depto. Lenguajes y Sistemas Informáticos, ETSIIT-CITIC, Universidad de Granada</institution>
          ,
          <country>España</country>
        </aff>
        <aff id="aff2">
          <label>2</label>
          <institution>Depto. Teoría de la Señal, Telemática y Comunicaciones, ETSIIT-CITIC, Universidad de Granada</institution>
          ,
          <country>España</country>
        </aff>
        <aff id="aff3">
          <label>3</label>
          <institution>Optimization</institution>
          ,
          <addr-line>Evolutionary Algorithm, Genetic Algorithm, OpenMTG</addr-line>
        </aff>
        <aff id="aff4">
          <label>4</label>
          <institution>Proceedings Name</institution>
          ,
          <addr-line>Month XX-XX, YYYY, City, Country</addr-line>
        </aff>
      </contrib-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Algoritmo Genético con dos versiones diferentes (co-evolutiva y simple), obteniendo resultados prometedores. Además del agente, en el estudio se ha desarrollado un simulador que permite jugar partidas del juego, tanto con jugadores humanos, como con agentes autónomos.</title>
      <sec id="sec-1-1">
        <title>1. Introduction</title>
        <p>Se conoce por el nombre de Tactical Collectible Card Games (TCCG) a aquellos juegos de cartas
en los que generalmente se enfrentan dos jugadores, que suelen contar con una base de cartas en
constante crecimiento y que permiten la creación de un repertorio propio o mazo, los cuales suelen
contar con una temática y explotan una faceta concreta de los mismos. Dichos juegos cuentan con un
alto componente estratégico, tanto antes de la partida (creación del mazo) como durante la misma, y
requieren de la capacidad de previsión para adelantarse al oponente y a las cartas que pueden aparecer.
Para ello suelen aplicarse componentes estadísticos para los valores de las cartas, ya que se posee una
información parcial e incompleta, cuyo correcto manejo es clave.</p>
        <p>Normalmente hay un componente de azar, ya que no se usan todas las cartas de un mazo en una
partida, pero hay un fuerte peso de gestión de recursos y se requiere del jugador que sea capaz de</p>
        <p>2020 Copyright for this paper by its authors.
CEUR</p>
        <p>ceur-ws.org
manejar una reserva y unos pagos, en este caso la reserva con la que se pagan los costes de las cartas se
llama maná. El objetivo del juego es derrotar a un oponente, que cuenta con unos puntos de vida, que
se irán reduciendo a medida que va recibiendo ataques generados por medio de cartas que juega el rival.
Entre dichas cartas existe la posibilidad de crear esbirros, que también podrán atacar al jugador o a sus
propios esbirros. Las cartas se juegan sobre un tablero y cada una tiene un coste en maná para poder
jugarse.</p>
        <p>
          En este trabajo nos centramos en el TCCG llamado Magic: The Gathering [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ], uno de los más
famosos y extendidos, sobre todo en su versión de juego de mesa y menos como videojuego.
        </p>
        <p>
          El objetivo es diseñar y probar un agente autónomo capaz de jugar al juego de manera eficiente y
efectiva y para ello, nos basaremos en la creación de un motor de comportamiento que modele las
decisiones que tomaría un jugador experto durante una partida. Dicho conjunto de reglas será
posteriormente optimizado por medio de un Algoritmo Genético [
          <xref ref-type="bibr" rid="ref2">2</xref>
          ], una metaheurística inspirada en la
evolución de las especies en la naturaleza. De manera que ésta modela soluciones a un problema como
individuos (vectores de valores), los cuales deben ser evaluados para asignarles un fitness y,
posteriormente, los mejores son seleccionados, recombinados (cruce) para generar descendientes
(nuevas soluciones con lo mejor de sus ‘padres’) y mutados para introducir variabilidad en la búsqueda
de los mejores individuos, es decir, para explorar el espacio de soluciones posibles. Hasta donde
sabemos, existen muy pocas implementaciones de agentes de MtG en la literatura y ninguna se basa en
el uso de Algoritmos Evolutivos.
        </p>
        <p>La principal razón de esto es la falta de entornos de simulación en los que probarlos y por esa razón,
como paso previo, se ha implementado un simulador que permite jugar partidas de MTG tanto a
jugadores humanos, como a agentes. Este también se considera una contribución del trabajo.</p>
      </sec>
      <sec id="sec-1-2">
        <title>2. Magic: The Gathering</title>
        <p>
          Magic: The Gathering [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ] o como nos referiremos en este trabajo, MTG, es un juego de cartas cuyo
objetivo es eliminar al oponente, siguiendo una de estas dos estrategias (principalmente): Vidas o
Desgaste. Esto se debe a que ambos jugadores tienen un contador de vida, inicialmente con valor 20, el
cual se reduce con cada ataque recibido, dependiendo del tipo de golpe encajado, pero que también
puede aumentar mediante algunas cartas. Si este contador llega a cero o menor el jugador será
eliminado. El mismo resultado se puede alcanzar consiguiendo que el mazo de tu oponente se agote; ya
que, en cada turno, se roba una carta del mazo personal. De modo que si un jugador consigue sobrevivir
mucho tiempo este mazo puede agotarse y, si en el siguiente turno, éste no dispone de cartas para robar,
sería eliminado sin importar la vida que tuviese.
        </p>
        <p>Una partida estándar de MTG se ve como se muestra en la Figura 1, con ambos jugadores
enfrentados, manteniendo las cartas de la mano en secreto y con el mazo siendo oculto a ambos
jugadores. Se puede apreciar un grupo de cartas coloreadas, estas son las Tierras, las cuales se usan,
habitualmente, para generar maná (para pagar el coste asociado a las cartas). La gestión del maná es un
punto muy importante de la partida. Sólo se puede jugar una por turno a no ser que se utilicen cartas
especiales que alteren dicha restricción, los cuales pueden ser genéricos o de un color concreto. Los
costes de las cartas suelen venir dados por un número y varios símbolos, el número indica el maná a
pagar de cualquier color y los símbolos indican el precio añadido que tiene de un color concreto. Una
vez una carta de la mesa se activa se debe girar y no se volteará de nuevo hasta que vuelva a tocarle a
ese jugador.</p>
        <p>Las Criaturas son cartas que al ser jugadas entran a la mesa y permiten atacar y defender, su uso es
similar al del maná, si es usada en un ataque, no podrás usarla en la defensa ya que será girada en el
proceso. Las criaturas poseen unas estadísticas X/Y donde X representa el valor de ataque y la defensa
viene dada por Y. Las criaturas recuperan toda su defensa al final de cada turno, propio y del oponente.
En un supuesto de ataque, éste tiene oportunidad de defenderse, eligiendo qué criaturas quiere usar para
enfrentarse a cada criatura atacante enemiga. Tras un ataque, las criaturas que hayan sido derrotadas
son enviadas al cementerio, allí están las cartas disponibles para que ambos jugadores las vean, pese a
que cada cementerio es personal.</p>
        <p>Figura 1: Imagen conceptual de una partida de Magic: The Gathering.</p>
        <p>En la Figura 2, se muestran los distintos apartados que conforman una carta, en este caso llamada
Enormous Baloth. En concreto, en esta carta el tipo sería Bestia, que no tiene mucha repercusión debido
a que no hay cartas en la simulación que requieran un tipo específico. También se incluyen las
habilidades, pero al no haber ninguna, se incluye un fragmento de su historia o descripción para
completar. Para pagar su coste habría que gastar seis manás de cualquier color y además otro verde,
siete en total. Su ataque es de siete y habría que hacerle siete puntos de daño o más en un turno para
eliminarle. Una criatura bastante cara, que no se puede jugar hasta el denominado Late Game debido a
su coste.</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Figura 2: Ejemplo de una carta del juego en MTG.</title>
      <p>La estructura de la partida se organiza en rondas, divididas en turnos, cada jugador cuenta con un
turno que se compone de varias fases las cuales siguen la siguiente composición y orden:
• Mantenimiento: donde las criaturas, encantamientos y el maná se voltean para poder volver a
usarlos. El jugador, además, debe robar una carta para reabastecer su mano.
• Principal: Momento en el que se pueden jugar las cartas y permite iniciar la estrategia a seguir.
• Combate: dividido en varias sub-fases que permiten, elegir las criaturas que atacan, elegir las
que defienden y a que criaturas se enfrentan, ordenar los defensores para elegir cuales se
enfrentarán primero y finalmente actualizar cuanto daño ha sufrido cada jugador o criatura.
Por último, se pueden usar cartas de Hechizos, las cuales tienen múltiples efectos y dependen
del mazo elegido. Estos efectos suelen ser inmediatos y una vez jugadas se envían al
cementerio, esto es de gran utilidad ya que se permite un máximo de 4 cartas iguales por mazo,
lo que facilita calcular la probabilidad de que un oponente repita una acción con ellas.</p>
      <sec id="sec-2-1">
        <title>3. Estado del arte</title>
        <p>Desde el comienzo del estudio de los Agentes Autónomos, los juegos de cartas han sido un gran
aliado, como se ha mencionado, al igual que en el aprendizaje humano. Los juegos permiten un entorno
controlado para plantear problemas o situaciones que evidencien un comportamiento o tendencia.</p>
        <p>
          Esto ya se pudo estudiar en el 2003 en Opponent Modelling in Póker [
          <xref ref-type="bibr" rid="ref3">3</xref>
          ] donde se utilizaban modelos
estadísticos para estudiar al oponente y las posibilidades de la baraja, para incluso ganar a jugadores
profesionales del Texas hold’em. En estos modelos se estudiaba cada partida jugada para predecir
comportamientos y por tanto calcular el valor de la mano y la posibilidad de un farol del oponente.
Posteriormente y con el auge de internet se empezó a popularizar los juegos en línea y permitieron que
estos agentes se pudiesen entrenar con el público, de esta manera se pueden encontrar estudios como
[
          <xref ref-type="bibr" rid="ref4">4</xref>
          ], que ya realizaron un sistema que evaluaba las opciones disponibles de un jugador de MTG y escogía
la más adecuada en términos de coste/beneficio.
        </p>
        <p>Se utilizaba para ello un algoritmo Monte Carlo Tree Search (MCTS), es decir, un árbol de
decisiones en el que se simulan todas las opciones posibles de acciones en cada instante y se elige la
mejor por medio de un algoritmo MINMAX. Pero el mayor problema de este sistema es que en el árbol
de decisión deben contenerse todas las posibles opciones y en los casos de una baraja de cartas de un
mínimo de 60, obtenemos 8,23 · 1081 posibilidades para la sucesión de cartas que podría obtener cada
jugador. A su vez, deberíamos añadir la información incompleta que se maneja y por tanto convierte el
problema en un cómputo imposible para el agente.</p>
        <p>Para resolver dicha problemática se deben definir estados más acotados y situaciones generales que
cuenten con acciones recomendadas. En este mismo artículo se puede encontrar el resultado del uso de
MCTS en MTG, aconsejando al agente buscar opciones para derrotar a otro oponente autónomo que
trabajaba con un MCTS centrado en evaluar opciones recomendadas por un jugador experto. El
resultado concluyó en que un 95% de las jugadas que realizaba el agente con asistencia, eran mejores
que las del que usaba MCTS sobre el espacio global de acciones.</p>
        <p>Es imposible hablar de la aproximación de los agentes autónomos a los juegos, concretamente a los
TCCG sin mencionar HearthStone. Este juego permite una gran variedad de sistemas para implementar
un agente autónomo, ya que se trata de un sistema cerrado., en el que los recursos se adquieren de
manera pasiva y los ataques son dirigidos al oponente o a una criatura concreta, añadiendo un sistema
de Héroes, que representan al jugador y le otorgan habilidades y cartas únicas, pudiendo tomarse como
una versión de los Colores o Clanes de MTG. Por tanto y debido a la gran variedad de ejemplos y a lo
estandarizado que se encuentra en el campo, se pueden tomar dichos agentes como precursores e
inspiración para este propio trabajo.</p>
        <p>
          De esta manera se pueden diferenciar aquellos que gestionan una partida y los que generan mazos
para la misma. Los agentes que generan mazos para una partida [
          <xref ref-type="bibr" rid="ref5">5</xref>
          ], deben tener en cuenta el valor de
la carta, su utilidad y su función combinada con las demás cartas, así como la cantidad de las mismas.
Por otro lado, estos agentes [
          <xref ref-type="bibr" rid="ref6 ref7">6,7</xref>
          ] deben probar las cartas y ello conlleva a que suelan requerir de la
combinación con un agente que juegue la propia partida.
        </p>
      </sec>
      <sec id="sec-2-2">
        <title>4. Simulador de MTG</title>
        <p>
          Durante la fase inicial del trabajo se hizo una búsqueda de simuladores o juegos de código abierto
que implementasen la funcionalidad de MTG. Se localizaron algunas alternativas, pero no se pudo
encontrar un sistema que permitiese enfrentar dos jugadores autónomos. Por lo que se optó por la
implementación en Python de Hlynur David Hlynsson, llamada Open-MTG [
          <xref ref-type="bibr" rid="ref8">8</xref>
          ], que proporcionaba
muchas de las funcionalidades requeridas para nuestro estudio, si bien, debido a algunos errores de
programación, fallaba en algunas ocasiones y en general tenía un funcionamiento lento. A esto había
que sumar que no contaba con un jugador que fuese capaz de tomar decisiones de manera autónoma, ni
de sistemas que permitieran incorporarlo, debido a que las funciones estaban muy entrelazadas entre sí
en cuanto a funcionalidades y llamadas; por ello se decidió usar dicho proyecto como punto de partida
y trabajar sobre las ventajas de un mazo y un sistema de cartas bien implementados.
        </p>
        <p>Por tanto, el esfuerzo inicial del proyecto se empleó en pulir el entorno de juego/trabajo
(Framework), así como aumentar sus funcionalidades, para poder lanzar agentes autónomos y para
extraer información detallada de las partidas, que permitiera evaluar el rendimiento de dichos agentes
más allá de quién gana cada combate. Dicha información es muy relevante para el problema de la
optimización de agentes.</p>
        <p>El simulador finalmente desarrollado, OpenMTG.ai, permite, por tanto, jugar partidas de MTG con
un gran mazo de cartas (una parte de las 19000 existentes) y las reglas fundamentales implementadas
(algunas de las 2000 que tiene el juego), así como toda la lógica del juego. Permite además que jueguen
jugadores humanos o autónomos, pudiendo enfrentar incluso dos agentes entre sí en tiempo de
simulación, es decir, resolviendo partidas en fracciones de segundo. Junto a esto se obtienen datos de
log, que describen gran parte de la actividad de los jugadores durante la partida, facilitando evaluar la
calidad de un agente, por ejemplo.</p>
        <p>Dicho simulador, implementado en Python, que se considera también una contribución de este
trabajo, se puede encontrar en la URL: https://github.com/PabloGanivet/OpenMTG.ai. Se trata de un
entorno que funciona en modo texto, dado que para este trabajo no era necesario un entorno visual.</p>
      </sec>
      <sec id="sec-2-3">
        <title>5. Diseño del Agente</title>
        <p>El juego MTG requiere de planificación y de compromiso a una estrategia, ya que la mayoría de
partidas se resuelven dependiendo de quién se centre más en su objetivo, ya sea eliminar las criaturas
enemigas, reducir la vida del oponente a cero o agotar el mazo; por lo que cada decisión debe responder
a un acercamiento constante al objetivo. Por ello, cada turno requiere de una organización y selección,
cada elección elimina unos recursos y deben optimizarse al máximo.</p>
        <p>En cuanto a los métodos de resolución de cada turno, durante el proceso de creación del agente se
han elegido aquellas estrategias que sean más representativas de las humanas y que muestren distinto
nivel de complejidad. Estas estrategias ayudan a recopilar información añadida sobre los mazos, ya que,
durante el proceso, el ratio de victorias no ha sido equitativo en todo momento, lo que evidencia una
desigualdad para un mazo en determinadas ocasiones. De este modo, se han considerado las estrategias:
• Random: elección aleatoria de la jugada, simplemente respetando las reglas del juego. Se usará
como rival un sparring.
• Greedy: es una aproximación que toma las decisiones que proporcionan una mayor ganancia,
o consumo, en un momento dado, sin pensar en una estrategia futura. En los ataques sigue
atacando con todo lo que pueda y en las defensas intenta eliminar a la mayor cantidad de
criaturas a su alcance.
• Minimax: árbol de búsqueda. Se implementa un modelo de MCTS que, como ya se mencionó,
puede implicar un coste computacional demasiado elevado y que no tiene por qué traducirse en
la mejor jugada o una jugada superior a los demás.
• Heurística: se utilizan una serie de reglas basadas en conocimiento experto para guiar las
decisiones del agente. Estas reglas pueden ser listas de acciones, similares a la normativa del
juego, por ejemplo: “Nunca hagas que un hechizo tuyo tenga como objetivo una carta de tu
propiedad o a ti mismo”, o pueden ser mucho más generales como “Esperar a ver qué hechizos
tiene un enemigo antes de jugar una carta importante”. En este caso, se vuelve a recaer en el
problema de tener que vaticinar cada situación o problema, pero proporciona soluciones
estándar.</p>
        <p>Siempre debemos tener en cuenta que estas soluciones pueden no ser lo que deseamos, pues no se
llega a pensar más allá de lo estándar y por ende no obtenemos soluciones distintas a las humanas,
solo un compendio de las mismas, pero en un uso más depurado.</p>
        <p>El agente hace un cálculo de una función de fitness, que indica los beneficios de jugar una carta en
un momento dado de la partida. Ésta se calcula combinando una serie de parámetros según las
expresiones que se muestran en la Tabla 1.</p>
        <p>De modo que el agente elegirá la carta que maximice el valor de fitness de entre las posibles.
Para añadir que la estrategia a seguir por el agente sea ofensiva/agresiva o defensiva, se incluyen
factores ponderadores al cálculo del fitness antes mencionado, en concreto son los mostrados en la
Tabla 2. Para calcular las variables de las que depende el cómputo de dichos factores, se realizan
simulaciones de jugadas de cada posible carta en el entorno OpenMTG.ai. Además, en dicho cálculo
se consideran las variables Agresividad (aggressive ratio) y Defensivo (defensive ratio), que decide
previamente el jugador en base a la estrategia que quiera que siga el agente.</p>
        <sec id="sec-2-3-1">
          <title>Tabla 1</title>
          <p>Expresiones utilizadas para la valoración de cada tipo de carta a jugar.</p>
          <p>El agente es también capaz de manejar hechizos, si bien su uso es muy complejo, por lo que se han
implementado reglas de alto nivel, basadas en el conocimiento de un experto para gestionarlo de
manera somera, y dependiente también de los factores Agresividad y Defensivo antes mencionados.</p>
        </sec>
        <sec id="sec-2-3-2">
          <title>Tabla 2</title>
          <p>Expresiones utilizadas para la ponderación de las estrategias a utilizar.</p>
        </sec>
      </sec>
      <sec id="sec-2-4">
        <title>6. Optimización del Agente con un Algoritmo Genético</title>
        <p>A la hora de aplicar la optimización evolutiva al motor de comportamiento de los agentes se han
seguido dos enfoques para el Algoritmo Genético (AG): el primero (versión UNO) se basa en utilizar
dos poblaciones, que realizan una co-evolución, ya que ambas poblaciones compiten entre sí para ir
mejorando a los agentes. En la segunda propuesta (versión DOS), se sigue una línea de actuación más
convencional, en la que cada mazo cuenta con una población y se entrena frente un agente estático con
valores heurísticos para las reglas, denominado sparring. Como aclaración, consideraremos dos tipos
de agentes/jugadores: Gold, el cual seguirá una estrategia ofensiva/agresiva, centrada en el daño y
Silver, que será un agente defensivo, basado en el aguante y desgaste del rival. Cada uno contará con
un mazo adaptado para dicha estrategia.</p>
        <p>Cada individuo del AG será un vector que tendrá valores para las variables: costmin (coste de maná
mínimo que debe tener el jugador para lanzar determinados hechizos importantes), powmin
(fuerza/daño mínimo que debe tener asociado una criatura para atacarla), toughmin (resistencia/salud
mínima que debe tener asociada una criatura para atacarla), aggressive ratio (factor que controla el
nivel de ataque del jugador en su estrategia) y defensive ratio (factor que controla el nivel de defensa
del jugador en su estrategia), peso_vida_oponente (importancia relativa de la salud del rival),
peso_vida_criaturas_oponente (importancia relativa de la salud de las criaturas rivales),
peso_vida_propia (importancia relativa de la salud del jugador), peso_vida_criaturas_propias
(importancia relativa de la salud de las criaturas del jugador). Dichos valores tendrán gran importancia
en el comportamiento y las decisiones a tomar por el agente, por lo que serán los que se optimizarán.
Cabe aclarar que dichos valores se moverán entre umbrales, ya que, por ejemplo, no tiene sentido
considerar niveles de fuerza/daño por encima del que puede hacer la criatura más poderosa del juego.</p>
        <p>La función de fitness considerada sigue esta expresión para el jugador (para una serie de combates):
 = 100 ·  −  +  +  , (1)
Donde, Winrate se refiere al porcentaje de victorias obtenido respecto al total de partidas jugadas,
Turnos son los turnos medios empleados para terminar las partidas por el jugador, VidaRestante es la
media de la vida de nuestro jugador al terminar las partidas y DmgRealizado el daño medio conseguido
en esas partidas.</p>
        <p>El cruce se ha combinado con la mutación, de manera que, para cada dos padres seleccionados, se
generan dos hijos cogiendo valores aleatorios de los genes de cada padre y posteriormente aplicando
una variación aleatoria (pero controlada para estar dentro del rango válido de cada gen). En las pruebas
se ha considerado una tasa de mutación del 20%. El AG ha trabajado con 40 individuos y 40
generaciones, de los que se seleccionan 20 como padres (los mejores) y se realiza un reemplazo
ordenando la población anterior, junto con los nuevos hijos y eligiendo los 40 mejores.</p>
        <p>Los resultados obtenidos se describen en tres experimentos diferentes. En primer lugar, en la Tabla
3, se muestran los resultados alcanzados por los agentes optimizados en la versión UNO del AG (en la
que hay co-evolución).</p>
        <p>En dichos resultados se puede ver la media de 1000 combates realizados por tres agentes Gold
(agresivo) y tres Silver (defensivo) enfrentados entre sí, considerando que lo que se muestra es el cálculo
de la función de la Ecuación 1. Como se puede ver, los resultados están equilibrados, siendo el segundo
agente Gold un poco mejor que los demás, si bien el segundo Silver también consigue buenos
resultados. Pero ninguno destaca sobre los demás de forma clara, puesto que su evolución ha sido
conjunta.</p>
        <sec id="sec-2-4-1">
          <title>Tabla 3</title>
          <p>Resultados de fitness obtenidos por los tres mejores agentes de la versión co-evolutiva del AG tras la última
generación (solución ofensiva frente a defensiva). Se consideran enfrentamientos de cada individuo ofensivo
frente a su análogo defensivo.</p>
          <p>En el segundo experimento, se muestran los resultados de los agentes evolucionados siguiendo la
versión DOS del AG (una sola población frente a un rival sparring común). La Tabla 4 muestra dichos
resultados, en los que, ahora sí se puede ver que se consiguen valores mucho más altos que en la versión
anterior, ya que el rival es fijo y el AG es capaz de adaptarse a sus estrategias de mejor manera que en
una versión co-evolutiva en la que los rivales también se van adaptando.</p>
        </sec>
        <sec id="sec-2-4-2">
          <title>Tabla 4</title>
          <p>Resultados de fitness obtenidos por los tres mejores agentes de la versión simple del AG tras la última
generación, tanto de la evolución de Gold, como de Silver. Se consideran enfrentamientos de cada individuo
frente al sparring.</p>
          <p>Podemos observar que se han encontrado mejores soluciones para la versión ofensiva. La
explicación más lógica es que se debe a la cantidad de turnos empleados, ya que, en este juego, los
mazos defensivos juegan en lo que se denomina Late Game, ya que o bien requieren de mucho maná
para jugar sus cartas o juegan al desgaste del oponente. Como la cantidad de turnos empleados se valora
negativamente, esto puede reducir su fitness.</p>
          <p>Por último, se ha realizado un experimento en el que se han enfrentado los mejores agentes de cada
versión del evolutivo (según los resultados anteriores). De modo que se han realizado 1000 combates
entre cada par de agentes, uno ofensivo (Gold) y uno defensivo (Silver) de cada AG. Los resultados se
pueden ver en la Tabla 5.</p>
        </sec>
        <sec id="sec-2-4-3">
          <title>Tabla 5</title>
          <p>Número de combates ganados (de 1000 enfrentamientos) por los mejores agentes ofensivos (Gold) y defensivos
(Silver), obtenidos en cada una de las implementaciones del Algoritmo Genético: co-evolutiva (1) y simple (2).</p>
          <p>Como se puede ver, la versión UNO es capaz de ganar o casi empatar a su sucesora, esto es un punto
muy importante porque se suponen versiones más toscas, la principal teoría reside en su entrenamiento,
ambos jugadores se entrenaron entre sí, por lo que pese a obtener peores resultados, esto se debe a que
sus oponentes estaban más cualificados. Aún así, la especialización que consiguen los jugadores de la
versión DOS, les permite optimizar mucho más los parámetros de los genes que determinan su
comportamiento y consiguen de esta forma un mejor rendimiento (mayor número de combates
ganados). También se puede observar que los mazos Silver son mejores en ambas versiones. Esto se
puede deber a dos factores principales: el mazo defensivo es mejor; esto implica que hay una
desigualdad a la hora de comprobar la efectividad de los mazos, o podemos pensar que el resultado
óptimo de la estrategia defensiva se encuentra más cercano al punto inicial de los agentes. Es decir, el
agente rival (sparring) en la versión DOS tiende a ser más agresivo, por lo que los agentes evolucionados
se habrán adaptado para jugar mejor frente a dicho rival y, por tanto, contra agentes ofensivos. Esto
también se refleja en la victoria de Gold2 frente a Gold1.</p>
        </sec>
      </sec>
      <sec id="sec-2-5">
        <title>7. Conclusiones y Trabajo Futuro</title>
        <p>Este trabajo presenta una propuesta de agentes para jugar al famoso juego de estrategia con cartas
Magic: The Gathering. Se implementó en primer lugar un simulador de combates completamente
funcional, llamado OpenMTG.ai, a partir de un proyecto existente muy preliminar y posteriormente se
diseñaron agentes capaces de jugar a dicho juego de manera autónoma (a partir de mazos predefinidos).
Dichos agentes, cuyo comportamiento dependía de una serie de factores, se han optimizado por medio
de Algoritmos Genéticos (AGs).</p>
        <p>Se han implementado dos versiones de dichos AGs, una co-evolutiva, en la que se han ido
evolucionando individuos con estrategias agresivas, frente a otros defensivos; y otra versión en la que
todos los individuos se han enfrentado a un agente diseñado de forma heurística por un jugador experto.</p>
        <p>Se ha comprobado el rendimiento de estos agentes entre sí y también frente a un rival común,
consiguiéndose mejoras significativas frente a las versiones iniciales sin optimizar. Los resultados
muestran que los agentes son capaces de evolucionar y mejorar y convertirse en jugadores competitivos.
Estamos convencidos de que, aumentando la complejidad del entorno añadiendo muchas más cartas,
podremos obtener agentes capaces de jugar de manera efectiva contra los mejores jugadores humanos.</p>
        <p>Como trabajo futuro se planteará implementar versiones de los AGs más adaptadas al problema, que
permitan conseguir una optimización mayor. Además, se probarán otros operadores genéticos, que
puedan ofrecer mejor rendimiento. También se plantearán varios tipos de rivales, para que la evolución
no esté condicionada por el nivel de agresividad que se haya definido y se consiga agentes capaces de
enfrentar con éxito a oponentes ofensivo o defensivos, incluyendo pruebas contra jugadores humanos.</p>
      </sec>
      <sec id="sec-2-6">
        <title>8. Agradecimientos</title>
        <p>Este trabajo ha sido financiado en parte por el proyecto TED2021-131699B-I00, financiado por
MCIN/AEI/10.13039/501100011033 y por la Unión Europea “NextGenerationEU”/PRTR, así como
los proyectos PID2020-113462RB-I00 (ANIMALICOS) y PID2020-115570GB-C22 (DemocratAI::
UGR) del Ministerio español de Economía y Competitividad.</p>
      </sec>
      <sec id="sec-2-7">
        <title>9. Referencias</title>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <article-title>[1] Magic: The Gathering (webpage</article-title>
          ): https://magic.wizards.com/es,
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>D. E.</given-names>
            <surname>Goldberg</surname>
          </string-name>
          , “
          <article-title>Genetic Algorithms in search, optimization and machine learning”</article-title>
          ,
          <source>Addison Wesley</source>
          ,
          <year>1989</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>D.</given-names>
            <surname>Billings</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Papp</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Schaeffer</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Szafron</surname>
          </string-name>
          , “
          <article-title>Poker as a testbed for AI research</article-title>
          ,” in
          <source>Advances in Artificial Intelligence: 12th Biennial Conference of the Canadian Society for Computational Studies of Intelligence</source>
          ,
          <source>AI</source>
          '
          <volume>98</volume>
          , Vancouver, BC, Canada, June 18-20,
          <year>1998</year>
          , Proceedings, vol.
          <volume>1418</volume>
          , p.
          <fpage>228</fpage>
          ,
          <string-name>
            <surname>Springer</surname>
            <given-names>Science</given-names>
          </string-name>
          &amp; Business
          <string-name>
            <surname>Media</surname>
          </string-name>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>P. I.</given-names>
            <surname>Cowling</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C. D.</given-names>
            <surname>Ward</surname>
          </string-name>
          , and
          <string-name>
            <given-names>E. J.</given-names>
            <surname>Powley</surname>
          </string-name>
          , “
          <article-title>Ensemble determinization in Monte Carlo Tree Search for the imperfect information card game Magic: The Gathering,” IEEE Transactions on Computational Intelligence and</article-title>
          AI in Games, vol.
          <volume>4</volume>
          , no.
          <issue>4</issue>
          , pp.
          <fpage>241</fpage>
          -
          <lpage>257</lpage>
          ,
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>P.</given-names>
            <surname>García-Sánchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Tonda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>G.</given-names>
            <surname>Squillero</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Mora</surname>
          </string-name>
          , and
          <string-name>
            <given-names>J. J.</given-names>
            <surname>Merelo</surname>
          </string-name>
          , “Evolutionary deckbuilding in Hearthstone,” in
          <source>2016 IEEE Conference on Computational Intelligence and Games (CIG)</source>
          , pp.
          <fpage>1</fpage>
          -
          <lpage>8</lpage>
          , IEEE,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>P.</given-names>
            <surname>García-Sánchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.P.</given-names>
            <surname>Tonda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.M.</given-names>
            <surname>Mora</surname>
          </string-name>
          , G. Squillero,
          <string-name>
            <surname>J.J Merelo,</surname>
          </string-name>
          “
          <article-title>Automated playtesting in collectible card games using evolutionary algorithms: A case study in Hearthstone”</article-title>
          .
          <source>Knowl. Based Syst</source>
          .
          <volume>153</volume>
          :
          <fpage>133</fpage>
          -
          <lpage>146</lpage>
          (
          <year>2018</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>P.</given-names>
            <surname>García-Sánchez</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.P.</given-names>
            <surname>Tonda</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.J.</given-names>
            <surname>Fernández-Leiva</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Cotta</surname>
          </string-name>
          , “
          <article-title>Optimizing Hearthstone agents using an evolutionary algorithm”</article-title>
          .
          <source>Knowl. Based Syst</source>
          .
          <volume>188</volume>
          (
          <year>2020</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>H. D.</given-names>
            <surname>Hlynsson</surname>
          </string-name>
          , “Open-MTG” https://github.com/hlynurd/open-mtg,
          <year>2019</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>