View
231
Download
0
Category
Preview:
Citation preview
7/31/2019 50578067 Programacion Jade
1/251
Programacin con JADE
Creacin de agentes.
Tareas de los agentes.
Comunicacin entre agentes.
Descubriendo agentes: las pginas amarillas.
Agentes con GUI
Creacin de agentes
Agente Hello World.
Identificadores de agentes: AID.
Inicializacin del agente.
Terminacin del agente.
Pasando argumentos a un agente.
El proyecto book-trading
7/31/2019 50578067 Programacion Jade
2/252
Agente Hello World.
import jade.core.Agent;
public class HelloWorldAgent extends Agents{
protected void setup() {
//imprimo un mensaje de bienvenida
System.out.println(Hola mundo. Soy un agente!);
}
}
La clase Agent
Extiende la clase Object. Esta clase es la superclase comnpara los agentes definidos por el usuario.
Mtodos:
Pasaje de mensajes usando objetos ACLMessage.
Soporte del ciclo de vida en la plataforma.
Planificacin y ejecucin de diversos comportamientos.
Los programadores deben crear sus propios agentes como
subclases, agregar comportamientos especficos y aprovechar
las capacidades que brinda la clase AGENT().
7/31/2019 50578067 Programacion Jade
3/253
Instancias de AGENT()
Ejecuta en un thread.
Posee un scheduler interno de las acciones.
Las acciones se planifican de manera:
Round-robin.
No-preemptive.
Tareas internas al iniciar o finalizar.
Cola de mensajes.
Estado interno.
Identificadores para Agentesprotected void setup() {
System.out.println(Hola mundo. Soy un agente!);
System.out.println(Mi nombre local es +getAID().getLocalName() );
System.out.println(Mi GUID es +getAID().getlName());
System.out.println(Mis direcciones son: );
Iterator it = getIAD().getAllAddresses();
while (it.hasNext());{
System.out.println( - + it.next() );
}
}
7/31/2019 50578067 Programacion Jade
4/254
Inicializacin y terminacinde los agentes
Lanzar el agente HelloWorld como un comando. java jade.Boot -gui hola:examples.hello.HelloWorldAgent
El mtodo setup() especifica las tareas de inicializacin.
El nombre local se establece en la creacin.
El nombre global se asigna por defecto.
HelloWorld contina vivo despus de finalizar el setup aunque no
tenga nada que hacer. No tiene ningn comportamiento.
Para terminar se usa doDelete(). Las tareas de limpieza, antes de terminar se hacen en takeDown().
Pasando argumentos Los argumentos se recuperan como un arreglo de objetos.
Mtodo getArguments() de la clase agent.
Los argumentos se pasan entre parntesis en la lnea de comandos.
Cdigo
System.out.println(Mis argumentos son: );
Object[] args = getArguments();
if (args!=null){
for(int i=0;i
7/31/2019 50578067 Programacion Jade
5/255
Proyecto book-trading
Agente comprador de libros
Argumentos.
Cdigo
Agente vendedor de libros
Argumentos.
Cdigo
MtododoActive()
suspended active
waiting deleted
suspended active
waiting deleted
MtododoDelete()
Mtodosquecontrolanelciclodevida
7/31/2019 50578067 Programacion Jade
6/256
MtododoWait()
suspended active
waiting deleted
suspended active
waiting deleted
MtododoSuspend()
Mtodosquecontrolanelciclodevida
Mtodo
getAgentState()suspended active
waiting deleted
MtododoWake()
Retorna un AgentState
Mtodosquecontrolanelciclodevida
7/31/2019 50578067 Programacion Jade
7/257
Tareas de los agentes - comportamientos
Planificacin de comportamientos y ejecucin.
Comportamientos one-shot, cyclic y generic.
Comportamientos en detalle.
Planificacin de operaciones.
Comportamientos para el ejemplo book-trading.
Comportamientos del agente comprador.
Comportamientos del agente vendedor.
Comportamientos (Behaviour)
Behaviour es una clase abstracta que provee el esqueleto
de una tarea (o accin) a ser realizada por un agente.
Los mtodos principales son:
abstract void action(): la tarea propiamente dicha.
abstract boolean done(): ha finalizado la accin?
7/31/2019 50578067 Programacion Jade
8/258
Planificacin y ejecucin de Comportamientos
Al ser not pre-emtive, el mtodo action() ejecuta hasta que retorna.
Se asigna una sola hebra por agente. (Pocos recursos)
Switch de comportamiento mejor que switch de hebras.
No se requiere sincronizacin entre comportamientos concurrentes.
Para el switch no se requiere stack, por lo que se puede hacer un snapshot del
estado del agente. Se puede almacenar el agente o transferirlo.
Ejecucin de la hebra de un agente
Setup()
Consigue el prximo comportamiento(b)
del pool de comportamientos activos
b.action()
takeDown()
El agente ha sido eliminadoSI
NO
SI
NO
Hasta que no se ejecute y
retorne true, el comportamiento
sigue ejecutando
Si no hay comportamiento disponible,
la hebra va a dormir
Elimina b del pool de comportamientos activos
b.done()?
7/31/2019 50578067 Programacion Jade
9/259
Mtodos que controlan las actividades
void addBehaviour(Behaviour b)
Agrega una accin al agente.
void removeBehaviour(Behaviour b)
Elimina una accin del agente.
Jerarqua de Comportamientos
Behaviour
SimpleBehaviour CompositBehaviour
OneShotBehaviour CiclicBehaviour
SerialBehaviour ParallelBehaviour...
...
7/31/2019 50578067 Programacion Jade
10/2510
Distintos tipos de comportamientos
SimpleBehaviour: acciones atmicas del trabajo del agente
OneShotBehaviour: Ejecuta una vez. done() retorna true.
CyclicBehaviour: Ejecuta por siempre. done() retorna false.
Generic Behaviour: Dependiendo del estado, ejecuta un comportamiento especfico.
CompositeBehaviour: acciones compuestas de sub-acciones. Sigue una poltica para
determinar el hijo que ejecuta.
SerialBehaviour: Ejecuta un sub-Comportamiento despus de otro. Finaliza al terminar elltimo.
ParallelBehaviour: Inicia un sub-Comportamiento despus de otro. Finaliza por distintas
condiciones.
Comportamientos Genricos
public class tresEstados extends Behaviours{private int state = 0;public void action(){
switch(step){case 0:
// operacin X;step++;
break;case 1:
// operacin Y;step++;break;
case 2:// operacin Z;step++;break;
}}
public boolean done(){return step == 3;
}}
7/31/2019 50578067 Programacion Jade
11/2511
Ms sobre comportamientos
Todos los comportamientos heredan los mtodos:
onStart() antes de action()
onEnd() despus que done() retorne true.
Un comportamiento puede ser abortado con el mtodo
removeBehaviour(). Se lo quita del pool de comportamientos
disponibles. No ejecuta onEnd().
Cada comportamiento tiene myAgentque apunta al agente que
est ejecutando el comportamiento. Accede a los recursos.
Es necesario hacerreset() antes de volver a ejecutar un
comportamiento.
Ejecutan slo una vez.La implementacindefault es vaca
Planificacin de operaciones
WakerBehaviour est preparada para ejecutar el mtodoabstracto onWake() una vez que transcurre un intervalo detiempo. Despus termina el comportamiento.
TickerBehaviour est preparada para ejecutar onTick()repetidamente, aguardando un perodo de tiempoestablecido despus de cada ejecucin.
7/31/2019 50578067 Programacion Jade
12/2512
Comunicacin entre agentes
Enviando mensajes.
Recibiendo mensajes.
Bloqueo por espera de mensaje.
Seleccionando mensajes desde la cola de mensajes.
Conversaciones complejas.
Recepcin de mensajes en modo bloqueante.
Mensajes ACL
7/31/2019 50578067 Programacion Jade
13/2513
Mensajes en ACL- campos
http://www.fipa.org/specs/fipa00061/index.html
http://jade.tilab.com/doc/api/jade/lang/acl/ACLMessage.html
Mtodos relacionados con mensajes
void send(ACLMessage msg)
enva un mensaje a otro agente
ACLMessage receive()
recibe un mensaje desde la cola de mensajes del agente
Segn patrn.
Bloqueante. Durante un intervalo. Segn patrn
7/31/2019 50578067 Programacion Jade
14/2514
Caractersticas de los mensajes
Pasaje de mensajes asincrnico.
Envo de mensajes: mtodo del agente o comportamiento
public ACLMessage(int performative) constructor
Atributos accedidos con mtodos get/set( )
Las performatives indican que pretende el emisor conseguir con elmensaje
Enviando mensajes
Hay que llenar los campos e invocar al mtodo send() de laclase agent.
Las performatives tienen una semntica bien definida. Estopermite que al recibir un mensaje el agente tome las
decisiones correctas.
Vendedor Comprador
cfp
propose
Acept_propose
7/31/2019 50578067 Programacion Jade
15/2515
// 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);
Recibiendo mensajes
Al llegar se colocan en la cola de mensajes del receptor.
Se recuperan con el mtodo recive(). Retorna el primermensaje de la cola o nullsi est vaca.
ACLMessage reply = myAgent.receive(mt);
if (reply != null) {
// Reply received
}
Un template de mensaje condeterminadas caractersticas
7/31/2019 50578067 Programacion Jade
16/2516
Bloqueo de comportamiento en esperade un mensaje
Comnmente se implementan comportamientos dedicadospara recibir mensajes.
CallForOfferServerPurchaseOrderServer
Son cclicos y conviene bloquearlos en espera de mensajes.
Cada ejecucin de action() debe controlar por mensajes.
Si no hay mensajes se bloquea hasta que llegue uno nuevo.
Usados por el comprador para recibir mensajes
if(msg != null){procesa el mensaje}else{
block();}
En el mtodo action()
Seleccionando mensajes desde la colade mensajes
El mtodo recive() usa un template para recuperar elprimer mensaje con determinadas caractersticas.
Los templates son instancias de MessageTemplate.
Esta clase cuenta con mtodos simples y flexibles quepermiten crear templates.
Hace posible recuperar solamente mensajes con unadeterminada performative, p.e. cfp
7/31/2019 50578067 Programacion Jade
17/25
7/31/2019 50578067 Programacion Jade
18/2518
Recibir mensajes en modo bloqueante
Mtodo blockingRecive() de la clase Agent.
bloquea al agente hasta que llega un mensaje.
Se puede bloquear por un tipo especfico de mensaje.
Se bloquea la hebra y ningn otro comportamiento ejecuta.
Se usan normalmente en setup() y takeDown().
Una alternativa es usar Behaviour.block() para bloquearsolo el comportamiento
Las pginas amarillas
El agente DF.
Usando el DF.
Publicando servicios.
Buscando servicios
7/31/2019 50578067 Programacion Jade
19/2519
El agente DF Facilidad que permite a los agentes publicar sus servicios,
para que otros agentes los descubran y puedan usarlos. Este servicio de acuerdo con FIPA es brindado por un
agente llamado DF.
Se pueden desarrollar otros agentes similares al DF ycombinarlos en un sistema federado.
A1:-servicio X-servicio Y
A2:-servicio Z
A3:-servicio W-servicio K-servicio H
Servicio de
pginas amarillas
A1
A2
A3
A4
A5
A6
Publicar
serviciosprovistos
Buscar
serviciosrequeridos
Uso del servicio
Interactuando con el DF
Respeta las especificaciones de FIPA.
Se comunica mediante mensajes ACL. Con un lenguaje decontenido y una ontologa establecidos.
Para publicar y buscar servicios se usan los mtodos de la
clasejade.domine.DFService que provee JADE.
7/31/2019 50578067 Programacion Jade
20/2520
Publicando servicios
El agente debe brindarle al DF una descripcin con su
AID, una lista de los servicios prestados y opcionalmenteuna lista de lenguajes y ontologas requeridos.
Cada servicio debe incluir el tipo de servicio, el nombredel servicio, los lenguajes y ontologas requeridos parausar el servicio y una coleccin de propiedades especficasdel servicio en la forma de pares clave-valor.
Las clases correspondientes son: DFAgentDescription,ServiceDescription y Property del paquete
jade.domain.FIPAAgentManagement. Para publicar un servicio, el agente crea su descripcin y
se registra con el DF con el mtodo register() de la claseDFService.
// Register the book-selling service in the yellow pages
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType("book-selling");
sd.setName("JADE-book-trading");
dfd.addServices(sd);
try {
DFService.register(this, dfd);
}
catch (FIPAException fe) {
fe.printStackTrace();
}
7/31/2019 50578067 Programacion Jade
21/2521
Buscando por servicios
Se debe proveer al DF con una plantilla de descripcin. El resultado de la bsqueda es una lista de todas las
descripciones que coinciden con la plantilla provista.
Segn FIPA una coincidencia ocurre cuando todos loscampos de la plantilla se encuentran en la descripcin conlos mismos valores.
Se usa el mtodo search() de DFService.
Es posible tambin emplear un mecanismo de suscripcin
por el cual los agentes son notificados cuando un serviciose registra o se quita del DF. Un protocolo de suscripcin.
addBehaviour(new TickerBehaviour(this, 60000) {protected void onTick() {
System.out.println("Trying to buy "+targetBookTitle);// Update the list of seller agentsDFAgentDescription template = new DFAgentDescription();ServiceDescription sd = new ServiceDescription();sd.setType("book-selling");template.addServices(sd);try {
DFAgentDescription[] result = DFService.search(myAgent, template);System.out.println("Found the following seller agents:");sellerAgents = new AID[result.length];for (int i = 0; i < result.length; ++i) {sellerAgents[i] = result[i].getName();
System.out.println(sellerAgents[i].getName());}
}catch (FIPAException fe) {
fe.printStackTrace();}
7/31/2019 50578067 Programacion Jade
22/2522
Agentes con interfaz grfica
Deteccin de acciones del usuario en la GUI.
Actualizacin de la GUI desde el agente.
Agentes y su GUI
La hebra de agente se despierta cuando recibe mensajes.
La hebra de la GUI se despierta cuando recibe eventos
La hebra del Event Dispatcher busca eventos en la cola deeventos del sistema.
Se invoca a los que esperan por cierto tipo de evento.
7/31/2019 50578067 Programacion Jade
23/2523
Respuesta a eventos de la GUI
Al tener GUI el agente debe reaccionar a las acciones delusuario. Ej. Iniciar una conversacin al presionar un botn.
Dentro del actionPerformed() conviene preparar uncomportamiento y planificarlo para el agente.
Si la tarea es simple (modificar una vble o preparar yenviar un msje) se puede hacer dentro de la hebra AWT.
Nunca usar invocaciones bloqueantes.
Actualizacin de la GUI
AWT usa java.awt.EvenQueue.invocateLater() que agregaun evento a la cola de eventos.
Se crea un objeto que se pasa como parmetro y se encargade actualizar la GUI del contenedor
7/31/2019 50578067 Programacion Jade
24/2524
Construir agentes con GUI La clase jade.gui.GuiAgent ayuda a crear agentes con GUI
En el mtodo setup() se instancia un comportamientoespecialmente destinado a manejar una cola con estoseventos.
La interfaz crea un objeto de tipo evento, lo usa comoparmetro del mtodo postGuiEvent().
El agente reacciona al evento despertando a suscomportamientos.
El comportamiento onGuiEvent() implementa las accionesque realiza el agente segn el evento.
// get the list of available locations and show it in the GUIaddBehaviour(new GetAvailableLocationsBehaviour(this));// initialize the counter and the flagcnt = 0;cntEnabled = true;// Add agent behaviours to increment the counter and serve// incoming messagesBehaviour b1 = new CounterBehaviour(this);
addBehaviour(b1);Behaviour b2 = new ServeIncomingMessagesBehaviour(this);addBehaviour(b2);
7/31/2019 50578067 Programacion Jade
25/25
Ejercicios
Book-Trading(1): Analizar el cdigo de los agentes
involucrados y determinar:
Interfaz grfica.
Caractersticas del dilogo para una transaccin exitosa.
Book-Trading(2): emplear un criterio compuesto para
preferir un libro. Precio y ao de edicin.
Book-Trading(3): Usar delp server para tomar decisiones
sobre la eleccin de los libros.
Recommended