50578067 programacion jade

Upload: leger-fernandez

Post on 04-Apr-2018

229 views

Category:

Documents


0 download

TRANSCRIPT

  • 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.