miércoles, 20 de febrero de 2008

Agentes inteligentes en el mundo Java

Dentro del mundo Java, lo que más me gusta investigar es sobre agentes inteligentes y cuales son las aplicaciones que actualmente se están desarrollando. En una serie de post intentare explicar que son, hablare de FIPA (Foundation for Intelligent Physical Agents), que es el framework JADE (Java Agent DEvelopment), como este implementa FIPA y pondremos en practica la teoría con una serie de pequeños ejemplos para entender mejor todo.

Existen muchas definiciones de que es un agente inteligente, pero a mi juicio la mejor esta dada por Pattie Maes, investigadora del MIT: ”un agente es un sistema computacional que vive en un entorno complejo y dinámico. El agente puede sentir ese entorno y actuar en consecuencia, y tiene un conjunto de objetivos o motivaciones que intenta conseguir a través de dichas acciones”.

Algunas de las características principales que debe tener un agente son: autonomía, cooperación, movilidad, adaptabilidad, veracidad, reactividad y pro-actividad.

Hoy en día existen muchas organizaciones que se encuentran definiendo los estándares para el desarrollo de agentes inteligentes tales como SMA (Sistemas Multi Agentes), OMG (Object Management Group), KSE (Knowledge Sharing Effort) y FIPA. De estas, la que más aceptación a tenido por parte de la comunidad investigadora y desarrolladora es FIPA.

