"Programar bots de Starcraft puede llegar a ser más complejo que hacerlo para el ajedrez", entrevista a Alberto Uriarte

Hace pocas semanas se celebró el 2º Torneo Internacional de Bots de Starcraft organizado por la RTS Game AI Research Group” de la University of Alberta y patrocinado por AIIDE – the AI for Interactive Digital Entertainment conference. En otras ocasiones hemos hablado de bots pero os aseguro que este bot va mucho más allá desde el punto de vista de la programación.

Para explicarnos su funcionamiento hemos estado charlando con Alberto Uriarte, el autor de Nova, que ha hecho de este desarrollo la tesis de su master, por lo que nos encontramos ante un estudio pormenorizado, detallado y muy documentado sobre la intensa búsqueda de un bot perfecto en un entorno sumamente complejo.

Alberto Uriarte descansando. Hoy pelean sus bots.

Buenas noches Alberto, ante todo felicitarte por la tesis de tu máster, muy original y muy trabajada, alejándote de las típicas aplicaciones web. Un muy buen trabajo, y diferente, seguro que tu tutor te lo agradeció.

Pues muchas gracias, la verdad es que con las limitaciones de tiempo no pude hacer mucho más. Así que se me quedaron muchas cosas en el tintero.

Lo primero es que desconocía que hubiese campeonatos de bots de Starcraft , ¿cómo llegaste a ellos?

La verdad es que lo descubrí gracias a mi tutor Santi Ontañón. Al ser un torneo muy reciente (sólo van por la segunda edición) no tenía conocimiento previo de él a diferencia de otros que llevan más tiempo como el de Mario AI.
Tenía claro que quería hacer algo relacionado con videojuegos. De hecho mi idea inicial era mucho más concreta, solamente me quería centrar en la generación de una IA que manejara el comportamiento de un escuadrón de forma realista. Pero después de algunas conversaciones la cosa se acabo liando hasta querer montar un bot de Starcraft completo.

¿Cómo definirías a Nova desde el punto de vista de lo que le diferencia del resto de bots?

La verdad es que la mayoría de bots exploran técnicas muy parecidas. Solamente se diferencian en la manera de implementarla y en las restricciones que te vienen impuestas por seleccionar una raza u otra. Supongo que la parte más diferenciadora de Nova ha sido el manejo de los Vultures contra las unidades de cuerpo a cuerpo. Este control le permite atacar mientras huye de este tipo de unidades y poder ganar combates en inferioridad de fuerza.

Ejemplo de una unidad atacando mientras huye, usando distintas estrategias

La arquitectura de Nova es tipo “multi agentes”, basada en agentes y managers, pero más adelante veo que los agentes se dividen en micro y macro ¿por qué esta diferenciación?

La razón principal para montar un sistema multi agente es porque tienes diferentes tareas las cuales puedes dividir y hacer que cada agente se encargue de una parte, vamos, la típica idea de divide y venceras. En este caso también se da la particularidad de que en Starcraft todas las tareas se pueden englobar en dos grupos: micro acciones y macro acciones. Así pues es una agrupación lógica que podemos hacer en cada agente según la tarea que llevan a cabo. Este tipo de agrupación nos viene definida por los jugadores profesionales en donde realizan planes de entrenamiento para mejorar un tipo de acciones u otro. Así pues tenemos jugadores profesionales que son mejores haciendo micro que macro o viceversa.

Flocking Behaviour

Todo esto nos lleva a la enorme complejidad de este tipo de bots, totalmente distintos a los de otros juegos donde sólo existe el “apunta y no dejar que me maten” y los algoritmos son bastante más robóticos.

Exacto. Hacer un bot para Starcraft hace que tengas que estudiar todo desde muchos puntos de vista.


Terreno complicado, buscar caminos optimos, unidades que construyen edificios para defensa o ataque, escuadrones con operativa en grupo, deteccion del objetivo más valioso … ¿cómo resolviste, de forma general, toda esta mezcla de entradas/salidas/decisiones dentro de Nova?
Parece bastante complicado

Pues la verdad es que sí, tienes que lidiar con multitud de sub-problemas y todo ello procesarlo en tiempo real. Cuando te enfrentas a la tarea de programar un bot de estas características primero tienes que intentar cerrar el ciclo, es decir, hacer un bot que cubra todos los aspectos del juego aún que los resuelva de manera torpe y luego ir incrementando la complejidad de cada apartado gradualmente. De nada te sirve tener la mejor gestión de unidades, si después eres incapaz de producir dichas unidades.

Muy interesante. Una curiosidad, he visto en los resultados de los torneos que no tienes ningún problema contra los Terran pero los Zerg y especialmente los Protoss se te resisten ¿qué tienen estas razas para que no haya sido posible la victoria?

La verdad es que ha sido más que nada una cuestión de tiempo. Mientras que para los Terrans pude dedicar más tiempo en elaborar y depurar la estrategia, contra los Zerg y Protoss solamente les puede dedicar una semana a cada uno. Fue una lástima especialmente lo de los Zergs ya que un sistema como este se vuelve muy complejo a la hora de depurarlo y contra los Zerg todavía tenía algún problema en el código que producía un cuelgue de mi bot. Así que la mayoría de derrotas contra los Zerg fueron por cuelgues míos y no por victorias de mi rival.

Así que estos resultados no se pueden achacar a una falta de equilibrio entre las razas, en donde Blizzard hizo un gran trabajo, siendo uno de los juegos más complejos en cuanto a equilibrio escapando de la típica estructura piedra-papel-tijera.

Resultados de los combates por razas

Si algun lector quisiera iniciarse a programar bots para Starcraft, ¿por donde podría empezar?

Pues por fortuna en esta edición se ha hecho público todo el código de los diferentes bots, así que le recomendaría que estudiara cada uno para ver como han ido resolviendo los problemas. Eso si, previamente le recomendaría que primero jugara al Starcraft y se familiarizara con la mecánica de juego y particularidades de cada raza. Sería como si alguien intentara programar un juego de ajedrez sin saberse las reglas.

Jeje … evidentemente. ¿Hay alguna web a la que dirigirse? (aparte de la web de Nova)

Muchos de los bots tienen su propia página web y para aprender los entresijos de Starcraft recomiendo la wiki de Liquipedia

Y ¿algunas recomendaciones para los valientes que se atrevan a meterse en este mundo?

Que se atrevan a intentarlo y no se desesperen, es cierto que este tipo de IA es mucho más compleja que la del ajedrez, pero también es más divertida. Que se vuelquen en una raza en concreto y estudien como dominarla a la perfección. Y por último que intenten implementarla en C++ para evitar problemas de rendimiento.

Más información | Web de Nova

Portada de Genbeta