domingo, 24 de febrero de 2008

FIPA parte 2

Continuando con la especificación FIPA, terminare de detallar alguno de los puntos mas importantes para luego ver como esta se encuentra implementada en JADE.

El Directorio Facilitador (DF) proporciona un servicio de paginas amarillas al resto de los agentes. Cualquier plataforma de agentes FIPA tiene que tener al menos un DF. Los agentes usan el DF para registrar sus servicios o para obtener los servicios de los demás agentes.

Los DF’s pueden registrarse entre ellos. De la misma forma, los componentes AMS y ACC también pueden registrarse con un DF. Todos los DF’s tienen un nombre por defecto que empieza por ”df ”.

Las acciones de gestión que soporta son:

  • register: Petición de registro de los servicios de un agente.
  • search: Petición de búsqueda de agentes que proporcionen determinados servicios.
  • deregister: Petición de borrado de los servicios registrados de un agente.
  • modify: Petición de modificación de los servicios registrados de un agente

Solo un Agent Management System (AMS) puede existir en una plataforma de agentes FIPA. Este es responsable de gestionar las operaciones de su plataforma tales como la creación de agentes, borrado de agentes, decidir si un agente puede registrarse en la plataforma y supervisar la migración de los agentes a/desde la plataforma.

El AMS es la autoridad en toda la plataforma. Puede solicitar a un agente que finalice su ejecución (quit) e incluso obligarle a finalizar.

El AMS gestiona una lista con todos los agentes que se encuentran en la plataforma. En la lista se encuentran las identificaciones GUID de los agentes asociadas a sus direcciones en la plataforma. Para que un agente resida en la plataforma tiene que registrarse con el AMS.

Todos los AMS tienen un nombre por defecto que empieza con “ams”. Las acciones de gestión que tiene que soportar cualquier AMS son:

  • register-agent: Petición de registro de un agente.
  • deregister-agent: Petición de borrar del registro a un agente.
  • modify-agent: Petición de modificación del registro de un agente.
  • query-platform-profile: Petición del perfil de la plataforma.
  • authenticate: Petición de autentificar la identidad de un agente creado en la plataforma.
  • search-agent: Petición de búsqueda de la dirección de un agente.

Existe una acción de gestión para movilidad que también tiene que soportar cualquier AMS:

  • move: Petición de transferencia/migración de un agente.

Además de las acciones de gestión intercambiadas entre el AMS y los agentes en la plataforma, el AMS puede proporcionar a la plataforma la realización de las siguientes operaciones:

  • suspend agent: Suspender o parar la ejecución de una agente.
  • terminate agent: Finalizar la ejecución de un agente.
  • create agent: Crear un agente.
  • resume agent execution: Continuar con la ejecución de un agente suspendido.
  • invoke agent: Empezar la ejecución de un agente recién creado.
  • execute agent: Ejecutar un agente después de moverse.
  • resource management: Gestionar los recursos.

Existe una acción de gestión que tienen que soportar los agentes utilizados por el AMS:

  • quit: Petición de terminación de un agente, la cual finaliza la ejecución del agente que recibe la solicitud.

El ACC proporciona el encaminamiento de mensajes entre agentes de diferentes plataformas FIPA. Todos los agentes FIPA tienen acceso al menos a un ACC. Únicamente mensajes dirigidos a agentes pueden ser enviados a un ACC.

El encaminamiento de mensajes entre diferentes plataformas requiere un protocolo de interoperabilidad por defecto (especificándose el protocolo de transporte, codificación y direccionamiento). Este protocolo es IIOP.

La acción de gestión que soporta es:

  • forward: Petición de envió de un mensaje desde un agente a otro.

Esta acción no debe de interpretarse como el mecanismo por defecto para enviar mensajes entre los agentes de la misma plataforma. Estos podrán comunicarse empleando el método interno (IPMT) que se haya implementado en la plataforma.

Dentro del Agent Plataform (AP) el ciclo de vida de los agentes FIPA esta caracterizado por:

  • Definir los posibles estados y transiciones de un agente independientemente del tipo de implementación de la plataforma.
  • Cada agente es físicamente gestionado en una plataforma. Si el agente es estacionario, su ciclo de vida siempre será en la misma plataforma.
  • Cada agente descrito con el modelo de ciclo de vida es asumido como una instancia con nombre propio y único que se ejecuta de forma independientemente.
  • Cada agente solo puede encontrase en un estado en una única plataforma al mismo tiempo.

