Java Agent DEveloment Framework (JADE)
JADE (http://jade.tilab.com/) es un framework para desarrollar aplicaciones multi-agente distribuidas. Está escrito completamente en Java y se distribuye como Open Source bajo licencia LGPL.
Un Agente es un proceso autónomo con identidad propia, posiblemente persistencia y que requiere comunicarse (en modo colaborativo o competitivo) con otros agentes para realizar tareas.
JADE proporciona un middleware para construir sistemas multi-agente, cumpliendo la especificación FIPA (IEEE) en cuanto a interoperabilidad entre agentes.
La plataforma JADE permite distribuir agentes entre diferentes máquinas de modo transparente, proporcionando:
· Servicio de nombres. Asegura que cada agente en el sistema tiene un nombre único
· Servicio de directorio. Permite a un agente localizar al resto de agentes en el sistema así los servicios proporcionados por estos.
· Servicios transporte y parseado de mensajes entre agentes.
· Movilidad de agentes.
· Definición de la semántica de los agentes basada en ontologías.
JADE sigue un mecanismo de comunicación asíncrono entre agentes, mediante el envío de mensajes denominado ACL (Agent Comunication Language).
Para cada agente, el middleware crea y gestiona una cola de mensajes:
La comunicación entre agentes puede ser en modo “peer to peer”, difusión a grupos o publicación/suscripción. Además ACL define el protocolo para mantener comunicaciones conversacionales entre agentes.
El protocolo de transporte se adapta dinámicamente a la mejor situación eligiendo entre RMI, http e IIOP, estando abierto mediante extensiones a otros protocolos.
JADE utiliza un modelo de Contenedor de Agentes, de manera que en cada máquina del sistema multi-agente se ejecuta un contenedor, que proporciona servicios de ejecución a uno o más agentes y que se encarga establecer la comunicación con el resto de contenedores del sistema.
En el sistema existen dos agentes especiales, que proporcionan las siguientes capacidades:
· Agente AMS (Agent Management System): Provee el servicio de nombres y se constituye en la autoridad del sistema en cuanto a la gestión de agentes (Permitiendo por ejemplo arrancar o detener agentes en cualquier nodo del sistema).
· Agente DF (Directory Facilitator): Provee el servicio de directorio.
El contenedor donde se ejecutan estos agentes se conoce como contenedor principal (Main container), pudiendo albergar además otros agentes, y diferenciándose del resto de contenedores del sistema:
Cada agente debe registrarse en el AMS correspondiente para pertenecer al sistema, el cual le proporciona un identificador único con el que registrarse posteriormente en el DF.
En una configuración simple, solo habrá un contenedor principal, pero para soluciones más exigentes existe un modo de configuración denominado “Fault Tolerant Platform”, donde la información del contenedor principal se puede replicar en tres instancias distintas.
Programando un Agente:
En JADE, un agente es una clase que hereda de jade.core.Agent y que implementa dos métodos:
· setup(): Inicializa el agente. Es invocado por el contenedor en el arranque.
· takeDown(): Finaliza el agente. Es invocado por el contenedor tras invocarse el método doDelete() del agente por haber finalizado su tarea.
Un agente debe ejecutar una o varias tareas. JADE denomina a estas tareas Behaviours, siendo clases que heredan de jade.core.behaviours.Behaviour y que implementan los métodos:
· action(): Método donde se codifica la tarea a realizar. Hay que tener en cuenta que en caso de que un agente ejecute varios Behaviours simultáneamente, cuando un Behaviour entra su método action(), ningún otro Behaviour ejecutará el suyo en otro hilo paralelo.
· done(): Método que determina cuando ha finalizado un Behaviour. Mientras retorne false, el método action() se ejecutará iterativamente.
· onEnd(): Método invocado por el contenedor cuando un Behaviour ha finalizado.
Los Behaviours se añaden al agente típicamente en el método setup() mediante addBehaviour():
El API especializa distintos tipos de Behaviours en función la tarea a ejecutar:
El API de comunicaciones entre Agentes lo proporciona la propia clase Agent mediante las funciones send() y receive() y la clase ACLMessage, que mediante distintas combinaciones permiten mantener comunicaciones p2p, difusión a grupos de agentes o publicación/suscripción a topics.
Herramientas provistas por la plataforma:
· RMA (Gestión remota de Agentes). Permite monitorizar y controlar agentes de manera remota.
· Gestión del directorio. Permite registrar/desregistrar agentes, modificar su descripción, federar directorio y crear dominios y subdominios de agentes.
· Dummy Agent. Agente para editar, enviar y recibir mensajes de otros agentes, útil para validar el interfaz de un agente antes de su puesta en producción.
· Sniffer Agent. Herramienta para tracear los mensajes intercambiados entre agentes a través de la plataforma. Permite seleccionar el agente o agentes a monitorizar y capturar sus mensajes de entrada y salida.
· Introspector Agent. Monitoriza y controla el ciclo de vida de un agente en ejecución, así como su cola de recepción de mensajes.








Deja un comentario