Download Construcción de Agentes Software con JAVA + JADE
Document related concepts
no text concepts found
Transcript
Construcción de Agentes Software con JAVA + JADE Construcción de Agentes Software con JAVA + JADE Seminario de Aplicación de los Agentes Software al Ocio y al Turismo Universidad Carlos III de Madrid Juan A. Botı́a 11 de Marzo de 2005 Construcción de Agentes Software con JAVA + JADE Estructura de la presentación Introducción a JADE Servicio de directorio de agentes/servicios El entorno de ejecución FIPA Mensajes de agentes en FIPA Comportamientos en JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA Tratamiento de comunicacion mediante ACL en JADE Protocolos de interaccı́on FIPA en JADE Manejo de Ontologı́as en JADE Conclusiones Construcción de Agentes Software con JAVA + JADE Introducción a JADE La plataforma JADE I JADE está compuesta de I I I I Una plataforma FIPA para la ejecución de agentes Un conjunto de paquetes para la programación de agentes FIPA Es 100 % Java (con el JDK 1.4 o superiores) Incluye I I I I I I Creación básica de agentes Programación del comportamiento de los agentes en base a behaviours ACL FIPA para envı́o y recepción de mensajes Clases útiles para programación de protocolos FIPA (y no FIPA) Distintos codecs (SL, RDF, etc) Manejo de conocimiento mediante ontologı́as Construcción de Agentes Software con JAVA + JADE Introducción a JADE La plataforma JADE I Plataforma FIPA (AMS, Facilitador de directorio y MTS) I Puede ejecutarse en una o varias JVM I Cada JVM es vista como un entorno en donde los agentes pueden ejecutarse concurrentemente e intercambiarse mensajes Organizada en contenedores I I I 1 principal: AMS, DF y el registro rmi están localizados ahı́ n containers no princpales y conectados al principal Construcción de Agentes Software con JAVA + JADE Introducción a JADE La arquitectura de referencia FIPA La arquitectura de referencia FIPA se denomina “Arquitectura Abstracta” ¿por qué? I definir los elementos comunes a diferentes sistemas subyacentes I reunirlos en una especificación común I instanciar esa arquitectura en forma de implementaciones diferentes pero interoperables !! Construcción de Agentes Software con JAVA + JADE Introducción a JADE La arquitectura de referencia FIPA Tópicos cubiertos I Definición de un modelo abstracto para el descubrimiento de servicios disponibles para otros agentes y servicios. I Interoperabilidad entre diferentes medios de transporte de mensajes. I Soporte para el manejo de diferentes formas de representación de mensajes ACL I Soporte para el manejo de diferentes lenguajes de contenido I Soporte para el manejo de diferentes representaciones de servicios de directorio Tópicos no cubiertos: por ejemplo, la gestión del ciclo de vida de un agente Construcción de Agentes Software con JAVA + JADE Introducción a JADE Realización-materialización de la arquitectura abstracta Una arquitectura abstracta no es directamente implementable I Base para otras especificaciones más concretas (elementos software, lenguajes de programación, protocolos de red, etc) I El desarrollador tiene libertad para materializar transporte de mensajes, directorio de agentes, directorio de servicios y ACL Construcción de Agentes Software con JAVA + JADE Introducción a JADE Realización-materialización de la arquitectura abstracta I Una arquitectura abstracta puede incluir elementos adicionales I Una realización puede ser del total de la arquitectura pero también de uno o varios elementos (e.g. directorio de agentes) Construcción de Agentes Software con JAVA + JADE Introducción a JADE Servicio de directorio de agentes/servicios Directorio de agentes y servicios I I Proporciona un lugar en donde los agentes registran sus descripciones/servicios de tal forma que otros agentes puedan utilizar ese medio para localizar agentes/servicios con los que deseen interactuar/invocar Datos mı́nimos de un agente I I I AID: nombre único globalmente Localizador: una o más descripciones del transporte que, a su vez, contiene el tipo de transporte (i.e. el protocolo), la dirección de transporte para ese protocolo y cero o más propiedades adicionales Cómo anunciarse I I Primero necesita estar accesible, y por lo tanto se engancha (i.e. hace un bind) a una o más direcciones de transporte Luego se da a conocer 1. crea una entrada de directorio con sus datos de agente 2. registra la entrada con el servicio de directorio de agentes Construcción de Agentes Software con JAVA + JADE Introducción a JADE Servicio de directorio de agentes/servicios Localizando agentes y servicios en FIPA II La búsqueda de los agentes es por matching simple de cadenas y pares atributo-valor El registro y localización de servicios es análogo al de agentes Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Panorama global Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Elementos del entorno de ejecución El AMS: habilita el acceso a la plataforma I Un AMS para cada plataforma de agentes (AP) I Gestiona la operación la plataforma con respecto a los agentes que viven en ella (ciclo de vida, registro de nombres) I Operaciones en el directorio: register, deregister, modify, search y get-description I Operaciones contra agentes: suspender, terminar, crear, finalizar ejecución, invocar y ejectuar agente Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA El agente como proceso software en la plataforma Agente en la plataforma proceso computacional que implementa la funcionalidad autónoma de comunicación para una aplicación concreta Identificado mediante el AID (Agent Identifier) I name I addresses I resolvers Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA El agente como proceso software en la plataforma Ejemplo: supongamos que agente-a quiere mandar un mensaje a agente-b el cual tiene como AID el siguiente (agent-identifier :name agent-b@bar.com :resolvers (sequence (agent-identifier :name ams@foo.com :addresses (sequence iiop://foo.com/acc)))) y agente-a necesita saber sus direcciones de transporte Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Ejemplo, cont La secuencia de comunicación será Nótese que el AMS tiene un nombre reservado, como este (agent-identifier :name ams@nombre_plataforma :addresses (sequence direcciones_transporte_plataforma)) Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Facilitador de directorio en la plataforma Componente opcional I I implementa la funcionalidad de un directorio de servicios (i.e. páginas amarillas) de la arquitectura abstracta Si existe, tiene reservado el AID (agent-identifier :name df@nombre_plataforma :addresses (sequence direcciones_transporte_plataforma)) I Posibilita subscripción para escuchar eventos relativos a operaciones (registro, desregistro y modificación) en el directorio de servicios mediante fipa-subscribe Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Ciclo de vida del agente FIPA Un agente fı́sico (en términos de software) está sujeto a un ciclo de vida que define los estados en los que se puede encontrar y cómo se realizan los cambios de un estado a otro. Caracterı́sticas más importantes I AP Bounded (conectado a la plataforma): un agente es gestionado fı́sicamente dentro de una AP y el ciclo de vida de un agente estático está, por tanto, asociado a una determinada AP. I Independiente de la aplicación I Orientado a instancia: el agente que cumple el ciclo de vida es una instancia de una clase de agente, con un identificador único (identidad) I Único: cada agente solamente tiene un ciclo de vida en todo momento y dentro de una única AP. Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Envı́o de mensajes y ciclo de vida El MTS es responsable de envı́o de mensajes. Dependiendo del estado del agente receptor I Activo: el mensaje se entrega al agente directamente. I Iniciado/esperando/suspendido: o bien el MTS almacena el mensaje en el buffer correspondiente hasta que el agente está activo o bien entrega el mensaje en otra localización si antes se ha indicado un forward para ese agente. I Tránsito: o bien el MTS almacena el mensaje en el buffer correspondiente hasta que el agente está activo o bien entrega el mensaje en otra localización si antes se ha indicado un forward para ese agente como en el caso anterior. Solamente los agentes móviles pueden entrar en este estado. I Unknown: discreccional Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA El registro de un agente en una AP Al comenzar la ejecución, se ha de registrar en la plataforma para que el resto de agentes puedan localizarlo y enviarle mensajes de manera apropiada ¿Cómo? 1. al crearse dentro de la plataforma 2. al llegar a la AP desde otra AP (agente móvil y APs que lo soportan) 3. de manera explı́cita Construcción de Agentes Software con JAVA + JADE Introducción a JADE El entorno de ejecución FIPA Ejemplo Un agente (i.e. discovery-agent) localizado en AP bar.com se quiere registrar en la plataforma foo.com. Para ello enviará un mensaje request como el siguiente al correspondiente AMS: (request :sender (agent-identifier :name discovery-agent@bar.com :addresses (sequence iiop://bar.com/acc)) :receiver (set (agent-identifier :name ams@foo.com :addresses (sequence iiop://foo.com/acc))) :ontology fipa-agent-management :language fipa-sl0 :protocol fipa-request :content "((action (agent-identifier :name ams@foo.com :addresses (sequence iiop://foo.com/acc)) (register (:ams-description : name (agent-identifier :name discovery-agent@bar.com :addresses (sequence iiop://bar.com/acc)) ...)))")...) Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Elementos de los mensajes FIPA Estructura, representación y transporte Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Elementos de los mensajes FIPA I I La parte externa del mensaje corresponde al lenguaje de comunicación de agentes Si nos referimos a la estandarización ACL de FIPA, este va a consistir nuevamente en una lista de pares atributo-valor Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Más sobre mensajes Ahora supongamos que en el AMS tenemos la entrada, en el directorio de páginas blancas correspondiente, siguiente Agent-name:ABC Agent-Locator: Transport-type HTTP SMTP Agent-attributes: Transport-specific-address http://www.whiz.net/abc abc@lowcal.whiz.net Transport-specific-property <none> <none> Attrib-1:yes Attrib-2:yellow Language: French, German, English Preferred-negotiation: contract-net Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Más sobre mensajes II Cualquier otro agente podrı́a contactar con ABC, a través del AMS y mandar mensajes de dos maneras distintas Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Seguridad en los mensajes Se deben considerar I Validez del mensaje I I Toda modificación que se realice sobre el mismo sea detectable Encriptación I Poder enviar mensajes sin que terceros no autorizados sean capaces de leer su contenido La arquitectura abstracta propone soportar estas dos vertientes con I I Atributos adicionales (envoltura) Tipos de representación en la codificación NO ESTANDARIZA!!! Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Seguridad en los mensajes II Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA La plataforma JADE (y II) Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Servicios básicos: directorio El directorio, como en FIPA, es un servicio básico accesible a través de jade.domain.DFService (en realidad es un acceso al agente de páginas amarillas desde un interface) para los servicios I register I deregister I modify I search Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA La clase Agent Programar un agente en JADE consiste en definir una clase Java que representa al agente y: I Determinar y codificar los comportamientos que va a manifestar I Hacer que herede de la clase jade.core.Agent I Programar sus métodos setup(), takeDown Para ejecutar el agente, podemos hacerlo desde el GUI de JADE o desde cualquier otro programa JAVA explı́citamente Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Lanzar un agente desde el GUI Desde una consola: export CLASSPATH=/ruta/jade/lib/jade.jar:/ruta/jade/lib/iiop.jar:/ruta/jade/lib/http.jar java jade.Boot -gui y tenemos Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Lanzar un agente desde el GUI (y II) Seleccionando el botón de New Agent, posicionados en el contenedor principal Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Un agente mı́nimo import jade.core.Agent; public class BookBuyerAgent extends Agent { protected void setup() { // Printout a welcome message System.out.println(‘‘Hallo! Buyer-agent ‘‘ + getAID().getName() + ‘‘ is ready.’’); } } Construcción de Agentes Software con JAVA + JADE Introducción a JADE Mensajes de agentes en FIPA Ejecución del agente desde la lı́nea de comandos javac BookBuyerAgent.java export CLASSPATH=/opt/jade/lib/jade.jar:/opt/jade/lib/http.jar:. java jade.Boot mi_agente:BookBuyerAgent This is JADE 3.2 - 2004/07/26 13:41:05 downloaded in Open Source, under LGPL restrictions, at http://jade.cselt.it/ http://simon:7778/acc Agent container Main-Container@JADE-IMTP://simon is ready. Hallo! Buyer-agent mi_agente@simon:1099/JADE is ready. Construcción de Agentes Software con JAVA + JADE Comportamientos en JADE Los Comportamientos de un agente JADE I Los agentes deben poder ejecutar diferentes tareas al mismo tiempo I JADE propone un modelo de agente single threaded y añade un nivel de scheduling sobre la única thread a nivel de comportamientos Programación basada en comportamientos: I 1. 2. 3. 4. determinar qué debe ser capaz de hacer el agente asociar cada funcionalidad con un comportamiento escoger el tipo de comportamiento dejar a JADE la tarea del scheduling (un solo comportamiento se está ejecutando en cada instante) Construcción de Agentes Software con JAVA + JADE Comportamientos en JADE El scheduling de comportamientos I Cada agente tiene para sı́ una cola de comportamientos activos I El cuerpo de acciones de un comportamiento se programa redefiniendo el método action() I Cuando el método anterior finaliza, y dependiendo del tipo de comportamiento, el scheduler lo saca de la cola o lo vuelve a colocar al final I Un comportamiento puede bloquearse (block()) hasta que lleguen más mensajes al agente; el bloqueo significa que, cuando action() termina, se le colocal en una cola de bloqueados I Cuando llega un nuevo mensaje, se le saca de esa cola y se coloca al final de la de comportamientos activos Construcción de Agentes Software con JAVA + JADE Comportamientos en JADE El scheduling de comportamientos (y II) Construcción de Agentes Software con JAVA + JADE Comportamientos en JADE Un comportamiento nada deseable public class OverbearingBehaviour extends Behaviour { public void action() { while (true) { // do something } } public boolean done() { return true; } } Construcción de Agentes Software con JAVA + JADE Comportamientos en JADE Organización de las clases para comportamientos Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE El ACL FIPA I La interoperabilidad se consigue mediante un lenguaje de comunicación de agentes I I I I bien definido sin ambigüedades con un aparato formal sólido La base de un ACL está compuesta por los actos comunicativos Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Actos comunicativos I Cada uno de las performativas FIPA está definida mediante I I I I I el resumen en donde se explica resumido el significado del mensaje el contenido del mensaje en donde se detalla qué tipo de contenido debe llevar la descripción que es una explicación detallada del acto comnicativo el modelo formal que es una descripción en SL (Semantic Language) un ejemplo de mensaje con el acto comunicativo Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Lista de performativas accept-proposal cancel confirm failure inform-if not-understood propose query-if refuse request request-whenever agree call-for-proposal disconfirm inform inform-ref propagate proxy query-ref reject-proposal request-when subscribe Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Modelo formal de mensajes ACL I Para la semántica de los mensajes, haremos uso de tres elementos de los agentes (sea i un agente y p una proposición) I I I B para belief: Bi p significa que el agente i cree p U para uncertainty: Ui p significa que el agente i manifiesta cierta incertidumbre sobre p pero cree que es más probable que ¬p C para choice: Ci p quiere decir que el agente i en este instante desea que p se cumpla Como se puede comprobar son actitudes mentales. Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Más sobre el modelo formal de mensajes ACL Nuevos predicados, como son Feasible, Done y Agent: I Feasible(a, p) significa que a puede ejecutarse y que si se ejecuta, entonces p se hará cierto inmediatamente después. I Done(a, p) significa que a se ejectó y que p se hizo cierto justamente después. I Agent(i, a) significa que el agente i es el único que bien ejecutó, está ejecutando o ejecutará las acciones que aparecen en a. I Single(a) significa que la acción a no es una secuencia. Cualquier acción individual es simple. El acto compuesto a; b no es simple. La acción a|b es simple si lo son a y b. Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Objetivo persistente y elementos asociados a un AC Un agente i tiene un objetivo persistente p si i tiene a p como objetivo y su compromo con él es del tipo single minded. I Una intención es entonces un objetivo persistente que obliga al agente a actuar. I Denotamos con PGi p que el agente i tiene a p como objetivo persistente y con Ii p que el agente i se dispone a cumplir p. Un acto comunicativo lleva asociados dos componentes importantes 1. el efecto racional (RE) 2. las precondiciones para la realización (FP) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Abreviaciones, como aparecen en el documento I Feasible(a) ≡ Feasible(a, true) I Done(a) ≡ Done(a, true) I Possible(φ) ≡ (∃a)Feasible(a, φ) I Bifi φ ≡ Bi φ ∨ Bi ¬φ (es decir, que el agente i o bien cree φ o bien cree ¬φ) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA Notación para la definición de un AC Un modelo de acto comunicativo (CA) se representará como sigue: < i, act(j, C ) > , FP : φ1 RE : φ2 en donde i es el agente que ejecuta el CA, j es el receptor, act es el nombre de la performativa, C se refiere al contenido del mensaje (i.e. relativo al dominio de aplicación) y φ1 y φ2 son proposiciones de la lógica. Obsérvese que el mensaje serı́a (act :sender i :receiver j :content C) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA El acto comunicativo inform Semántica informal I Un agente i es capaz de informar a un agente j de que una proposición p es verdad solo si i cree que p es verdad (i.e. Bi p) I El agente i usará inform solo si cree que j no conoce p o su negación (i cree que j cree la negación de p, i deberı́a mandarle un disconfirm, o un confirm si j no está seguro del valor de verdad de p) La formalización queda como sigue: < i, INFORM(j, φ) > FP : Bi φ ∧ ¬Bi (Bifj φ ∨ Uifj φ) RE : Bj φ Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA El acto comunicativo inform Ejemplo: el ajente i informa al j que (es verdad) está lloviendo hoy (inform :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "weather (today, raining)" :language Prolog) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA El acto comunicativo request Semántica informal I de entre las FP de la acción a, se cumplen las correspondientes a actitudes del agente i I el agente i cree que el agente j es el adecuado para ello, y que no tiene a la acción a como objetivo persistente (si ası́ fuera no habrı́a que hacer nada) Formalizado es: < i, REQUEST (j, a) > FP : FP(a)[i\j] ∧ Bi Agent(j, a) ∧ Bi ¬PGj Done(a) RE : Done(a) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Ejemplos de definición de la semántica de actos comunicativos FIPA El acto comunicativo request Ejemplo: el ajente i pide al j que abra un fichero (request :sender (agent-identifier :name i) :receiver (set (agent-identifier :name j)) :content "open \"db.txt\" for input" :language vb) Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE El ACL estándar de FIPA en JADE Ideas principales: I La clase jade.lang.acl.ACLMessage es la base para composición de mensajes (métodos set y get para todos los parámetros de un mensaje FIPA) I Los métodos Agent.send(...), Agent.receive(...) y Agent.blockingReceive() para envı́o y recepción I La clase jade.lang.acl.MessageTemplate es útil para hacer matching de mensajes Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Envı́o de mensajes en JADE Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Envı́o de mensajes en JADE (y II) ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.addReceiver(new AID(‘‘Peter’’, AID.ISLOCALNAME)); msg.setLanguage(‘‘English’’); msg.setOntology(‘‘Weather-forecast-ontology’’); msg.setContent(‘‘Today it s raining’’ ); send(msg); Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Recepción de mensajes en JADE class OfferRequestsServer extends CyclicBehaviour { public void action() { ACLMessage msg = myAgent.receive(); if (msg != null) { // Message received. Process it String title = msg.getContent(); ACLMessage reply = msg.createReply(); Integer price = (Integer) catalogue.get(title); if (price != null) { // The requested book is available for sale. // Reply with the price reply.setPerformative(ACLMessage.PROPOSE); reply.setContent(String.valueOf(price.intValue())); } else { // The requested book is NOT available for sale. reply.setPerformative(ACLMessage.REFUSE); reply.setContent( not-available ); } myAgent.send(reply); } } } Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Una conversación compleja class RequestPerformer extends Behaviour { private AID bestSeller; private int bestPrice; private int repliesCnt = 0; private MessageTemplate mt; private int step = 0; public void action() { switch (step) { case 0: // Send the cfp to all sellers ACLMessage cfp = new ACLMessage(ACLMessage.CFP); for (int i = 0; i < sellerAgents.length; ++i) { cfp.addReceiver(sellerAgents[i]); } cfp.setContent(targetBookTitle); cfp.setConversationId(‘‘book-trade’’); cfp.setReplyWith(‘‘cfp’’ + System.currentTimeMillis()); // Unique value myAgent.send(cfp); Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Una conversación compleja mt = MessageTemplate.and(MessageTemplate.MatchConversationId(‘‘book-trade’’), MessageTemplate.MatchInReplyTo(cfp.getReplyWith())); step = 1; break; case 1: // Receive all proposals/refusals from seller agents ACLMessage reply = myAgent.receive(mt); if (reply != null) { // Reply received if (reply.getPerformative() == ACLMessage.PROPOSE) { int price = Integer.parseInt(reply.getContent()); if (bestSeller == null || price < bestPrice) { bestPrice = price; bestSeller = reply.getSender(); } } repliesCnt++; if (repliesCnt >= sellerAgents.length) { // We received all replies step = 2; } } else { block(); } break; Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Una conversación compleja case 2: // Send the purchase order to the seller // that provided the best offer ACLMessage order = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL); order.addReceiver(bestSeller); order.setContent(targetBookTitle); order.setConversationId(‘‘book-trade’’); order.setReplyWith(‘‘order + System.currentTimeMillis()); myAgent.send(order); mt = MessageTemplate.and(MessageTemplate.MatchConversationId(‘‘book-trade’’), MessageTemplate.MatchInReplyTo(order.getReplyWith())); step = 3; break; Construcción de Agentes Software con JAVA + JADE Comunicación entre agentes con JADE Tratamiento de comunicacion mediante ACL en JADE Una conversación compleja case 3: // Receive the purchase order reply reply = myAgent.receive(mt); if (reply != null) { // Purchase order reply received if (reply.getPerformative() == ACLMessage.INFORM) { // Purchase successful. We can terminate System.out.println(targetBookTitle + ‘‘ successfully purchased.’’); System.out.println(‘‘Price = ‘‘ + bestPrice); myAgent.doDelete(); } step = 4; } else { block(); } break; } } public boolean done() { return ((step == 2 && bestSeller == null) || step == 4); } } Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE Recomendaciones FIPA para PIs Protocolos de interacción Los siguientes son estándares: I FIPA Request Interaction Protocol Specification I FIPA Query Interaction Protocol Specification I FIPA Request When Interaction Protocol Specification I FIPA Contract Net Interaction Protocol Specification I FIPA Iterated Contract Net Interaction Protocol Specification I FIPA Brokering Interaction Protocol Specification I FIPA Recruiting Interaction Protocol Specification I FIPA Subscribe Interaction Protocol Specification I FIPA Propose Interaction Protocol Specification y las subastas alemana e inglesa mantienen el estatus de experimental I FIPA English Auction Interaction Protocol Specification I FIPA Dutch Auction Interaction Protocol Specification Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-request El protocolo fipa-request permite a un agente pedir a otro que realice una determinada acción. Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-query El protocolo fipa-query es similar al anterior solo que la acción a ejecutar es de un tipo concreto: inform para informar sobre algo. Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-request-when Es posible indicar a un agente que ejecute una acción de manera diferida, cuando una determinada precondición se haga cierta. Para eso tenemos el protocolo de interacción fipa-request-when Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-contract-net El fipa-contract-net está inspirado en la propuesta de Smith solo que debido a la autonomı́a hay que incluir mensajes para confirmación y rechazo. Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-contract-net (y II) I Inicialmente, el manager, con el rol FIPA de iniciador, genera m mensajes del tipo cfp (call for proposal) y queda a la espera durante un determinado tiempo, después del cual no recibirá más mensajes (un total de n recibidos) I Sea i el número de mensajes de tipo refuse, Tendremos entonces j = n − i mensajes del tipo propose I Para cada uno de los j mensajes, enviar posteriormente bien un accept-proposal o un reject-proposal I Se informa del resultado con un failure, con un inform sin resultado o con el mismo acompañado del resultado. Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-iterated-contract-net I ligera variación del fipa-contract-net que permite el número de rondas que sea necesario I tiene el propósito para el iniciador de la interacción de conseguir mejores ofertas de los interlocutores mediante argumentación o crı́tica de las ofertas anteriores Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-iterated-contract-net (y II) I Inicialmente, el agente con el rol de iniciador de la conversación genera m mensajes cfp I Después de un deadline de espera, el iniciador recoge digamos n ofertas I sean un total de j las que rechazan realizar la tarea mediante refuse I Tenemos entonces k = n − j ofertas de agentes que están dispuestos a realizar la tarea con prospose I Si la iteración no es la última, de entre el total de k ofertas recibidas, se rechazarán algunas directamente, k − l, y se aceptarán otras tantas l. I De entre las aceptadas, se elabora una contraoferta para cada agente y se envuelve en un nuevo cfp Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-brokering I Tiene como propósito permitir interaccionar con otros agentes a través de un mediador (el broker) I proxy es una macro (incluye otro acto comunicativo que el broker debe hacer llegar al seleccionado o seleccionados) I El broker devuelve los resultados mediante reply-message-sub-protocol (i.e. un reply con la respuesta en el cuerpo del mensaje) Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-brokering (y II) Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-recruiting I Tiene como propósito reclutar agentes para interaccionar con ellos posteriormente I Usado en entornos basados en mediadores I Se diferencia del anterior en que ya no es el broker el que interactúa con los seleccionados, sino el receptro designado Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-recruiting (y II) Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-subscribe De utilidad para subscripción a un servicio de notificación de eventos. El agente participante se compromete (mediante la emisión de un agree) a informar mediante inform cada vez que el evento se produzca Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-propose El agente iniciador propone al otro agente particante, que lo ha de supervisar, el realizar una acción Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE El PI fipa-english-auction El iniciador ofrece un precio. Si ningún posible comprador realiza una oferta, se vuelve a ofrecer otro precio. Se selecciona el mejor de entre los participantes que emiten un propose. Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE Protocolos de Interacción en JADE I FIPA define protocolos de interacción estándares I Filosofı́a de JADE: en lugar de programar el flujo del protocolo (i.e. la secuencia de intercambio de mensajes) programar qué hacer en cada situación (manejadores) I Basado en las clases jade.proto.AchieveREInitiator y jade.proto.AchieveREResponder (suficientes para implementar FIPA-Request, FIPA-query, FIPA-Request-When, FIPA-recruiting, FIPA-brokering y FIPA-subscribe) I Para el FIPA-contract-net disponemos de jade.proto.ContractNetInitiator y jade.proto.ContractNetResponder Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE Progamación de una interacción Si queremos programar una interacción simple (i.e. 1 a 1), como por ejemplo fipa-request, echamos mano del estándar para el protocolo de interacción Para programar el iniciador, nos fijamos en los mensajes entrantes y análogamente para el responder Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE Progamación de una interacción (y II) Nos vamos al javadoc de jade.proto.SimpleAchieveREInitiator Construcción de Agentes Software con JAVA + JADE Protocolos de interaccı́on FIPA en JADE Progamación de una interacción (y III) Nos vamos al javadoc de jade.proto.SimpleAchieveREResponder Construcción de Agentes Software con JAVA + JADE Manejo de Ontologı́as en JADE Ontologı́as básicas en JADE I JADE permite el manejo de ontologı́as para I I 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) I + Conceptualmente sencillo I - Muy engorroso de manejar (definición tediosa de conceptos) I Solución: podemos utilizar un sistema gestor de ontologı́as como Protégé2000 para el modelado y generación de código Java-JADE Construcción de Agentes Software con JAVA + JADE Manejo de Ontologı́as en JADE Manejo de ontologı́as desde Protégé2000 Los pasos a seguir en la programación de un sistema JADE sencillo, usando Protégé podrı́an ser los siguientes: 1. Conceptualización del problema I I I Definición de los elementos a participar en la ontologı́a Definición de los agentes Definición de las interacciones que tendrán lugar entre los agentes (comprobando que la ontologı́a sea adecuada para todos los casos) 2. Diseño de la ontologı́a con Protégé 3. Programación de los protocolos de interacción con JADE (i.e. en forma de comportamientos), integrando el código generado por Protégé 4. Programación de los agentes 5. Y ya está Construcción de Agentes Software con JAVA + JADE Conclusiones Conclusiones Para dominar JADE, tenemos que conocer I Agentes y behaviours (mecanismos básicos de scheduling) I Mensajes y plantillas para el matching I Protocolos de interacción y su programación mediante clases Initiator y Responder I Manejo de Ontologı́as con algún programa de apoyo (e.g. Protégé) Manos a la obra... Construcción de Agentes Software con JAVA + JADE Conclusiones Agradecimientos Algunas de las figuras usadas en esta presentación se han obtenido directamente del manual de Jade. Agradecemos a Fabio Bellifemine y a su equipo su expresa colaboración.