Profesor: Jorge Novo Buján. Email: [email protected] ...jnovo/files/SSEE/introduccion_jade.pdf · –...

79
Prácticas SSEE. Profesor: Jorge Novo Buján. Email: [email protected]. Laboratorio investigación 0.2. Tutorías: miércoles 11:30-13:30.

Transcript of Profesor: Jorge Novo Buján. Email: [email protected] ...jnovo/files/SSEE/introduccion_jade.pdf · –...

Page 1: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Prácticas SSEE.

Profesor: Jorge Novo Buján.Email: [email protected].

Laboratorio investigación 0.2.Tutorías: miércoles 11:30-13:30.

Page 2: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Prácticas SSEE.

● Individual o en pareja.

● Asistencia obligatoria.

● 2 prácticas a realizar.

● Entrega de código implementado y memoria descriptiva.

● Prácticas en Java: usar Netbeans, Eclipse, etc. pero entrega con instrucciones.

● Emplear máquinas de laboratorio u ordenador personal.

● Entrega: vía Moodle.

Page 3: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Prácticas SSEE.

1. Introducción a los SMA prácticos2. Introducción a JADE

(1) Ejecución(2) Herramientas gráficas(3) Comportamientos(4) Comunicaciones(5) DF

3. Planteamiento de la primera práctica

Page 4: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Sistemas Multiagente

Page 5: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Introducción

• Inteligencia (deliberación, reacción, adaptación, aprendizaje, personalidad)

• Autonomía (continuidad temporal)• Distribución de la tarea

– Cooperación– Comunicación– Movilidad

Page 6: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Aplicaciones

• Aplicaciones móviles e internet: agente personal, P2P, e-learning, e-healthcare, e-commerce.

• Aplicaciones industriales: logística, cadenas de producción

• Aplicaciones en simulación: juegos de ordenador, películas de animación, coordinación de sistemas defensivos militares

Page 7: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Desarrollo de SMA

• Comunicaciones complejas

• Comportamientos

• Control global del sistema

• Frameworks principales:

– JACK (http://www.agent-software.com)– Comercial

– Posee herramientas gráficas de diseño

– JAVA

– JADE (http://jade.tilab.com)– Gratuito

– Sigue estándar FIPA

– JAVA

Page 8: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Introducción a JADE

Java Agent DEvelopment framework

Page 9: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Introducción

• JADE (Java Agent DEvelopment Framework) es una plataforma desarrollada íntegramente en Java para la creación de sistemas multiagente.

• JADE es Software Libre y se distribuye por parte de Telecom Italia bajo los términos de la licencia LGPL.

• El proyecto está financiado por: Telecom Italia , Motorola, Whitestein Technologies AG., Profactor GmbH y France Telecom.

• WEB de JADE: http://jade.tilab.com/

• Incluye un entorno de ejecución de agentes y una librería de clases JAVA.

• Incluye un conjunto de herramientas gráficas para monitorizar el funcionamiento de los agentes.

• Las aplicaciones desarrolladas se encontrarán dentro del estándar FIPA.

– El intercambio de mensajes entre agentes, así como las performativas empleadas se corresponderán con lo especificado en dicho estándar.

Page 10: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Estándar FIPA (www.fipa.org)

• FIPA es una organización de estandarización dentro de la IEEE que promueve la tecnología basada en agentes y la interoperabilidad con los estándares de otras tecnologías.

• FIPA entró a formar parte de la IEEE el 8 de Junio de 2005.

• Categorías de estandarización:

– Comunicación de agentes (categoría principal)

– Transporte de agentes

– Gestión de agentes

– Arquitecturas abstractas

– Aplicaciones

Page 11: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Instalación de JADE

• Requisito mínimo: JAVA 1.4

• Desde la página de descarga (http://jade.tilab.com/) podremos acceder a cuatro archivos con extensión .zip que se corresponderán con cada uno de los elementos de la plataforma (binarios, documentación, ejemplos, fuentes) o podremos obtener el archivo JADE-all-version.zip, que contendrá todos ellos.

• No requiere instalación: descomprimir respetando la ruta de los archivos comprimidos y guardar todo en un carpeta “jade”.

• Añadir a la variable de entorno CLASSPATH los archivos .jar del directorio lib, así como el directorio actual. Por ejemplo, en Linux con bash shell:

export CLASSPATH=$CLASSPATH:.:\jade\lib\jade.jar:\jade\lib\jadeTools.jar:\jade\lib\B

ase64.jar:\jade\lib\iiop.jar

Page 12: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Documentación y fuentes

• En jade/doc/index.html tenemos un índice para toda la documentación local y online

• En jade/doc/api/index.html tenemos la ayuda de las clases JAVA propias de JADE

• En jade/doc/examples/index.html tenemos una descripción de los ejemplos

• En jade/doc tenemos una guía del programador y una guía del administrador

• En jade/src/examples está el código fuente de los ejemplos

Page 13: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Principales paquetes

• jade.core implementa el kernel del sistema– Incluye la clase Agent que debe ser extendida al crear nuevas

aplicaciones.

– Además, se incluye una jerarquía de clases de comportamientos en el sub-paquete jade.core.behaviours. Estos comportamientos implementan las tareas concretas que realizan los agentes. Crear un SMA consiste en definir operaciones de los agentes escribiendo comportamientos y flujos de ejecución de agentes que los interconectan.

• El sub-paquete jade.lang.acl se proporciona para procesar el lenguaje de comunicación de agentes ACL (Agent Communication Language) de acuerdo con el estándar FIPA.

Page 14: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Principales paquetes

• El paquete jade.content contiene un conjunto de clases que dan soporte a las ontologías y los lenguajes definidos por el usuario

• El paquete jade.domain contiene las clases que representan las entidades de gestión de agentes definidas en el estándar FIPA, básicamente los agentes AMS y DF, que proporcionan el ciclo de vida, las páginas blancas y las páginas amarillas.

• El paquete jade.gui contiene las clases correspondientes a la gestión de la herramienta gráfica.

• El paquete jade.mtp contiene un interfaz Java que todos los protocolos de transporte de mensajes deben implementar

Page 15: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Principales paquetes

• El paquete jade.proto contiene clases para modelar los protocolos de interacción estándar (i.e. fipa-request, fipa-query, fipa-contract-net, fipa-subscribe)

• El paquete FIPA contiene el módulo IDL (lenguaje de especificación de interfaz) definido por FIPA para el transporte de mensajes basado en RMI-IIOP (Internet Inter-Orb Protocol)

• Por último, el paquete jade.wrapper proporciona wrappers de las funcionalidades JADE de alto nivel, que permiten usar JADE como librería para que aplicaciones JAVA externas puedan lanzar agentes JADE

Page 16: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Contenedores y plataformas

• Cada instancia de JADE que se ejecuta se denomina contenedor (container) y puede contener varios agentes. El conjunto de contenedores activos se denomina plataforma (platform).

• El contenedor principal (Main container) es el primero que debe ser creado y el resto de contenedores deben saber dónde se encuentra (cliente y puerto) dicho contenedor principal.

• Si en la misma red existe otro contenedor principal se constituye otra plataforma.

Page 17: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Características básicas

• Los agentes utilizan el protocolo RMI para comunicarse entre contenedores.

• Al ejecutar un nuestro sistema JADE, automáticamente se crean dos agentes:

– El AMS es el Agent Management System que proporciona un servicio de nombre único para cada agente en la plataforma y representa la “autoridad” en dicha plataforma (es posible crear/matar agentes en contenedores remotos por medio del AMS).

– El DF es el Directory Facilitator que proporciona un servicio de “páginas amarillas” para los agentes de la plataforma de modo que un agente puede encontrar otros agentes que proporcionen los servicios que necesita para lograr un cierto objetivo.

• La interfaz gráfica de JADE se ejecuta en al agente RMA (Remote Monitoring Agent)

• Los agentes deben tener nombres únicos. Un nombre se compone de un alias o “nickname” y una dirección separados por el signo @. Por ejemplo RMA@Siew:1099/JADE es un agente con nickname RMA en la dirección Siew:1099/JADE (Siew es el nombre de la máquina en la LAN y 1099 el puerto utilizado).

Page 18: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejecutar JADE

• Para que un agente o un conjunto de agentes sean creados al inicializar la plataforma JADE deberemos ejecutar la clase jade.Boot de la siguiente forma:

java jade.Boot nombre1:clase1 nombre2:clase2 ...

• Para cada agente deberemos indicar su nombre y la clase a la que instancia (cada agente será la instancia de una determinada clase) separado por dos puntos.

• Así, por ejemplo, si deseáramos crear un agente de la clase ClaseAgente con el nombre agenteEjemplo, deberíamos teclear lo siguiente:

java jade.Boot agenteEjemplo:ClaseAgente

Page 19: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interfaz gráfica

• Lo primero que podemos hacer es ejecutar la interfaz gráfica de JADE que nos muestra los agentes presentes en el sistema multi-agente, así como su localización. Para ello, deberemos teclear lo siguiente:

java jade.Boot -gui

• Depuración del SMA– Agente Sniffer

– Agente Dummy

– DF gui

– Introspector

– Log manager

Page 20: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Menús de la interfaz gráfica

• File: – Close RMA Agent: cierra la interfaz gráfica, aunque la plataforma de agentes

continuará funcionando, así como todos aquellos agentes que estuvieran activos.

– Exit this container: Destruye el container donde el agente RMA se aloja, matando a este agente y todos aquellos que le acompañaran dentro del container. Si dicho container es el MainContainer será toda la plataforma la que se desactivará.

– Shutdown Agent Platform: cierra totalmente la plataforma, eliminando todos los agentes y containers.

• Actions: – Start New Agent: esta acción crea un agente. Al usuario se le preguntará por el

nombre del agente y la clase a la cual se instanciará. Si hubiera algún container seleccionado, éste será en el que dicho agente se alojará. También se puede indicar el nombre del container en el que se desea que se ejecute el agente.

– Kill: mata a todos los agentes y elimina todos los containers seleccionados. Si el MainContainer estuviera seleccionado, la plataforma entera sería cerrada.

– Suspend: suspende los agentes seleccionados.

– Resume: este comando vuelve a poner en estado de activo los agentes seleccionados que estuvieran suspendidos.

Page 21: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Menús de la interfaz gráfica (2)

– Send Message: este comando permite enviar un mensaje ACL a un agente.

– Migrate Agent: esta acción permite migrar un agente. Cuando se selecciona, aparece un cuadro de diálogo en el que el usuario debe especificar el container de la plataforma hacia donde el agente seleccionado debe migrar.

– Clone Agent: esta opción permite clonar un agente. Cuando es seleccionada aparece un cuadro de diálogo donde el usuario debe introducir el nombre del nuevo agente y el container donde será alojado.

• Tools: – Start Sniffer: crea un agente de tipo Sniffer.

– Start DummyAgent: crea un agente de tipo DummyAgent.

– Show the DF GUI: muestra la interfaz asociada al agente DF.

– Start introspectorAgent: este agente permite monitorizar y controlar el ciclo de vida de un agente y muestra las colas de entrada y salida de mensajes.

– Start LogManagerAgent: permite seleccionar el nivel de información de log en tiempo de ejecución

• Remote Platforms: Este menú permite controlar plataformas remotas que cumplan con las especificaciones FIPA. Estas plataformas no tienen por qué ser JADE.

Page 22: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Envío de mensajes desde GUI

• Entre las opciones de la interfaz del agente RMA disponemos de una que nos permite enviar mensajes a los agentes seleccionados.

• El primer paso es, pues, seleccionar aquellos agentes a los que deseemos enviar un mensaje.

• A continuación seleccionaríamos dentro del menú Actions la opción Send Message.

• Dentro de la pestaña ACLMessage podremos encontrar todos los campos correspondientes a un mensaje ACL definido por el estándar FIPA.

• En el segundo campo (Receivers) aparecerán aquellos agentes que hubieramos seleccionado antes de usar la opción Send Message. Podremos añadir más pulsando con el botón derecho sobre el campo y seleccionando Add.

• Otro campo importante es el de Communicative act donde podremos mediante un cuadro de selección escoger la performativa asociada al mensaje, entre todas las especificadas por el estándar FIPA.

• No obstante, a pesar de la existencia de esta funcionalidad, se recomienda que para el envío de mensajes en el proceso de depuración de la plataforma se utilice el agente DummyAgent, que incluye una serie de funcionalidades adicionales que harán dicho proceso más sencillo.

Page 23: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Dummy

• El agente DummyAgent es una de las herramientas proporcionadas por la plataforma para la depuración de un sistema multiagente.

• Se trata de un agente que envía mensajes y que tiene asociada una interfaz gráfica que nos permite indicar los distintos campos del mensaje a enviar, así como visualizar los mensajes enviados y recibidos.

• Lo primero que deberemos hacer para crear un agente de este tipo es seleccionar el contenedor donde se alojará.

• Después tendremos que seleccionar la opción Start DummyAgent del menú Tools, o el botón correspondiente de la barra de botones.

• Al nuevo DummyAgent se le asignará automáticamente un nombre

Page 24: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Dummy (2)

• Al crear el agente se nos mostrará un diálogo con el que podremos acceder a todas las funcionalidades del mismo.

• Básicamente se trata de un agente que nos permite enviar mensajes y visualizar la cola de mensajes enviados y recibidos, así como los detalles de cada uno de estos mensajes.

• La parte principal de la ventana está dividida en dos. En la izquierda disponemos de una serie de campos donde podemos introducir el valor de los campos del mensaje a enviar. En la parte derecha se muestra la cola de mensajes enviados y recibidos.

• Haciendo doble-click sobre alguno de estos mensajes podremos ver el valor de cada uno de sus campos.

Page 25: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Dummy (3)

• Con respecto a los menús, a continuación se muestra la función de cada una de sus opciones:

– Menú General: – Exit: cierra el diálogo del agente DummyAgent, eliminándolo de la

plataforma.

– Menú Current message: – Reset: vacía todos los campos del mensaje a enviar.

– Send: envía el mensaje con los valores de los campos especificados en la parte izquierda del diálogo. Al hacerlo, se mostrará el mensaje enviado en la cola de mensajes en la parte derecha de la ventana, así como las contestaciones, en el caso de que las hubiera.

– Open: abre un mensaje almacenado en disco.

– Save: guarda el mensaje en disco.

Page 26: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Dummy (4)

– Menú Queued message: – Open queue: abre una cola de mensajes almacenada en disco.

– Save queue: guarda la cola de mensajes en disco.

– Set as current: toma los valores de los campos del mensaje seleccionado en la cola de mensajes y rellena los campos de la parte izquierda de la ventana correspondientes al mensaje a enviar con dichos valores.

– Reply: permite crear un mensaje de respuesta.

– View: muestra un diálogo donde se podrán examinar los valores de los campos del mensaje seleccionado de la cola de mensajes.

– Delete: elimina el mensaje seleccionado de la cola de mensajes.

Page 27: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Dummy (5)

1. Arrancar el RMA con el agente ping0:examples.PingAgent.PingAgent

2. Arrancar el Dummy Agent

3. Enviar un mensaje QUERY-REF con el texto “ping” al agente ping0

4. Ver el contenido de la respuesta

Page 28: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Sniffer

• El agente Sniffer es otra de las herramientas que nos proporciona la plataforma JADE para la depuración durante el proceso de desarrollo de nuestro sistema multiagente.

• Básicamente nos permite comprobar como se produce la interacción e intercambio de mensajes entre los agentes que indiquemos.

• Para iniciar el agente Sniffer primero deberemos seleccionar el contenedor donde se alojará, y tras ello seleccionar dentro del menú Tools la opción Start Sniffer o pulsar el botón correcto de la barra de botones.

• Tras hacer esto se creará un nuevo agente en el contenedor seleccionado. Se le asignará automáticamente un nombre

Page 29: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Sniffer (2)

• Asociado al agente Sniffer dispondremos de una interfaz gráfica como la siguiente, en la que se irán viendo los mensajes enviados y recibidos por los distintos agentes que se haya decidido inspeccionar:

• En la parte inferior disponemos de dos zonas. En la de la izquierda se muestra el árbol de plataformas, contenedores y agentes que ya pudimos ver en la interfaz de la plataforma, y en la parte derecha es donde podremos ver el intercambio de mensajes entre los agentes que seleccionemos.

Page 30: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Sniffer (3)

• Las opciones del menú Actions más importantes, que nos van a permitir realizar la depuración de la plataforma MAS que estemos desarrollando, son las siguientes:– Do sniff this agent(s): añade el o los agentes seleccionados al

canvas de la derecha donde se visualiza el intercambio de mensajes.

– Do not sniff this agent(s): elimina el agente o los agentes selccionados del canvas de la derecha donde se visualiza el intercambio de mensajes.

– Show only agent(s): añade el agente o agentes seleccionados al canvas donde se visualiza el intercambio de mensajes, pero solo mostrará el agente, no los mensajes que lleguen hasta él o provengan de él.

– Clear Canvas: borra todos los mensajes que estuvieran dibujados hasta el momento en el canvas. Se continúa con el proceso de depuración.

Page 31: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Sniffer (4)

• Una vez elegidos los agentes para los que deseamos observar su intercambio de mensajes, la ventana tendrá un aspecto similar al siguiente:

• Los mensajes enviados y recibidos aparecen en orden cronológico comenzando desde la parte superior. Si queremos analizar los distintos campos de un mensaje no tenemos más que hacer doble-click sobre el mensaje que deseemos.

Page 32: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Sniffer (5)

1. Arrancar el RMA con el agente ping0:examples.PingAgent.PingAgent

2. Arrancar el Dummy Agent

3. Arrancar el Sniffer Agent

4. Seleccionar los agentes da0 y ping0 en el Sniffer y seleccionar “Do sniff this agent(s)”

5. Enviar desde el Dummy Agent un mensaje QUERY-REF con el texto “ping” al agente ping0. Enviar otro de tipo QUERY-IF

6. Ver mensajes en el sniffer

Page 33: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente Introspector

• Permite monitorizar el ciclo de vida de un agente, sus mensajes ACL y los comportamientos que ejecuta.

• Probar ejemplo con agente ping0 con el introspector arrancado

Page 34: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agentes DF GUI y LogManager

• DF GUI– Interfaz gráfico que es

utilizado por el DF (Directory Facilitator) por defecto de JADE.

– Permite realizar la mayoría de la operaciones con el DF

• LogManager:– Permite seleccionar el nivel

de depurado y log en tiempo real, para las clases de JADE y las creadas por el usuario

Page 35: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejecución remota

• Para lanzar un contenedor en una máquina remota, indicando que la plataforma está en la máquina “lidia.dc.fi.udc.es”:

java jade.Boot -host lidia.dc.fi.udc.es

-container ping0:examples.PingAgent.PingAgent

Page 36: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejemplo base

• “JADE Programming for Beginners" ejemplo de compra-venta de libros.• Dos tipos de agentes: unos agentes venden libros y otros que los compran.• Los agentes compradores reciben órdenes de los usuarios a través de la línea

de comandos. Cuando un usuario quiere comprar un libro, introduce su título y a continuación acepta ofertas de todos los agentes vendedores periódicamente.

• El algoritmo implementado es simple:– Se compra el libro al agente que manda la primera oferta.– Si más de un agente manda una oferta, el comprador elige aquella con el

precio más barato.• Una vez comprado el libro, el agente comprador finaliza su ejecución.• Cada agente vendedor va a tener una interfaz gráfica simple, a través de la cual

se le pueden indicar los títulos que puede vender y sus correspondientes precios.

• El agente vendedor espera indefinidamente peticiones de compra de los correspondientes agentes compradores:– Cuando recibe una oferta sobre un libro, lo busca en su catálogo local y si lo

tiene, responde con el precio.– Si no, rechaza la petición. Una vez se ha vendido un libro, lo elimina de su

catálogo

Page 37: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

La clase Agent

• Programar un agente en JADE consiste en definir una clase Java que representa al agente y:– Determinar y codificar los comportamientos que va a

manifestar– Hacer que herede de la clase jade.core.Agent

– Programar, como mínimo, el método setup().

• El método setup() únicamente debe contener código relativo a tareas de inicialización.

• El agente va a permanecer ejecutándose hasta que se invoca el método doDelete().

– Este método llama a su vez a takeDown() que se puede redefinir para incluir código relativo a limpieza de elementos del agente

Page 38: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

La clase Agent

● java jade.Boot ssee:examples.hello.HelloWorldAgent

Page 39: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Identificador de un agente

• En JADE, la descripción del agente, el AID (Agent Identifier) tiene su correspondiente clase java, la clase jade.core.AID

• La clase Agent incorpora el método getAID() que permite recuperar el nombre del agente.

• El nombre del agente, un identificador único globalmente (normativa FIPA), va a tener la estructura:

<nickname>@nombre-plataforma

Page 40: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Paso de argumentos

• Ejemplo base: paso de argumentos por línea de comandos

• El método getArguments() devuelve un Object[] que contiene los argumentos.

• Para que no haya ningún problema, el lector de los argumentos debe saber el numero y el tipo de cada uno de los argumentos.

• Ejemplo de ejecución:

java jade.Boot comprador:BookBuyerAgent(El_Quijote)

IMP: puede ser necesario usar “(El_Quijote)”

Page 41: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Crear un agente desde otro

Page 42: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamientos

• Un comportamiento representa una tarea que el agente debe realizar y se implementa como un objeto de una clase que hereda de la clase jade.core.behaviours.Behaviour.

• Para que un agente ejecute la tarea implementada por el objeto behaviour, basta con añadir dicho comportamiento mediante el método addBehaviour() de la clase Agent.

• Los comportamientos pueden ser añadidos en cualquier momento, cuando el agente comienza su ejecución (en el método setup() ) o desde otros comportamientos

• Toda clase que herede de jade.core.behaviours.Behaviour deberá implementar:

– El método action() que define las acciones que se llevarán a cabo cuando el comportamiento esté en ejecución.

– El método done() que devuelve un boolean y sirve al agente para determinar si el comportamiento ha finalizado o no.

Page 43: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Colas de comportamientos

• El funcionamiento de los comportamientos está implementado a 2 niveles:

1.Una cola circular de los comportamientos activos de cada agente

2.Una cola con los comportamiento bloqueados de cada agente.

• Los comportamientos se desbloquean al recibir el agente un mensaje.

Page 44: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Threads y comportamientos

• La planificación de los comportamientos en JADE es cooperativa, por lo que cuando se planifica la ejecución de un comportamiento se invoca al método action() y se ejecuta hasta que termina.

• Es el programador el que define cuándo se cambia de comportamiento a ejecutar. Ventajas de este planteamiento:– Permite la utilización de un único hilo JAVA (thread) por agente

– Proporciona un rendimiento mayor porque los comportamientos conmutan más rápido que los threads de JAVA.

– Elimina los elementos de sincronización entre los comportamientos concurrentes que acceden a los mismos recursos ya que existe un único thread.

• En resumen, JADE propone un modelo de agente con un único thread y añade un nivel de planificación (scheduling) sobre dicho thread a nivel de comportamientos.

Page 45: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Flujo de ejecución

1. Se ejecuta el método setup().

2. Se comprueba que el agente sigue vivo y no se ha llamado al método doDelete().

3. Se selecciona el siguiente comportamiento del conjunto que aún le quedan por ejecutar al agente.

4. Se ejecuta el método action() del comportamiento b y tras esto se pregunta si ha finalizado (es posible que no lo haya hecho ya que un comportamiento puede ser o un simple trozo de código que se ejecuta una sola vez o bien varias veces).

5. Si ha finalizado se elimina del conjunto de comportamientos del agente y no vuelve a ejecutarse.

6. Se vuelve a comenzar.

Page 46: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Flujo de ejecución (2)

• Un comportamiento como este:

causa que el agente no ejecute ningún comportamiento más durante toda su ejecución ya que el método action() no finaliza nunca.

Page 47: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamientos básicos

• one-shot: se ejecutan de manera casi instantánea, y solamente una vez. La clase jade.core.behaviours.OneShotBehaviour implementa el método done() devolviendo true

•. cíclicos: son aquellos que nunca se quitan del conjunto de comportamientos del agente, cuyo método action() siempre ejecuta el mismo código y nunca finalizan. La clase jade.core.behaviours.CyclicBehaviour implementa el método done() devolviendo false.

Page 48: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamientos básicos

• genéricos: algo más complejos, el código que se ejecuta en ellos depende del estado del agente, y eventualmente finalizan su ejecución.

Page 49: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamientos compuestos

Ejecutar ejemplos

• Simple Agent

(importante entender cómo se secuencian los comportamientos)

Page 50: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Máquina de estados finitos

1

2

0

3

La clase FSMBehaviour implementa un comportamiento de tipo compuesto que ejecuta sus comportamientos hijo de acuerdo con una máquina de estados finitos definida por el usuario:

• Registra un comportamiento simple como el estado inicial del FSM llamando al método registerFirstState

• Registrar uno o más estados como los estados finales llamando a registerLastState

• Registrar uno o más estados intermedios llamando a registerState

• Para cada estado, registrar las transiciones al resto de estados llamando a registerTransition;

• El método registerDefaultTransition es útil para registrar una transición de un estado a otro independientemente del evento de finalización del estado original.

Page 51: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Más sobre comportamientos

• El método onStart() de la clase Behavior se invoca una sola vez antes de la ejecución del método action()

• El método onEnd() de la clase Behavior se invoca después de que el método done() devuelve true

• El método doDelete() de la clase Agent hace una transición de estado de activo, suspendido o esperando a borrado dentro del ciclo de vida del agente en su plataforma.

• El método removeBehavior() de la clase Agent se puede utilizar para eliminar un comportamiento de la cola

Page 52: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamientos programados

• JADE proporciona dos clases que permiten implementar comportamientos que se ejecutan en ciertos instantes de tiempo.

• La clase WakerBehaviour cuyos métodos action() y done() se implementan de forma que ejecutan el método abstracto handleElapsedTimeout() tras un periodo de tiempo especificado en el constructor.

Page 53: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comportamiento programados (2)

• La clase TickerBehaviour cuyos métodos action() y done() se implementan de forma que ejecutan el método abstracto onTick() repetidamente esperando un cierto tiempo (especificado en el constructor) tras cada ejecución. Un comportamiento de este tipo nunca termina.

Ejecutar ejemplo

• Time Agent

Page 54: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente comprador

• El agente comprador tiene un comportamiento cíclico, encargado de preguntar al agente vendedor si tiene el libro que desea comprar.

• Para esa parte de su comportamiento global añadiremos un TickerBehaviour en el metodo setup() del agente comprador:

Todos los comportamientos JADE incorporan esta variable para acceder a los datos del agente que esta ejecutándose

El método RequestPerformer() incorpora la lógica encargada de contactar con el vendedor e intentar comprar el libro que se pasa como argumento.

Page 55: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente vendedor

• El agente vendedor es un poco más complicado que el comprador ya que debe realizar dos tareas.

● Responder a la pregunta de si se dispone o no del libro que el comprador quiere comprar.

● Ejecutar la venta del libro.

• Para cada una de esas tareas vamos a implementar sendos comportamientos cíclicos e independientes.

Page 56: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Agente vendedor

• Se han añadido dos nuevos comportamientos que son OfferRequestsServer() y el PurchaseOrdersServer() y que se encargan de servir las ofertas a petición de los compradores y de servir las compras, también a petición de los compradores, respectivamente.

• El método updateCatalogue() se encarga de añadir un comportamiento de tipo one-shot añadiendo un nuevo título al catalogo. Este método se invoca desde la interfaz, que se implementa fácilmente mediante una clase JADE, y se encarga añadir el nuevo título, introducido desde la correspondiente ventana.

Page 57: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Resumen de comportamientos

• Cada agente tiene para sí una cola de comportamientos activos

• El cuerpo de acciones de un comportamiento se programa redefiniendo el método action()

• Cuando el método anterior finaliza, y dependiendo del tipo de comportamiento, el planificador lo saca de la cola o lo vuelve a colocar al final.

• Un comportamiento puede bloquearse hasta que lleguen más mensajes al agente; el bloqueo significa que, cuando action() termina, se le coloca en una cola de bloqueados. Lo veremos en detalle más adelante.– Cuando llega un nuevo mensaje, se le saca de esa cola y se coloca al

final de la de comportamientos activos

Page 58: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Comunicación entre agentes

• JADE sigue el estándar FIPA, por lo que es capaz de hacer que mensajes del tipo ACL puedan intercambiarse entre los agentes implicados, a través del AMS (Agent Management System) y mediante un protocolo estándar como, por ejemplo, IIOP.

• La clase jade.lang.acl.ACLMessage es la base para la composición de mensajes

• El paso de mensajes es asíncrono.

• Cada agente tiene una cola de mensajes (buzón) donde JADE deposita los mensajes enviados por otros agentes.

• Cada vez que se almacena un mensaje en el buzón, se le notifica al agente receptor.

Page 59: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

El lenguaje ACL

• Formato de mensajes especificado en el lenguaje ACL definido en el estándar FIPA. Este formato utiliza una serie de campos básicos:

• El agente que envía el mensaje (sender)

• Una lista de receptores (receivers)

• La intención de la comunicación (performative) por parte del agente que envía el mensaje. Las performativas más comunes son:

– REQUEST si desea que el receptor realice una acción

– INFORM si desea advertir de un hecho al receptor

– QUERY_IF si desea saber si se mantiene una determinada condición

– CFP (call for proposal), PROPOSE, ACCEPT_PROPOSAL, REJECT_PROPOSAL utilizadas en negociaciones.

• El contenido (content) del mensaje.

• El lenguaje de dicho contenido (language)

• La ontología (ontology), es decir, el vocabulario de símbolos utilizados en el contenido y su significado

• Campos de control tales como conversation-id, reply-with, in-reply-to, reply-by.

Page 60: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ontologías

• Una ontología es el conjunto de información relevante en el dominio del problema que se está tratando. Los agentes intercambian información según el formato de los hechos especificados en la ontología.

• Una ontología en JADE es una instancia de la clase jade.content.onto.Ontology en la cual se definen los esquemas de la estructura de los predicados, acciones de los agentes y conceptos relevantes al dominio del problema.

• Estos esquemas son instancias de las clases PredicateSchema, AgentActionSchema y ConceptSchema incluidas en el paquete jade.content.schema. Además, para cada uno de estos elementos que definamos en la ontología se deberá crear una clase asociada.

• JADE permite el manejo de ontologías para:– Representar el dominio de aplicación mediante conceptos, predicados, acciones,

agentes, etc.

– Intercambiar elementos de la ontología entre agentes (i.e. en el cuerpo del mensaje FIPA)

• Conceptualmente sencillo

• Muy engorroso de manejar (definición tediosa de conceptos)

Page 61: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Enviar un mensaje

• Es tan simple como rellenar los campos de un objeto del tipo ACLMessage y después llamar al método send() de la clase Agent.

• El siguiente código informa a un agente cuyo nombre es Peter de que llueve:

• El acto comunicativo es del tipo INFORM, se envía al agente Peter, en lenguaje de contenido del mensaje es ingles, la ontología es Weather-forecast-ontology, y el mensaje es el que aparece en la penúltima línea de código “Today is raining”.

Page 62: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejemplo compra-venta

• El agente comprador recibe un título del usuario que debe buscar entre todos los posibles vendedores.

• Podemos hacer uso de un acto comunicativo del tipo CFP (call for proposal) que se habrá de enviar a todos los agentes vendedores.

• La performativa PROPOSE se puede utilizar para mensajes que llevan ofertas del vendedor y la performativa ACCEPT_PROPOSAL para los mensajes que llevan aceptación de ofertas (órdenes de compra). Por último, la performativa REFUSE se utiliza para mensajes enviados por agentes vendedores cuando el libro solicitado no está en sus catálogos.

• Para que el agente vendedor reciba las posibles ofertas, simplemente debe mirar en su cola de mensajes y coger el primero de ellos con el método receive():

Page 63: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Mensajes agente vendedor

• Los comportamientos OfferRequestsServer y PurchaseOrdersServer deben servir mensajes al agente comprador llevando respuestas de oferta y órdenes de compra.

• Un comportamiento de este tipo debe ser ejecutado de manera continua (cíclico) y debe chequear si se ha recibido un mensaje y procesarlo.

El método ACLMessage.createReply(), se encarga de crear un mensaje de respuesta correspondiente al mensaje instancia desde el que se invoca el método actualizando convenientemente el receptor del mensaje y los parámetros conversation-id, reply-with y in-reply-to cuando sea conveniente.

Page 64: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Bloqueo de comportamientos

• Al ser un comportamiento cíclico y receive() un método no bloqueante, el agente vendedor estará constantemente activando y desactivando el comportamiento mientras que no llegue un mensaje.

• Este proceso puede consumir una gran cantidad de CPU innecesariamente.

• Para evitar esto se recomienda utilizar el método block(). Con este método bloqueamos el comportamiento desde el cual se llama, sacándolo de la cola de comportamientos activos y poniéndolo en la cola de bloqueados

• Una vez que llega un mensaje a la cola del agente, todos los comportamientos bloqueados se vuelven a introducir al conjunto de comportamientos del agente correspondiente y vuelven a ser activos.

Page 65: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Plantillas de mensajes

• ¿Cómo puede el agente estar seguro de que el mensaje que obtiene de la cola es del tipo que desea?

• En el comportamiento anterior, se escoge el primer mensaje de la cola y no se comprueba que sea del tipo CFP para así responder convenientemente a la petición de oferta con el precio del libro.

• La situación podría ser incluso más compleja ya que podríamos estar hablando de varios protocolos diferentes y que ambos usaran CFP por lo que no solamente habría que distinguir la performativa sino el protocolo para que el comportamiento correspondiente manejara el mensaje.

• Por otro lado, no basta con sacar el mensaje de la cola y comprobar que corresponde al que esperamos, sino que además, si el mensaje no es el que buscamos, se debe conservar para que otros comportamientos lo manejen cuando proceda. Para manejar todo esto disponemos de la clase jade.lang.acl.MessageTemplate.

• Una plantilla es una especie de patrón mediante la cual podemos especificar el tipo de mensaje que queremos recibir:

myAgent.receive() ignora todos los mensajes excepto los de tipo CFP

Page 66: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Conversación compleja

• Una conversación es una secuencia de mensajes intercambiados por dos o más agentes con relaciones causales y temporales bien definidas.

• El comportamiento RequestPerformer del agente comprador debe enviar un mensaje CFP a varios agentes (los agentes vendedores conocidos), recoger todas las respuestas y, en caso de que exista algún mensaje PROPOSE, enviar un mensaje ACCEPT_PROPOSAL y recoger la respuesta.

Page 67: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Conversación compleja (2)

Page 68: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Conversación compleja (3)

Page 69: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Importante

• Utilizar receive() + Behavior.block() para recibir mensajes dentro de los comportamientos

• Utilizar blockingReceive() para recibir mensajes dentro de los métodos setup() y takeDown()

• La clase Agent proporciona el método blockingReceive() que no termina hasta que hay un mensaje en el buzón del agente.

• Este método bloquea el thread del agente, por lo que si se invoca desde un comportamiento, evita que el resto de comportamientos se ejecuten hasta que la llamada al método termina.

Page 70: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interacción entre agentes

• Las conversaciones complejas siguen un protocolo de interacción bien definido.

• FIPA define protocolos de interacción estándares.

• JADE contiene un gran número de clases que implementan protocolos de interacción en jade.proto.package.

• La conversación implementada en el ejemplo anterior sigue el protocolo Contract-Net y podría haber sido creada a partir de las clases jade.proto.ContractNetInitiator y jade.proto.ContractNetResponder

• En lugar de programar el flujo del protocolo (i.e. la secuencia de intercambio de mensajes) se programa qué hacer en cada situación (manejadores)

Page 71: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Proveedor de directorio

• En nuestro ejemplo, hasta ahora hemos asumido que conocemos a los agentes vendedores, pudiendo acceder a sus nombres mediante un array.

• En sistemas abiertos de agentes en los que constantemente están entrando y saliendo agentes, este esquema de funcionamiento no es posible.

• De acuerdo con la especificación FIPA, un servicio de “páginas amarillas” permite que los agentes hagan públicos los servicios que proporcionan de modo que otros agentes pueden encontrar y utilizar dichos servicios.

• En JADE el servicio de “páginas amarillas” lo proporciona un agente llamado proveedor de directorio (DF). Cada plataforma JADE contiene un agente DF.

• Este elemento se incorpora en forma de clases Java para poder inscribir nuestros agentes en el sistema y para poder encontrar otros agentes que previamente se han suscrito a ellos y a sus servicios.

Page 72: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interacción con el DF

• La interacción con el agente DF se realiza mediante el intercambio de mensajes ACL utilizando el lenguaje adecuado (SL0) y la ontología adecuada (FIPA-agent-management ontology).

• Para simplificar esta interacción, JADE proporciona la clase jade.domain.DFService por medio de la cual se pueden publicar y buscar servicios mediante llamadas a métodos.

• Para publicar un servicio, el agente debe proporcionar al DF su identificador (AID), la lista de lenguajes y ontologías que el resto de agentes deben conocer para interactuar con él y la lista de los servicios que proporciona.

• Para cada servicio, el agente debe proporcionar una descripción incluyendo el tipo de servicio, el nombre del servicio, los lenguajes y ontologías necesarios para utilizar dicho servicio y un número de propiedades específicas del servicio.

• Las clases DFAgentDescription, ServiceDescription y Property incluidas en el paquete jade.domain.FIPAAgentManagement, representan dichas abstracciones.

• Para publicar un servicio, el agente debe crear una descripción del mismo como una instancia de la clase DFAgentDescription y llamar al método estático register() de la clase DFService.

• Típicamente, la publicación de un servicio se realiza en el método setup()

Page 73: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interacción con el DF (2)

Registro de un servicio

Eliminación de un servicio

Page 74: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interacción con el DF (3)

• Para buscar un servicio, el agente debe proporcionar al DF una plantilla de descripción.

• El resultado de la búsqueda es la lista de todas las descripciones que coinciden con la plantilla.

• El método de búsqueda estático search() de la clase DFService puede ser utilizado en el agente comprador del ejemplo para encontrar dinámicamente todos los agentes que proporcionan un servicio de tipo “book-selling”.

Page 75: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Interacción con el DF (4)

• La actualización de la lista de agentes vendedores conocidos se realiza antes de cada intento de compra de un libro ya que los agentes vendedores pueden aparecer y desaparecer dinámicamente.

Page 76: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Resumen compra-venta

• Agente comprador:– Recibe el título del libro a buscar como argumento

– Ejecuta el comportamiento básico RequestPerformer cada minuto buscando vendedor para el libro– Lanza un mensaje de tipo CFP a todos los agentes

– Envía una orden de compra por la mejor oferta

– Recibe la confirmación de la compra

– Utiliza el DF para buscar los agentes vendedores

• Agente vendedor:– Registra un servicio de venta de libros en el DF

– Ejecuta el comportamiento cíclico OfferRequestsServer que espera mensajes de tipo CFP con el título de un libro y responde mediante un mensaje de tipo PROPOSE/REFUSE si lo tiene o no en su catálogo.

– Ejecuta el comportamiento cíclico PurchaseOrdersServer que espera mensajes de tipo ACCEPT_PROPOSAL y entonces elimina el libro vendido de su catálogo y confirma la venta mediante un mensaje de tipo INFORM.

• GUI:– Interfaz gráfica simple para añadir libros al catálogo del agente vendedor.

Page 77: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejecución ejemplo

• java jade.Boot –gui comprador:examples.bookTrading.BookBuyerAgent(El_Quijote) vendedor1:examples.bookTrading.BookSellerAgent vendedor2:examples.bookTrading.BookSellerAgent

• Introducir El_Quijote en el catálogo de ambos vendedores con distinto precio

Page 78: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Ejecución ejemplo (2)

Page 79: Profesor: Jorge Novo Buján. Email: jnovo@udc.es ...jnovo/files/SSEE/introduccion_jade.pdf · – Comunicación de agentes (categoría principal) – Transporte de agentes ... clase1

Conclusiones y referencias

• JADE proporciona dos tipos de herramientas para el desarrollo de un sistema basado en agentes:1. Clases JAVA que facilitan la tarea de crear un sistema conforme

con el estándar FIPA mediante la utilización de métodos que siguen dicho estándar.

2. Herramientas gráficas que permiten la depuración del sistema creado.

• Referencias interesantes:–. Acción coordinada europea: http://www.agentlink.org/

–. Tutorial en español: http://www.dccia.ua.es/~pablo/tutorial_agentes/

–. Documentación original JADE: http://jade.tilab.com/doc/index.html