Sma jade

46
PROGRAMACIÓN JADE: COMUNICACIÓN Miguel Casas del Río Maite Molinos Iglesias Belén Pereira García

Transcript of Sma jade

Page 1: Sma jade

PROGRAMACIÓN JADE:COMUNICACIÓN

Miguel Casas del RíoMaite Molinos Iglesias

Belén Pereira García

Page 2: Sma jade

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

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

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

Performative:◦ Accept-proposal◦ Agree◦ Cancel◦ Cfp◦ Confirm◦ Disconfirm◦ Inform◦ Propose◦ Query-if◦ Query-ref◦ Request◦ …

FIPA-ACL

Page 6: Sma jade

Argumentos:◦ Sender◦ Receiver◦ Reply-to◦ Content◦ Language◦ Encoding◦ Ontology◦ Protocol◦ ….

FIPA-ACL

Page 7: Sma jade

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

Envío/recepción de mensajes

Page 9: Sma jade

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

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

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

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

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

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

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

Ejemplo de intercambio de mensajes entre dos agentes:

Page 17: Sma jade

Ejemplo de intercambio de mensajes entre dos agentes:

Page 18: Sma jade

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

Ejemplo de intercambio de mensajes entre dos agentes:

Page 20: Sma jade

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

Ejemplo de intercambio de mensajes entre dos agentes:

Page 22: Sma jade

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

Ejemplo de intercambio de mensajes entre dos agentes:

Page 24: Sma jade

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

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

Método action() de la clase Emisor:

Indicando como receptor al emisor del mensaje anterior.

Page 27: Sma jade

Método action() de la clase Receptor:

Indicando como receptor al emisor del mensaje anterior.

Page 28: Sma jade

Método action() de la clase Receptor:

La clase Emisor no varía.

Haciendo uso de createReply().

Page 29: Sma jade

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

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

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

Método Comportamiento() de la clase FiltroReceptor.

Selección de mensajes

Page 33: Sma jade

Método action().

Selección de mensajes

Page 34: Sma jade

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

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

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

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

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

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

Page 41: Sma jade

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

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

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

Páginas Blancas (AMS Agent)

Page 45: Sma jade

Programación Jade (Wikispaces)◦ http://programacionjade.wikispaces.com/Comunic

aci%C3%B3n

Bibliografía y Referencias

Page 46: Sma jade

FIN