Dentro de los actuales frameworks que implementan FIPA se encuentra JADE (http://jade.tilab.com/) el cual esta 100% desarrollado en Java y cuenta con una gran comunidad de desarrolladores.

Pero bueno menos teoría y mas acción!! Como todo, lo primero es bajar los archivos necesario para lo cual se debe ingresar a la página de JADE y registrarse. Una vez hecho esto, en la zona de descarga bajen el archivo jadeAll.zip. Al descomprimir el archivo encontraran JADE-bin-3.5.zip, descompriman este ultimó con lo cual se generara la carpeta jade. Dentro de esta se encuentra la carpeta lib, la cual contiene todo lo necesario para el desarrollo de los agentes. Estos archivos deben ser agregados al CLASSPATH del sistema (esto nos ayudara a compilar los archivos de ejemplo) :

CLASSPATH=c:\jade\lib\jade.jar;c:\jade\lib\jadeTools.jar;c:\jade\lib\http.jar;c:\jade\lib\iiop.jar;c:\jade\lib\commons-codec\commons-codec-1.3.jar;c:\jade\src


Por ultimo en una venta de comandos (o shell dependiendo el caso) ingresen a la carpeta jade y ejecuten el siguiente comando:

java jade.Boot –gui

Con este comando se ejecutara el entorno grafico (ya hablaremos de el en mas detalle).




Por ahora solo cabe mencionar que al iniciar la plataforma ya se encuentran en ejecución tres agentes básicos: RMA, AMS y DF.

Ahora solo nos falta probar el ejemplo más básico, el clásico “Hola Mundo” en JADE es el agente “PingAgent”. Este agente esta programado para contestar mensajes con la preformativa QUERY-REF, el contenido del mensaje debe ser “ping” y el tipo de mensaje debe ser INFORM (ya veremos en otro post los protocolos FIPA). En caso de recibir un mensaje que no cumpla esta estructura, el agente responderá con un mensaje de tipo NOT-UNDERSTOOD.

Los códigos de ejemplo están en el archivo JADE-examples-3.5.zip, el cual contiene la carpeta jade\src\examples, es esta ultima carpeta (examples) es la que deben descomprimir en la carpeta …\jade\src que creamos anteriormente (en mi caso c:\jade\src).

Una vez hecho esto, en una ventana de comandos, vamos a la carpeta …\jade\src\examples\PingAgent y ejecutamos javac *.java para compilar los códigos de ejemplo.

Para ejecutar el agente, en la ventana de comandos nos posicionamos en la carpeta …\jade\src y ejecutamos el comando

java jade.Boot –gui ping:examples.PingAgent.PingAgent


Como se aprecia en la imagen, además de los agentes básicos se ejecuto el agente ping (ese es el nombre que nosotros le dimos al ejecutar el agente).

Para probar el correcto funcionamiento del agente necesitaremos ejecutar el agente “SnifferAgent” y “DummyAgent” desde el entorno grafico. El primero es el botón con la imagen de un hombre de traje morado con sombrero, y el segundo es el botón de la derecha de este último.


El agente SinifferAgent y DummyAgent serán llamados sniffer0 y da0 respectivamente.

Para visualizar gráficamente el intercambio de mensajes, en la venta del Sniffer0 se debe presionar con el botón derecho del Mouse sobre el agente da0 y sniffer0, y seleccionar la opción “Do sniff agent(s)”.


En la ventana del agente da0 se pulsa el botón derecho del mouse sobre el casillero Receivers, se selecciona la opción add y el en casillero del nombre se ingresa el nombre completo (para mi caso el nombre completo es ping@VALUED-08C26EC4:1099/JADE). El resto de lo campos se pueden dejar en blanco. En el listado de “Communicative Act” se debe seleccionar la preformativa QUERY-REF, y dentro del casillero “content” se debe introducir la palabra ping. Una vez ingresado los datos se debe presionar el botón “enviar” (es el segundo botón de la parte superior izquierda, el cual tiene un sobre).

En la misma ventana se puede observar en la cola de mensajes el mensaje QUERY-REF enviado por el DummyAgent, así como la respuesta del agente ping la cual es INFORM.


Si seleccionamos el mensaje INFORM (el que esta en letras rojas) y presionan el botón para examinar el mensaje de respuesta (el botón con los lentes), verán la contestación enviada por agente ping “alive“.

Al mismo tiempo que hemos estado enviando el mensaje, el agente sniffer0 ha estado representando gráficamente el intercambio de mensajes.


Haciendo doble clic sobre cualquiera de los mensajes enviados, podremos examinar el contenido del mensaje seleccionado.

Como podemos ver en este ejemplo, JADE contiene un gran número de herramientas que nos permiten gestionar nuestros agentes. En el próximo post veremos más en profundidad el estándar FIPA y comenzaremos a programar nuestros primeros agentes.

Si alguien se interesa mas en el tema le recomiendo el libro “An Introduction to MultiAgent Systems“ de Michael Wooldrige.

Por ultimo aqui les dejo un video explicativo de lo visto anteriormente (como dicen...un video vale mas que mil palabras)...



6 comentarios:

Anónimo dijo...

Hola,
Súper buena tú explicación, y el video.
He estado estudiando esto de los agentes, y lo veo súper interesante, así como complejo de entender al mismo tiempo.
En este momento, estoy tratando de entender como programar el hecho de que un agente (A1) envíe una solicitud a otro agente (A2) y que éste le responda de forma afirmativa o negativa, y en que en caso de ser positive le pase al agente A1 un valor, por ejemplo aleatoreo, el cual será evaluado por el A1, y si lo acepta, se llega a acuerdo, mientras que si no lo acepta le vuelve a hacer otra petición a A2, quien le volverá a enviar otro valor en caso de acetptar. así, hasta que se llegue a un acuerdo. Por ejemplo que el valor sea un valor dado, o que el valor esté dentro de un rango aceptable de valores.

Entiendo que esto es posible, en base a los REQUEST, QUERY, CONTRACTNET, INFORM.. Me he estudiado casi todo lo de FIPA, pero no consigo implementar la clase que me permitar desarrollar este pequeño ejemplo.

Cualquier ayuda y/o comentarios te lo agradeceré millón.

Saludos
Jorge

Anónimo dijo...

Hola, el video me esta super bueno..... yo me estoy iniciando en el tema de agentes ya que estoy en un proyecto de titulo de robotica con MAS y esto me sirvio mucho.... bueno ahora leere los otros post posteriores.
Salu2
Chau.

Anónimo dijo...

Hola, quisiera saber de que forma puedo integrar JADE a plataforma Eclipse?

José Luis Coronel Cortés dijo...

Patricia

Podrias usar EJIP http://code.google.com/p/ejip/

Saludos

José Coronel

Ktita dijo...

interesante....tambien buscando encontre un plugin de e-jamas que integra jade a eclipse voy a ver cual de los dos es mas sencillo de usar

Lizzi Villalba dijo...

y el video??? no aparece