Archive for January, 2010

Cuestión de altura

Thursday, January 28th, 2010

Para poder realizar las simulaciones, y más en el caso de una inundación, es vital conocer los detalles del terreno, y sobre todo su altitud. Tras mucho buscar por fin dimos con una manera de obtener los datos de altura de un terreno, y es a través de un servicio web proporcionado por la USGS (U.S. Geological Survey). Sólo tienen datos de los Estados Unidos, pero dado que nos estamos centrando en las inundaciones de Nueva Orleans tras el huracán Katrina es más que adecuado.

Ahora sólo queda implementar un cliente del servicio web en Java, de manera que el simulador pueda descargar las alturas necesarias. A continuación un mini-tutorial sobre cómo implementar un cliente de un servicio web en Java.

(more…)

Integrando Jcoord

Thursday, January 28th, 2010

En nuestro proyecto, al realizar las simulaciones sobre terrenos y lugares reales, necesitamos tratar con sistemas geográficos de coordenadas. Como reinventar la rueda no tiene sentido, tocaba buscar alguna librería libre que nos permitiera hacer este tipo de operaciones.

Ahí es donde entra Jcoord, una librería en Java para el trabajo con coordenadas en diferentes sistemas geográficos. Para nosotros es muy importante qué tipo de licencia tiene dicha librería, dado que debe ser compatible con la GPL v3 de nuesto proyecto. Jcoord v1.0 está licenciado también bajo GPL, aunque ofrece también licencias comerciales no gratuitas, huelga decir que no estamos interesados en ellas.

Hemos integrado directamente el código de Jcoord en nuestro proyecto, por lo que está disponible directamente en nuestro SVN.

Inundando terrenos…

Tuesday, January 19th, 2010

El código del ejemplo ya está terminado. Es posible lanzarlo con un comando parecido al siguiente:
java jade.Boot -gui creador:agents.CreatorAgent.class

Aunque resulta mucho más sencillo utilizarlo a través de un plugin como EJADE para Eclipse. Éste plugin en concreto permite ejecutar la plataforma JADE y lanzar agentes desde el mismo IDE, y a golpe de ratón. A la hora de depurar ahorra mucho tiempo.

El agente que se encarga de crear y lanzar a todos los demás es: CreatorAgent. Dicho agente crea primero un agente entorno, y luego cada 100 ms crea un agente agua. Estos agentes agua se mueven por una rejilla hexagonal que representa al terreno, y que mantiene el agente entorno, como la de la imagen:

Los agentes agua preguntan al agente entorno por el potencial o nivel del terreno de las casillas adyacentes, y sobre esa información deciden si moverse o inundar la casilla en la que se encuentran (en caso de no haber ninguna casilla adyacente de menor potencial). Una vez que un agente agua inunda una casilla deja de moverse, y el nivel de esa casilla aumenta.
(more…)

Comenzando con el código

Friday, January 15th, 2010

Ya hemos empezado a escribir código (por fin! yay) y por supuesto lo podéis encontrar en el repositorio. Es un ejemplo sencillo de un sistema multi-agente con JADE. Consiste en una simulación de una inundación, y los agentes son los siguientes:

  • Creator: Es el encargado de crear al resto de agentes, y por lo tanto es el que hay que lanzar junto a la plataforma para que el ejemplo funcione.
  • Enviroment: Representa el terreno, mantiene la información de la rejilla hexagonal por la que se mueve el agua.
  • Water: Es una unidad de agua, es creada en alguna casilla de la rejilla y se mueve por ésta hasta que llega a la casilla de menor potencial, donde se queda detenida haciendo que aumente su potencial.

En JADE los agentes tienen comportamientos asociados, los hay de muchos tipos: de una sola ejecución, cíclicos, que se ejecutan cada x tiempo, etc… Es en éstos comportamiento dónde se debe programar la toma de decisiones de los agentes. Los encontraréis en el paquete behaviours; excepto los del agente Enviroment, porque son muy poco generales y los hemos puesto como clases internas del agente.

Los comportamientos del agente Enviroment son servidores de información, esperan a que les llegue una petición a través del sistema de mensajería de JADE y devuelven información de la rejilla. El comportamiento FloodTileBehav es el más complejo y es el que usan los agentes Water para decidir a qué casilla moverse o qué casilla inundar.

El ejemplo está casi completo pero aún quedan algunas cosillas por pulir, además de escribir el agente Creator. Aún así ya se puede probar. Cuando esté terminado el sistema de inundaciones postearemos los resultados.