Sma jade
Transcript of Sma jade
![Page 1: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/1.jpg)
PROGRAMACIÓN JADE:COMUNICACIÓN
Miguel Casas del RíoMaite Molinos Iglesias
Belén Pereira García
![Page 2: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/2.jpg)
Introducción.> FIPA-ACL.
Envío/Recepción de mensajes.> ACL-Message.> Intercambio de mensajes.
Selección de mensajes. Páginas amarillas (DF Agent). Páginas blancas (AMS Agent).
Tabla de Contenidos
![Page 3: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/3.jpg)
La comunicación determina el comportamiento social de los agentes.
Los agentes intercambian datos y conocimiento.
Para ello, usan un lenguaje de comunicación (ACL):◦ KQML◦ FIPA-ACL (utilizado por Jade)
Introducción
![Page 4: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/4.jpg)
Los mensajes FIPA-ACL contiene:◦ La directiva de comunicación (performative).◦ Argumentos◦ Contenido semántico de los argumentos:
Construidos a partir de una ontología: vocabulario común a los agentes.
Todos los mensajes deben contener al menos la performativa.
FIPA-ACL
![Page 5: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/5.jpg)
Performative:◦ Accept-proposal◦ Agree◦ Cancel◦ Cfp◦ Confirm◦ Disconfirm◦ Inform◦ Propose◦ Query-if◦ Query-ref◦ Request◦ …
FIPA-ACL
![Page 6: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/6.jpg)
Argumentos:◦ Sender◦ Receiver◦ Reply-to◦ Content◦ Language◦ Encoding◦ Ontology◦ Protocol◦ ….
FIPA-ACL
![Page 7: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/7.jpg)
Paso asíncrono de mensajes Cada agente tiene una cola de mensajes
única donde se colocan los mensajes enviados por otros agentes.
La lectura de los mensajes es a voluntad del agente:◦ Leer el primer mensaje de la cola.◦ Leer el primer mensaje que satisfaga un requisito
Envío/recepción de mensajes
![Page 8: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/8.jpg)
Envío/recepción de mensajes
![Page 9: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/9.jpg)
Cada vez que se coloca un mensaje en la cola el agente receptor es avisado.
La cola de mensajes es compartida por todos los comportamientos.
Un comportamiento puede ser bloqueado en espera de la recepción de un mensaje: sincronización.
Envío/recepción de mensajes
![Page 10: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/10.jpg)
Los mensajes son instancias de la clase jade.lang.acl.ACLMessage setPerformative(int): toma como parámetro una constante
representativa de un tipo de acción performativa y la establece como performativa del mensaje.
getPerformative(): devuelve un entero equivalente a la constante que representa a la performativa del mensaje.
createReply(): crea un mensaje de respuesta para el mensaje sobre el que es aplicado, poniendo los valores oportunos en campos como receiver, conversation-id, etc.
addReceiver(AID): toma como parámetro un AID y lo añade a la lista de receptores.
getAllReceiver(): devuelve un iterador sobre la lista de receptores.
setContent(String): recibe como parámetro una cadena y la pone como contenido del mensaje
getContent(): devuelve una cadena con el contenido del mensaje
ACLMessage
![Page 11: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/11.jpg)
Pasos:1. Crear un objeto ACLMessage.2. Usar métodos de ACLMessage para rellenar
los campos necesarios.3. Llamar al método send() de la clase Agent. El
método send() recibe como parámetro un ACLMessage, añade el valor oportuno al campo sender (remitente) y envía el mensaje a los destinatarios
Enviar un mensaje
![Page 12: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/12.jpg)
Ejemplo:
ACLMessage mensaje = new ACLMessage(ACLMessage.INFORM);mensaje.setLanguage("Español"); mensaje.addReceiver(id); mensaje.setContent("Hola Receptor"); send(mensaje);
Mensaje enviado:
(INFORM :sender ( agent-identifier :name emisor@luna:1099/JADE :addresses (sequence http://luna:7778/acc ))
:receiver (set ( agent-identifier :name receptor@luna:1099/JADE ) ) :content "Hola Receptor" :language Español )
Enviar un mensaje
![Page 13: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/13.jpg)
Se usará el método receive() de la clase Agent.
receive(): obtiene el primer mensaje de la cola de mensajes y lo devuelve (devuelve null si la cola está vacía).
Recibir un mensaje
![Page 14: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/14.jpg)
Ejemplo:ACLMessage mensaje = receive();
Mensaje recibido:emisor1: Preparandose para enviar un mensaje a receptor emisor1: Enviando hola a receptor receptor: acaba de recibir el siguiente mensaje: (REQUEST :sender ( agent-identifier :name emisor1@luna:1099/JADE :addresses
(sequence http://luna:7778/acc )) :receiver (set ( agent-identifier :name receptor@luna:1099/JADE ) ) :content "Hola, que tal receptor ?" :language Español )
Recibir un mensaje
![Page 15: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/15.jpg)
Clase que representa al agente Emisor.◦ Se encarga de emitir el mensaje "Hola que tal
receptor?".
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 16: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/16.jpg)
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 17: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/17.jpg)
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 18: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/18.jpg)
Clase que representa al agente Receptor que recibe el mensaje del agente Emisor.
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 19: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/19.jpg)
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 20: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/20.jpg)
Nota importante: Si hubiésemos lanzado primero el emisor no se habría obtenido ninguna salida porque al no estar registrado el receptor del mensaje en el AMS, este enviaría un mensaje FAILURE al agente emisor.
Problema: si el Receptor no recibe ningún mensaje, éste está ejecutándose continuamente, consumiendo CPU.
Posibles soluciones:
Solución 1:
Usar el método block() de la clase Behaviour.
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 21: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/21.jpg)
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 22: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/22.jpg)
Solución 2: Usar el método blockingReceive() de Agent en lugar del método receive().
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 23: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/23.jpg)
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 24: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/24.jpg)
Diferencia entre las dos soluciones: block():
◦ Solo bloquea un comportamiento del agente hasta que llegue un mensaje.
◦ El bloqueo no se produce hasta que termina el comportamiento sobre el que se aplica.
blockingReceive(): ◦ Bloquea instantáneamente todos los
comportamientos del agente hasta que llegue un mensaje.
◦ Además devuelve el mensaje recibido que liberó el bloqueo.
Ejemplo de intercambio de mensajes entre dos agentes:
![Page 25: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/25.jpg)
Existen dos formas:
Indicando como receptor al emisor del mensaje anterior.
Haciendo uso de createReply().
(En ambos casos se tendrá que modificar el método action() )
Responder a mensajes
![Page 26: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/26.jpg)
Método action() de la clase Emisor:
Indicando como receptor al emisor del mensaje anterior.
![Page 27: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/27.jpg)
Método action() de la clase Receptor:
Indicando como receptor al emisor del mensaje anterior.
![Page 28: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/28.jpg)
Método action() de la clase Receptor:
La clase Emisor no varía.
Haciendo uso de createReply().
![Page 29: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/29.jpg)
Para seleccionar los mensajes que un agente desea recibir utilizamos la clase MessageTemplate.◦ Permite definir filtros para cada atributo del
mensaje ACLMessage.◦ Se utiliza como parámetro en los métodos receive
y blockingReceive.◦ Se definen un conjunto de métodos estáticos que
nos devuelven como resultado un objeto de tipo MessageTemplate
Selección de mensajes
![Page 30: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/30.jpg)
Diferentes opciones de filtrado:MatchPerformative(performative) donde performative puede ser:
ACLMessage.INFORM ACLMessage.PROPOSE ACLMessage.QUERY_REF ...
MatchSender(AID) MatchConversationID(String): Permite dedicar un comportamiento a
gestionar una conversación/negociación. and(Template1, Template2): realiza un and lógico entre los dos filtros. or (Template1, Template2): realiza un or lógico entre los dos filtros. not(Template): invierte el filtro. MatchOntology(String): devuelve un filtro según el nombre de la
ontología que le pasemos como parámetro. MatchProtocol(String): devuelve un filtro según el nombre del protocolo
que le pasamos. MatchLanguage(String): devuelve un filtro según el lenguaje introducido. MatchContent(String): crea una plantilla según el contenido del mensaje. MatchReplyWith(String): devuelve un filtro según el campo replywith.
Selección de mensajes
![Page 31: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/31.jpg)
Existe el método match(ACLMessage) que devuelve verdadero si el mensaje que le pasamos como parámetro cumple el filtro definido en el objeto MessageTemplate.
Ejemplo anterior:◦ El agente Receptor podría solo estar interesado
en recibir mensajes del tipo REQUEST, en Español y procedentes exclusivamente del agente "emisor“.
Selección de mensajes
![Page 32: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/32.jpg)
Método Comportamiento() de la clase FiltroReceptor.
Selección de mensajes
![Page 33: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/33.jpg)
Método action().
Selección de mensajes
![Page 34: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/34.jpg)
Permite a los agentes publicar los servicios que proporcionan, para que otros agentes puedan acceder a ellos.
Un agente puede interactuar con el DF intercambiando mensajes ACL usando un lenguaje de contenido apropiado (SL0) y una ontología apropiada (FIPA-agent-management).
Páginas Amarillas (DF Agent)
![Page 35: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/35.jpg)
Publicar servicios:◦ El agente debe proporcionar al DF una
descripción, incluyendo su AID, los protocolos, lenguajes y ontologías que el resto de agentes necesitan conocer para interactuar con él así como la lista de servicios publicados.
◦ Para cada servicio se proporciona una descripción, incluyendo: tipo de servicio, nombre, protocolos, lenguajes y ontologías; y una serie de propiedades específicas del servicio.
◦ Antes de finalizar su ejecución el agente debe eliminar del DF sus servicios.
Páginas Amarillas (DF Agent)
![Page 36: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/36.jpg)
Para facilitar el trabajo JADE proporciona la clase jade.domain.DFService en la que nos podemos encontrar los siguientes métodos:
◦ static DFAgentDescription register: registra los servicios de un agente en el DF.
◦ static void deregister: elimina del registro del DF los servicios del agente.
◦ Los servicios se definen con los siguientes métodos de la clase ServiceDescription:
void setName: modifica el nombre del servicio. void setOwnership: modifica el propietario del servicio. void setType: modifica el tipo de servicio. void addLanguages: añade lenguaje del servicio. void addOntologies: añade ontología del servicio. void addProtocols: añade protocolo del servicio. void addProperties: añade propiedades del servicio.
◦ La descripcion del agente se modifica con los siguientes métodos de la clase DFAgentDescription:
void setName: modifica el AID de la descripción del agente. void addServices: añade el servicio pasado por parámetro a la descripción del agente. void removeServices: elimina el servicio pasado por parámetro a la descripción del agente. void addLanguages: añade lenguajes que el agente entiende. void addOntologies: añade ontologías que el agente entiende. void addProtocols: añade protocolos que el agente entiende.
Páginas Amarillas (DF Agent)
![Page 37: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/37.jpg)
Ejemplo: clase Ofrece y clase Pide
Clase Ofrece: representa a uno de los agentes que ofrece servicios.
Páginas Amarillas (DF Agent)
![Page 38: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/38.jpg)
Ejemplo: clase Ofrece y clase Pide
Clase Ofrece: representa a uno de los agentes que ofrece servicios.
Páginas Amarillas (DF Agent)
Método takeDown()
![Page 39: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/39.jpg)
Páginas Amarillas (DF Agent)• Ejemplo: clase Ofrece y clase Pide
Clase Pide: representa a uno de los agentes que ofrece servicios.
![Page 40: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/40.jpg)
…
![Page 41: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/41.jpg)
Busqueda de servicios:◦ Un agente que busca servicios debe proporcionar
una plantilla de descripción de la clase DFAgentDescription.
◦ El resultado de la búsqueda es la lista de todas las descripciones que encajan con la plantilla proporcionada.
◦ Para realizar las acciones anteriores jade proporciona diversos métodos de búsqueda que se encuentran en la clase DFService.
Páginas Amarillas (DF Agent)
![Page 42: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/42.jpg)
Garantiza que cada agente en la plataforma tenga un único nombre.
Encargado de proporcionar los servicios de páginas blancas y ciclo de vida, y de mantener el directorio de los identificadores de agentes (AID: Agent Identifier) y su estado.
Cada agente debe registrarse con el AMS para obtener un AID válido (en JADE la realizan los agentes de manera automática en el agente AMS).
Páginas Blancas (AMS Agent)
![Page 43: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/43.jpg)
Para acceder a los servicios del agente AMS hay que importar la clase jade.domain.AMSService. Esta clase contiene los siguientes métodos:◦ static void register: registra al agente en el AMS. Tanto
esta operación como la operación deregister se realizan automáticamente en JADE cuando se ejecutan los métodos setup() y takeDown() respectivamente, por lo tanto no suelen ser usados normalmente.
◦ static void deregister: elimina el registro del agente en el AMS.
◦ static void modify: modifica los datos del agente en el AMS.
◦ static AMSAgentDescription[] search: devuelve la descripción de los agentes registrados en el agente AMS.
Páginas Blancas (AMS Agent)
![Page 44: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/44.jpg)
Páginas Blancas (AMS Agent)
![Page 45: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/45.jpg)
Programación Jade (Wikispaces)◦ http://programacionjade.wikispaces.com/Comunic
aci%C3%B3n
Bibliografía y Referencias
![Page 46: Sma jade](https://reader036.fdocumento.com/reader036/viewer/2022062514/55855a74d8b42a47518b51a5/html5/thumbnails/46.jpg)
FIN