jueves, 14 de octubre de 2010

Galcon AI Contest

Google y la Universidad de Waterloo han lanzado un nuevo reto de Inteligencia Artificial.
El del año pasado, consistía en competir jugando al TRON solo que en esa oportunidad la verdad no me había dado cuenta de dicha competencia.


Ahora bien, el reto consiste en preparar un robot capaz de jugar el juego Galcon de manera independiente, o sea, sin alguien que lo controle. El juego es bastante sencillo, por lo que preparar la Inteligencia Artificial para poder jugar no es cosa del otro mundo.


Al ser un juego de estrategia basado en turnos, esta bastante acotado el momento en el que hay que tomar la decisión y además los objetos con los que se trabaja son fáciles de manejar (Planet, PlanetWar y Fleet). Gracias a que es simple, se puede concentrar el esfuerzo en la Inteligencia Artificial, haciéndolo más complejo y divertido.


¿Por qué participar en un reto como este?
Porque no sólo es saber jugar Galcon, es además poder decir que uno es capaz de hacer software que juegue por uno y que pueda ganar, y es más, de esta manera puede luego empezar a crear bots de estrategia más interesantes.


Además es una buena oportunidad para hacer un sistema de toma de decisiones y con esto puede empezar a poner en práctica los conceptos básicos, aprender, olvidar, cambio de estrategia, etc.

Otro punto importante es porque tengo un buen amigo que aparte de que está llevando un curso de Java, el sevidor de la oficina está en Tomcat, pero de cabezón quiere seguir programando en .Net aún teniendo la plataforma de servidores en Linux y por eso tener que instalar Mono-Project (no es nada personal Chulito, es solo para que me ayude y yo le ayudo)


¿Qué tengo que hace para participar?
Bueno para participar en el juego y competir con terceros, incluso estar en un ranking, etc. lo que hay que hacer es inscribirse en este link. Aquí puede ver como va el ranking de competidores. A partir del día 10 de Septiembre empieza la competición hasta el dia 27 de Noviembre, con lo que ya estamos a tiempo de poner a correr nuestro robot para empezar el juego.
¿Como puedo crear mi primer bot?El bot lo puede desarrollar en cualquier lenguaje como java,Phyton, C, pero la idea aqui es usar java para que mis amigos que estan en el curso me puedan ayudar y poder ir sacando un mejor bot.

Como en nuestro caso es java, lo que hay que hacer con los compilar el código y probar el entorno: 
compilar: javac *.java
ejecutar: java -jar tools/PlayGame.jar maps/map7.txt 1000 1000 log.txt "java -jar example_bots/RandomBot.jar" "java -jar example_bots/DualBot.jar" | java -jar tools/ShowGame.jar
Crear tu propio Bot y empezar a probar modificaciones en la estrategia

¿Cómo puedo probar mi bot contra otros?

En el directorio example_bots vienen varios bots preparados: BullyBot, DualBot, ProspectBot, RageBot y RandomBot.

Por ejemplo para probar el RageBot contra el DualBot, este es el comando: java -jar tools/PlayGame.jar maps/map7.txt 1000 1000 log.txt "java -jar example_bots/RageBot.jar" "java -jar example_bots/DualBot.jar" | java -jar tools/ShowGame.jar

¿Como se depura una bot?
Mmmmhhh, esta por resolver, es complejo como lanzarlo en debug con eclipse, por la forma de lanzar las clases.
No se puede utilizar System.out.println , porque se basa en System.in para leer los comandos del servidor y si lo haces te dara timeouts tu Bot.

Seguro que se te acaba ocurriendo alguna forma creativa para depurar el sistema, si es asi no dudes en enviar un email, yo de momento voy a probar con log4j.

¿Por qué da timeouts mi Bot?
Por lo que he podido comprobar, el problema es porque hay un fallo en la lógica por el que el bot entra en un bucle y por eso no funciona o bien un fallo en la configuración, p.e.: no estas lanzando el comando desde el sitio donde están las clases o el comando para ejecutar ejecutar el bot: java -jar example_bots/RandomBot.jar da un error.

Un Primer Bot:
Aqui tienes un primer bot para que puedas hacerte una idea, este bot esta pensado de forma que ataca primero a los más débiles y a partir de que son varios planetas, hace ataques combinados desde todos los planetas a la vez al más débil y si este ya ha sido atacado hace poco al más fuerte.

No hay comentarios:

Publicar un comentario