Stats for unreleased Mega Evolutions are speculative. Don't invest any resources until they're officially released.

Desarrollo de una IA para los combates entre entrenadores de Pokemon GO

Última actualización: 30 de julio de 2019

El sitio cuenta ahora con las llamadas "Training Battles", simulaciones de combate en tiempo real contra un oponente de IA. Fue un gran esfuerzo y me entusiasmó crear una herramienta de práctica atractiva que la gente pudiera utilizar en cualquier momento y lugar. Los combates de entrenadores de Pokemon GO son muy complejos, desde la composición de los equipos hasta las tácticas de combate en el juego, como el cebo de escudos y los cambios. Desarrollar una IA para el juego puede parecer una tarea de enormes proporciones, pero hay dos sistemas básicos que he diseñado para que sea elegante y atractivo al mismo tiempo.

Saltar a una sección:

  1. Objetivos de diseño
  2. Evaluación de los partidos
  3. Toma de decisiones
  4. Selección de equipos
  5. Reflexiones finales

Objetivos de diseño

Cuando me dispuse a crear la IA, quise principalmente diseñar un adversario que jugara como un oponente humano, y al que se pudiera vencer de la misma manera que a un jugador humano. Especialmente en lo que se refiere a la dificultad, esto significaba seguir unos cuantos puntos:

  • La IA necesita emplear estrategias y pensamientos que los jugadores reales hacen
  • La IA no debería tener información que un oponente humano no tendría (no la hagas omnisciente sobre la selección del equipo del jugador o el uso de los ataques)
  • La dificultad debe ser exclusivamente por el comportamiento de la IA y no por medios artificiales como inflar los PC de los Pokemon. La IA no debería tener información que un oponente humano no tendría (no la hagas omnisciente sobre la selección del equipo del jugador o el uso de los ataques)
  • Está bien que la IA cometa errores

Los combates de Team GO Rocket han demostrado ser un reto en sí mismos, por ejemplo, pero sabía que para este proyecto era vital hacer que la IA se pudiera vencer de la misma manera que se vencería a un jugador humano. Es decir, no quería introducir ninguna cualidad o peculiaridad a la que los jugadores se adaptaran para vencer a la IA, que no fuera relevante en los combates reales entre entrenadores. Tampoco quería que la IA fuera imbatible o infalible; si un jugador reconoce que la IA ha cometido un error, sigue siendo un momento de aprendizaje.

Para lograrlo, sabía que tenía que hacer lo siguiente:

  • Permitir que la IA asigne estrategias a largo plazo que alteren su comportamiento por defecto
  • Darle un medio para evaluar los emparejamientos con el fin de determinar esas estrategias

Uno de mis primeros pasos fue catalogar todas las estrategias de los jugadores que pude y organizarlas de forma algorítmica (si esto, haz aquello). Si mi oponente tiene pocos PS, vamos a debilitarlo y a cultivar algo de energía. Si mi oponente está a punto de conseguir un Ataque cargado que será malo para mí, escabullámonos de allí y absorvámoslo con otro Pokemon.

A continuación se muestra una tabla con algunos ejemplos de estrategias o Habilidades, y los niveles de dificultad que los emplean:

Novato Rival Elite Campeón
Escudos
2 Ataques cargados
Conmutación básica
Agricultura energética
Cebo de escudos
Conmutación avanzada
Gestión del reloj de Cambia

¿Cómo se implementa todo esto? Echemos un vistazo a los dos sistemas principales que hacen funcionar la IA.

Evaluación de los partidos

Hay muchas variables que hay que tener en cuenta a la hora de considerar los enfrentamientos, desde el tipo hasta los escudos y la energía. Los jugadores más experimentados sabrán cuáles son los enfrentamientos más importantes y qué vence a qué.

El corazón de la IA es el simulador que ya conoces. Enfrenta a los Pokémon con sus PS y energía actuales para obtener un conocimiento aproximado de los enfrentamientos actuales o potenciales. Cuando hace esto, la IA ejecuta cuatro escenarios diferentes:

  • Ambos cebos: ¿Ganaré esto si mi oponente y yo logramos cebar escudos?
  • Sin cebo: ¿Ganaré esto sin cebar escudos?
  • Ni cebo: ¿Ganaré esto si ninguno de los dos ceba escudos?
  • Granja: ¿Ganaré esto usando Ataques rápidos solamente?

Si estos escenarios se ven bien, la IA se mantendrá y decidirá una estrategia para tratar de ganar el enfrentamiento. Si estos escenarios no tienen buena pinta, buscará una oportunidad para cambiar.

La IA realiza la evaluación del emparejamiento en algunos momentos específicos:

  • Durante la selección del equipo en el Modo Torneo para evaluar las mejores selecciones y contra selecciones
  • Al principio del juego
  • Después de que cualquiera de los jugadores cambie
  • Después de cada Ataque cargado

Esto da lugar a una tendencia de la IA a cambiar después de los Ataques cargados, lo que coincide con el comportamiento de los jugadores reales de poner en cola un cambio durante los Ataques cargados. Evaluar los emparejamientos en cada turno también era una posibilidad, pero daba lugar a un comportamiento errático; aquí la IA es más capaz de comprometerse con una estrategia.

Toma de decisiones

Una vez que la IA ha reunido toda esta información, ¿cómo decide qué hacer? El segundo sistema central de la IA está aquí para ayudar. Todo lo que la IA elige o hace se origina en una función de toma de decisiones pseudoaleatoria. En pocas palabras, esta función actúa como una lotería para diferentes opciones, y la información disponible de la IA determina el peso de cada opción, o cuántas veces entró esa opción en el sorteo.

