View
11
Download
0
Embed Size (px)
DESCRIPTION
Acl Message
Citation preview
1
Área de la Energía, las Industrias y los Recursos Naturales No Renovables
_____________________________________________________________________
CARRERA DE INGENIERÍA EN SISTEMAS MÓDULO: 10 mo ¨A¨
FECHA: 07 de Abril del 2015
ALUMNO: Diego Cale
1. TEMA
ACL Message
2. DESCRIPCIÓN:
La característica fundamental de los sistemas multiagente es que los agentes individuales
se comunican e interactúan. Esto se logra mediante el intercambio de mensajes, para
ello, es crucial que los agentes están de acuerdo sobre el formato y la semántica de estos
mensajes.
Jade sigue los estándares FIPA para que idealmente agentes Jade podrían interactuar
con agentes escritos en otros idiomas y que se ejecutan en otras plataformas.
Estructura de un mensaje JADE
La estructura más utilizada es:
Performativo - FIPA mensaje tipo (INFORM, QUERY, PROPOSE, ...) Direccionamiento
o Receptor o Remitente (inicializado automáticamente)
Contenido - Este es el contenido principal del mensaje ConversationID - Se utiliza para vincular mensajes en misma conversación Idioma - Especifica qué idioma se utiliza en el contenido Ontología - Especifica que la ontología se utiliza en el contenido Protocol - Indica el protocolo ReplyWith - Otro campo para ayudar a distinguir respuestas InReplyTo - remitente utiliza para ayudar a distinguir respuestas ReplyBy - Se utiliza para establecer un límite de tiempo para una respuesta
UNIVERSIDAD NACIONAL
DE LOJA
PFM-CIS-UNL
2
Envío/recepción de mensajes
El intercambio de mensajes entre agentes en JADE se realiza mediante mensajes
FIPA-ACL
Mecanismo: paso asíncrono de mensajes
Cada agente tiene una cola de mensajes entrantes
La lectura efectiva de los mensajes es a voluntad del agente
Un agente puede:
o Leer el primer mensaje en la cola
o Leer el primer mensaje que satisfaga un requisito
La cola de mensajes es única para cada agente y, por lo tanto, es compartida por
todos los comportamientos
Cada vez que se coloca un mensaje en la cola el agente receptor es avisado
Un comportamiento puede ser bloqueado en espera de la recepción de un mensaje:
sincronización
Los mensajes intercambiados por agentes son instancias de la clase
jade.lang.acl.ACLMessage
Métodos de ACLMessage Métodos más importantes de la clase ACLMessage.
setPerformative(int): toma como parámetro una constante representativa de un tipo de acción performativa y la establece como performativa del mensaje. Los posibles actos comunicativos son los que hemos visto antes y las constantes que los representan se pueden ver en la API. Por ejemplo, para hacer que el mensaje msg sea de tipo agree bastará con escribir: msg.setPerformative(ACLMessage.AGREE);
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
El resto de métodos get/set son similares, simplemente varía el tipo del valor introducido o devuelto. Por ejemplo, getSender() devolverá un AID mientras que getLanguage() devolverá una cadena. El Performative puede indicarse directamente pasando el valor al constructor de ACLMessage, lo cuál es recomendable porque todos los mensajes deben contener al menos el Performative.
3
Selección de mensajes Para seleccionar los mensajes que un agente desea recibir podemos utilizar la clase MessageTemplate. Esta clase permite definir filtros para cada atributo del mensaje ACLMessage y se utiliza como parámetro en los métodos receive y blockingReceive. En esta clase se definen un conjunto de métodos estáticos que nos devuelven como resultado un objeto de tipo MessageTemplate. Las diferentes opciones de filtrado son:
MatchPerformative( performative ) donde performativepuede 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 ontologia 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.
Además 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.
4
3. EJEMPLO
Comunicación SMA
public class Template extends Agent { MessageTemplate mt1 = MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.INFORM), MessageTemplate.MatchSender(new AID("Agente", AID.ISLOCALNAME))); protected void setup() { ACLMessage msg = new ACLMessage(ACLMessage.INFORM); msg.setContent("Ping"); for (int i = 1; i <= 2; i++) { msg.addReceiver(new AID("Agente" + i, AID.ISLOCALNAME)); } send(msg); // Set-up Behaviour 1 addBehaviour(new CyclicBehaviour(this) { public void action() { System.out.print("Behaviour ONE: "); ACLMessage msg = receive(mt1); if (msg != null) { System.out.println("gets " + msg.getPerformative() + " from " + msg.getSender().getLocalName() + "=" + msg.getContent()); } else { System.out.println("gets NULL"); } block(); } }); // Set-up Behaviour 2 addBehaviour(new CyclicBehaviour(this) { public void action() { System.out.print("Behaviour TWO: "); ACLMessage msg = receive(); if (msg != null) { System.out.println("gets " + msg.getPerformative() + " from " + msg.getSender().getLocalName() + "=" + msg.getContent()); } else { System.out.println("gets NULL"); } block(); } }); } }
5
4. BIBLIOGRAFÍA
Specifications, F. I. P. A. (2002). FIPA ACL Message Structure Specification.version G,
December.
Fip, A. (2002). FIPA ACL message structure specification (SC00061G). FIPA TC
communication.