Robocode 2

October 14, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download Robocode 2...

Description

 

SISTEMAS SISTE MAS B A SADOS EN CONOCI CONOCIMIENT MIENTO: O: ROBOCODE  Javier Jiménez Dorado 100033052  jjdorado  jjdo rado@ing @ing.uc3 .uc3m.es m.es

Rubén Gómez-Chacón Camuñas 100029696 [email protected]

RESUMEN  En este artículo vamos a tratar un sistema de representación del conocimiento sencillo. Para ello utilizaremos la plataforma gratuita Robocode Robocode [1] El objetivo del trabajo re realizado alizado es  presentar un esquema de un diseño para un robot que, partiendo de un conocimiento aprendido más la información que va adquiriendo durante el combate, sea capaz de tomar decisiones de cual es la estrategia más conveniente a utilizar en un combate individual, no por equipos. Finalmente se m mostrará ostrará la explicaci explicación ón de una versión reducida del esquema propuesto así como los resultados.

Categorías y descriptores de materia I.2.4 Knowledge Representation Formalisms and Methods; I.2.9 Robotics 

General Terms 

Desde la perspectiva robótica nos tenemos que enfrentar al  problema de la interacción con el medio de nuestro robot y  posteriormente cómo llevar a cabo los movimientos y acciones que se han decidido realizar. A continuación vamos a presentar una teoría de diseño y construcción de robots con las bases ya presentadas. Al finalizar el artículo comentaremos la implementación final, los resultados y  posibles mejoras para una revisión. revisión.

3.  ELECCIÓN DE LA ESTRATEGIA: DISEÑO. 3.1  Análisis del entorno Como todo sistema que interacciona con el medio, que es lo que  pretende ser nuestro robot, produce una serie de respuestas ante un conjunto de estímulos de acuerdo a un conocimiento que le viene dado por la experiencia o reglas aprendidas.

Algoritmos, Desarrollo, Diseño y Teoria.

Keywords  Robocode, Decisiones, Estrategia, Conocimiento.

1.  INTRODUCCION Robocode es una plataforma pensada en un principio para aprender Java pero que se ha convertido en una forma fácil de aplicar conocimientos de Inteligencia Artificial. Para programar existen varios APIs [2]. Los robots que tienen tres partes o variables: Cañon, Radar y Cuerpo. Más información [1]-[4].

En esta primera fase, análisis del entorno, el robot se encarga de recibir los estímulos. La forma que tiene de hacerlo es mediante ciertos sensores que a efectos prácticos se traducirán en eventos. El sensor básico es el radar que le permite conocer la posición de sus contrincantes pero también tiene acceso a información pública del sistema como son el número de contrincantes que quedan y a información privada como la energía que todavía posee. También con una serie de razonamientos , deducciones y aproximaciones es obtener información implícita, como puede ser la tasaposible de disparo y deotra aciertos del contrincante.

2.  INTELIGENCIA DE DE COMUNICACIONES Y REDES ROBOCODE Hay varios campos de investigación entorno a Robocode en el campo de la Inteligencia Artificial, el conocimiento, el aprendizaje, etc. De hecho han sido ya varios los estudios realizados en otros años acerca de este tema:

3.1.1  Caracterización de los robots Conocidos los sensores del robot veamos las variables del entorno que más información nos dan:

- Evolución de robots por algoritmos genéticos. - 

Aprendizaje: experiencia.

aprender

estrategias

mediante

la



General:

   Número de participantes

o

-  Esta vez hemos querido centrarnos en cómo representar el conocimiento y cómo tomar decisiones en base a este conocimiento.

Propia:

 

Energía

 

Tasa de aciertos

o o



Contrincante:

 

 

o

 

Frecuencia

 

Tasa de aciertos





 

o

los combates, también podemos realimentar nuestro sistema de tal manera que el robot aprendiera de su propia experiencia.

Disparos

Patrón de movimiento

 

Tipo



3.2  Diseño de la estrategia: Árbol de decisión

o

 

Energía

La información que podemos extraer del contrincante se podría codificar en las siguientes tablas. Notar que dichas tablas y conclusiones están, por otro lado, sujetas a la visión del diseñador. Tener en cuenta que uno puede concretar todo lo que quiera. Como en todo agrupamiento hay que llegar a un compromiso:

Para realizar el árbol de decisión y elegir la estrategia que vamos seguir nos vamos a basar b asar en la siguiente dependencia:

Movimiento

Figura 1: Relación Movimiento y Disparos.

Tabla 1: Conocimiento sobre Energía. Energía

Conclusión

E < 15%

Agonizando

E >= 15%

Saludable

Así según el enemigo se mueva nosotros dispararemos y viceversa. Además nos basaremos en la energía de ambos. Esta relación no es dicotómica, es decir, hay puntos intermedios y distintas alternativas ante una misma situación. No obstante para simplificar el diseño vamos hacer relaciones directas.

3.2.1  Tipos de estrategias

Tabla 2: Conocimiento sobre Disparos.  Frecuenci Tasa Aciertos Conclusión a Alta

Alta

Experto

Alta

Baja

Insensato

Baja

Alta

Precavido

Baja

Baja

Novato

Antes de nada introduzcamos los diferentes tipos de movimiento que están recogidos en [3]. Muchos de ellos han sido tenidos en cuenta en nuestro diseño:

 

LinearMovement – Movimiento en línea recta. Vulnerable al apuntamiento lineal [6].

 

Oscillators [7]– Movimiento en un conjunto de patrones que se repiten (aunque el período puede ser muy largo). Es vulnerable al PattherMatching [8].

 