Como se ha mostrado anteriormente, la IA elegirá aleatoriamente entre varias opciones, y la probabilidad de seleccionar cualquier opción concreta depende de su valor de peso. La IA ajusta estos valores de peso para ayudarse a sí misma a tomar la decisión correcta, pero la puerta siempre está abierta para algo no convencional.

Esta pseudoaleatoriedad era una parte importante de mis objetivos de diseño: no quería que la IA jugara siempre las mismas partidas de la misma manera, y quería añadir un toque de imprevisibilidad. Con este sistema, la IA está abierta a los errores y a las jugadas erróneas, y al mismo tiempo es capaz de tropezar con genialidades que no serían posibles en un sistema de toma de decisiones más rígido.

Literalmente, todo lo que hace la IA pasa por este sistema, desde la elección de la lista de jugadores hasta la elección de estrategias, escudos o escudos para los ataques entrantes.

Selección de equipos

Si quieres hacer una IA desafiante, también tienes que darle un equipo desafiante. Una solución sencilla, por ejemplo, sería hacer una lista de equipos preestablecidos para que la IA los eligiera. Esto habría estado bien, pero quería una gran variabilidad para que los jugadores pudieran perfeccionar sus habilidades de elección. ¿Cómo se pueden generar equipos aleatorios que también sean equilibrados y competitivos, y que varíen según la dificultad?

La respuesta que he elegido es un sistema de ranuras. Las selecciones se clasifican en varias ranuras (Tanque, Planta, tipo Agua/Tierra, etc.), y la IA utiliza la toma de decisiones pseudo-aleatoria descrita anteriormente para seleccionar una ranura y luego seleccionar un Pokemon dentro de esa ranura. Una vez que un espacio y un Pokemon son elegidos, no pueden ser elegidos de nuevo, y la IA repite esto hasta que los 6 espacios de su lista están llenos.

Cada ranura también tiene sinergias con otras ranuras. Cuando se selecciona un tipo Agua/Tierra, por ejemplo, es más probable que la IA elija algo de la ranura Volador para ayudar a cubrir la debilidad de Planta.

El último elemento a considerar es la dificultad. En las dificultades más bajas, la IA elige más cosas fuera de la meta o versiones ahorradoras de sus homólogos de la meta. A cada Pokemon dentro de una ranura se le asigna un nivel de dificultad, y la IA sólo lo seleccionará si el nivel de dificultad del Pokemon está dentro de 1 del suyo. Por ejemplo, una IA de nivel 3 (Campeón) solo seleccionará Pokemon que pertenezcan a la dificultad 2 o 3, mientras que una IA de nivel 0 (Novato) solo seleccionará Pokemon que pertenezcan a la dificultad 0 o 1. Esto permite un rango de opciones de selección mientras se mantienen buenas selecciones para las dificultades más altas y selecciones menos óptimas para las dificultades más bajas.

Seleccionar una lista es una cosa, pero ¿qué hay de la selección de un equipo? Los jugadores tienen estrategias de selección que pueden definirse en algunas categorías. Este post de Reddit de C9Gotem profundiza en los diferentes niveles de pensamiento que intervienen en las estrategias de selección, y fue una referencia útil mientras trabajaba en esta parte de la IA.

En el Modo Torneo, la IA puede emplear las siguientes estrategias de selección:

  • Básico: La IA elige un equipo de tres ordenado directamente de su lista. Esto es similar a si un jugador utiliza un equipo de 3 preestablecido con el que tiene buena práctica. Debido a las sinergias de las ranuras, estos equipos suelen estar equilibrados, pero esta estrategia también puede tener algunos resultados poco convencionales.
  • Lo mejor: La IA lidera con el Pokemon que tiene los emparejamientos más positivos contra el oponente. A continuación, la IA selecciona un guardaespaldas para el líder para contrarrestar sus contraataques, y completa el equipo con un Pokemon que encaje bien con ambos.
  • Contraataque: Como el anterior, pero la IA lidera con un Pokemon que contrarresta el mejor Pokemon del oponente.
  • Desequilibrado: La IA selecciona dos Pokemones bien equilibrados y lidera con un guardaespaldas para ambos. Esta estrategia tiene como objetivo producir alineaciones que superen a los típicos equipos equilibrados y controlen el flujo del combate.
  • El mismo equipo: Después de un partido, la IA volverá a utilizar el mismo equipo. Es más probable que lo haga después de una victoria.
  • Mismo equipo, distinto ejemplo: Después de un partido, la IA volverá a utilizar el mismo equipo pero liderando con el guardaespaldas del equipo anterior. Esto tiene el efecto de contrarrestar el contraataque del líder anterior. Es más probable que haga esto después de una victoria.
  • Contraataque Último Ejemplo: La IA liderará con su mejor contraataque a la ventaja anterior del oponente. Es más probable que haga esto después de una derrota.

De este modo, la IA elige de forma similar a los jugadores convencionales y, con suerte, es una buena práctica a la hora de elegir en un torneo.

Reflexiones finales

Este proyecto ha supuesto una gran pasión y esfuerzo. Espero que mejore tu disfrute del juego y te ayude a desarrollar un conjunto de habilidades ganador. A grandes rasgos, también espero que estos combates de formación puedan inspirar a los recién llegados al PvP, a otros desarrolladores y, si los ven, a la propia Niantic. Espero que el futuro sea brillante y emocionante.