Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Robocode 2
Robocode 2
Hay varios campos de investigación entorno a Robocode en el 3.1.1 Caracterización de los robots
campo de la Inteligencia Artificial, el conocimiento, el
aprendizaje, etc. De hecho han sido ya varios los estudios Conocidos los sensores del robot veamos las variables del entorno
realizados en otros años acerca de este tema: que más información nos dan:
- Evolución de robots por algoritmos genéticos.
- Aprendizaje: aprender estrategias mediante la - General:
experiencia. o Número de participantes
- Propia:
Esta vez hemos querido centrarnos en cómo representar el o Energía
conocimiento y cómo tomar decisiones en base a este
o Tasa de aciertos
conocimiento.
- Contrincante:
o Disparos los combates, también podemos realimentar nuestro sistema de tal
Frecuencia manera que el robot aprendiera de su propia experiencia.
Tasa de aciertos
o Patrón de movimiento
Tipo
3.2 Diseño de la estrategia: Árbol de decisión
o Energía
Velocidad Choques Muro Lineal Curvilíneo Conclusión • CircleBots [9] – Se mueven en circulos. Son
s vulnerables a apuntamiento circular [10.
V>0 SI - - - Arrollador
• WallBots [11 – Se mueven a lo largo de los muros.
V=2 NO NO SI NO Lineal Vulnerable a LinearTargeting, excepto cerca de las
largo esquinas.
V=1 NO NO SI NO Lineal
corto • RamBots [12] – Se mueve hacia el enemigo. Vulnerable
V>0 - SI - - Muros a la mayoría de los apuntamientos pero consigue bonus
extras por ram (arrollar).
V=2 NO NO NO SI Elipse
largo • StopAndGo [13] – Reacciona ante fuego enemigo. Es
V=1 NO NO NO SI Elipse efectivo frente a apuntamiento lineal y circular pero es
corto vulnerable ante PatternMatching y
V=0 - - NO NO Estático GuessFactorTargeting [14].
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
Gracias la caracterización del contrincante, no sólo vamos a poder apuntamiento.
elegir la mejor estrategia si no que, registrando los resultados de
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
No Si Si No
Movimiento
Propio
ESCAPA
CIRCULAR PATTERN
Linea Circular MATCHING
l
Tasa Aciertos Tasa Aciertos
Enemigo Enemigo
Figura 3. Árbol decisión de mi apuntamiento
Baja Alta Baja
Alta
Frecuencia LIN Frecuencia Mediante la 3 figura somos capaces de ajustar nuestro robot de tal
CIR
Disparos Disparos manera que apunte mejor para que no pierda energía al fallar.
Baja Alta Baja
Alta
CAMBIO SIN CAMBIO 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.1 Realimentación 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 catalogar los robots.
Un buen robot tomará nota del trascurso de la batalla y de los
resultados obtenidos. El objetivo de estos registros son varios: En definitiva, no ha sido posible encontrar robots con las
características deseadas y no hemos tenido tiempo suficiente para
diseñarlos desde cero.
- Por un lado es importante chequear si el robot está, Es por ello que nos hemos basado en algunos de estos pero que no
primero, deduciendo el comportamiento del enemigo de son precisamente característicos de su grupo.
forma correcta y segundo, si está tomando las En realidad la versión última del robot Smarty no llega tampoco a
decisiones correctamente. implementar un estudio avanzado del movimiento del robot
- Si está tomando las decisiones tal y como se le ha enemigo y por tanto el método de disparos está sujeto al
enseñado será bueno comprobar si nuestros criterios han comportamiento de los robots usados para formar a Smarty.
sido correctos. De esta forma veremos si nuestras No obstante este no debe suponer mayor problema porque lo
estrategias de movimiento son capaces de disminuir su interesante de este estudio es la capacidad de análisis y decisión
tasa de acierto y si estamos prediciendo sin mucho error que posee el robot Smarty.
la posición del enemigo a la hora de disparar.
4.2 Cerebro de Smarty
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: Como se sabe, los robots de robocode son una clase Java, que
hereda la clase Robot o AdvancedRobot y que posee
- Si hay fallos de programación debemos introducir principalmente:
cambios de forma manual.
- método run() cuya ejecución no debe finalizar
- Si por el contrario parece ser que la estrategia elegida - manejadores de eventos. Los eventos pueden ser
no funciona correctamente contra un determinado estandares o personalizados. (ver la documentación
[3].
Nuestro robot hereda de la clase AdvancedRobot que permite Las únicas clases de apoyo que tenemos son los robots
realizar más funciones y complejas de una manera más eficiente. descargados aunque ellos sí que se apoyan en numerables clases y
Siguiendo con el diseño procedimos a crear el diagrama de flujo . métodos para realizar las tareas.
Para ello teníamos dos opciones que se muestra en la figura 4. Lo primero que hacemos es observar los niveles de vida del
contrincante para tomar posteriormente la decisión de arrollarle o
no.
Después nos damos un tiempo para comprobar si estamos siendo
arrollados por 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 al modo arrollar. Sin embargo no volveremos
a comprobar si él nos está arrollando a nosotros.
4.2.2 Decisión
Los resultados de Smarty son por un lado sus cifras en el campo MIERDA, ME MUERO
de batalla y por otro los resultados que es capaz de dar cuando Total number of bullets shooted to me: 72.00000000000001
muere. 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
No está mal de salud... muestran datos erróneos como es en el caso de los 72 tiros que
CUERPO A CUERPO fueron aproximadamente 50.
CUERPO A CUERPO
CUERPO A CUERPO En general estamos satisfechos del estudio realizado aunque ha
sido complicado llevarlo a la práctica. Nos hubiese gustado poder
CUERPO A CUERPO demostrar nuestro diseño con mejores resultados. No obstante
CUERPO A CUERPO creemos que la idea es muy potente y ya solo faltaría “picar”
código Java.
Parece que no me arrolla
CUERPO A CUERPO
Como se ve en las siguientes figuras el robot obtenido es
DISPARA MUCHO
medianamente competitivo principalmente porque es capaz de
ARQUERO SAYS: Dispara mucho adaptarse al contrario aunque, repetimos, no está muy ajustada
ARCHERO esta relación.
ARCHERO
SYSTEM: Bonus for killing albers.Tiger2: 14
SYSTEM: irc.Smarty wins the round.