Download Construcción de Agentes Software con JAVA + JADE

Document related concepts
no text concepts found
Transcript
Construcción de Agentes Software con JAVA + JADE
Construcción de Agentes Software con
JAVA + JADE
Seminario de Aplicación de los Agentes Software al Ocio y al
Turismo
Universidad Carlos III de Madrid
Juan A. Botı́a
11 de Marzo de 2005
Construcción de Agentes Software con JAVA + JADE
Estructura de la presentación
Introducción a JADE
Servicio de directorio de agentes/servicios
El entorno de ejecución FIPA
Mensajes de agentes en FIPA
Comportamientos en JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos
FIPA
Tratamiento de comunicacion mediante ACL en JADE
Protocolos de interaccı́on FIPA en JADE
Manejo de Ontologı́as en JADE
Conclusiones
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
La plataforma JADE
I
JADE está compuesta de
I
I
I
I
Una plataforma FIPA para la ejecución de agentes
Un conjunto de paquetes para la programación de agentes
FIPA
Es 100 % Java (con el JDK 1.4 o superiores)
Incluye
I
I
I
I
I
I
Creación básica de agentes
Programación del comportamiento de los agentes en base a
behaviours
ACL FIPA para envı́o y recepción de mensajes
Clases útiles para programación de protocolos FIPA (y no
FIPA)
Distintos codecs (SL, RDF, etc)
Manejo de conocimiento mediante ontologı́as
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
La plataforma JADE
I
Plataforma FIPA (AMS, Facilitador de directorio y MTS)
I
Puede ejecutarse en una o varias JVM
I
Cada JVM es vista como un entorno en donde los agentes
pueden ejecutarse concurrentemente e intercambiarse
mensajes
Organizada en contenedores
I
I
I
1 principal: AMS, DF y el registro rmi están localizados ahı́
n containers no princpales y conectados al principal
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
La arquitectura de referencia FIPA
La arquitectura de referencia FIPA se denomina “Arquitectura
Abstracta” ¿por qué?
I
definir los elementos comunes a diferentes sistemas
subyacentes
I
reunirlos en una especificación común
I
instanciar esa arquitectura en forma de implementaciones
diferentes pero interoperables !!
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
La arquitectura de referencia FIPA
Tópicos cubiertos
I
Definición de un modelo abstracto para el descubrimiento de
servicios disponibles para otros agentes y servicios.
I
Interoperabilidad entre diferentes medios de transporte de
mensajes.
I
Soporte para el manejo de diferentes formas de representación
de mensajes ACL
I
Soporte para el manejo de diferentes lenguajes de contenido
I
Soporte para el manejo de diferentes representaciones de
servicios de directorio
Tópicos no cubiertos: por ejemplo, la gestión del ciclo de vida de
un agente
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Realización-materialización de la arquitectura abstracta
Una arquitectura abstracta no es directamente implementable
I
Base para otras especificaciones más concretas (elementos
software, lenguajes de programación, protocolos de red, etc)
I
El desarrollador tiene libertad para materializar transporte de
mensajes, directorio de agentes, directorio de servicios y ACL
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Realización-materialización de la arquitectura abstracta
I
Una arquitectura abstracta puede incluir elementos adicionales
I
Una realización puede ser del total de la arquitectura pero
también de uno o varios elementos (e.g. directorio de agentes)
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Servicio de directorio de agentes/servicios
Directorio de agentes y servicios
I
I
Proporciona un lugar en donde los agentes registran sus
descripciones/servicios de tal forma que otros agentes puedan
utilizar ese medio para localizar agentes/servicios con los que
deseen interactuar/invocar
Datos mı́nimos de un agente
I
I
I
AID: nombre único globalmente
Localizador: una o más descripciones del transporte que, a su
vez, contiene el tipo de transporte (i.e. el protocolo), la
dirección de transporte para ese protocolo y cero o más
propiedades adicionales
Cómo anunciarse
I
I
Primero necesita estar accesible, y por lo tanto se engancha
(i.e. hace un bind) a una o más direcciones de transporte
Luego se da a conocer
1. crea una entrada de directorio con sus datos de agente
2. registra la entrada con el servicio de directorio de agentes
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Servicio de directorio de agentes/servicios
Localizando agentes y servicios en FIPA II
La búsqueda de los agentes es por matching simple de cadenas y
pares atributo-valor
El registro y localización de servicios es análogo al de agentes
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Panorama global
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Elementos del entorno de ejecución
El AMS: habilita el acceso a la plataforma
I
Un AMS para cada plataforma de agentes (AP)
I
Gestiona la operación la plataforma con respecto a los agentes
que viven en ella (ciclo de vida, registro de nombres)
I
Operaciones en el directorio: register, deregister,
modify, search y get-description
I
Operaciones contra agentes: suspender, terminar, crear,
finalizar ejecución, invocar y ejectuar agente
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
El agente como proceso software en la plataforma
Agente en la plataforma
proceso computacional que implementa la funcionalidad autónoma
de comunicación para una aplicación concreta
Identificado mediante el AID (Agent Identifier)
I
name
I
addresses
I
resolvers
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
El agente como proceso software en la plataforma
Ejemplo: supongamos que agente-a quiere mandar un mensaje a
agente-b el cual tiene como AID el siguiente
(agent-identifier
:name [email protected]
:resolvers (sequence
(agent-identifier
:name [email protected]
:addresses (sequence iiop://foo.com/acc))))
y agente-a necesita saber sus direcciones de transporte
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Ejemplo, cont
La secuencia de comunicación será
Nótese que el AMS tiene un nombre reservado, como este
(agent-identifier
:name ams@nombre_plataforma
:addresses (sequence direcciones_transporte_plataforma))
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Facilitador de directorio en la plataforma
Componente opcional
I
I
implementa la funcionalidad de un directorio de servicios (i.e.
páginas amarillas) de la arquitectura abstracta
Si existe, tiene reservado el AID
(agent-identifier
:name df@nombre_plataforma
:addresses (sequence direcciones_transporte_plataforma))
I
Posibilita subscripción para escuchar eventos relativos a
operaciones (registro, desregistro y modificación) en el
directorio de servicios mediante fipa-subscribe
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Ciclo de vida del agente FIPA
Un agente fı́sico (en términos de software) está sujeto a un ciclo de
vida que define los estados en los que se puede encontrar y cómo
se realizan los cambios de un estado a otro.
Caracterı́sticas más importantes
I
AP Bounded (conectado a la plataforma): un agente es
gestionado fı́sicamente dentro de una AP y el ciclo de vida de
un agente estático está, por tanto, asociado a una
determinada AP.
I
Independiente de la aplicación
I
Orientado a instancia: el agente que cumple el ciclo de vida es
una instancia de una clase de agente, con un identificador
único (identidad)
I
Único: cada agente solamente tiene un ciclo de vida en todo
momento y dentro de una única AP.
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Envı́o de mensajes y ciclo de vida
El MTS es responsable de envı́o de mensajes.
Dependiendo del estado del agente receptor
I
Activo: el mensaje se entrega al agente directamente.
I
Iniciado/esperando/suspendido: o bien el MTS almacena el
mensaje en el buffer correspondiente hasta que el agente
está activo o bien entrega el mensaje en otra localización si
antes se ha indicado un forward para ese agente.
I
Tránsito: o bien el MTS almacena el mensaje en el buffer
correspondiente hasta que el agente está activo o bien entrega
el mensaje en otra localización si antes se ha indicado un
forward para ese agente como en el caso anterior. Solamente
los agentes móviles pueden entrar en este estado.
I
Unknown: discreccional
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
El registro de un agente en una AP
Al comenzar la ejecución, se ha de registrar en la plataforma para
que el resto de agentes puedan localizarlo y enviarle mensajes de
manera apropiada
¿Cómo?
1. al crearse dentro de la plataforma
2. al llegar a la AP desde otra AP (agente móvil y APs que lo
soportan)
3. de manera explı́cita
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
El entorno de ejecución FIPA
Ejemplo
Un agente (i.e. discovery-agent) localizado en AP bar.com se
quiere registrar en la plataforma foo.com. Para ello enviará un
mensaje request como el siguiente al correspondiente AMS:
(request
:sender (agent-identifier
:name [email protected]
:addresses (sequence iiop://bar.com/acc))
:receiver (set (agent-identifier
:name [email protected]
:addresses (sequence iiop://foo.com/acc)))
:ontology fipa-agent-management :language fipa-sl0 :protocol fipa-request
:content "((action
(agent-identifier
:name [email protected] :addresses (sequence iiop://foo.com/acc))
(register
(:ams-description
:
name
(agent-identifier
:name [email protected]
:addresses (sequence iiop://bar.com/acc)) ...)))")...)
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Elementos de los mensajes FIPA
Estructura, representación y transporte
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Elementos de los mensajes FIPA
I
I
La parte externa del mensaje corresponde al lenguaje de
comunicación de agentes
Si nos referimos a la estandarización ACL de FIPA, este va a
consistir nuevamente en una lista de pares atributo-valor
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Más sobre mensajes
Ahora supongamos que en el AMS tenemos la entrada, en el
directorio de páginas blancas correspondiente, siguiente
Agent-name:ABC
Agent-Locator:
Transport-type
HTTP
SMTP
Agent-attributes:
Transport-specific-address
http://www.whiz.net/abc
[email protected]
Transport-specific-property
<none>
<none>
Attrib-1:yes
Attrib-2:yellow
Language: French, German, English
Preferred-negotiation: contract-net
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Más sobre mensajes II
Cualquier otro agente podrı́a contactar con ABC, a través del AMS
y mandar mensajes de dos maneras distintas
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Seguridad en los mensajes
Se deben considerar
I Validez del mensaje
I
I
Toda modificación que se realice sobre el mismo sea detectable
Encriptación
I
Poder enviar mensajes sin que terceros no autorizados sean
capaces de leer su contenido
La arquitectura abstracta propone soportar estas dos
vertientes con
I
I
Atributos adicionales (envoltura)
Tipos de representación en la codificación
NO ESTANDARIZA!!!
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Seguridad en los mensajes II
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
La plataforma JADE (y II)
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Servicios básicos: directorio
El directorio, como en FIPA, es un servicio básico accesible a
través de jade.domain.DFService (en realidad es un acceso al
agente de páginas amarillas desde un interface) para los servicios
I
register
I
deregister
I
modify
I
search
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
La clase Agent
Programar un agente en JADE consiste en definir una clase Java
que representa al agente y:
I
Determinar y codificar los comportamientos que va a
manifestar
I
Hacer que herede de la clase jade.core.Agent
I
Programar sus métodos setup(), takeDown
Para ejecutar el agente, podemos hacerlo desde el GUI de JADE o
desde cualquier otro programa JAVA explı́citamente
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Lanzar un agente desde el GUI
Desde una consola:
export CLASSPATH=/ruta/jade/lib/jade.jar:/ruta/jade/lib/iiop.jar:/ruta/jade/lib/http.jar
java jade.Boot -gui
y tenemos
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Lanzar un agente desde el GUI (y II)
Seleccionando el botón de New Agent, posicionados en el
contenedor principal
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Un agente mı́nimo
import jade.core.Agent;
public class BookBuyerAgent extends Agent {
protected void setup() { // Printout a welcome message
System.out.println(‘‘Hallo! Buyer-agent ‘‘ +
getAID().getName() + ‘‘ is ready.’’);
}
}
Construcción de Agentes Software con JAVA + JADE
Introducción a JADE
Mensajes de agentes en FIPA
Ejecución del agente desde la lı́nea de comandos
javac BookBuyerAgent.java
export CLASSPATH=/opt/jade/lib/jade.jar:/opt/jade/lib/http.jar:.
java jade.Boot mi_agente:BookBuyerAgent
This is JADE 3.2 - 2004/07/26 13:41:05
downloaded in Open Source, under LGPL restrictions,
at http://jade.cselt.it/
http://simon:7778/acc
Agent container Main-Container@JADE-IMTP://simon is ready.
Hallo! Buyer-agent mi_agente@simon:1099/JADE is ready.
Construcción de Agentes Software con JAVA + JADE
Comportamientos en JADE
Los Comportamientos de un agente JADE
I
Los agentes deben poder ejecutar diferentes tareas al mismo
tiempo
I
JADE propone un modelo de agente single threaded y añade
un nivel de scheduling sobre la única thread a nivel de
comportamientos
Programación basada en comportamientos:
I
1.
2.
3.
4.
determinar qué debe ser capaz de hacer el agente
asociar cada funcionalidad con un comportamiento
escoger el tipo de comportamiento
dejar a JADE la tarea del scheduling (un solo comportamiento
se está ejecutando en cada instante)
Construcción de Agentes Software con JAVA + JADE
Comportamientos en JADE
El scheduling de comportamientos
I
Cada agente tiene para sı́ una cola de comportamientos
activos
I
El cuerpo de acciones de un comportamiento se programa
redefiniendo el método action()
I
Cuando el método anterior finaliza, y dependiendo del tipo de
comportamiento, el scheduler lo saca de la cola o lo vuelve a
colocar al final
I
Un comportamiento puede bloquearse (block()) hasta que
lleguen más mensajes al agente; el bloqueo significa que,
cuando action() termina, se le colocal en una cola de
bloqueados
I
Cuando llega un nuevo mensaje, se le saca de esa cola y se
coloca al final de la de comportamientos activos
Construcción de Agentes Software con JAVA + JADE
Comportamientos en JADE
El scheduling de comportamientos (y II)
Construcción de Agentes Software con JAVA + JADE
Comportamientos en JADE
Un comportamiento nada deseable
public class OverbearingBehaviour extends Behaviour
{
public void action() {
while (true) {
// do something
}
}
public boolean done() {
return true;
}
}
Construcción de Agentes Software con JAVA + JADE
Comportamientos en JADE
Organización de las clases para comportamientos
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
El ACL FIPA
I
La interoperabilidad se consigue mediante un lenguaje de
comunicación de agentes
I
I
I
I
bien definido
sin ambigüedades
con un aparato formal sólido
La base de un ACL está compuesta por los actos
comunicativos
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Actos comunicativos
I
Cada uno de las performativas FIPA está definida mediante
I
I
I
I
I
el resumen en donde se explica resumido el significado del
mensaje
el contenido del mensaje en donde se detalla qué tipo de
contenido debe llevar
la descripción que es una explicación detallada del acto
comnicativo
el modelo formal que es una descripción en SL (Semantic
Language)
un ejemplo de mensaje con el acto comunicativo
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Lista de performativas
accept-proposal
cancel
confirm
failure
inform-if
not-understood
propose
query-if
refuse
request
request-whenever
agree
call-for-proposal
disconfirm
inform
inform-ref
propagate
proxy
query-ref
reject-proposal
request-when
subscribe
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Modelo formal de mensajes ACL
I
Para la semántica de los mensajes, haremos uso de tres
elementos de los agentes (sea i un agente y p una
proposición)
I
I
I
B para belief: Bi p significa que el agente i cree p
U para uncertainty: Ui p significa que el agente i manifiesta
cierta incertidumbre sobre p pero cree que es más probable que
¬p
C para choice: Ci p quiere decir que el agente i en este instante
desea que p se cumpla
Como se puede comprobar son actitudes mentales.
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Más sobre el modelo formal de mensajes ACL
Nuevos predicados, como son Feasible, Done y Agent:
I
Feasible(a, p) significa que a puede ejecutarse y que si se
ejecuta, entonces p se hará cierto inmediatamente después.
I
Done(a, p) significa que a se ejectó y que p se hizo cierto
justamente después.
I
Agent(i, a) significa que el agente i es el único que bien
ejecutó, está ejecutando o ejecutará las acciones que aparecen
en a.
I
Single(a) significa que la acción a no es una secuencia.
Cualquier acción individual es simple. El acto compuesto a; b
no es simple. La acción a|b es simple si lo son a y b.
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Objetivo persistente y elementos asociados a un AC
Un agente i tiene un objetivo persistente p si i tiene a p como
objetivo y su compromo con él es del tipo single minded.
I Una intención es entonces un objetivo persistente que
obliga al agente a actuar.
I Denotamos con PGi p que el agente i tiene a p como
objetivo persistente y con Ii p que el agente i se dispone a
cumplir p.
Un acto comunicativo lleva asociados dos componentes
importantes
1. el efecto racional (RE)
2. las precondiciones para la realización (FP)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Abreviaciones, como aparecen en el documento
I
Feasible(a) ≡ Feasible(a, true)
I
Done(a) ≡ Done(a, true)
I
Possible(φ) ≡ (∃a)Feasible(a, φ)
I
Bifi φ ≡ Bi φ ∨ Bi ¬φ (es decir, que el agente i o bien cree φ o
bien cree ¬φ)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos FIPA
Notación para la definición de un AC
Un modelo de acto comunicativo (CA) se representará como sigue:
< i, act(j, C ) >
,
FP : φ1
RE : φ2
en donde i es el agente que ejecuta el CA, j es el receptor, act es
el nombre de la performativa, C se refiere al contenido del mensaje
(i.e. relativo al dominio de aplicación) y φ1 y φ2 son proposiciones
de la lógica. Obsérvese que el mensaje serı́a
(act
:sender i
:receiver j
:content C)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos FIPA
El acto comunicativo inform
Semántica informal
I
Un agente i es capaz de informar a un agente j de que una
proposición p es verdad solo si i cree que p es verdad (i.e.
Bi p)
I
El agente i usará inform solo si cree que j no conoce p o su
negación (i cree que j cree la negación de p, i deberı́a
mandarle un disconfirm, o un confirm si j no está seguro
del valor de verdad de p)
La formalización queda como sigue:
< i, INFORM(j, φ) >
FP : Bi φ ∧ ¬Bi (Bifj φ ∨ Uifj φ)
RE : Bj φ
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos FIPA
El acto comunicativo inform
Ejemplo: el ajente i informa al j que (es verdad) está lloviendo
hoy
(inform
:sender (agent-identifier :name i)
:receiver (set (agent-identifier :name j))
:content "weather (today, raining)"
:language Prolog)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos FIPA
El acto comunicativo request
Semántica informal
I
de entre las FP de la acción a, se cumplen las
correspondientes a actitudes del agente i
I
el agente i cree que el agente j es el adecuado para ello, y que
no tiene a la acción a como objetivo persistente (si ası́ fuera
no habrı́a que hacer nada)
Formalizado es:
< i, REQUEST (j, a) >
FP : FP(a)[i\j] ∧ Bi Agent(j, a) ∧ Bi ¬PGj Done(a)
RE : Done(a)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Ejemplos de definición de la semántica de actos comunicativos FIPA
El acto comunicativo request
Ejemplo: el ajente i pide al j que abra un fichero
(request
:sender (agent-identifier :name i)
:receiver (set (agent-identifier :name j))
:content "open \"db.txt\" for input"
:language vb)
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
El ACL estándar de FIPA en JADE
Ideas principales:
I
La clase jade.lang.acl.ACLMessage es la base para
composición de mensajes (métodos set y get para todos los
parámetros de un mensaje FIPA)
I
Los métodos Agent.send(...), Agent.receive(...) y
Agent.blockingReceive() para envı́o y recepción
I
La clase jade.lang.acl.MessageTemplate es útil para
hacer matching de mensajes
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Envı́o de mensajes en JADE
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Envı́o de mensajes en JADE (y II)
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID(‘‘Peter’’, AID.ISLOCALNAME));
msg.setLanguage(‘‘English’’);
msg.setOntology(‘‘Weather-forecast-ontology’’);
msg.setContent(‘‘Today it s raining’’ );
send(msg);
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Recepción de mensajes en JADE
class OfferRequestsServer extends CyclicBehaviour {
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
// Message received. Process it
String title = msg.getContent();
ACLMessage reply = msg.createReply();
Integer price = (Integer) catalogue.get(title);
if (price != null) {
// The requested book is available for sale.
// Reply with the price
reply.setPerformative(ACLMessage.PROPOSE);
reply.setContent(String.valueOf(price.intValue()));
} else
{
// The requested book is NOT available for sale.
reply.setPerformative(ACLMessage.REFUSE);
reply.setContent( not-available );
}
myAgent.send(reply);
} } }
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Una conversación compleja
class RequestPerformer extends Behaviour {
private AID bestSeller;
private int bestPrice;
private int repliesCnt = 0;
private MessageTemplate mt;
private int step = 0;
public void action() {
switch (step) {
case 0: // Send the cfp to all sellers
ACLMessage cfp = new ACLMessage(ACLMessage.CFP);
for (int i = 0; i < sellerAgents.length; ++i) {
cfp.addReceiver(sellerAgents[i]);
}
cfp.setContent(targetBookTitle);
cfp.setConversationId(‘‘book-trade’’);
cfp.setReplyWith(‘‘cfp’’ + System.currentTimeMillis());
// Unique value
myAgent.send(cfp);
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Una conversación compleja
mt = MessageTemplate.and(MessageTemplate.MatchConversationId(‘‘book-trade’’),
MessageTemplate.MatchInReplyTo(cfp.getReplyWith()));
step = 1;
break;
case 1: // Receive all proposals/refusals from seller agents
ACLMessage reply = myAgent.receive(mt);
if (reply != null) { // Reply received
if (reply.getPerformative() == ACLMessage.PROPOSE) {
int price = Integer.parseInt(reply.getContent());
if (bestSeller == null || price < bestPrice) {
bestPrice = price;
bestSeller = reply.getSender();
}
}
repliesCnt++;
if (repliesCnt >= sellerAgents.length) { // We received all replies
step = 2;
}
} else { block(); }
break;
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Una conversación compleja
case 2: // Send the purchase order to the seller
// that provided the best offer
ACLMessage order = new ACLMessage(ACLMessage.ACCEPT_PROPOSAL);
order.addReceiver(bestSeller);
order.setContent(targetBookTitle);
order.setConversationId(‘‘book-trade’’);
order.setReplyWith(‘‘order + System.currentTimeMillis());
myAgent.send(order);
mt =
MessageTemplate.and(MessageTemplate.MatchConversationId(‘‘book-trade’’),
MessageTemplate.MatchInReplyTo(order.getReplyWith()));
step = 3;
break;
Construcción de Agentes Software con JAVA + JADE
Comunicación entre agentes con JADE
Tratamiento de comunicacion mediante ACL en JADE
Una conversación compleja
case 3: // Receive the purchase order reply
reply = myAgent.receive(mt);
if (reply != null) { // Purchase order reply received
if (reply.getPerformative() == ACLMessage.INFORM) {
// Purchase successful. We can terminate
System.out.println(targetBookTitle + ‘‘ successfully purchased.’’);
System.out.println(‘‘Price = ‘‘ + bestPrice);
myAgent.doDelete();
}
step = 4;
} else {
block();
}
break;
}
}
public boolean done() {
return ((step == 2 && bestSeller == null) || step == 4);
} }
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
Recomendaciones FIPA para PIs
Protocolos de interacción Los siguientes son estándares:
I FIPA Request Interaction Protocol Specification
I FIPA Query Interaction Protocol Specification
I FIPA Request When Interaction Protocol Specification
I FIPA Contract Net Interaction Protocol Specification
I FIPA Iterated Contract Net Interaction Protocol Specification
I FIPA Brokering Interaction Protocol Specification
I FIPA Recruiting Interaction Protocol Specification
I FIPA Subscribe Interaction Protocol Specification
I FIPA Propose Interaction Protocol Specification
y las subastas alemana e inglesa mantienen el estatus de
experimental
I FIPA English Auction Interaction Protocol Specification
I FIPA Dutch Auction Interaction Protocol Specification
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-request
El protocolo fipa-request
permite a un agente pedir a
otro que realice una
determinada acción.
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-query
El protocolo fipa-query es
similar al anterior solo que la
acción a ejecutar es de un tipo
concreto: inform para
informar sobre algo.
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-request-when
Es posible indicar a un agente
que ejecute una acción de
manera diferida, cuando una
determinada precondición se
haga cierta. Para eso tenemos
el protocolo de interacción
fipa-request-when
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-contract-net
El fipa-contract-net
está inspirado en la propuesta
de Smith solo que debido a la
autonomı́a hay que incluir
mensajes para confirmación y
rechazo.
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-contract-net (y II)
I
Inicialmente, el manager, con el rol FIPA de iniciador, genera
m mensajes del tipo cfp (call for proposal) y queda a la
espera durante un determinado tiempo, después del cual no
recibirá más mensajes (un total de n recibidos)
I
Sea i el número de mensajes de tipo refuse, Tendremos
entonces j = n − i mensajes del tipo propose
I
Para cada uno de los j mensajes, enviar posteriormente bien
un accept-proposal o un reject-proposal
I
Se informa del resultado con un failure, con un inform sin
resultado o con el mismo acompañado del resultado.
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-iterated-contract-net
I
ligera variación del
fipa-contract-net que
permite el número de
rondas que sea necesario
I
tiene el propósito para el
iniciador de la interacción
de conseguir mejores
ofertas de los
interlocutores mediante
argumentación o crı́tica
de las ofertas anteriores
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-iterated-contract-net (y II)
I
Inicialmente, el agente con el rol de iniciador de la
conversación genera m mensajes cfp
I
Después de un deadline de espera, el iniciador recoge digamos
n ofertas
I
sean un total de j las que rechazan realizar la tarea mediante
refuse
I
Tenemos entonces k = n − j ofertas de agentes que están
dispuestos a realizar la tarea con prospose
I
Si la iteración no es la última, de entre el total de k ofertas
recibidas, se rechazarán algunas directamente, k − l, y se
aceptarán otras tantas l.
I
De entre las aceptadas, se elabora una contraoferta para cada
agente y se envuelve en un nuevo cfp
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-brokering
I
Tiene como propósito permitir interaccionar con otros agentes
a través de un mediador (el broker)
I
proxy es una macro (incluye otro acto comunicativo que el
broker debe hacer llegar al seleccionado o seleccionados)
I
El broker devuelve los resultados mediante
reply-message-sub-protocol (i.e. un reply con la
respuesta en el cuerpo del mensaje)
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-brokering (y II)
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-recruiting
I
Tiene como propósito reclutar agentes para interaccionar con
ellos posteriormente
I
Usado en entornos basados en mediadores
I
Se diferencia del anterior en que ya no es el broker el que
interactúa con los seleccionados, sino el receptro designado
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-recruiting (y II)
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-subscribe
De utilidad para subscripción a
un servicio de notificación de
eventos. El agente participante
se compromete (mediante la
emisión de un agree) a
informar mediante inform
cada vez que el evento se
produzca
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-propose
El agente iniciador propone al
otro agente particante, que lo
ha de supervisar, el realizar
una acción
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
El PI fipa-english-auction
El iniciador ofrece un precio. Si
ningún posible comprador
realiza una oferta, se vuelve a
ofrecer otro precio. Se
selecciona el mejor de entre los
participantes que emiten un
propose.
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
Protocolos de Interacción en JADE
I
FIPA define protocolos de interacción estándares
I
Filosofı́a de JADE: en lugar de programar el flujo del
protocolo (i.e. la secuencia de intercambio de mensajes)
programar qué hacer en cada situación (manejadores)
I
Basado en las clases jade.proto.AchieveREInitiator y
jade.proto.AchieveREResponder (suficientes para
implementar FIPA-Request, FIPA-query, FIPA-Request-When,
FIPA-recruiting, FIPA-brokering y FIPA-subscribe)
I
Para el FIPA-contract-net disponemos de
jade.proto.ContractNetInitiator y
jade.proto.ContractNetResponder
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
Progamación de una interacción
Si queremos programar una interacción simple (i.e. 1 a 1), como
por ejemplo fipa-request, echamos mano del estándar para el
protocolo de interacción
Para programar el iniciador, nos fijamos en los mensajes entrantes
y análogamente para el responder
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
Progamación de una interacción (y II)
Nos vamos al javadoc de
jade.proto.SimpleAchieveREInitiator
Construcción de Agentes Software con JAVA + JADE
Protocolos de interaccı́on FIPA en JADE
Progamación de una interacción (y III)
Nos vamos al javadoc de
jade.proto.SimpleAchieveREResponder
Construcción de Agentes Software con JAVA + JADE
Manejo de Ontologı́as en JADE
Ontologı́as básicas en JADE
I
JADE permite el manejo de ontologı́as para
I
I
Representar el dominio de aplicación mediante conceptos,
predicados, acciones, agentes, etc.
Intercambiar elementos de la ontologı́a entre agentes (i.e. en el
cuerpo del mensaje FIPA)
I
+ Conceptualmente sencillo
I
- Muy engorroso de manejar (definición tediosa de conceptos)
I
Solución: podemos utilizar un sistema gestor de ontologı́as
como Protégé2000 para el modelado y generación de código
Java-JADE
Construcción de Agentes Software con JAVA + JADE
Manejo de Ontologı́as en JADE
Manejo de ontologı́as desde Protégé2000
Los pasos a seguir en la programación de un sistema JADE
sencillo, usando Protégé podrı́an ser los siguientes:
1. Conceptualización del problema
I
I
I
Definición de los elementos a participar en la ontologı́a
Definición de los agentes
Definición de las interacciones que tendrán lugar entre los
agentes (comprobando que la ontologı́a sea adecuada para
todos los casos)
2. Diseño de la ontologı́a con Protégé
3. Programación de los protocolos de interacción con JADE (i.e.
en forma de comportamientos), integrando el código generado
por Protégé
4. Programación de los agentes
5. Y ya está
Construcción de Agentes Software con JAVA + JADE
Conclusiones
Conclusiones
Para dominar JADE, tenemos que conocer
I
Agentes y behaviours (mecanismos básicos de scheduling)
I
Mensajes y plantillas para el matching
I
Protocolos de interacción y su programación mediante clases
Initiator y Responder
I
Manejo de Ontologı́as con algún programa de apoyo (e.g.
Protégé)
Manos a la obra...
Construcción de Agentes Software con JAVA + JADE
Conclusiones
Agradecimientos
Algunas de las figuras usadas en esta presentación se han obtenido
directamente del manual de Jade. Agradecemos a Fabio
Bellifemine y a su equipo su expresa colaboración.