programacion jade

25
1 Programaci ón con JADE Creación de agentes. Tareas de los agentes. Comunicación entre agentes. Descubriendo agentes: las páginas amarillas. Agentes con GUI Creaci ón de agentes Agente Hello World. Identificadores de agentes: AID. Inicialización del agente. Terminación del agente. Pasando argumentos a un agente. El proyecto book-trading

Upload: silvio-de-assis-silva

Post on 26-Jun-2015

987 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Programacion Jade

1

Programación con JADE Creación de agentes.

Tareas de los agentes.

Comunicación entre agentes.

Descubriendo agentes: las páginas amarillas.

Agentes con GUI

Creación de agentes

Agente Hello World.

Identificadores de agentes: AID.

Inicialización del agente.

Terminación del agente.

Pasando argumentos a un agente.

El proyecto book-trading

Page 2: Programacion Jade

2

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 comúnpara los agentes definidos por el usuario.•Métodos:

• Pasaje de mensajes usando objetos ACLMessage.• Soporte del ciclo de vida en la plataforma.• Planificación y ejecución de diversos comportamientos.

•Los programadores deben crear sus propios agentes comosubclases, agregar comportamientos específicos y aprovecharlas capacidades que brinda la clase AGENT().

Page 3: Programacion Jade

3

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() );}

}

Page 4: Programacion Jade

4

Inicialización y terminaciónde los agentes

Lanzar el agente HelloWorld como un comando.− java jade.Boot -gui hola:examples.hello.HelloWorldAgent

El método setup() especifica las tareas de inicialización. El nombre local se establece en la creación. El nombre global se asigna por defecto.

HelloWorld continúa vivo después de finalizar el setup aunque notenga nada que hacer. No tiene ningún 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. Método getArguments() de la clase agent. Los argumentos se pasan entre paréntesis en la línea de comandos. Código

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]); }}

Page 5: Programacion Jade

5

Proyecto book-trading Agente comprador de libros

− Argumentos.

− Código

Agente vendedor de libros− Argumentos.

− Código

Método doActive()suspended active

waiting deleted

suspended active

waiting deleted

Método doDelete()

Métodos que controlan el ciclo de vida

Page 6: Programacion Jade

6

Método doWait()suspended active

waiting deleted

suspended active

waiting deleted

Método doSuspend()

Métodos que controlan el ciclo de vida

MétodogetAgentState()suspended active

waiting deleted

Método doWake()

Retorna un AgentState

Métodos que controlan el ciclo de vida

Page 7: Programacion Jade

7

Tareas de los agentes - comportamientos

Planificación de comportamientos y ejecución.

Comportamientos one-shot, cyclic y generic.

Comportamientos en detalle.

Planificación 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 esqueletode una tarea (o acción) a ser realizada por un agente.

Los métodos principales son:− abstract void action(): la tarea propiamente dicha.− abstract boolean done(): ¿ha finalizado la acción?

Page 8: Programacion Jade

8

Planificación y ejecución de Comportamientos

• Al ser not pre-emtive, el método 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 sincronización 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.

Ejecución de la hebra de un agente

Setup()

Consigue el próximo comportamiento(b) del pool de comportamientos activos

b.action()

takeDown()

El agente ha sido eliminado SI

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()?

Page 9: Programacion Jade

9

Métodos que controlan las actividades

void addBehaviour(Behaviour b) Agrega una acción al agente.

void removeBehaviour(Behaviour b) Elimina una acción del agente.

Jerarquía de Comportamientos

Behaviour

SimpleBehaviour CompositBehaviour

OneShotBehaviour CiclicBehaviour

SerialBehaviour ParallelBehaviour......

Page 10: Programacion Jade

10

Distintos tipos de comportamientos

• SimpleBehaviour: acciones atómicas 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 específico.

• CompositeBehaviour: acciones compuestas de sub-acciones. Sigue una política paradeterminar el “hijo” que ejecuta.

