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.
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
|
: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
Comunicativo |
|
|
|
|
|
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
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
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.
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.
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: