Práctica Robocode

Anuncio
Práctica Robocode
Inteligencia en Redes de
Comunicaciones
Carlos Rubio Prieto - 100025017
Juan Santaella Vallejo - 100025044
1. Introducción
En esta práctica se nos plantea el diseño y la implementación de un robot que sea capaz
de ganar al resto de robots, es decir, que no encontramos ante el punto de desarrollo de
agentes inteligentes, como sistemas autónomos dotados de ciertas capacidades.
Todo esto se desarrolla bajo un entorno de simulación de guerras de robots, llamado
Robocode. En el que nuestro tanque debe estar programado en Java para poder pelear
en el campo de batalla contra tanques programados por otros jugadores, ganando el
último que quede vivo.
Al comienzo del juego se empieza con una determinada vida, que se mide en energía
que posee el tanque y de ahí en adelante va variando la energía y mueres cuando te
quedas sin energía.
Como se ve las causas de la variación de la energía son muy importantes así que vamos
a entrar un poco en ello para comprender posteriormente mejor el desarrollo de nuestro
robot. Las variaciones de la energía se deben a las siguientes situaciones:
•
•
•
•
•
•
Al producir un disparo, cuando se dispara se te penaliza quitándote una
determinada energía dependiendo de cuanta energía hayas empleado en el
disparo.
Chocarte contra un robot. Si durante el transcurso de la batalla te chocas con
algún robot pierdes una cierta cantidad de energía.
Recibir un impacto. Si eres dado por una bala (enemiga o amiga) se quita una
cantidad importante de energía. Esta es la mayor penalización que se tiene.
Utilización intensiva del radar.
Si pasa mucho tiempo y no se produce ninguna acción se sufre una penalización
de energía disminuyendo ésta según transcurre el tiempo.
Si una bala tuya acierta sobre un tanque enemigo se te suma una cantidad de
energía.
El escenario de batallas que se nos plantea, en nuestra competición interna es de tres
tipos:
a) Uno contra uno: En este tipo de contienda deberemos enfrentarnos sólo a un único
tanque oponente y destruirlo antes de que nos destruya él.
b) Mele: Todos contra todos, en esta situación estamos rodeados de enemigos y mis
enemigos son enemigos del resto de los enemigos, esta es una situación de la que nos
deberemos aprovechar.
c) Lucha de equipos: Ahora se tendrá que trabajar en colaboración con otros tanques
para destruir a uno o varios tanques enemigos. En nuestro caso va a ser otro equipo
formado por 5 tanques.
Ya que conocemos el escenario en el que tenemos que desarrollar y los tipos de batalla
en los que vamos a luchar estamos en condiciones de pasar al siguiente punto que va a
ser el diseño de nuestros tanques.
2. Proceso de Diseño e Implementación
Para diseñar nuestros tanques partimos de una idea general, que la historia nos ha
demostrado en infinitas ocasiones, la adaptatividad. Realmente como se puede de ver en
los campos de batalla o en la naturaleza (que se puede entender como la lucha por la
supervivencia) gana siempre el que esta mejor adaptado. Un individuo que esté
adaptado a la nieve no debería tener ningún problema de encontrar alimento y soportar
temperaturas bajas, sobreviviendo sin problemas.
Como nos encontramos ante una situación de incertidumbre, ya que no sabemos como
va a ser nuestro contrincante no sabemos como debemos estar adaptados, siguiendo con
el ejemplo de la naturaleza no se si voy a vivir en la nieve o en el desierto, ya que puede
que mi contrincante me evite o vaya a un enfrentamiento directo para el cual yo no
estoy preparado.
Lo primero que cabría pensar es estar preparado para todo, pero estando preparado para
todo puedes fácilmente caer en no estar preparado para nada y un enemigo bien
preparado en un determinando elemento nos podría derrotar con cierta facilidad.
Así que nuestra idea fue desarrollar distintas estrategias, para “la lucha en nieve” y para
la “lucha en el desierto” e ir cambiando a ellas según la situación que nos
encontráramos. Evidentemente el desarrollo de una multitud de estrategia es una
cantidad ingente de trabajo, así que lo que hicimos fue aprovechar el código ya escrito
en foros de Robocode1 y desarrollar una estrategia de control que establezca cuál es el
escenario en que nos encontramos, haciendo evaluaciones periódicas o en situaciones
que consideremos que debemos de cambiar.
Viendo la idea fundamental sobre la que hemos intentado desarrollar nuestros robots
vamos a pasar a ver como la podemos implementar en cada caso y los problemas que
nos hemos encontrado al intentar desarrollarla.
2.1 Lucha Uno vs. Uno y Mele: Dr. Jekyll and Mr. Hyde
Como el titulo de la novela, vamos a tener diferentes personalidades, pero a diferencia
de ésta en todas ellas trataremos de destruir a nuestros enemigos, aunque en una de las
personalidades de una forma más activa (Mr. Hyde) y en otra estaremos más
preocupados en que no nos destruyan (Dr. Jackie).
Tendremos una estrategia de control que nos va a ir diciendo qué personalidad debemos
de trabajar y si en esa personalidad no estamos cómodos (están apunto de matarnos)
cambiaremos de personalidad.
La idea es ir pasando por una serie de estados (distintas personalidades) el paso de
estados esta regido por una estrategia de control que utiliza unas reglas para pasar entre
personalidades hasta llegar al estado final que es la victoria
La idea inicial era haber tenido tres o cuatro personalidades, y la estrategia de control
haber tenido las siguientes variables:
•
•
•
•
•
Energía que tuviéramos(vida),
Número de oponentes que hubiera en la batalla.
Disparos acertados
Disparos fallados
Disparos recibidos.
Empezar con una personalidad medianamente ofensiva ya que empezamos con bastante
vida y según estos datos variar a una más ofensiva u otra más defensiva según como
estuviéramos nosotros de energía. También habíamos pensado utilizar algún método de
entrenamiento para hallar los umbrales del algoritmo de evaluación ya que Robocode te
da estadísticas y tiene ejemplos de estrategias muy puras donde se puede evaluar tu
robot.
El diagrama de flujo sería del estilo del siguiente:
INICIO
Nº enemigos >2?
OnRobotDeathEvent
NO
SI
Ejecutar
experto en
Melé T
segundos
OnHitByBulletEvent
Ejecutar
experto
tirador T
segundos
¿Energía ha
decrecido?
SI
Ejecutar
experto
evitador T
segundos
NO
Ejecutar
experto
perseguidor
T segundos
Para realizar esto nos hemos encontrado ante dos grandes problemas, el primero fue
que al intentar adaptar los códigos de distintos robots hemos tenido que rechazar
muchos candidatos porque no podíamos juntarlos o al juntarlos daban muchos
problemas que solo podíamos solucionar con grandes dificultades. Este problema ha
derivado en el segundo: nos hemos quedado sin tiempo y lo peor ha sido que acuciaba
el primer problema ya que no podíamos dedicar más tiempo adaptando el código o
mejorando el algoritmo de evaluación.
Así que se ha quedado en este algoritmo de evaluación:
INICIO
OnHitByBulletEvent
SI
¿Energía ha
decrecido?
Ejecutar
experto
evitador T
segundos
Dr. Jekyll
NO
OnScannedRobotEvent
Ejecutar
experto
perseguidor
T segundos
Mr. Hyde
Se evalúa cada cierto tiempo o si la situación de vida corre peligro o si estamos en una
situación muy buena para entrar en una confrontación directa. En este último caso si
estamos en un estado defensivo cambiamos a ofensivo.
Así que tenemos que decidir entre dos estados:
•
Mr. Hyde Es una estrategia de ariete, que es la más agresiva que hay. Consiste
en ir contra el robot enemigo o perseguirle en su caso. De esta manera es muy
difícil fallar, disparando con toda la fuerza que se puede (pierdes mas energía)
pero también es fácil que te den, así que lo que se hace es entrar en este estado
solo cuando tu nivel de energía es lo suficientemente bueno para en una
confrontación directa tener muchas posibilidades de ganar.
•
Dr. Jekyll: Esta no es una estrategia puramente defensiva (a estas se la conocen
como “evitadotes” y consiste en moverse perpendicularmente al cañón del
enemigo). Es una estrategia un poco más agresiva de lo que nos hubiera gustado
poner, tiene cálculo de trayectorias y también evita recibir muchos impactos al
intentar moverse perpendicularmente al eje que nos une con el enemigo, aunque
quizás lo haga demasiado cerca del enemigo.
2.2 Lucha de Equipos: Hormiguero
La lucha de equipo, varía mucho con el caso anterior, ya que los robots no pueden
hacer cosas que antes podían (los droides no pueden escanear por ejemplo) y tienen
cosas nuevas como:
•
•
Paso de mensajes.
Mayor cantidad de energía.
Aquí hemos optado por una búsqueda heurística, gracias a la experiencia que habíamos
adquirido en la lucha en Melé intentando también aprovechar las nuevas oportunidades
que nos dan el trabajar en equipo como:
•
•
•
Evitar que te den, cosa muy fácil cuando hay muchos tanques disparando.
Moviéndote evitas que te disparen directamente.
Estando quietos dispara mucho mejor.
Nos basamos en la idea de un hormiguero o una colmena en la que hay una reina que es
la que “manda” y un montón de hormigas que contribuyen a la comunidad.
La reina, en nuestro caso, sólo tiene la misión de buscar enemigos y evitar morir. Para
ello evita gastar energía disparando y evita que la den moviéndose constantemente.
Cuando localiza un enemigo calcula la posición de dicho enemigo y se las pasa a sus
hormigas obreras para que lo intenten eliminar. También en el caso de morir se lo
comunica a sus súbditos.
Las hormigas, lo primero que hacen es colocarse en una posición defensiva es decir al
lado de las paredes para reducir el ángulo por donde pueden ser alcanzadas. Una vez allí
esperan que la reina le comunique la posición de los enemigos y empiezan a disparar.
En el caso de ser alcanzadas por un proyectil varían un poco su posición y si la reina
llega a morir, empiezan a disparar aleatoriamente, pero nunca repiten la dirección del
disparo, ya que gira el cañón un un ángulo no divisor de 360º, tratando en un intento
desesperado de alcanzar al enemigo.
3 Conclusiones
La principal conclusión que hemos llegado es la importancia de dar una respuesta
adecuada a la situación. Para eso hay que evaluar periódicamente, poniendo sensores
que nos avisen si estamos en una situación de alarma, eligiendo la respuesta que
ofrecemos al entorno.
Aprovechar el escenario. Por ejemplo en el caso de la Melé es mejor intentar pasar
desapercibido yéndote a una esquina y espera a que el resto se mate para luego entrar ya
en la batalla. Aquí nos volvemos a encontrar con una situación de evaluación y otra de
decisión.
En una situación colaborativa es fundamental una labor de coordinación, para evitar que
se entorpezcan entre los miembros de un equipo, como que un tanque se encuentre en
una trayectoria de tiro.
4 Bibliografía
1 http://www.robocoderepository.com
2 Apuntes de la asignatura.
Descargar