• SerialBehaviour: Ejecuta un sub-Comportamiento después de otro. Finaliza al terminar elúltimo.

• ParallelBehaviour: Inicia un sub-Comportamiento después de otro. Finaliza por distintascondiciones.

Comportamientos Genéricospublic class tresEstados extends Behaviours{

private int state = 0;public void action(){

switch(step){case 0:

// operación X;step++;break;

case 1:// operación Y;step++;break;

case 2:// operación Z;step++;break;

}}

public boolean done(){return step == 3;

}}

Page 11: Programacion Jade

11

Más sobre comportamientos

• Todos los comportamientos heredan los métodos: onStart() antes de action() onEnd() después que done() retorne true.

• Un comportamiento puede ser abortado con el métodoremoveBehaviour(). Se lo quita del pool de comportamientosdisponibles. No ejecuta onEnd().

• Cada comportamiento tiene myAgent que apunta al agente queestá ejecutando el comportamiento. Accede a los recursos.

• Es necesario hacer reset() antes de volver a ejecutar uncomportamiento.

Ejecutan sólo una vez.La implementación default es vacía

Planificación de operaciones WakerBehaviour está preparada para ejecutar el método

abstracto onWake() una vez que transcurre un intervalo detiempo. Después termina el comportamiento.

TickerBehaviour está preparada para ejecutar onTick()repetidamente, aguardando un período de tiempoestablecido después de cada ejecución.

Page 12: Programacion Jade

12

Comunicación entre agentes

Enviando mensajes.

Recibiendo mensajes.

Bloqueo por espera de mensaje.

Seleccionando mensajes desde la cola de mensajes.

Conversaciones complejas.

Recepción de mensajes en modo bloqueante.

Mensajes ACL

Page 13: Programacion Jade

13

Mensajes en ACL- campos

http://www.fipa.org/specs/fipa00061/index.htmlhttp://jade.tilab.com/doc/api/jade/lang/acl/ACLMessage.html

Métodos relacionados con mensajes

void send(ACLMessage msg) envía un mensaje a otro agente

ACLMessage receive() recibe un mensaje desde la cola de mensajes del agente

− Según patrón.− Bloqueante. Durante un intervalo. Según patrón

Page 14: Programacion Jade

14

Características de los mensajes

Pasaje de mensajes asincrónico.

Envío de mensajes: método del agente o comportamiento

public ACLMessage(int performative) constructor

Atributos accedidos con métodos get/set<Atributo>( )

Las performatives indican que pretende el emisor conseguir con elmensaje

Enviando mensajes

Hay que llenar los campos e invocar al método send() de laclase agent.

Las performatives tienen una semántica bien definida. Estopermite que al recibir un mensaje el agente tome lasdecisiones correctas.

Vendedor Comprador

cfp

propose

Acept_propose

Page 15: Programacion Jade

15

// 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 método recive(). Retorna el primer

mensaje de la cola o null si está vacía.

ACLMessage reply = myAgent.receive(mt);

if (reply != null) {

// Reply received…

}

Un template de mensaje con determinadas características

Page 16: Programacion Jade

16

Bloqueo de comportamiento en esperade un mensaje

Comúnmente se implementan comportamientos dedicadospara recibir mensajes.

CallForOfferServerPurchaseOrderServer

Son cíclicos y conviene bloquearlos en espera de mensajes. Cada ejecución 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 método action()

Seleccionando mensajes desde la colade mensajes

El método recive() usa un template para recuperar elprimer mensaje con determinadas características.

Los templates son instancias de MessageTemplate.

Esta clase cuenta con métodos simples y flexibles quepermiten crear templates.

Hace posible recuperar solamente mensajes con unadeterminada performative, p.e. cfp

Page 17: Programacion Jade

17

MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.CFP);ACLMessage msg = myAgent.receive(mt);if(msg != null){ procesa el mensaje…}else{ block();}

Conversaciones complejas Una conversación es una secuencia de mensajes

intercambiados entre dos o más agentes con un motivobien 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 confirmación de la compra.

Siguen un protocolo de iteración bien definido. (FIPA) Un ejemplo es ContractNet. Jade provee una clase para

implementarla.

Page 18: Programacion Jade

18

Recibir mensajes en modo bloqueante

Método blockingRecive() de la clase Agent.

bloquea al agente hasta que llega un mensaje.

Se puede bloquear por un tipo específico de mensaje.

Se bloquea la hebra y ningún otro comportamiento ejecuta.

Se usan normalmente en setup() y takeDown().

Una alternativa es usar Behaviour.block() para bloquearsolo el comportamiento

Las páginas amarillas

El agente DF.

Usando el DF.

− Publicando servicios.

Buscando servicios

Page 19: Programacion Jade

19

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:-servicio X -servicio Y

A2:-servicio Z

A3:-servicio W -servicio K -servicio H

Servicio de páginas amarillas

A1

A2

A3

A4

A5

A6

Publicar servicios provistos

Buscar servicios requeridos

Uso del servicio

Interactuando con el DF Respeta las especificaciones de FIPA. Se comunica mediante mensajes ACL. Con un lenguaje de

contenido y una ontología establecidos. Para publicar y buscar servicios se usan los métodos de la

clase jade.domine.DFService que provee JADE.

Page 20: Programacion Jade

20

Publicando servicios El agente debe brindarle al DF una descripción con su

AID, una lista de los servicios prestados y opcionalmenteuna lista de lenguajes y ontologías requeridos.

Cada servicio debe incluir el tipo de servicio, el nombredel servicio, los lenguajes y ontologías requeridos parausar el servicio y una colección de propiedades específicasdel servicio en la forma de pares clave-valor.

Las clases correspondientes son: DFAgentDescription,ServiceDescription y Property del paquetejade.domain.FIPAAgentManagement.

Para publicar un servicio, el agente crea su descripción yse registra con el DF con el método 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();

}

Page 21: Programacion Jade

21

Buscando por servicios

Se debe proveer al DF con una plantilla de descripción. El resultado de la búsqueda es una lista de todas las

descripciones que coinciden con la plantilla provista. Según FIPA una coincidencia ocurre cuando todos los

campos de la plantilla se encuentran en la descripción conlos mismos valores.

Se usa el método search() de DFService. Es posible también emplear un mecanismo de suscripción

por el cual los agentes son notificados cuando un serviciose registra o se quita del DF. Un protocolo de suscripción.

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(); }

Page 22: Programacion Jade

22

Agentes con interfaz gráfica

Detección de acciones del usuario en la GUI.

Actualización 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 de

eventos del sistema. Se invoca a los que esperan por cierto tipo de evento.

Page 23: Programacion Jade

23

Respuesta a eventos de la GUI Al tener GUI el agente debe reaccionar a las acciones del

usuario. Ej. Iniciar una conversación al presionar un botón.

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.

Actualización 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 parámetro y se encarga

de actualizar la GUI del contenedor

Page 24: Programacion Jade

24

Construir agentes con GUI La clase jade.gui.GuiAgent ayuda a crear agentes con GUI En el método setup() se instancia un comportamiento

especialmente destinado a manejar una cola con estoseventos.

La interfaz crea un objeto de tipo evento, lo usa comoparámetro del método postGuiEvent().

El agente reacciona al evento despertando a suscomportamientos.

El comportamiento onGuiEvent() implementa las accionesque realiza el agente según 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);

Page 25: Programacion Jade

25

Ejercicios Book-Trading(1): Analizar el código de los agentes

involucrados y determinar:− Interfaz gráfica.− Características del diálogo para una transacción exitosa.

Book-Trading(2): emplear un criterio compuesto parapreferir un libro. Precio y año de edición.

Book-Trading(3): Usar delp server para tomar decisionessobre la elección de los libros.