GruSMA: Lenguaje de comunicación entre agentes FIPA
 

Introducción

La comunicación en un SMA se basa en el paso de mensajes entre agentes. En este documento se detalla la sintaxis de un mensaje escrito en ACL (Agent Communication Language) definido por la FIPA, se explican los diferentes tipos de mensajes y los protocolos de comunicación.
 

Composición de un Mensaje
 

Aspecto de un mensaje:

 
 
 
 
 
 
 
 
 

Un mensaje se compone de una instrucción para indicar el tipo de acto comunicativo (pregunta, petición, etc.) y de diferentes parámetros (ver la siguiente tabla).
 
 

Tabla 1 — Parámetros de los mensajes

Parámetro: Significado:
:sender Denota la identidad del agente que envía el mensaje.
:receiver Indica la identidad del que recibe el mensaje.

Aquí pueden haber uno o varios nombres de agente, (dependiendo de a quien se quiera hacer llegar el mensaje, puede ser individual o colectivo).

:content Contenido del mensaje, lo que se le quiere decir a los agentes receptores.
:reply-with Introduce una expresión que será usada por el agente que responda para identificar este mensaje.

Puede ser usado, por ejemplo, para seguir conversaciones entre agentes.

Si un agente envía un mensaje que contiene

:reply-with query1
el receptor responderá con otro que contenga 
:in-reply-to query1

:in-reply-to Hace referencia a que este mensaje es una respuesta a otro anterior.
:language Nombre del lenguaje en que está escrito el contenido del mensaje (ej. Prolog, Lisp, SL)
:ontology Define el significado del vocabulario usado en el contenido de los mensajes.
:reply-by Indica el tiempo en que el mensaje ha de ser respondido.
:protocol Indica el protocolo usado por los mensajes.
:conversation-id Expresa un identificador de conversación. Esto es especialmente útil cuando un agente mantiene varias conversaciones a la vez.

Para más información se puede consultar el documento de FIPA ACL Message Structure Specification.

Para manejar estos parámetros, JADE nos ofrece varios métodos en la clase ACLMessage, que nos permiten consultarlos o modificarlos (getContent(), setContent(), etc).
 
 

Tipos de Mensajes

La siguiente tabla contiene los diferentes tipos de mensajes definidos por la FIPA, según el acto comunicativo.
 


Tabla 2 — Categorías de actos comunicativos

Acto

Comunicativo

Paso de Información
Solicitud de Información
Negociación
Realización de Acciones
Manejo de Errores
accept-proposal     ü    
agree       ü  
cancel       ü  
cfp     ü    
failure         ü
inform ü        
not-understood         ü
propose     ü    
query-if   ü      
refuse       ü  
reject-proposal     ü    
request       ü  
request-when       ü  
request-whenever       ü  
subscribe   ü      

 

REQUEST = Pedir a otro agente que realize una acción

REQUEST-WHEN = La acción se hará cuando se cumpla una condición REQUEST-WHENEVER = La acción se hará siempre que se cumpla una condición AGREE = aceptar petición

REFUSE = no aceptar petición

CANCEL = cancelar petición

INFORM = Dar información al receptor

QUERY-IF = Preguntat al receptor alguna cosa

SUBSCRIBE = Apuntarse a un servicio del receptor, de modo que cuando ocurra algo que interese al emisor el receptor se lo notificará.

CFP = Call for proposals – pedir propuestas para realizar una acción

PROPOSE = hacer una propuesta

REJECT-PROPOSAL = rechazar una propuesta

ACCEPT-PROPOSAL = aceptar la propuesta

FAILURE = Explica porqué ha fallado la acción

NOT-UNDERSTOOD = Explica que no se ha entendido el contenido del mensaje
 

Protocolos

Las conversaciones entre agentes siguen en algunas ocasiones unos patrones determinados, que se repiten en muchos casos. Aprovechando estos patrones y su repetición, FIPA ha definido unos protocolos. Un protocolo es un patrón que se usa para llevar por unos cauces concretos una conversación. Son como conversaciones guiadas, en que cada agente sabe qué mensaje enviar y cuales puede recibir.

Para cada conversación se distinguen dos roles, el que la inicia (Initiator) y el que responde (Responder). Al usar uno de estos protocolos, los mensajes enviados, tendrán en el campo :protocol el tipo de protocolo al que pertenece el mensaje, para que los agentes implicados sepan que se está siguiendo un protocolo.

Hay tres protocolos básicos definidos por la FIPA y que tienen comportamientos en JADE: FIPA-request protocol, FIPA-query protocol y FIPA-ContractNet protocol.
 
 

Protocolo FIPA-request

Se usa cuando un agente pide a otro que realice una acción. El destinatario puede aceptar o rechazar la petición, y en caso de aceptarla, deberá realizar la acción, e indicárselo al otro agente cuando finalice. En el siguiente diagrama se observa el flujo de los mensajes. Los blancos son los que envía el "initiator" al que llamaremos Agente1, mientras que los del "responder"(Agente2) están en gris.
 


Figura 1 - Protocolo FIPA-request


 


Al recibir una petición, el Agente2 puede optar por aceptarla o rechazarla, indicando el motivo (o bien si no entiende el mensaje enviar un not-understood). Si decide aceptar, tendrá que realizar la acción. Si la realiza informa de ello al Agente1; lo mismo ocurre si tiene que pasar algún resultado o ha habido algún fallo.

Protocolo FIPA-query

Aquí el Agente1 pide algún tipo de información al Agente2. Como se ve en la figura, tras la petición de información, el Agente2 puede responder con la propia información, con un fallo, con un not-understood o con el rechazo de la petición, teniendo que alegar el motivo.
 


Figura 2 - Protocolo FIPA-Query


 


Protocolo FIPA-contract-net

El Agente1 quiere que uno o más agentes realicen una acción, por eso realiza una especie de encuesta, pidiendo propuestas a los distintos agentes. En la petición se especifica la acción a realizar y algunas precondiciones a la hora de hacer las propuestas. Los agentes consultados envían sus propuestas al Agente1, también indicando las condiciones de la propuesta. Éste las estudia y elige las que le convienen, rechazando el resto. El protocolo requiere que el Agente1 sepa cuando ha recibido todas las propuestas, para no dejar a ningún agente "con la palabra en la boca". Como esto podría llevar mucho tiempo en caso de que un agente tarde más de la cuenta, se da un tiempo límite para responder, y las propuestas que lo hagan más tarde, serán rechazadas.


 


Figura 3 - Protocolo FIPA-Contract-Net


 


El Agente1 puede cancelar todo el proceso una vez aceptadas y rechazadas las propuestas, si es que algo cambia de la situación inicial. Cuando se acepta una propuesta el Agente2 puede responder con un inform indicando que se ha realizado la acción, o indicando que ha habido algún fallo con un failure.
 
 

Se puede encontrar más información sobre los protocolos y tipos de mensajes en el documento 2 de la FIPA: Agent Communication Language.
 
 
 
 

Lenguaje SL

SL (Semantic Language) es un lenguaje general definido por la FIPA para facilitar la comunicación entre agentes. Existen tres subconjuntos del lenguaje, el más simple es el llamado SL0 y es el que usaremos nosotros. Así pues pondremos en los mensajes :language FIPA-SL0. En la sección 4.1 del documento FIPA SL Content Language Specification se puede encontrar la gramática de este lenguaje.
 
 
 
 

Ontología

En la ontología se define el vocabulario a usar en los mensajes. Este vocabulario cambiará dependiendo de la aplicación en que trabajen los agentes, por ejemplo, trasplantes, cines, etc.

La ontología incluye: