Denís Feijoo FormosoGiovanni Otero PaleoCOMUNICACIÓN
1.- FundamentosLa comunicación entre agentes es fundamental para poder conseguir la potencia propia de los sistemas multiagente.Determina el comportamiento social de los agentes.Para la comunicación se necesita el mismo lenguaje.Un lenguaje define los tipos de mensaje: informar, solicitar, preguntar…Las conversaciones entre agentes se rigen por una serie de protocolos de interacción.El lenguaje de comunicación de agentes (ACL) permitirá transmitir una serie de conocimiento que vendrá expresado en un lenguaje de contenido. Los términos del lenguaje de contenido que representen conocimiento pertenecerán a un vocabulario común a los distintos agentes se llama ontología.
1.- FundamentosEn JADE el lenguaje de comunicación es FIPA-ACLUn mensaje FIPA-ACL puede contener los siguientes camposPerfomative: tipo de acto comunicativo(acción que realiza el mensaje). Es el único campo obligatorio y puede tomar los siguientes valores:accept-proposal: aceptar una propuesta recibida previamente.agree: estar de acuerdo en realizar alguna acción.cancel: cancelar alguna acción pedida previamente.cfp: solicitar propuestas para realizar una acción dada.confirm: informar a un receptor que una proposición es cierta.disconfirm: informar a un receptor que una proposición es falsa.failure: informar a otro agente que se intentó una acción pero falló.inform: informar a un receptor que una proposición es cierta.inform-if: si el agente que recibe la acción cree que la sentencia es verdadera informará de manera afirmativa, sino indicará que es falsa.
1.- Fundamentosinform-ref: permite que el emisor informe al receptor de un objeto que cree que corresponde a un descriptor, como puede ser un nombre u otra descripción que lo identifique.not-understood: informar a un receptor que el emisor no entendió el mensaje.propagate: el receptor trata el mensaje como si fuese dirigido directamente a él, y debe identificar los agentes en este descriptor y enviarles el mensaje a ellos.propose: enviar una propuesta para realizar una cierta acciónproxy: el recptor debe seleccionar agentes objetivo denotados por una descripción dada, y enviarles un mensaje embebido.query-if: preguntarle a otro agente si una determinada proposición es cierta.query-ref: preguntar a otro agente por el objeto referenciado en una expresión.refuse: rechazar realizar una acción.reject-proposal: rechazar una propuesta durante una negociación.request: soliciar a un receptor que realice alguna acción.request-when: soliciar al receptor que realice alguna acción cuando una proposición dada sea cierta.request-whenever: solicita al receptor que realice alguna acción cada vez que una proposición dada sea cierta.subscribe: una intención persistente de notificar al emisor de un determinado valor, y volver a notificarle cada vez que dicho valor cambie.
1.- Fundamentossender: AID del emisorreceiver: lista de AID’s de los receptoresreply-to: receptor de un mensaje reply.content: contenido del mensajelenguage: lenguaje en que se expresa el contenido.encoding: codificación del contenido.ontology: ontología usada para dar significado a los términos del contenidoprotocol: identificador del protocolo de interacción.conversation-id: identificador de la conversación. Esto es especialmente útil cuando un agente mantiene varias conversaciones a la vez.reply-with: indica una expresión que tendrá que ser usada por el agente que responda a dicho mensaje.in-reply-to: Hace referencia a que este mensaje es una respuesta a otro anterior.reply-by: Indica el tiempo en que el mensaje ha de ser respondido.
2.- Envío/recepción de mensajesEl 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 agenteUn agente puede:Leer el primer mensaje en la colaLeer el primer mensaje que satisfaga un requisitoLa cola de mensajes es única para cada agente y, por lo tanto, es compartida por todos los comportamientosCada vez que se coloca un mensaje en la cola el agente receptor es avisadoUn comportamiento puede ser bloqueado en espera de la recpción de un mensaje. SincronizaciónLos mensajes intercambiados por agentes son instancias de la clase jade.lang.acl.ACLMessage.
2.- Envío/recepción de mensajes
2.- Envío/recepción de mensajesMétodos de ACLMessage	Algunos de los métodos más importantes de la clase ACLMessage son: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 mensaja.createReply(): crea un mensaje de respuesta para el mensaje sobre el que es aplicado.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 mensajegetContent(): devuelve una cadena con el contenido del mensaje.
2.- Envío/recepción de mensajesPasos para enviar un mensajeCrear un objeto ACLMessageUsar los métodos de ACLMessage para rellenar los campos necesariosLlamar al método send() de la clas Agente. El método send() recibe como parámetro un ACLMessage, añadel el valor oportuno al campo sender(remitente) y envía el mensaje a los destinatariosRecibir un mensajeSe usará el método receive() de la clase Agent.El método receive() obtiene el primer mensaje de la cola de mensajes y lo devuelve(devuelve null si la cola está vacía)
3.-Selección de mensajesPara 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.
3.-Selección de mensajesLas diferentes opciones de filtrado son :MatchPerformative(performative) donde performative puede ser:ACLMessage.INFORMACLMessage.PROPOSEACLMessage.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.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.- Páginas amarillas (DF Agent)Permite a los agentes publicar los servicios que proporcionan, para que otros agentes puedan acceder a ellos.
4.- Páginas amarillas (DF Agent)El agente debe proporcionar al DF una descripción, incluyendo su AID(identificación), los protocolos, lenguajes y ontologías que el resto de agentes necesitan conocer para interactuar con él; y 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.
4.- Páginas amarillas (DF Agent)Para realizar las acciones señaladas anteriormente Jade proporciona estes métodos:static DFAgentDescription register: registra los servicios de un agente en el DF.staticvoid 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.
4.- Páginas amarillas (DF Agent)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.
4.- Páginas amarillas (DF Agent)Ejemplo
Dos agentes ofrecen servicios: 		Ofrece: servicio 1 y servicio 2.		Ofrece2: servicio 3.Pide busca un servicio de tipo 1 y  encuentra al agente ofrece que ofrece el servicio buscado. Si cambiamos el servicio buscado en servicio.setType("Tipo del servicio 3");  nos mostrará al agente Ofrece 2.
Lo más interesante de este ejemplo es ver como  se crea una descripción de agente y de servicio, y como se registra  y se busca en el DF, con Dfservice.register() y Dfservice.search()5.- Páginas Blancas (AMS Agent)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: AgentIdentifier) y su estado. Cada agente debe registrarse con el AMS para obtener un AID válido, esta operación en JADE la realizan los agentes de manera automática en el agente AMS por defecto.
5.- Páginas Blancas (AMS Agent)Para acceder a los servicios del agente AMS hay que importar la clase AMSService. Esta clase contiene los siguientes métodos:staticvoid 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.staticvoid deregister: elimina el registro del agente en el AMS.staticvoid modify: modifica los datos del agente en el AMS.staticAMSAgentDescription[] search: devuelve la descripción de los agentes registrados en el agente AMS.
5.- Páginas Blancas (AMS Agent)Ejemplo:PáginasBlancas, mostrará los servicios registrados actualmente en el AMS con su información.Lo más interesante es ver como funciona el AMSService.search(),  y ver como los agentes se registran automáticamente en el AMS.

Comunicación. sma1011_limia

  • 1.
    Denís Feijoo FormosoGiovanniOtero PaleoCOMUNICACIÓN
  • 2.
    1.- FundamentosLa comunicaciónentre agentes es fundamental para poder conseguir la potencia propia de los sistemas multiagente.Determina el comportamiento social de los agentes.Para la comunicación se necesita el mismo lenguaje.Un lenguaje define los tipos de mensaje: informar, solicitar, preguntar…Las conversaciones entre agentes se rigen por una serie de protocolos de interacción.El lenguaje de comunicación de agentes (ACL) permitirá transmitir una serie de conocimiento que vendrá expresado en un lenguaje de contenido. Los términos del lenguaje de contenido que representen conocimiento pertenecerán a un vocabulario común a los distintos agentes se llama ontología.
  • 3.
    1.- FundamentosEn JADEel lenguaje de comunicación es FIPA-ACLUn mensaje FIPA-ACL puede contener los siguientes camposPerfomative: tipo de acto comunicativo(acción que realiza el mensaje). Es el único campo obligatorio y puede tomar los siguientes valores:accept-proposal: aceptar una propuesta recibida previamente.agree: estar de acuerdo en realizar alguna acción.cancel: cancelar alguna acción pedida previamente.cfp: solicitar propuestas para realizar una acción dada.confirm: informar a un receptor que una proposición es cierta.disconfirm: informar a un receptor que una proposición es falsa.failure: informar a otro agente que se intentó una acción pero falló.inform: informar a un receptor que una proposición es cierta.inform-if: si el agente que recibe la acción cree que la sentencia es verdadera informará de manera afirmativa, sino indicará que es falsa.
  • 4.
    1.- Fundamentosinform-ref: permiteque el emisor informe al receptor de un objeto que cree que corresponde a un descriptor, como puede ser un nombre u otra descripción que lo identifique.not-understood: informar a un receptor que el emisor no entendió el mensaje.propagate: el receptor trata el mensaje como si fuese dirigido directamente a él, y debe identificar los agentes en este descriptor y enviarles el mensaje a ellos.propose: enviar una propuesta para realizar una cierta acciónproxy: el recptor debe seleccionar agentes objetivo denotados por una descripción dada, y enviarles un mensaje embebido.query-if: preguntarle a otro agente si una determinada proposición es cierta.query-ref: preguntar a otro agente por el objeto referenciado en una expresión.refuse: rechazar realizar una acción.reject-proposal: rechazar una propuesta durante una negociación.request: soliciar a un receptor que realice alguna acción.request-when: soliciar al receptor que realice alguna acción cuando una proposición dada sea cierta.request-whenever: solicita al receptor que realice alguna acción cada vez que una proposición dada sea cierta.subscribe: una intención persistente de notificar al emisor de un determinado valor, y volver a notificarle cada vez que dicho valor cambie.
  • 5.
    1.- Fundamentossender: AIDdel emisorreceiver: lista de AID’s de los receptoresreply-to: receptor de un mensaje reply.content: contenido del mensajelenguage: lenguaje en que se expresa el contenido.encoding: codificación del contenido.ontology: ontología usada para dar significado a los términos del contenidoprotocol: identificador del protocolo de interacción.conversation-id: identificador de la conversación. Esto es especialmente útil cuando un agente mantiene varias conversaciones a la vez.reply-with: indica una expresión que tendrá que ser usada por el agente que responda a dicho mensaje.in-reply-to: Hace referencia a que este mensaje es una respuesta a otro anterior.reply-by: Indica el tiempo en que el mensaje ha de ser respondido.
  • 6.
    2.- Envío/recepción demensajesEl 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 agenteUn agente puede:Leer el primer mensaje en la colaLeer el primer mensaje que satisfaga un requisitoLa cola de mensajes es única para cada agente y, por lo tanto, es compartida por todos los comportamientosCada vez que se coloca un mensaje en la cola el agente receptor es avisadoUn comportamiento puede ser bloqueado en espera de la recpción de un mensaje. SincronizaciónLos mensajes intercambiados por agentes son instancias de la clase jade.lang.acl.ACLMessage.
  • 7.
  • 8.
    2.- Envío/recepción demensajesMétodos de ACLMessage Algunos de los métodos más importantes de la clase ACLMessage son: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 mensaja.createReply(): crea un mensaje de respuesta para el mensaje sobre el que es aplicado.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 mensajegetContent(): devuelve una cadena con el contenido del mensaje.
  • 9.
    2.- Envío/recepción demensajesPasos para enviar un mensajeCrear un objeto ACLMessageUsar los métodos de ACLMessage para rellenar los campos necesariosLlamar al método send() de la clas Agente. El método send() recibe como parámetro un ACLMessage, añadel el valor oportuno al campo sender(remitente) y envía el mensaje a los destinatariosRecibir un mensajeSe usará el método receive() de la clase Agent.El método receive() obtiene el primer mensaje de la cola de mensajes y lo devuelve(devuelve null si la cola está vacía)
  • 10.
    3.-Selección de mensajesParaseleccionar 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.
  • 11.
    3.-Selección de mensajesLasdiferentes opciones de filtrado son :MatchPerformative(performative) donde performative puede ser:ACLMessage.INFORMACLMessage.PROPOSEACLMessage.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.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.
  • 12.
    4.- Páginas amarillas(DF Agent)Permite a los agentes publicar los servicios que proporcionan, para que otros agentes puedan acceder a ellos.
  • 13.
    4.- Páginas amarillas(DF Agent)El agente debe proporcionar al DF una descripción, incluyendo su AID(identificación), los protocolos, lenguajes y ontologías que el resto de agentes necesitan conocer para interactuar con él; y 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.
  • 14.
    4.- Páginas amarillas(DF Agent)Para realizar las acciones señaladas anteriormente Jade proporciona estes métodos:static DFAgentDescription register: registra los servicios de un agente en el DF.staticvoid 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.
  • 15.
    4.- Páginas amarillas(DF Agent)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.
  • 16.
    4.- Páginas amarillas(DF Agent)Ejemplo
  • 17.
    Dos agentes ofrecenservicios: Ofrece: servicio 1 y servicio 2. Ofrece2: servicio 3.Pide busca un servicio de tipo 1 y encuentra al agente ofrece que ofrece el servicio buscado. Si cambiamos el servicio buscado en servicio.setType("Tipo del servicio 3"); nos mostrará al agente Ofrece 2.
  • 18.
    Lo más interesantede este ejemplo es ver como se crea una descripción de agente y de servicio, y como se registra y se busca en el DF, con Dfservice.register() y Dfservice.search()5.- Páginas Blancas (AMS Agent)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: AgentIdentifier) y su estado. Cada agente debe registrarse con el AMS para obtener un AID válido, esta operación en JADE la realizan los agentes de manera automática en el agente AMS por defecto.
  • 19.
    5.- Páginas Blancas(AMS Agent)Para acceder a los servicios del agente AMS hay que importar la clase AMSService. Esta clase contiene los siguientes métodos:staticvoid 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.staticvoid deregister: elimina el registro del agente en el AMS.staticvoid modify: modifica los datos del agente en el AMS.staticAMSAgentDescription[] search: devuelve la descripción de los agentes registrados en el agente AMS.
  • 20.
    5.- Páginas Blancas(AMS Agent)Ejemplo:PáginasBlancas, mostrará los servicios registrados actualmente en el AMS con su información.Lo más interesante es ver como funciona el AMSService.search(), y ver como los agentes se registran automáticamente en el AMS.