CircleBots [9] – Se mueven en circulos. vulnerables a apuntamiento circular [10.

 

WallBots [11 – Se mueven a lo largo de los muros. Vulnerable a LinearTargeting, excepto cerca de las esquinas.

 

RamBots [12] – Se mueve hacia el enemigo. Vulnerable a la mayoría de los apuntamientos pero consigue bonus extras por ram (arrollar).

 

StopAndGo [13] – Reacciona ante fuego enemigo. Es efectivo frente a apuntamiento lineal y circular pero es vulnerable ante PatternMatching y GuessFactorTargeting [14].





Tabla 3: Conocimiento sobre Movimiento  Velocidad Choques Muro Lineal Curvilíneo Conclusión s V>0

SI

-

-

-

Arrollador

V=2

NO

NO

SI

NO

Lineal

NO

largo Lineal corto

V=1

NO

NO

SI

Disparos

V>0

-

SI

-

-

Muros

V=2

NO

NO

NO

SI

Elipse largo

V=1

NO

NO

NO

SI

Elipse corto

V=0

-

-

NO

NO

Estático

.

Gracias la caracterización del contrincante, no sólo vamos a poder elegir la mejor estrategia si no que, registrando los resultados de









Son

Como vemos, junto a cada movimiento se comenta el método de apuntamiento más efectivo o aquel al que es vulnerable. He aquí la relación directa ya comentada entre movimiento y apuntamiento.

 

Además de los modos de apuntamiento ya mencionados existen otros muchos, algunos de ellos bastante más complejos y sofisticados que los vistos [15].

Figura 2. Árbol decisión de mi movimiento 

Tabla 4: Relación Estrategias de Movimiento y Apuntamiento   Movimiento

Apuntamiento

Lineal

Lineal

Oscilante

PatternMatchin g

Circular

Circular

Muros

Lineal

Arrollador

Indiferente

StopAndGo

PatternMatchin g

En la figura 2 vemos la secuencia de cuestiones que se tendría que  plantear nuestro robot para ver si es bueno cambiar de movimiento o no. En principio lo más sencillo es cambiar de lineal a circular aunque  puede ocurrir que nos convenga otra estrategia distinta como  puede ser arrollar al contrario o escapar, que aunque no está considerada estrategia en la página de Robocode, hemos considerado conveniente huir del enemigo cuando estemos siendo arrollados porque es de esperar que nos quedemos sin energía.

Quieto / Arrollador Con ajustar todo hemos podido la siguiente atabla que nos servirá  para nuestro patróncrear del movimiento su patrón de disparo así como para apuntarle de acuerdo al tipo de movimiento que  posea.

3.2.2   Árbol de decisión

Si

 No

Muros 

ACRIBILLAR

Ya estamos listos para crearnos nuestros árboles de decisión. En Java resulta muy sencillo la creación de estos gracias a las estructuras de control if-else y switch.

 No

Si

Lineal

LINEAL

Vida Si Gano

Movimiento Enemigo 

ARROLLAR  No

Si

PATTERN MATCHING

LIN Alta

SIN

Figura 3. Árbol decisión de mi apuntamiento  

Baja

Alta

Frecuencia Disparos

CAMBIO

 No

Tasa Aciertos Enemigo

Baja

Baja

CIRCULAR Circular

Tasa Aciertos Enemigo Alta

Si

ESCAPA

Propio Linea l

Circular

LINEAL

Movimiento

CIR 

 No

Pierdo

Frecuencia Disparos Baja

CAMBIO

Mediante la 3 figura somos capaces de ajustar nuestro robot de tal manera que apunte mejor para que no pierda energía al fallar. Alta

SIN

 

contrincante, el robot debe ser capaz de darse cuenta de este hecho y cambiar de estrategia en la siguiente ronda.

 

 Notar que un combate, por defecto, está compuesto por 10 rondas. La forma de pasar información de una ronda a otra es mediante un fichero log que podemos crear manualmente o utilizando funciones Java contenidas en el API de robocode como

getDataFile [2].

3.3  Ejecución de la estrategia Una vez analizado el entorno y contrastado con las reglas que tenemos aprendidas viene la hora de ejecutar la estrategia y tomar nota de los resultados. El diseño óptimo de este tipo de robots debería permitir la actualización de la estrategia sobre la marcha. En principio el caso más sencillo será aquel en el que el contrincante sólo tenga un movimiento predefinido por lo que una vez que adivinemos sus patrones de comportamiento no tendremos que modificar el nuestro más que una vez. Sin embargo existe cada vez gran cantidad de robots que poseen un patrón de comportamiento variable y/o adaptable como lo es el nuestro. Con este tipo de enemigos el combate se convierte en un duelo de titanes en el sentido de que son poderosos y por otro lado en un duelo de ajedrez, en el que cada contrincante estudia a su enemigo. En estos casos no es suficiente la estrategia de observar, decidir y ejecutar, si no que es necesario una estrategia por defecto ya definida que debe ser lo suficientemente buena. Otra opción para el caso de lucha contra robots que cambian de modo es ir alternando las distintas estrategias lo más aleatoriamente posible para despistar al enemigo.

3.3.1   Realimentación Un buen robot tomará nota del trascurso de la batalla y de los resultados obtenidos. El objetivo de estos registros son varios:

- Por un lado es importante chequear si el robot está,  primero, deduciendo el comportamiento del enemigo de forma correcta y segundo, si está tomando las decisiones correctamente. - Si está tomando las decisiones tal y como se le ha enseñado será bueno comprobar si nuestros criterios han sido correctos. De esta forma veremos si nuestras estrategias de movimiento son capaces de disminuir su tasa de acierto y si estamos prediciendo sin mucho error la posición del enemigo a la hora de disparar. Estos registros y la información que podemos extraer de ellos deben servir para realimentar nuestro sistema, en este caso el robot. La forma de hacerlo es distinta según sea la información: - Si hay fallos de programación debemos introducir cambios de forma manual. - Si por el contrario parece ser que la estrategia elegida no funciona correctamente contra un determinado

4.  RESULTADO DEL DISEÑO: SMARTY Finalmente, después de haber diseñado esquemáticamente la vida de un robot, realizamos una implementación sencilla. Al proyecto le hemos denominado Smarty. 

4.1  Limitaciones La primera gran limintación que nos encontramos fue el tiempo y los conocimientos. Esto se debe a que implementar las estrategias descritas en el diseño es más complejo de lo que a priori se puede suponer. Si bien una estrategia en sí ya es costoso era inviable implementar desde cero todas las estrategias. Por este motivo y sin faltar a los derechos de la propiedad  buscamos código en el repositorio de Robocode [3] así como en las prácticas de otros años en la página web de la asignatura Inteligencia de Redes de Comunicaciones [16]. En el repositorio de Robocode existe una base de datos de robots, clasificados por tipos, que se pueden descargar. Sin embargo no son muchos los que proporcionan el código fuente, siendo complicado reutilizar dicho código. En cuanto a los trabajos de años anteriores si bien algunos tienen un movimiento sofisticado y ciertos métodos de predicción nos fue complicado cata catalogar logar los robots. En definitiva, no ha sido posible encontrar robots con las características deseadas y no hemos tenido tiempo suficiente para diseñarlos desde cero. Es por ello que nos hemos basado en algunos de estos pero que no son precisamente característicos de su grupo. En realidad la versión última del robot Smarty no llega tampoco a implementar un estudio avanzado del movimiento del robot enemigo y por tanto el método de disparos está sujeto al comportamiento de los robots usados para formar a Smarty.  No obstante este no debe suponer mayor problema porque lo interesante de este estudio es la capacidad de análisis y decisión que posee el robot Smarty.

4.2  Cerebro de Smarty Como se sabe, los robots de robocode son una clase Java, que hereda la clase Robot o AdvancedRobot y que posee  principalmente: - 

método run() cuya ejecución no debe finalizar



manejadores de eventos. Los eventos pueden ser estandares o personalizados. (ver la documentación [3].

 

 Nuestro robot hereda de la clase AdvancedRobot que permite realizar más funciones y complejas de una manera más eficiente. Siguiendo con el diseño procedimos a crear el diagrama de flujo . Para ello teníamos dos opciones que se muestra en la figura 4.

Las únicas clases de apoyo que tenemos son los robots descargados aunque ellos sí que se apoyan en numerables clases y métodos para realizar las tareas. Lo primero que hacemos es observar los niveles de vida del contrincante para toma tomarr posteriormente la dec decisión isión de arrollarle o no. Después un tiempo para comprobar si estamos siendo arrolladosnos pordamos el contrario. A partir de ahora pasamos a estudiar su forma de disparar. Básicamente medidos su tasa de aciertos y de disparos para hacernos la idea del perfil que tiene. Periódicamente observaremos la vida que este posee por si es necesario cambiar cambiar al modo arrollar. Sin embargo no volveremos a comprobar si él nos está arrollando a nosotros.

4.2.2   Decisión La toma de decisión es muy sencilla. Básicamente seguimos las reglas que nos marca el árbol de decisión. Activando según  proceda ciertas variables y atributos para identificar la decisión que corresponda. Como continuamente estamos observando si los patrones de

Figura 4. Diagrama de flujo Como comentamos en el diseño el robot debe tener un comportamiento por defecto mientras toma las decisiones.  Nosotros optamos por un comportamiento sencillo como es el de dar vueltas pequeñas mientras que disparaba al visualizar el obstáculo de forma sencilla. sencilla. Este simple movimiento hace muy difícil ser alcanzado mientras nos da la posibilidad de estudiar sus movimientos. Aclarar que la figura 4 representaría el esquema a seguir por un lado para la decisión de movimiento y por otro para decidir la forma de apuntar. También comentar que es difícil separar físicamente en el código Java qué es parte de la observación, qué de la decisión y qué de la ejecución. Si bien prim primero ero y segundo son más confusos eell tercero claramente porque está formado de métodossedeveRobocode que representan acción.principalmente De todas formas intentaremos explicar lo mejor posible cómo ha sido la implementación.

4.2.1  Observación ¿Cómo observamos? Como ya se ha comentado gracias al radar  podemos obtener objetos que nos facilitan cierta información. Por otro lado las balas son otro objeto que poseen información valiosa así como los eventos. Para poder registrar toda la información que necesitamos nos valemos de los atributos. También podíamos haber hecho uso de otras clases que nos apoyaran pero optamos por no hacerlo.

comportamiento han cambiado, iremos ajustando nuestras decisiones según corresponda. La forma técnica de decidir es simplemente con if-else y switch. Utilizamos las sentencias if-else para comprobar los datos observados y también los sswitch witch para distinguir distintas opciones.

4.2.3  Ejecución Una vez que hemos decidido tenemos ciertos atributos como my_movement_mode que nos indican la estrategi estrategiaa que tenem tenemos os que ejecutar. Para ello cada método y capturador de evento está fragmentado  por una sentencia switch. Según el modo en el que estemos se ejecutarán unos comandos u otros. Más allá quehecho el simplemente hecho los de ejecutar unoshemos comandos lo que hemos ha sido reciclar robots que podido conseguir (pasando por un filtro, claro está). Hemos creado distintas clases para cada robot de tal forma que a comienzo de la vida de Smarty, se instancian un objeto de cada clase para su posterior uso. A cada constructor se le pasa el objeto this que apunta a nuestro objeto Smarty. De esta forma redirigiendo los métodos de Smarty al homologo que le corresponda (según la estrategia que queramos imitar), Smarty adopta uno u otro comportamiento.

4.2.4   Registro y valoración valoración Para simplificar la implementación el feedback a Smarty lo hemos realizado manualmente. Durante su creación se han ido ajustando  parámetros y estrategias de acuerdo a los datos que obteniamos.

 

Igualmente, en lugar de almacenar los datos en un fichero hemos  preferido mostrar mensajes en pantalla que nos vayan indicando el modo en el que se encuentra. Igualmente se puede obtener las tasas de cada uno descomentando el correspondiente System.out.println.

4.3  Resultados y conclusiones Los resultados de Smarty son por un lado sus cifras en el campo de batalla y por otro los resultados que es capaz de dar cuando muere.

 NERVIOSO DISPARA MUCHO ARQUERO SAYS: Dispara mucho ARCHERO DISPARA MUCHO ARQUERO SAYS: Dispara mucho MIERDA, ME MUERO Total number of bullets shooted to me: 72.00000000000001 Su tasa de aciertos es: 0.12499999999999996 Average power of his bullets: 0.6416666666666667

Un ejemplo de salida cuando gana un round es el siguiente:

SYSTEM: irc.Smarty has died

========================= Round 4 of 10

De estas dos capturas se pueden sacar las siguientes conclusiones.

=========================

Los resultados son más o menos fiables aunque en ocasiones muestran datos erróneos como es en el caso de los 72 tiros que fueron aproximadamente 50.

 No está mal de salud... CUERPO A CUERPO CUERPO A CUERPO CUERPO A CUERPO CUERPO A CUERPO CUERPO A CUERPO Parece que no me arrolla

En general estamos satisfechos del estudio realizado aunque ha sido complicado llevarlo a la práctica. Nos hubiese gustado poder demostrar nuestro diseño con mejores resultados. No obstante creemos que la idea es muy potente y ya solo faltaría “picar” código Java.

CUERPO A CUERPO DISPARA MUCHO ARQUERO SAYS: Dispara mucho ARCHERO

Como se ve en las siguientes figuras el robot obtenido es medianamente competitivo principalmente porque es capaz de adaptarse al contrario aunque, repetimos, no está muy ajustada esta relación.

ARCHERO SYSTEM: Bonus for killing albers.Tiger2: 14 SYSTEM: irc.Smarty wins the round.

Cuando muere muestra información por pantalla como se ve a continuación:

Figura 5. Victoria vs Albers

========================= Round 3 of 10 =========================  No está mal de salud...

Figura 6. Derrota vs SugarRays

CUERPO A CUERPO CUERPO A CUERPO CUERPO A CUERPO CUERPO A CUERPO DISPARA MUCHO

Figura 7. Victoria vs NeoKarel Absolute

ARQUERO SAYS: Dispara mucho ARCHERO  NERVIOSO SAYS: Acierta mucho  NERVIOSO SAYS: Acierta mucho  NERVIOSO

Figura 8. Derrota vs U571

 

6.  REFERENCES http://robocode.sourceforge.net.. [1]  Home page of Robocode. http://robocode.sourceforge.net

  Figura 9. Victoria vs Marvin En cuanto a la Inteligencia Artificial se puede decir que es una aplicación sencilla aunque práctica útil para otro tipos de sistemas. El aprendizaje mediante la experiencia se torna más complicado que el simple hecho de tomar decisiones pero de igual manera es posible.

[2]  Robocode APIs. http://www.codepoet.org/~markw/robocode/javadoc   http://www.codepoet.org/~markw/robocode/javadoc [3]  Robocode Repository http://www.robocoderepository.com. http://www.robocoderepository.com. [4]  Wiki of Robocode. http://robowiki.net/cgi-bin/robowiki. http://robowiki.net/cgi-bin/robowiki. [5]  LinearMovement http://robowiki.net/cgi bin/robowiki?LinearMovement..  bin/robowiki?LinearMovement [6]  LinearTargeting http://robowiki.net/cgi bin/robowiki?LinearTargeting..  bin/robowiki?LinearTargeting

Es gratificante dotar de unos recursos (no nos atrevemos a llamar inteligencia) a un robot y que se comporte, la mayoría de las veces, como tu esperas.

[7]  Oscillator (Movement) http://robowiki.net/cgi bin/robowiki?Oscillators..  bin/robowiki?Oscillators

4.4  Posibles mejoras

[9]  CircleBots – Movimiento Circular http://robowiki.net/cgi bin/robowiki?CircleBots    bin/robowiki?CircleBots

Para versiones posteriores hay varias tareas. Primero sería conveniente encontrar o crear código especifico para cada una de las estrategias explicadas en el diseño, no solo para moverse si no tambien para apuntar.

[10]  Circular targeting http://robowiki.net/cgi bin/robowiki?CircularTargeting    bin/robowiki?CircularTargeting

[8]  PatternMatching http://robowiki.net/cgi bin/robowiki?PatternMatching    bin/robowiki?PatternMatching

[11]  WallBots http://robowiki.net/cgi-bin/robowiki?WallBots  http://robowiki.net/cgi-bin/robowiki?WallBots  http://robowiki.net/cgi-bin/robowiki?RamBots   [12]  RamBots http://robowiki.net/cgi-bin/robowiki?RamBots

Por otro lado seria muy positivo un almacenamiento en fichero de los resultados para posterior análisis, así como una ampliación de los tipos de información que se quiere almacenar. Mejor estructuración del código y depuración porque existen unos errores que no hemos sabido solventar relacionados con el empleo de Java. También la realimentación y aprendizaje del robot Smarty sería conveniente revisar.

[13]  bin/robowiki?StopAndGo StopAndGo http://robowiki.net/cgi bin/robowiki?StopAndGo    [14]  Guess Factor Targeting http://robowiki.net/cgi bin/robowiki?GuessFactorTargeting    bin/robowiki?GuessFactorTargeting [15]  Targeting methods http://robowiki.net/cgi bin/robowiki?Targeting    bin/robowiki?Targeting [16]  Asignatura Inteligencia Redes de Comunicaciones http://www.it.uc3m.es/jvillena/irc/indice.html http://www.it.uc3m.es/jvillena/irc/indice.html  

5.  AGRADECIMIENTOS Al profesor, pero no para hacerle la pelota si no simplemente para reconcerle el entusiasmo con el que da la clase, su cercanía a los alumnos, su humor y también todas las facilidades que nos da  para aprender y también para aprobar la asignatura y salgamos de esta universidad.

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF