Ir a Inicio

Vida Artificial. Torneo 00: "Robocode" inspira un entorno virtual para evolucionar

image

Robocode es un proyecto de IBM dirigido a los estudiantes y entusiastas del lenguaje de programación Java. Es un juego de enfrentamiento entre tanques de guerra.

A diferencia del tradicional juego de video de acción en el que el jugador debe estar controlando en tiempo real su personaje, en Robocode, el jugador programa el comportamiento del tanque de guerra usando Java. Una vez programado, el tanque es depositado en la arena de combate donde se enfrentará a otros... solo debe quedar uno vivo.

image

El jugador tiene a su disposición varias funciones para controlar el tanque como desplazamiento, giros, control del radar, control del cañón y disparo. Además de los eventos (cuando el tanque es impactado por otro, cuando el tanque detecta a un enemigo, etc..).

Aunque las reglas, funciones y eventos son simples, la diversidad de tanques esta limitada solo por la imaginación del jugador (programador), hay tanques de comportamiento simple (si detectan un enemigo en su trayectoria disparan, si reciben un impacto dan media vuelta y huyen), hasta complejos (se desplazan de manera que sea difícil seguirles la pista, calculan como calcular el disparo dependiendo del movimiento del enemigo, etc..).

Robocode es gratuito, lo puede descargar de Internet en esta dirección: https://robocode.sourceforge.io/ , requiere que tenga Java instalado en su máquina. Recomiendo un buen PC (Pentium III en adelante) y 128 MB RAM mínimo porque como Robocode esta escrito en Java se siente la lentitud en algunas partidas.

image

Cuando arranca el torneo, los tanques participantes son colocados al azar en la arena de combate y como sucede en la naturaleza, un complejo tanque puede ser rápidamente destruido si está en el sitio equivocado en el momento equivocado, para evitar esta "mala suerte", uno puede programar N torneos de tal manera que si el tanque esta bien programado se notará al final con un alto puntaje.

Los tanques siempre arrancan con un valor de energía: 100. Cada vez que disparan o son impactados la energía disminuye y solo pueden aumentar su energía si logran acertarle a un tanque enemigo. El desplazamiento no consume energía.

El juego trae un editor para programar el tanque:

image

Este juego educativo (dirigido a personas que están aprendiendo a programar en Java o quieran mejorar sus habilidades en programación) ha tenido éxito en la comunidad académica.

Inspirando un entorno para la evolución

Robocode reúne las características necesarias para desarrollar un entorno similar que permita evolucionar organismos artificiales.

Un tanque de guerra se presenta de esta manera:

image

El vehículo puede girar y desplazarse, el radar y el cañón solo giran; los tres son independientes.

Existen funciones para:

  1. Girar el tanque.
  2. Desplazar el tanque hacia adelante.
  3. Desplazar el tanque hacia atrás.
  4. Girar el radar.
  5. Girar el cañón.
  6. Disparar.

Y hay eventos como:

  1. Cuando le acierto a un tanque enemigo.
  2. Cuando es impactado por un disparo.
  3. Cuando colisiona contra otro tanque.
  4. Cuando colisiona con una pared.
  5. Cuando el radar detecta un tanque enemigo.

La lista es un poco mas extensa en cuanto a funciones y a eventos, he colocado los principales.

Los eventos de un objeto pueden ser análogos a las emociones de un ser vivo y las funciones a las distintas acciones que pueda hacer un ser vivo.

Algo llamativo que responde el juego es ¿que hacer si ningún evento ha ocurrido?, los seres vivos no solo se "mueven" cuando alguna emoción se dispara, también actúan por su propia cuenta: en el juego hay una rutina public void run(), la cual se programa para que el tanque actúe por su cuenta si ningún evento se ha activado.

Ahora bien, Robocode fue hecho para que programadores escriban el comportamiento del tanque y su reacción a los diversos eventos, utilizando la sintaxis de Java.

En la simulación de vida artificial los tanques serán los organismos artificiales, y aquí aparecen las diferencias:

  1. El tanque no puede ser creado con sintaxis en Java debido a la dificultad de generar y mutar instrucciones al azar. Así que el tanque tendrá un nuevo lenguaje de programación diseñado para facilitar la mutación.
  2. La simulación debe ser muy rápida. En la primera etapa, el simulador no tendrá una interfaz gráfica, se desarrollará en C++.
  3. Los tanques con mejores puntajes pueden reproducirse, los hijos tendrán una ligera mutación. Los tanques con muy bajos puntajes serán eliminados.

El objetivo de esta simulación es experimentar con el manejo de múltiples instrucciones (funciones) y el manejo de emociones (eventos). El tanque ganador generado con estos algoritmos de vida artificial es entonces traducido a Java y llevado a Robocode.