Beruflich Dokumente
Kultur Dokumente
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
La clase Agent
Extiende la clase Object. Esta clase es la superclase comn para 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().
Instancias de AGENT()
Ejecuta en un thread. Posee un scheduler interno de las acciones. Las acciones se planifican de manera:
Round-robin. No-preemptive.
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<args.length;++i){ System.out.println(- +args[i]); } }
Proyecto book-trading
Argumentos. Cdigo
Argumentos. Cdigo
Mtodo doActive()
suspended active
waiting
deleted
waiting
deleted
Mtodo doWait()
suspended active
waiting
deleted
waiting
deleted
Mtodo getAgentState()
Planificacin de comportamientos y ejecucin. Comportamientos one-shot, cyclic y generic. Comportamientos en detalle. Planificacin de operaciones. Comportamientos para el ejemplo book-trading.
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?
Consigue el prximo comportamiento(b) del pool de comportamientos activos b.action() NO Hasta que no se ejecute y retorne true, el comportamiento sigue ejecutando
b.done()?
Jerarqua de Comportamientos
Behaviour
SimpleBehaviour
CompositBehaviour
SerialBehaviour
...
OneShotBehaviour
...
ParallelBehaviour
CiclicBehaviour
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 el ltimo. 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; public boolean done(){ case 1: return step == 3; // operacin Y; } step++; } break; case 2: // operacin Z; step++; break; } }
10
Ms sobre comportamientos
Todos los comportamientos heredan los mtodos: Ejecutan slo una vez. onStart() antes de action() La implementacin default es vaca 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 myAgent que apunta al agente que est ejecutando el comportamiento. Accede a los recursos. Es necesario hacer reset() antes de volver a ejecutar un comportamiento.
Planificacin de operaciones
WakerBehaviour est preparada para ejecutar el mtodo abstracto onWake() una vez que transcurre un intervalo de tiempo. Despus termina el comportamiento.
TickerBehaviour est preparada para ejecutar onTick() repetidamente, aguardando un perodo de tiempo establecido despus de cada ejecucin.
11
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
12
http://www.fipa.org/specs/fipa00061/index.html http://jade.tilab.com/doc/api/jade/lang/acl/ACLMessage.html
13
Enviando mensajes
Hay que llenar los campos e invocar al mtodo send() de la clase agent. Las performatives tienen una semntica bien definida. Esto permite que al recibir un mensaje el agente tome las decisiones correctas.
cfp Vendedor propose Acept_propose Comprador
14
// 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 primer mensaje de la cola o null si est vaca.
ACLMessage reply = myAgent.receive(mt); if (reply != null) { // Reply received } Un template de mensaje con determinadas caractersticas
15
Comnmente se implementan comportamientos dedicados para recibir mensajes. CallForOfferServer PurchaseOrderServer Usados por el comprador para recibir mensajes 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.
En el mtodo action() if(msg != null){ procesa el mensaje } else{ block(); }
El mtodo recive() usa un template para recuperar el primer mensaje con determinadas caractersticas. Los templates son instancias de MessageTemplate. Esta clase cuenta con mtodos simples y flexibles que permiten crear templates. Hace posible recuperar solamente mensajes con una determinada performative, p.e. cfp
16
MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.CFP); ACLMessage msg = myAgent.receive(mt); if(msg != null){ procesa el mensaje } else{ block(); }
Conversaciones complejas
Una conversacin es una secuencia de mensajes intercambiados entre dos o ms agentes con un motivo bien definido y con ciertas restricciones de tiempo. En el caso de la compra de libros hay 4 pasos:
Enviar los mensajes cfp. Recibir todas las propuestas o rechazos. Enviar la orden de compra. Recibir confirmacin de la compra.
Siguen un protocolo de iteracin bien definido. (FIPA) Un ejemplo es ContractNet. Jade provee una clase para implementarla.
17
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 bloquear solo el comportamiento
Publicando servicios.
Buscando servicios
18
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 y combinarlos en un sistema federado.
A1 Publicar servicios provistos A2 A3
A1:-servicio X -servicio Y A2:-servicio Z A3:-servicio W -servicio K -servicio H
Servicio de pginas amarillas
Interactuando con el DF
Respeta las especificaciones de FIPA. Se comunica mediante mensajes ACL. Con un lenguaje de contenido y una ontologa establecidos. Para publicar y buscar servicios se usan los mtodos de la clase jade.domine.DFService que provee JADE.
19
Publicando servicios
El agente debe brindarle al DF una descripcin con su AID, una lista de los servicios prestados y opcionalmente una lista de lenguajes y ontologas requeridos. Cada servicio debe incluir el tipo de servicio, el nombre del servicio, los lenguajes y ontologas requeridos para usar el servicio y una coleccin de propiedades especficas del 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 clase DFService.
// 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(); }
20
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 los campos de la plantilla se encuentran en la descripcin con los 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 servicio se 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 agents DFAgentDescription 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(); }
21
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 de eventos del sistema. Se invoca a los que esperan por cierto tipo de evento.
22
Al tener GUI el agente debe reaccionar a las acciones del usuario. Ej. Iniciar una conversacin al presionar un botn. Dentro del actionPerformed() conviene preparar un comportamiento y planificarlo para el agente. Si la tarea es simple (modificar una vble o preparar y enviar 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 agrega un evento a la cola de eventos. Se crea un objeto que se pasa como parmetro y se encarga de actualizar la GUI del contenedor
23
La clase jade.gui.GuiAgent ayuda a crear agentes con GUI En el mtodo setup() se instancia un comportamiento especialmente destinado a manejar una cola con estos eventos. La interfaz crea un objeto de tipo evento, lo usa como parmetro del mtodo postGuiEvent(). El agente reacciona al evento despertando a sus comportamientos. El comportamiento onGuiEvent() implementa las acciones que realiza el agente segn el evento.
// get the list of available locations and show it in the GUI addBehaviour(new GetAvailableLocationsBehaviour(this)); // initialize the counter and the flag cnt = 0; cntEnabled = true; // Add agent behaviours to increment the counter and serve // incoming messages Behaviour b1 = new CounterBehaviour(this); addBehaviour(b1); Behaviour b2 = new ServeIncomingMessagesBehaviour(this); addBehaviour(b2);
24
Ejercicios
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.
25