El ciclo de vida de los agentes se representa mediante estados y transiciones, los cuales se muestran en la siguiente figura:

Únicamente los agentes móviles pueden entrar en el estado “transit”. Esto asegura que los agentes estacionarios ejecuten todas sus instrucciones en el nodo donde fueron invocados.

Las acciones para pasar los agentes de un estado a otro son:

  • Create: Creación de un nuevo agente.
  • Invoke: Invocación o activación de un nuevo agente una vez inicializado.
  • Destroy: Se fuerza la terminación de un agente. Esta acción solo puede ser iniciada por el AMS y no puede ser ignorada.
  • Quit: Se solicita la terminación de un agente. El agente puede ignorar la acción.
  • Suspend: Pone a un agente en el estado de suspendido. Esta acción puede ser iniciada por el propio agente o por el AMS.
  • Resume: Saca a un agente del estado suspendido. Esta acción solo puede ser iniciada por el AMS.
  • Wait: Pone a un agente en el estado de espera. Esta acción solo puede ser iniciada por el propio agente.
  • Wake up: Saca a un agente del estado de espera. Esta acción solo puede ser iniciada por el AMS.

Las siguientes acciones solo son usadas por los agentes móviles:

  • Move: Pone a un agente en el estado de transición. Esta acción solo puede ser iniciada por el propio agente.
  • Execute: Saca al agente del estado

La plataforma en la cual se creo un agente se denomina la Home Agent Platform (HAP) de dicho agente. La responsabilidad del HAP es garantizar la identidad del agente en sus relaciones con otros agentes y plataformas. El estándar FIPA requiere que cada agente tenga un HAP que responda por el ante el resto de la comunidad de agentes. Por tal motivo:

Es necesario que a partir del análisis del GUID de un agente pueda obtenerse la dirección IIOP-URL del HAP.

Es necesario que el HAP pueda autentificar la identidad del agente en la plataforma. Para ello, el AMS del HAP soporta la acción “authenticate”.

El AMS del HAP de un agente es responsable de guardar la dirección de dicho agente. Por otro lado, el agente tiene la responsabilidad de asegurar que la dirección guardada por el AMS sea valida. Un agente siempre debe registrarse en su HAP. El nombre de un agente (GUID) es el mismo durante toda su existencia.

Un agente puede registrarse en una plataforma si se cumple alguna de las siguientes condiciones:

  • El agente se creo en la plataforma.
  • El agente migro a la plataforma. Ambas plataformas, HAP y destino, tienen que soportar movilidad de agentes.
  • El agente se registra dinámicamente en una plataforma diferente a su HAP como agente local. Ambas plataformas tienen que soportar registro dinámico.

Al registrarse un agente se facilita al AMS la siguiente información:

  • El identificador global y único del agente (GUID).
  • La dirección local del agente.

El agente se registra en el AMS mediante la acción “register-agent”.

Un agente tiene dos opciones cuando desea contactarse (enviar un mensaje) con otro agente de una plataforma diferente:

  • Puede solicitar que el ACC de su plataforma envié el mensaje al ACC y agente de la otra plataforma.
  • Puede contactarse directamente con el ACC de la otra plataforma y enviarle el mensaje.

Es necesario el GUID del agente destino para poder contactar con el. El mensaje se enviara al HAP del agente destino y a partir de aquí se hará llegar a dicho agente. Alternativamente, si se desea enviar el mensaje directamente al agente o a una plataforma (distinta del HAP) donde el agente se registro dinámicamente, entonces se deberá indicar además del GUID la dirección destino.

Aun quedan puntos pendientes por ver de la especificación, pero ya que con lo visto hasta ahora podemos comenzar a ver los primeros códigos de ejemplo en JADE….pero eso será para el próximo post.

sábado, 23 de febrero de 2008

Introduccion a FIPA - parte 1

El creciente desarrollo de grupos de investigación en torno a los sistemas multiagente fomento la aparición de nuevas formas para el desarrollo de esta tecnología, lo cual conllevo a que cada uno de estos grupos presentara soluciones diferentes e independientes.

Algunos problemas que se presentaron fue la carencia de una definición estándar de sistema multiagente e incompatibilidad, lo que conllevo a una incapacidad para satisfacer los fuertes requisitos de las empresas e industrias actuales.

Esto promovió la creación de diversos organismos, los cuales se preocuparıan de desarrollar una definición estándar para la construcción de sistemas multiagente. Algunos de estos organismos son:

  • OMG (Object Management Group) quienes desarrollaron MASIF (Mobile Agent System Interoperability Facilities).

  • KSE (Knowledge Sharing Effort) quienes desarrollaron KQML (Knowledge Querying and Manipulation Language) y KIF (Knowledge Interchange Format).

  • Agent Society, cuya labor principal es el intercambio y recopilación de información sobre agentes.

  • FIPA (Foundation for Intelligent Physical Agents) cuya labor principal es el desarrollo de especificaciones de una arquitectura para sistemas multiagente, infraestructura y aplicaciones.


De estos, FIPA es el que más relevancia a tomado fuerza estos últimos años.

En su versión inicial (FIPA 97) tres documentos integraban esta parte del estándar:
  • Agent Management
  • Agent Communication Language

  • Agent/Software Integration
Posteriormente se han ido actualizando e incluyendo nuevos documentos hasta alcanzar la versión de FIPA-2000 con la que actualmente se trabaja.

El “Agent Management” proporciona la normativa del entorno donde los agentes FIPA se crean y operan. Establece el modelo lógico de referencia para la gestión de agentes (creación, registro, localización, comunicación, migración y terminación de los agentes). El modelo presenta un conjunto de capacidades lógicas y no implica ninguna configuración física, sino que deja los detalles de implementación a elección del equipo de desarrollo.

  • Agente: Es el componente básico y principal del modelo. Combina una o más capacidades de servicio dentro de un entorno de ejecución integrado y unificado que proporciona servicios de comunicación, acceso a software externo y acceso a los usuarios.

    Un agente tiene que tener uno o más dueños. Además debe disponer de una identidad propia proporcionada por un identificador global y único GUID (Globally Unique Identifier) denominado nombre del agente. Una gente puede registrarse con un número de direcciones en las cuales puede ser contactado.

  • Agent Platform (AP): Proporciona la infraestructura fısica y lógica necesaria en la cual los agentes pueden ejecutarse. Una plataforma de agentes esta constituida por el hardware (puede haber varios computadores), el sistema operativo, software de comunicaciones y software de agentes.

  • Directory Facilitator (DF): Componente que siempre tiene que aparecer en cualquier plataforma de agentes FIPA. Es un agente que proporciona un servicio de ”paginas amarillas” a los demás agentes. Un agente puede utilizar el DF para registrar sus servicios o para encontrar los servicios ofrecidos por otros agentes.

  • Agent Management System (AMS): Componente que siempre tiene que aparecer en cualquier plataforma de agentes FIPA, uno por plataforma. Es un agente de gestión que controla el estado y el acceso a la plataforma. También proporciona un servicio de ”paginas blancas” que permite la localización de agentes a partir de sus nombres.

  • Agent Communication Channel (ACC): Todos los agentes tienen acceso al menos a un ACC. El ACC es el canal de comunicación por defecto entre agentes de diferentes plataformas. Tiene que soportar el protocolo de comunicación para interoperabilidad IIOP (Internet Inter-ORB Protocol ).

  • Internal Platform Message Transport (IPMT): Método de intercambio de mensajes dentro de la misma plataforma el cual depende de la implementación.

El modelo de referencia para la gestión de agentes esta formado por los siguientes componentes lógicos, los cuales se muestran en la siguiente figura:


En el próximo post continuare detallando el estándar FIPA, pera luego comenzar con la parte entretenida..….la programación de agentes y sistemas multiagentes!!!!



jueves, 21 de febrero de 2008

JADE WADE (Workflow and Agent Development Environment)

En el AAMAS 2008 (Autonomous Agents and Multuagent Systems) se presentara un tutorial de WADE, el cual es la principal evolución de JADE y añade a este la habilidad de definir sistemas lógicos dentro de un workflow. WADE no es precisamente un add-on, pero si es un complemento para la plataforma (esta construido sobre JADE) proveyendo administración avanzada, mecanismos de tolerancia a fallos y habilitando a un grupo de agentes, ejecutar cooperativamente complejas tareas definidas en el workflow. WADE será liberado como Open Source en Abril de este año junto con la versión 3.6 de JADE.

Más información en http://gaips.inesc-id.pt/aamas2008/tutorials.html

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)...



Bienvenido al blog de Duke Chile

En este blog escribire sobre las cosas entretenidas que yo encuentro en el mundo Java!!