SlideShare une entreprise Scribd logo
1  sur  46
PROGRAMACIÓN JADE:COMUNICACIÓN Miguel Casas del Río Maite Molinos Iglesias Belén Pereira García
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
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
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
Performative: Accept-proposal Agree Cancel Cfp Confirm Disconfirm Inform Propose Query-if Query-ref Request … FIPA-ACL
Argumentos: Sender Receiver Reply-to Content Language Encoding Ontology Protocol …. FIPA-ACL
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
Envío/recepción de mensajes
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
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
Pasos: Crear un objeto ACLMessage. Usar métodos de ACLMessage para rellenar los campos necesarios. 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
Ejemplo: ACLMessagemensaje = new ACLMessage(ACLMessage.INFORM); mensaje.setLanguage("Español");  mensaje.addReceiver(id);  mensaje.setContent("Hola Receptor");  send(mensaje);  Mensajeenviado: (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
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
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
Clase que representa al agente Emisor. Se encarga de emitir el mensaje "Hola que tal receptor?". Ejemplo de intercambio de mensajes entre dos agentes:
Ejemplo de intercambio de mensajes entre dos agentes:
Ejemplo de intercambio de mensajes entre dos agentes:
Clase que representa al agente Receptor que recibe el mensaje del agente Emisor. Ejemplo de intercambio de mensajes entre dos agentes:
Ejemplo de intercambio de mensajes entre dos agentes:
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:
Ejemplo de intercambio de mensajes entre dos agentes:
Solución 2:  	Usar el método blockingReceive() de Agent en lugar del método receive(). Ejemplo de intercambio de mensajes entre dos agentes:
Ejemplo de intercambio de mensajes entre dos agentes:
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:
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
Método action() de la clase Emisor: Indicando como receptor al emisor del mensaje anterior.
Método action() de la clase Receptor: Indicando como receptor al emisor del mensaje anterior.
Método action() de la clase Receptor: La clase Emisor no varía. Haciendo uso de createReply().
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
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
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
Método Comportamiento() de la clase FiltroReceptor. Selección de mensajes
Método action(). Selección de mensajes
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)
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)
Para facilitar el trabajo JADE proporciona la clase jade.domain.DFService en la que nos podemos encontrar los siguientes métodos: staticDFAgentDescription 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. 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)
Ejemplo: clase Ofrece y clase Pide Clase Ofrece: representa a uno de los agentes que ofrece servicios. Páginas Amarillas (DF Agent)
Ejemplo: clase Ofrece y clase Pide Clase Ofrece: representa a uno de los agentes que ofrece servicios. Páginas Amarillas (DF Agent) MétodotakeDown()
Páginas Amarillas (DF Agent) ,[object Object],Clase Pide: representa a uno de los agentes que ofrece servicios.
…
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)
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 (en JADE la realizan los agentes de manera automática en el agente AMS). Páginas Blancas (AMS Agent)
Para acceder a los servicios del agente AMS hay que importar la clase jade.domain.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. Páginas Blancas (AMS Agent)
Páginas Blancas (AMS Agent)
Programación Jade (Wikispaces) http://programacionjade.wikispaces.com/Comunicaci%C3%B3n Bibliografía y Referencias
FIN

Contenu connexe

Tendances

UIMP: Taller de Sistemas MultiAgente
UIMP: Taller de Sistemas MultiAgenteUIMP: Taller de Sistemas MultiAgente
UIMP: Taller de Sistemas MultiAgenteGerardo DeMiguel
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje javaMargarita Romero
 
Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaMartha Beatriz Coronado Rosales
 
Fundamentos de Java
Fundamentos de JavaFundamentos de Java
Fundamentos de Javamartosfre
 
Fundamentos de Java II
Fundamentos de Java IIFundamentos de Java II
Fundamentos de Java IImartosfre
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 
Preguntas sobre lenguaje java
Preguntas sobre lenguaje javaPreguntas sobre lenguaje java
Preguntas sobre lenguaje javaAlexia Lecuona
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma JavaEudris Cabrera
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetosJoseph Bros
 
Cuestionario java
Cuestionario javaCuestionario java
Cuestionario javajaky9727
 
Introduccion
IntroduccionIntroduccion
Introduccionreivax
 
Paquetes De Programacion
Paquetes De ProgramacionPaquetes De Programacion
Paquetes De Programaciontibu85
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerOscar V
 

Tendances (19)

UIMP: Taller de Sistemas MultiAgente
UIMP: Taller de Sistemas MultiAgenteUIMP: Taller de Sistemas MultiAgente
UIMP: Taller de Sistemas MultiAgente
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAva
 
Sintaxis Java
Sintaxis JavaSintaxis Java
Sintaxis Java
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Fundamentos de Java
Fundamentos de JavaFundamentos de Java
Fundamentos de Java
 
Fundamentos de Java II
Fundamentos de Java IIFundamentos de Java II
Fundamentos de Java II
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
Intro
IntroIntro
Intro
 
Preguntas sobre lenguaje java
Preguntas sobre lenguaje javaPreguntas sobre lenguaje java
Preguntas sobre lenguaje java
 
01 fundamentos-java
01 fundamentos-java01 fundamentos-java
01 fundamentos-java
 
Unidad 2 clases y objetos
Unidad 2 clases y objetosUnidad 2 clases y objetos
Unidad 2 clases y objetos
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Sesion 02 clases en_vb_net
Sesion 02 clases en_vb_netSesion 02 clases en_vb_net
Sesion 02 clases en_vb_net
 
Programación orientada a objetos
Programación orientada a objetosProgramación orientada a objetos
Programación orientada a objetos
 
Cuestionario java
Cuestionario javaCuestionario java
Cuestionario java
 
Introduccion
IntroduccionIntroduccion
Introduccion
 
Paquetes De Programacion
Paquetes De ProgramacionPaquetes De Programacion
Paquetes De Programacion
 
Guia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 ProgrammerGuia de estudio OCP Java SE 7 Programmer
Guia de estudio OCP Java SE 7 Programmer
 

En vedette

Translúcida
Translúcida Translúcida
Translúcida Murmaider
 
Como se cuenta un cuento
Como se cuenta un cuentoComo se cuenta un cuento
Como se cuenta un cuentoAUCALOR
 
Sesión 3 - Administración de Sistemas de Enrutamiento
Sesión 3 - Administración de Sistemas de EnrutamientoSesión 3 - Administración de Sistemas de Enrutamiento
Sesión 3 - Administración de Sistemas de Enrutamientoecollado
 
Siarhei Vauchok (matty)
Siarhei Vauchok (matty)  Siarhei Vauchok (matty)
Siarhei Vauchok (matty) Siarhei Vauchok
 
Carta de España Junio 2010
Carta de España Junio 2010Carta de España Junio 2010
Carta de España Junio 2010Cext
 
Dossier Senssai Energy Festival Alicante Colaboradores
Dossier Senssai Energy Festival Alicante ColaboradoresDossier Senssai Energy Festival Alicante Colaboradores
Dossier Senssai Energy Festival Alicante ColaboradoresSenssaiWellness
 
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...LGLPpressBZH
 
Navita Residence’S
Navita Residence’SNavita Residence’S
Navita Residence’SKym E. Guy
 
business broadband at JustEat.ie
business broadband at JustEat.iebusiness broadband at JustEat.ie
business broadband at JustEat.ieeircom
 
Guía grupo de trabajo 2014
Guía grupo de trabajo 2014Guía grupo de trabajo 2014
Guía grupo de trabajo 2014Joaquín Jurado
 
Solidos cristalinos
Solidos cristalinosSolidos cristalinos
Solidos cristalinostulocura
 
Terra Nova: The Religious Quest for Tomorrow
Terra Nova: The Religious Quest for TomorrowTerra Nova: The Religious Quest for Tomorrow
Terra Nova: The Religious Quest for TomorrowCynthia G. Wagner
 
Sociala medier för alla Kvalitetsmässan 2013
Sociala medier för alla Kvalitetsmässan 2013Sociala medier för alla Kvalitetsmässan 2013
Sociala medier för alla Kvalitetsmässan 2013Jacob Lapidus
 

En vedette (20)

Translúcida
Translúcida Translúcida
Translúcida
 
Fine gems
Fine gemsFine gems
Fine gems
 
Como se cuenta un cuento
Como se cuenta un cuentoComo se cuenta un cuento
Como se cuenta un cuento
 
Sesión 3 - Administración de Sistemas de Enrutamiento
Sesión 3 - Administración de Sistemas de EnrutamientoSesión 3 - Administración de Sistemas de Enrutamiento
Sesión 3 - Administración de Sistemas de Enrutamiento
 
Siarhei Vauchok (matty)
Siarhei Vauchok (matty)  Siarhei Vauchok (matty)
Siarhei Vauchok (matty)
 
Carta de España Junio 2010
Carta de España Junio 2010Carta de España Junio 2010
Carta de España Junio 2010
 
Dossier Senssai Energy Festival Alicante Colaboradores
Dossier Senssai Energy Festival Alicante ColaboradoresDossier Senssai Energy Festival Alicante Colaboradores
Dossier Senssai Energy Festival Alicante Colaboradores
 
Ant2 Fragen Antw
Ant2 Fragen AntwAnt2 Fragen Antw
Ant2 Fragen Antw
 
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...
CP Les facteurs de Lesneven vont assurer une prestation de pressing à domicil...
 
Navita Residence’S
Navita Residence’SNavita Residence’S
Navita Residence’S
 
business broadband at JustEat.ie
business broadband at JustEat.iebusiness broadband at JustEat.ie
business broadband at JustEat.ie
 
Guía grupo de trabajo 2014
Guía grupo de trabajo 2014Guía grupo de trabajo 2014
Guía grupo de trabajo 2014
 
Cómo vender vino en internet
Cómo vender vino en internetCómo vender vino en internet
Cómo vender vino en internet
 
Solidos cristalinos
Solidos cristalinosSolidos cristalinos
Solidos cristalinos
 
169745
169745169745
169745
 
Annual report 2015_web
Annual report 2015_webAnnual report 2015_web
Annual report 2015_web
 
Lindemann Michele
Lindemann MicheleLindemann Michele
Lindemann Michele
 
2012 january 3
2012 january 32012 january 3
2012 january 3
 
Terra Nova: The Religious Quest for Tomorrow
Terra Nova: The Religious Quest for TomorrowTerra Nova: The Religious Quest for Tomorrow
Terra Nova: The Religious Quest for Tomorrow
 
Sociala medier för alla Kvalitetsmässan 2013
Sociala medier för alla Kvalitetsmässan 2013Sociala medier för alla Kvalitetsmässan 2013
Sociala medier för alla Kvalitetsmässan 2013
 

Similaire à COMUNICACIÓN ENTRE AGENTES JADE

Comunicación. sma1011_limia
Comunicación. sma1011_limiaComunicación. sma1011_limia
Comunicación. sma1011_limiaDenis Formoso
 
JUG DAY FLEX / JEE
JUG DAY FLEX / JEEJUG DAY FLEX / JEE
JUG DAY FLEX / JEEjcoronel
 
Wsdl bpel4ws chumpitaz
Wsdl bpel4ws chumpitazWsdl bpel4ws chumpitaz
Wsdl bpel4ws chumpitazCalzada Meza
 
1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguaje1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguajeyuli02
 
1ra parte elementos basicos del lenguaje
 1ra parte elementos basicos del lenguaje 1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguajeyuli02
 
Unidad1
Unidad1Unidad1
Unidad1JHONNY
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1camnav
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Joaquin1418
 
Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1David
 
Unidad1
Unidad1Unidad1
Unidad1JHONNY
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Facebook
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeDunkherz
 
Unidad1
Unidad1Unidad1
Unidad1chembe
 
Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++yesid19
 
Lenguajes De Programacion C nivel1-unidad1
Lenguajes De Programacion C nivel1-unidad1Lenguajes De Programacion C nivel1-unidad1
Lenguajes De Programacion C nivel1-unidad1charnisch
 
Elementos Básicos del Lenguaje
Elementos Básicos del LenguajeElementos Básicos del Lenguaje
Elementos Básicos del Lenguajechembe
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netAntonio Palomares Sender
 

Similaire à COMUNICACIÓN ENTRE AGENTES JADE (20)

Comunicación. sma1011_limia
Comunicación. sma1011_limiaComunicación. sma1011_limia
Comunicación. sma1011_limia
 
JUG DAY FLEX / JEE
JUG DAY FLEX / JEEJUG DAY FLEX / JEE
JUG DAY FLEX / JEE
 
Wsdl bpel4ws chumpitaz
Wsdl bpel4ws chumpitazWsdl bpel4ws chumpitaz
Wsdl bpel4ws chumpitaz
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
El servidor
El servidorEl servidor
El servidor
 
1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguaje1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguaje
 
1ra parte elementos basicos del lenguaje
 1ra parte elementos basicos del lenguaje 1ra parte elementos basicos del lenguaje
1ra parte elementos basicos del lenguaje
 
Unidad1
Unidad1Unidad1
Unidad1
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1
 
Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1Lenguaje de programacion C++ 1
Lenguaje de programacion C++ 1
 
Unidad1
Unidad1Unidad1
Unidad1
 
Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1Lenguajesdeprogramacion c nivel1-unidad1_1
Lenguajesdeprogramacion c nivel1-unidad1_1
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
 
Unidad1
Unidad1Unidad1
Unidad1
 
Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++Elementos Basicos del Lenguaje C++
Elementos Basicos del Lenguaje C++
 
Lenguajes De Programacion C nivel1-unidad1
Lenguajes De Programacion C nivel1-unidad1Lenguajes De Programacion C nivel1-unidad1
Lenguajes De Programacion C nivel1-unidad1
 
Elementos Básicos del Lenguaje
Elementos Básicos del LenguajeElementos Básicos del Lenguaje
Elementos Básicos del Lenguaje
 
Framework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .netFramework .NET 3.5 06 Operativa básica del framework .net
Framework .NET 3.5 06 Operativa básica del framework .net
 
Formularios web
Formularios webFormularios web
Formularios web
 

COMUNICACIÓN ENTRE AGENTES JADE

  • 1. PROGRAMACIÓN JADE:COMUNICACIÓN Miguel Casas del Río Maite Molinos Iglesias Belén Pereira García
  • 2. 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
  • 3. 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
  • 4. 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
  • 5. Performative: Accept-proposal Agree Cancel Cfp Confirm Disconfirm Inform Propose Query-if Query-ref Request … FIPA-ACL
  • 6. Argumentos: Sender Receiver Reply-to Content Language Encoding Ontology Protocol …. FIPA-ACL
  • 7. 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
  • 9. 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
  • 10. 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
  • 11. Pasos: Crear un objeto ACLMessage. Usar métodos de ACLMessage para rellenar los campos necesarios. 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
  • 12. Ejemplo: ACLMessagemensaje = new ACLMessage(ACLMessage.INFORM); mensaje.setLanguage("Español"); mensaje.addReceiver(id); mensaje.setContent("Hola Receptor"); send(mensaje); Mensajeenviado: (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
  • 13. 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
  • 14. 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
  • 15. Clase que representa al agente Emisor. Se encarga de emitir el mensaje "Hola que tal receptor?". Ejemplo de intercambio de mensajes entre dos agentes:
  • 16. Ejemplo de intercambio de mensajes entre dos agentes:
  • 17. Ejemplo de intercambio de mensajes entre dos agentes:
  • 18. Clase que representa al agente Receptor que recibe el mensaje del agente Emisor. Ejemplo de intercambio de mensajes entre dos agentes:
  • 19. Ejemplo de intercambio de mensajes entre dos agentes:
  • 20. 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:
  • 21. Ejemplo de intercambio de mensajes entre dos agentes:
  • 22. Solución 2: Usar el método blockingReceive() de Agent en lugar del método receive(). Ejemplo de intercambio de mensajes entre dos agentes:
  • 23. Ejemplo de intercambio de mensajes entre dos agentes:
  • 24. 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:
  • 25. 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
  • 26. Método action() de la clase Emisor: Indicando como receptor al emisor del mensaje anterior.
  • 27. Método action() de la clase Receptor: Indicando como receptor al emisor del mensaje anterior.
  • 28. Método action() de la clase Receptor: La clase Emisor no varía. Haciendo uso de createReply().
  • 29. 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
  • 30. 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
  • 31. 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
  • 32. Método Comportamiento() de la clase FiltroReceptor. Selección de mensajes
  • 34. 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)
  • 35. 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)
  • 36. Para facilitar el trabajo JADE proporciona la clase jade.domain.DFService en la que nos podemos encontrar los siguientes métodos: staticDFAgentDescription 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. 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)
  • 37. Ejemplo: clase Ofrece y clase Pide Clase Ofrece: representa a uno de los agentes que ofrece servicios. Páginas Amarillas (DF Agent)
  • 38. Ejemplo: clase Ofrece y clase Pide Clase Ofrece: representa a uno de los agentes que ofrece servicios. Páginas Amarillas (DF Agent) MétodotakeDown()
  • 39.
  • 40.
  • 41. 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)
  • 42. 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 (en JADE la realizan los agentes de manera automática en el agente AMS). Páginas Blancas (AMS Agent)
  • 43. Para acceder a los servicios del agente AMS hay que importar la clase jade.domain.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. Páginas Blancas (AMS Agent)
  • 45. Programación Jade (Wikispaces) http://programacionjade.wikispaces.com/Comunicaci%C3%B3n Bibliografía y Referencias
  • 46. FIN