jump to navigation

Simulador de robots Junio 14, 2009

Posted by Javier Gramajo in Información general.
trackback

Comentarios»

1. Luis Miguel Pérez Vásquez - Julio 6, 2009

Solo quiero hacer un comentar lo siguiente: RoboCode Es un juego de enfrentamiento entre tanques de guerra. La diferencia mas grande con los juegos de video es que el robot es programado y no controlado por el jugador, se debe de programar el comportamiento del tanque de guerra.

En el siguiente Video se muestra como realizar un robot en RoboCode utilizando un IDE (netbeans 6.5)

http://www.youtube.com/watch?v=SXPc2J7u878

Ademas siguiendo con las actividades de IA en Junio en la USAC, tambien se muestran la imagen de los arboles implementados, el cual se encuentra en el siguiente enlace:

http://s3.subirimagenes.com:81/otros/previo/thump_2836714decision2.jpg

La implementacion y prueba del arbol de Decisiones y estrategia de ejecucion se muestra en el siguiente video:

http://www.youtube.com/watch?v=DYO1xFHpPmQ

La estrategia basicamente utiliza la trigonometria del campo de batalla de RoboCode que junto con los arboles de Decisoines forman el algoritmo para que podamos “darle inteligencia” a nuestro robot en base a las programacion dada.

Enlace de Trigonometria Relativa usada en el proyecto: http://s3.subirimagenes.com:81/otros/previo/thump_2836715img8.jpg

La creacion del robot es relativamente facil, sin embargo la riqueza de este juego estriba en la capacidad del jugador para poder darle “inteligencia” al robot por medio de un algoritmo que asegure la supervivencia del Robot, lo que realmente demuestra lo importante que puede ser la Inteligencia Artificial implementada, la capacidad de darle propiedades a algo mecanico y poder dar una interpretacion
buena.

Tambien podemos decir que La mayor parte de algoritmos computacionales usan la estadistica para inferir en las actividades que realizan los humanos, tal el caso de las bases de datos, sistemas operativos, etc. Y la Inteligencia Articial no es la excepcion, se utiliza estadistica para poder aplicar decisiones, en base al conocimiento o experiencia que puedan tomar objetos computaciones y ser representativos al mundo humano

2. 200511667 - Carlos Solórzano - Julio 7, 2009

El proyecto robocode surge como una iniciativa para ayudar a los programadores a incursionarse en el mundo Java. Por medio de un API, el programador puede aprender jugando, ya que el objetivo es crear un robot capaz de vencer a sus contrincantes. Dicho robot tiene forma de tanque y por medio de varios metodos y atributos, podemos concer el estado del mismo.

Como parte del curso de Inteligencia Artificial 1, se han desarrollado una serie de artículos y videos relacionados al proyecto Robocode. A continuación les dejo los links de mis videos

http://www.youtube.com/watch?v=aKD54lYD5W4
http://www.youtube.com/watch?v=lrGcaDXoGUU

En cada uno de éstos videos se explican algunos métodos y atributos propios de API de Robocode, así como librerias para poder implementar Algoritmos Genéticos y Redes Neuronales para el juego.

Existen muchas estrategias de ataque así como las estrategias de movimiento, estas también dependen del ingenio y el deseo del jugador. En la siguiente lista se muestran las diversas estrategias de ataque que existen en Robocode.
– Estrategias de ataque avanzado.
– Ataque angular.
– Basado en el Log: Guardar información de movimientos anteriores y asumir que uno de esos sería el siguiente.
– Estrategias simples de ataque.
* Area
* Circular
* Head-Fake
* Head-on
* Lineal
– Basado en estadísticas: Acumular estadísticas relevantes del enemigo

Para la implementación de los algoritmos genéticos podemos utilizar la librería Java Genetic Algorithms Package JGAP (http://jgap.sourceforge.net/), y para las redes neuronales la librería APV (http://robocoderepository.com/BotSearch.jsp?botName=ScruchiPu&authorName=&uploadDate=).

En la siguiente url pueden descargar mis artículos y el código fuente de mi robot: http://rapidshare.com/files/253274606/Robocode.rar.html

Espero les sirva, saludos o/

3. Luis Cordón - Julio 7, 2009

RoboCode es una herramienta que permite la simulación de combates entre robots virtuales; los cuales son codificados utilizando el lenguaje Java y con el cual se les da una lógica establecida; la cual utilizaran para tener un comportamiento definido en el momento de los combates. RoboCode esta pensado para que sus usuarios aprendan conceptos de programacióon de una manera llamativa y tambiéen para que se implementen conceptos de Inteligencia Artificial para elevar el nivel de combate; entre los conceptos mas aplicables de Inteligencia Artificial están los arboles de Decisiones, para que el robot tome decisiones en base a eventos que pueda reconocer en su entorno y con esto poder crear las redes neuronales con las cuales el robot puede aprender de las experiencias vividas, También se pueden aplicar conceptos físicos para predecir el movimiento del robot enemigo y en base a esto aumentar la robabilidad de acierto en cada disparo. También se puede implementar el concepto de Algoritmos Genéricos, debido a que en robocode se utilizan variables que pueden ser maximisadas; por ejemplo podríamos tener como variables: el ángulo de giro cuando golpeamos una pared o robot; la velocidad de nuestro robot, la potencia de los disparo; con el concepto de Algoritmos Genéricos podríamos agrupar todas las variables que identifiquemos y encontrar los valores óptimos para que al final de la batalla tengamos un mejor resultado.

4. lpcasas - Julio 7, 2009

La importancia que toma hoy en día la Inteligencia Artificial es relevante, dado
que en un futuro no muy lejano podremos ver los algoritmos implementados y
serán muy eficientes en la medida que adquieran conocimiento y mas inteligencia.

Existen varios algoritmos que proveen de inteligencia a los procesos o en algunos casos a los robots. En este caso existe un sistema que inicio como una plataforma para aprender Java pero poco a poco fue evolucionando para convertirse en una plataforma para probar algoritmos de inteligencia artificial, a esto me refiero a Robocode. Los robots en Robocode pueden ser programados con algoritmos que les proveen de un grado superior de inteligencia.

Entre los algoritmos que se presentan tenemos los siguientes, estos son solo algunos de los algoritmos utilizados.:
Árbol de decisión: Es un modelo de predicción en el cual se generan diagramas de construcciones
lógicas a partir de una base de datos. Estos diagramas sirven para representar
y categoría condiciones que ocurren de forma sucesiva.

Redes Neuronales: Son un paradigma de aprendizaje y procesamiento automático, el cual surge
de la inspiración del funcionamiento del sistema nervioso del ser humano. Esto
es un conjunto de neuronas en la red, las cuales se encuentran interconectadas
para colaborar entre si y producir un estimulo de salida
.

Análisis de Cluster: Es la asignación de un conjunto de observaciones en un subconjunto, para que
esas observaciones en el mismo cluster sean similares en alguna escena. El
clustering es un método de aprendizaje no supervisado y una técnica muy común
para el análisis de datos estadísticos usado en muchos campos entre los que se
encuentran aprendizaje de maquinas, data mining, reconocimiento de patrones,
análisis de imágenes y bioinformática.

Algoritmos Genéticos: Es una de las ideas más prometedoras de la inteligencia artificial, surge en 1970
gracias a John Henry Holland. Fueron llamados así por que se inspiran en
la evolución biológica y su base genética molecular. Estos algoritmos hacen
evolucionar una población que es sometida a acciones aleatorias semejantes a
las que ocurren en la evolución biológica, así como la selección de acuerdo a
determinados criterios.

En el siguiente link se muestra un video en el cual se explican los aspectos basicos de Robocode. Se muestra desde la instalacion en Ubuntu hasta la creacion de el primer robot y la explicacion de las secciones del codigo. Asi mismo se muestra la creacion de una batalla y como ver que ocurre en tiempo real con nuestro robot.
http://www.youtube.com/watch?v=f5-HrQjwJAE
Este otro video muestra como se implementa el algoritmo de arbol de desicion en un robot de Robocode, asi mismo se muestran algunas de los metodos y funciones que posee Robocode y como hacer para utlizarlo en el IDE de Netbeans.
http://www.youtube.com/watch?v=wK1V5lgVaZM
http://www.youtube.com/watch?v=Ih315srqVYg

Existen también muchas estrategias en Robocode, todo depende de la imaginación del desarrollador, existen tanto estrategias de ataque como de movimiento, dentro de las estrategias de movimiento encontramos:
Movimiento Lineal3 :Movimiento en linea recta. Vulnerable al apuntamiento
lineal.

Movimiento en Linea Recta: Vulnerable al apuntamiento Lineal.

Oscillators: Movimiento en un conjunto de patrones que se repiten. Vulnerable al Pattern Matching.

Movimientos en Ciculo: Son vulnerables al apuntamiento
Circular.

Wall Bots: Se mueven a lo largo de los muros. Vulnerable a LinearTargeting, excepto cerca de las esquinas.

RamBots5 : Se mueve hacia el enemigo. Vulnerable a la mayoría de los
apuntamientos pero consigue bonos extras por arrollar.

También existen estrategia de ataque:
Apuntar a enemigos lejanos: se pretende predecir la posición en un futuro de un enemigo y disparar allí
Seguir al enemigo: perseguir a un enemigo para poder atacarle
Arrollar: atacan a su enemigo mediante ataques de cuerpo a cuerpo.

El robot presentado en este post es un robot que implementa la estrategia de movimiento en las paredes. Lo bueno de esta estrategia es que se obtiene una mayor distancia al enemigo por lo cual, en general, es mas difícil ser acertado con un disparo.

El siguiente listado es un conjunto de metodos y funciones que posee Robocode para controlar la información de los robots y con lo cual nuestro robot puede desarrollarse:
getX(), getY(): obtiene las coordenadas en X o Y de nuestro robot.
ahead(double), back(double): mueve al robot hacia adelante o haci atras.
TurnLeft(degree), turnRight(degree): gira al robot un determinado grado.
TurnGunLeft(degree), turnGunRight(degree): gira al cañón un determinado grado.
TurnRadarLeft(degree), turnRadarRight(degree): gira al radar un determinado grado.
GetHeading(), getGunHeading(), getRadarHeading(): ver la direccion en que ve el tanque, arma o radar.
GetGunHeat(): para obtener el calor del arma, si esta muy caliente no podrá disparar.
GetEnergy(): obtiene la energia restante de nuestro robot.
Entre otros.

Así mismo también se poseen eventos que controla el sistema de Robocode, entre estos encontramos:
onScannedRobot: evento que se dispara cuando el robot detecta a un robot enemigo.
onHitWall: evento que se dispara cuando el robot golpea una pared.
onHitRobot: evento que se dispara cuando el robot es golpeado por otro robot.
onHitByBullet: evento que se dispara cuando el robot es golpeado por una bala enemiga.
Entre otros.

5. Gerber Bautista - Julio 8, 2009

ROBOCODE
(Un Tanque Inteligente)

Que es ROBOCODE?
Robocode es un entorno gratuito de simulación de guerras de robots, desarrollado por Alphaworks de IBM, en el que hay que programar un tanque en Java para pelear en el campo de batalla contra tanques programados por otros jugadores. Existen dos modos de juego: batalla individual, en el que cada robot lucha contra todos los demás y batalla en equipo, en el que un ejército de robots lucha por la victoria de modo colaborativo.

La construcción de estos robots es bastante sencilla utilizado para enseñar de forma más didáctica la programación orientada objetos en java, pero existe una forma más avanzada de utilizarla para la simulación de sistemas software autónomos dotados de inteligencia con una estrategia y tácticas diseñadas por medio de conceptos de Inteligencia Artificial.

En nuestro caso nuestro nuestro agente inteligente será un tanque, el cual deberá ser capaz de tomar decisiones y aprender de su entorno para poder ganar batallas, la implementación de estos se puede realizar por medio de conceptos como:

• Arboles de decisión
• Redes neuronales
• Clustering
• El vecino más cercano
• Algoritmos genéticos

Al igual que el mundo real nuestro tanque recibe entradas del entorno para luego procesar esta información y ejecutar una acción específica, en el código de robocode las entradas son obtenidas por medio de eventos que pueden ocurrir en el campo de batalla, entre estos eventos tenemos:

• Choca la pared: onHitWall(evento)
• Es alcanzado por una bala: onHitByBullet(evento)
• Choca a otro robot: onHitRobot(envento)
• Escanear un robot: onScannedRobot(envento)
• Si ha muerto: onDeath(evento)

También tenemos una serie de eventos útiles para obtener datos para poder programar la toma de decisiones como por ejemplo:

Métodos de onScannedRobot

double getBearing():
Devuelve la dirección en grados del tanque que escaneaste, (relativo a la dirección de tu robot). (-180 <= getBearing() < 180).

double getDistance():
Devuelve la distancia del a la que se encuentra el robot que escaneaste (desde tu centro a su centro).

double getEnergy():
Devuelve la energía del robot.

String getName():
El nombre del robot

double getVelocity():
Velocidad del robot

Métodos del Evento cuando golpeamos un robot:

Double getBearing():
Devuelve la dirección en grados desde donde el otro tanque nos golpeo, (relativo a la dirección de tu robot). (-180 <= getBearing() < 180).

Double getEnergy():
Retorna la cantidad de energía que posee el robot que golpeaste.

La documentación como el API puede ser obtenida de los sitios:

http://robocode.sourceforge.net/
http://www.robocode-argentina.com.ar/queesrobocode.html

A continuación presentamos un video relacionado con la implementación básica de un tanque, estrategias y el entorno de programación, como también una batalla.

http://www.youtube.com/watch?v=x0H3P1BfT-w

IMPLEMENTACION DE ARBOLES DE DECISION:

Los Arboles de decisión son una técnica que permite analizar decisiones secuenciales basada en el uso de resultados y probabilidades asociadas.

Un árbol de decisión tiene unas entradas las cuales pueden ser un objeto o una situación descrita por medio de un conjunto de atributos y a partir de esto devuelve una respuesta la cual en últimas es una decisión que es tomada a partir de las entradas.
Un árbol de decisión lleva a cabo un test a medida que este se recorre hacia las hojas para alcanzar así una decisión. El árbol de decisión suele contener nodos internos, nodos de probabilidad, nodos hojas y arcos. Un nodo interno contiene un test sobre algún valor de una de las propiedades. Un nodo de probabilidad indica que debe ocurrir un evento aleatorio de acuerdo a la naturaleza del problema, este tipo de nodos es redondo, los demás son cuadrados. Un nodo hoja representa el valor que devolverá el árbol de decisión y normalmente las ramas brindan los posibles caminos que se tienen de acuerdo a la decisión tomada.

En Java la implementación de estos árboles se realiza por medio de sentencias como If’s anidados y cases, haciendo también uso de variables y estructuras de datos, para robocode, como se menciono anteriormente nos proporciona una serie de métodos y eventos los cuales sirven de nodos para nuestro árbol, para más información de la implementación sugerimos visitar el siguiente video:

http://www.youtube.com/watch?v=FZ3YC00MOL8

Gerber Bautista 2004-12391
IA1 2009

6. Julio Santizo - Julio 8, 2009

Robocode es juego de programación a través del cual se puede aprender a programar en Java y aprender conceptos y algoritmos de inteligencia artificial en una forma muy divertida. El proyecto fue iniciado por Matthew A. Nelson y es de código abierto. Los requerimientos para instalar Robocode, se reducen únicamente a un JDK. Cada robot consta de tres partes, el cuerpo, el arma y el radar, el cuerpo es la estructura mas grande del robot y la cual le da movilidad, el arma es un pequeño cañón giratorio que le sirve para atacar a sus contrincantes y el radar para detectar donde están los otros robots.
Describo con mas detalle el funcionamiento y las reglas de Robocode en el siguiente video:

Para poder armar una buena estrategia, primero tuve que entender muy bien el funcionamiento de Robocode como simulador, sus características y limitaciones, así como el funcionamiento de los robots y las funciones que podemos utilizar para controlarlo y la forma en que responden, todo esto esta detalladamente en el mi primer articulo:

Como Robocode es una plataforma de simulación bastante realista, debemos tomar en cuenta que el cañón del arma se calienta con cada disparo, impidiéndonos disparar muy seguido, las balas viajan a una velocidad constante, por lo que debemos tener en cuenta el tiempo que tardan en llegar a su objetivo, perdemos cierta energía con cada disparo por lo que deberíamos acertarle al enemigo, etc.
Mi estrategia básicamente consiste en un movimiento randomico para esquivar las balas, reacción inmediata ante ataques, apuntamiento en base a patrones y un giro infinito del radar. Una descripcion mas completa de mi estrategia puede verse en el siguiente video

O leerse en el siguiente articulo

7. Julio Santizo - Julio 8, 2009
8. Luis Fernando Juárez Avila (200511691) - Julio 8, 2009

Robocode es un proyecto que pretende mostrar como la programación puede resultar fácil y divertida, robocode es un juego de batalla entre tanques a los que se les llama robots que disparan y se mueven y giran, pero lo bonito de este juego es que los tanque no se controlan en tiempo real, si no que mas bien se asemejan a robots que seguirán ordenes dadas predefinidamente por medio de programación.

Robocode es un juego educacional muy amplio que se puede usar desde un nivel básico para enseñar a programar en java o incluso para la simulación de agentes con inteligencia artificial que usan estrategias y tácticas para ganar el juego.

La idea es que en un campo de batalla poner a los robots programados y dependiendo de como estén programados y que tácticas usen sus programadores se comportaran de cierta manera en la batalla, esquivando a sus oponentes, localizándolo, disparándole, etc. Al final ganara el robot que destruya a los demás y por ende el que este mejor programado.

Durante el curso de Inteligencia Artificial tuvimos la oportunidad de poder aprender bastante sobre este proyecto e incluso hicimos algunos artículos y vídeo-tutoriales para los que quieran comenzar y probar este juego y ademas aprender sobre algoritmos de machinelearning y técnicas para programar los robots.

http://www.youtube.com/watch?v=3ELGpWcbNRw

http://www.youtube.com/watch?v=CWcPfn7v1KQ

http://www.youtube.com/watch?v=0FSlBgGUDdU

Al final cada estudiante del curso programó un robot propio y nos enfrentamos en grupos de 5, lo cual estuvo muy divertido, emocionante y educativo.

Durante el curso aprendimos sobre distintos tipos de algoritmos que también están incluidos en los vídeos y sobre ellos nos basamos para construir nuestros robots, la mayoría incluyéndome a mi utilizamos arboles de desicion. Por lo que parte de mi estrategia estuvo basada en los siguientes arboles de desicion.
http://picasaweb.google.com/lh/photo/PgLssytvzJoKV8wLCLMbdA?feat=directlink
http://picasaweb.google.com/lh/photo/2AcN4xmVnsd2Sdt8NmEZtw?feat=directlink
http://picasaweb.google.com/lh/photo/ISjz8P-St7jLTiURTeaexg?feat=directlink

Claro esta que además se pueden utilizar algoritmos como redes neuronales y algoritmos genéticos para lo cual se puede utilizar JGAP que es un paquete java especializado en algoritmos genéticos.

Aunque en las aplicaciones no es muy común darnos cuenta de que podemos crear en cierto grado esta inteligencia artificial con este proyecto de robocode es mas evidente, ya que es claro que no interactuamos directamente en el juego, sino que educamos o les enseñamos a los robots como deben actuar en función de los estimulo que reciben del entorno.

Es bien interesante ver como los tanque a la hora de iniciar el juego se vuelven entes relativamente independientes y pensantes en el juego y nosotros luego de programarlos nos volvemos nada mas que espectadores. Es como si minutos antes les hubiéramos enseñado como jugar y ya comenzado el juego todo esta en si les enseñamos bien o les enseñamos mal.

Es mas interesante aun ver como es un juego que no tiene limite alguno, o que bien se puede decir que el único limite es la imaginación e ingenio de los jugadores. Es un juego que puede mostrar la capacidad de razonamiento de los jugadores, de lo creativos que pueden llegar a ser y pues a mi gusto si es divertido ver como lo que alguien creo se esta desenvolviendo en el juego. Y es que hay otro punto bien interesante en el juego, y es que mas que controlar una figura, un personaje, lo estamos creando, ese personaje no tendrá habilidades por si mismo sino tendrá las habilidades que nosotros le podamos dar.

Sinceramente pienso que el proyecto es sencillo, pero con un gran valor educativo, creo que aun siendo simple tiene mucho potencial y hace que los jugadores puedan también explotar su potencial. Mas que un proyecto complicado creo que fue una idea brillante, ya que con simple programación se puede disfrutar, tener diversión y aprender.

9. Rafael Siney - Julio 8, 2009

Realmente este es un proyecto bastante interesante desde mi punto de vista, para los que nos gustan los juegos y tambien pequeños retos sobre pensar estrategias y como vencer a los oponentes, y ver como actuan nuestros robots y tambien ver en que fallan cuando son vencidos. Y sin animos de envidia, ver como el robot de otros compañeros son bastante buenos, que incluso casi ni dejaban jugar a mi robot.

Despues de esta breve introduccion, pasare a explicar la estretegia que implemente para el combate de mi robot, cuyo nombre fue “destructor”. Basicamente la estrategia la desarrolle a partir de un arbol de decisiones.

Mi robot mantienen un movimiento aleatorio desde el inicio del juego, y al momento de detectar un robot en el radar, es la primera decision que toma, el robot evalua la distancia del robot oponente y segun la distancia toma una decision, por ser arbol de decision es binario y por ende 2 caminos, segun la decision tomada si la distancia es menor a cincuenta pasa a una rama del arbol en donde toma otra decision donde el robot preguntara por el nivel de energia, y segun el nivel de energia detectado el robot tomara uno de los dos caminos posibles, que basicamente es dispara pero con diferente potencia.

Ahora bien el camino que toma si la distancia es mayor a cincuenta es otra decision en la que preguntara por el estado de la orientacion del arma, y segun este eligira cambiar la orientacion del arma, o bien el otro camino en donde pregunta por el calor del arma, ya que el arma se calienta por la serie de disparos que realiza, y en base a esto dispara variando la potencia o bien no dispara.

Tambien existe la decision que toma al momento que recibe un disparo, que basicamente es continuar moviendose o bien tratar de realizar moviemientos de tratarían de esquivar los disparos.

Esa es básicamente la estrategia que estaba implementado, que tiene ciertas fallas pero que hasta cierto punto funciona, pero siempre habia un par de robots por ahi que lo mataba.

Esta gráfica es la del árbol de decisión que reflaja de cierta forma lo que trate de realizar en el desarrollo del robot.

http://img339.imageshack.us/img339/4880/arboldecisionjuego.jpg

Ahora bien los videos de las fases mientras se elaboraba el robot del proyecto robocode, son los siguientes:

El de la fase 1 que fue solo de instalacion e introductorio al uso.

Y en la fase 2, que se hablo un poco mas de las estrategias que se podian pensar para implementarlas en nuestro robot, este video solo comenta a grandes rasgos estas estrategias, y un mini ejemplo de cuando estaba empezando el arbol de decision.

10. Cristian Acu - 200412794 - Julio 8, 2009

RoboCode es un simulador de combates entre robot-tanques desarrollado por Mathew Nelson para IBM Alphaworks en 2001. Es una aplicación desarrollada en Java, se emplea un enfoque orientado a objetos en el que el robot es avisado mediante la invocación de sus métodos. El codigo es libre y se puede descargar del sitio http://robocode.souceforge.net, la version actual es la 1.7.

La gran ventaja de ser codigo java, es que permite importar librerias y aumentar funcionalidades del robot. Existen 3 tipos de clases que se pueden programar en robocode:
- Robot: la clase basica que permite la creacion de robots sencillos.
- AdvanceRobot: esta permite mas flexibilidad y permite ejecutar acciones simultaneas sin necesidad que estas se finalicen para iniciar la siguiente, algo que no sucede con la clase robot.
- RobotTeam: Esta clase sirve para comunicar a varios robots pertenecientes a un equipo.

Cada robot esta formado por 3 partes: Un cuerpo de robot, un arma y un radar. Cada una pueden ser utilizadas independientemente del resto.
Las acciones un robot son funciones basicas de movimiento, escaneo y ataque (disparo). Ademas cada robot contiene un conjunto de metodos que se activan al ocurrir un evento, por ejemplo chocar con un enemigo (OnhitRobot), chocar con una pared (OnhitWall), ser alcanzado por una bala (OnhitBullet), etc.
Como se ha descrito los robots tiene una buena cantidad de funcionalidades que lo hacen atractivo, pero una caracteristica que hace interesante a esta aplicacion-juego es la implementacion de estrategias que se enfocan por el camino de metodos de inteligencia artificial, desde implementaciones basicas como arboles de desicion hasta algo mas complejas como algoritmos geneticos.

Al hablar de implementar una estrategia siempre es recomendable conocer el contexto en que se desarrolla la accion, es decir debemos de definir detalles como los atributos que nos permiten conocer a nuestros enemigos por ejemplo identificar a cada uno, determinar su posicion en el campo, la cantidad de energia que tiene, etc. que se permite por cada robot y en base a esta informacion crear la estrategia.
Por ejemplo si se habla de implementar una estrategia con “Arboles de desicion”, se toma el caso que seamos atacados, alcanzados por una bala.
comenzariamos con la raiz, ataque. Si somos atacados podemos tomar el atributo de energia propia, si esta es poca procedemos a escapar; en el caso que fuese alta procedemos a conocer la energia del contrincante, si esta es baja procedemos a atacar, si es alta tenemos la opcion de escapar. Como se ve basamos en soluciones sencillos en la cual en base a cierto factor tomamos una de “2″ posibles soluciones. El arbol de desiciones es un arbol binario.

Si Fuese el caso de un algoritmo genetico, es algo mas complicado. En la teoria “los algoritmos geneticos” son analogos a la ciencia de la genetica, contamos con un grupo de individuos que forman una poblacion, cada individio cuenta con caracteristicas ya sean beneficiosas o no (fenotipos), se realiza una seleccion de individuos sobre la poblacion y obtenemos un nuevo grupo que forman parte de una nueva generacion que contiene caracteristicas propias que lo hacen efectivo, tambien podemos encontrarnos con la mezcla de genes (Crossover) o el desarrollo de nuevas caracteristicas (Mutacion algo muy raro que suceda).El objetivo de cada generacion es ir creando soluciones mejoradas.
En la practica se define una poblacion de robot, por ser una poblacion pequeña se espera que sea poco tiempo el necesario para desarrollar cada generacion de soluciones. En robocode ya se cuenta con una libreria que permite la programacion de algoritmos geneticos gracias a JGAP.

Si hablamos de “redes neuronales artificiales (RNA)” debemos de referirnos a la idea de como el cerebro humano interpreta la naturaleza de las cosas, interpretamos dependiendo de la informacion que tengamos sobre ellas lo que nos permite discernir en que objeto es o que no es. Es por ello que se compara con una red semantica la cual interpreta las entrada que se dan y las interpreta en base a la informacion relacionada que se encuentra dentro de la red, lo que le permite determinar a que se esta refiriendo, gracias a que se realizan relaciones logicas entre la informacion. Una caracteristica importante es que las RNA es que podemos tener muchas entradas. Podemos aplicar en los robots con hecho de determinar atributos del robot (energia, distancia, velocidad, etc.) y que la red neuronal resuelva que situacion es y como se puede resolver.

Hay otros metodos sencillos como el algoritmo del vecino mas cercano que funciona con la logica de hallar y utilizar el camino mas corto, es este caso la distancia del enemigo mas cercano.

Otros tan complejos como Clustering, el cual es mas notable en la mineria de datos, ya que son algoritmos capaces de ir aprendiendo de lo que van obteniendo lo que logran es dar significado a cada dato, por lo que al realizar las siguientes extracciones de datos ya puede clasificar e interpretar de manera automatica de que informacion se trata.

El area de de estrategias en robocode es amplia por lo que solo depende de la creatividad de cada quien y como se desea implementar. Ademas de ser una aplicacion muy entretenida uno va aprendiendo, es totalmente recomendable.

Mas informacion en:
Utilizacion de robocode
http://www.youtube.com/watch?v=u0B9gNOZQg0
Introduccion a Estrategias

11. Luis Gálvez [2005 11740] - Julio 9, 2009

[Robocode]
Robocode es un API para Java muy versátil y robusto y es utilizado para fines educativos por varias razones. El primer objetivo de Robocode es aprender Java pero la razón que más no compete es la posibilidad de simular poderosos algoritmos de Inteligencia Artificial sobre está plataforma. Este juego no es online pero aún así con la llegada de la computación ubicua se pueden organizar batallas entre amigos programadores de sus propios robots o incluso, desde el wiki podremos retar a más de alguien interesado en demostrar
que su robot puede vencer al nuestro. Lo interesante de Robocode es que todo nivel de programadores puede participar, no excluyendo así a los newbies, que también pueden aprender Java jugando y aprovechando el espiritu de competencia que todos llevamos dentro para ponerle la pasión necesaria y aprender
jugando.
[Estrategia]
La estrategia que utilice durante el desarrollo de mi robot fué básicamente incluir en el comportamiento un movimiento que fuera dificil de seguir, y dependiendo del árbol de decisión, dicho movimiento e incluso la forma de apuntar y disparar cambiaran de acuerdo a las necesidades de la batalla.

[Videos]
A continuación dejo unos videos introductorios a Robocode.

Primera Parte
http://www.youtube.com/watch?v=WZSFiBVSsmw
Segunda Parte

12. Henry Ixcot - 200312355 - Julio 9, 2009

es un proyecto innovador para el aprendizaje del lenguaje java, tener nociones de programacion en java facilita muchisimos la programacion de un robot inicial, como bien dicen, crear un robot ganador es otra cosa. en la Clase de Inteligencia Artificial 1, en la facultad de ingenieria de la USAC, Guatemala, nos dejaron un proyecto sobre este simulador de batallas,

inicialmente creamos un articulo introducctorio para robocode, el cual pueden bajar de:
- http://rapidshare.com/files/253680334/200312355_fase1.pdf.html

y un video sobre este articulo:
http://rapidshare.com/files/249196173/200312355_fase2.avi.html

luego en la siguiente fase, abordamos temas sobre posibles estrategias que podemos aplicar en robocode, ademas de un ejemplo paractico, del cual se realizo un aritculo que pueden descargar de:

y los videos sobre este articulo, los pueden ver en:
- http://www.youtube.com/watch?v=V8_Fl47jlDA parte 1
- http://www.youtube.com/watch?v=c8Q1EF7-bSQ parte 2
- http://www.youtube.com/watch?v=24_jWETo2IY parte 3

inicialmente programar el robot es, adictivo, pero se llega a un punto en el cual las estrategias que se han utilizado no han funcionado bien, o siempre pierden contra algun robot en especial, pero no hay que desaminarse, lo mejor es iniciar a utilizar la clase ADVANCEDROBOT, para empezar a mejorar las acciones de nuestro robot, fase en la que necesitamos mas conocimientos de java, pero al seguir insistiendo obtendremos la satisfaccion de destruir a nuestro enemigos.

finalmente, les animos a programar su robot, espero que les ayuden los tutoriales (articulos) y para que se diviertan tambien incluyan mi robot inicial, que lo pueden bajar de:
- http://rapidshare.com/files/253682908/dictions.Jazz_1.0.jar.html