tema 2 sma

23
2.COMPORTAMIENTO S Agentes Jade

Upload: sottti

Post on 08-Jul-2015

504 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Tema 2 sma

2.COMPORTAMIENTO

S

Agentes

Jade

Page 2: Tema 2 sma

2.1 ¿QUÉ ES UN

COMPORTAMIENTO?

Un comportamiento (behavior) es una funcionalidad o conducta

que tiene un agente.

Especifican tareas o servicios enfocados a un objetivo

Tareas simples

Enviar un mensaje

Comprar libro

Comportamientos compuestos

Page 3: Tema 2 sma

Cada tarea es una instancia de una clase que debe heredar de la

clase Behaviour

class MiComportamiento extends Behaviour{…}

El código java que implementa la funcionalidad ha de importar el

paquete, o simplemente la clase Behaviour

jade.core.behaviours.*

jade.core.behaviours.Behaviour

2.1 ¿QUÉ ES UN

COMPORTAMIENTO?

Page 4: Tema 2 sma

Descripción de los métodos de la clase Behaviour

Los comportamientos son la base de la programación de

agentes.

Pasos para la programación de agentes:

Determinar las capacidades del agente

Asociar funcionalidades a comportamientos

Elegir tipo de comportamientos

Jade se encarga de la planificación (scheduling)

En cada instante de tiempo sólo un comportamiento se está

ejecutando

2.1 ¿QUÉ ES UN

COMPORTAMIENTO?

Page 5: Tema 2 sma

2.2 AÑADIR Y

ELIMINAR

Los métodos para añadir y borrar comportamientos los provee la

clase Agent

addBehaviour(Behaviour)

removeBehaviour(Behaviour)

Gestionan la entrada y salida de los objetos Behaviour en la cola

del planificador

Cola FIFO y política Round-Robin

Page 6: Tema 2 sma

Los comportamientos se añaden o eliminar en cualquier

momento de la vida del agente

Se usará el método setup() o cualquier otro comportamiento u

otros agentes

Crear un comportamiento

Es crear una clase privada dentro de la clase del agente

Asociarlo al agente mediante el método

addBehaviour(Behaviour)

Debe considerarse el añadir un comportamiento como la

ejecución de un nuevo hilo dentro del agente

2.2 AÑADIR Y

ELIMINAR

Page 7: Tema 2 sma

import jade.core.Agent;

import jade.core.behaviours.*;

public class MiAgente extends Agent {

protected void setup() {

//Aqui es donde se añade el comportamiento.

addBehaviour(new MiComportamiento1());

}

//Este es el comportamiento.

private class MiComportamiento1 extends Behaviour {

public void action(){

System.out.println("Mi nombre es: "+getName() );

System.out.println("Soy el comportamiento del

agente");

}

public boolean done(){

return true;

}

}

}

Ejemplo de cómo añadir un comportamiento desde el método setup()

2.2 AÑADIR Y ELIMINAR

Page 8: Tema 2 sma

import jade.core.Agent;

import jade.core.behaviours.*;

public class MiAgente extends Agent {

protected void setup() {

//Aqui es donde se añade el comportamiento.

addBehaviour(new MiComportamiento1());

}

//Este es el comportamiento.

private class MiComportamiento1 extends Behaviour {

public void action(){

System.out.println("Mi nombre es: "+getName()

);

System.out.println("Soy el primer

comportamiento");

Ejemplo de cómo añadir un comportamiento desde otro comportamiento

Usamos la variable myAgent de la clase Behaviour. Funciona como una referencia

al agente que está ejecutando el comportamiento.

2.2 AÑADIR Y ELIMINAR

Page 9: Tema 2 sma

myAgent.addBehaviour(new MiComportamiento2());

}

public boolean done(){

return true;

}

}

//Este es el otro comportamiento

private class MiComportamiento2 extends Behaviour {

public void action()v{

System.out.println("Soy el segundo

comportamiento");

} public boolean done(){

return true;

}

}

}

2.2 AÑADIR Y ELIMINAREjemplo de cómo añadir un comportamiento desde otro comportamiento

(continuación)

Page 10: Tema 2 sma

2.2 AÑADIR Y ELIMINAR

Un comportamiento también puede ser eliminado de un agente

con el método removeBehaviour(Behaviour)

En el ejemplo anterior, se puede borrar el primer

comportamiento desde el segundo con una llamada a

removeBehaviour() dentro del método action del segundo

comportamiento (Ver código)

Page 11: Tema 2 sma

2.2 AÑADIR Y ELIMINARpackage examples.practica2;

import jade.core.Agent; import jade.core.behaviours.*;

public class Ejemplo1 extends Agent{

private Behaviour comp;

// Inicialización del agente

protected void setup() {

//Creamos un comportamiento: un objeto de la clase

MiComportamiento1 comp = new MiComportamiento1();

//Aqui es donde se añade el comportamiento. addBehaviour(comp);

}

//Definición de un comportamiento

private class MiComportamiento1 extends Behaviour {

// define la acción a ser ejecutada cuando se ejecute el comportamiento.

public void action(){

System.out.println("Mi nombre es: "+getName() );

System.out.println("Soy el primer comportamiento");

// Añade un comportamiento desde otro comportamiento. myAgent.addBehaviour(new

MiComportamiento2()); }

Page 12: Tema 2 sma

2.2 AÑADIR Y ELIMINAR

// Determina si el comportamiento ha sido completado o no.

// Si el comportamiento ha finalizado, éste se elimina de la cola de comportamientos

activos.

public boolean done(){

return true;

}

}

//Definición de un segundo comportamiento

private class MiComportamiento2 extends Behaviour{

public void action() {

System.out.println("Soy el segundo comportamiento");

myAgent.removeBehaviour(comp);//Borramos el

primer comportamiento;

}

public boolean done() {

return true;

}

}

}

Page 13: Tema 2 sma

2.3 MÉTODOS

Toda clase heredada de Behaviour debe implementar:

Método Action():

Define la acción que define el comportamiento. Incluye el código de las acciones a

realizar.

Se invoca con el evento asociado al comportamiento

Es recomendable que sean de rápida ejecución ya que no pueden ser interrumpidos

por otro comportamiento.

Método done()

Se invoca cuando finaliza el método action()

Determina con un boolean si se ha finalizado el comportamiento.

En caso afirmativo, el comportamiento se elimina de la cola de comportamientos

activos

Marca opcional que se activa cuando se quiere que finalice el comportamiento

Es evaluada en el método done()

Page 14: Tema 2 sma

Ejemplo del funcionamiento de action() y done()

import jade.core.Agent;

import jade.core.behaviours.*;

public class Ejemplo2 extends Agent {

// Inicialización del agente

protected void setup() {

// Añade un comportamiento

addBehaviour(new MiComportamiento());

}

// Finalización del agente

protected void takeDown() {

System.out.println("La escala ha terminado");

}

2.3 MÉTODOS

Page 15: Tema 2 sma

// Definición de un comportamiento

private class MiComportamiento extends Behaviour {

private int estado = 0;

// Función que realiza MiComportamiento

public void action() {

switch(estado) {

case 0: System.out.println("Do"); break;

{…}

case 6: System.out.println("Si"); break;

case 7:{

System.out.println("Do");

myAgent.doDelete();

break;

} }

estado++;

} // Comprueba si el comportamiento ha finalizado.

public boolean done() {

return (estado > 7); } } }

2.3 MÉTODOS

Page 16: Tema 2 sma

2.3 MÉTODOS Para bloquear un comportamiento usamos el método block()

Bloquea un comportamiento hasta algún evento

No afecta a los demás comportamientos del agente

Al finalizar el método action(), block() coloca el

comportameinto en la cola de comportamientos bloqueados

Un objeto de la clase Behaviour puede bloquearse

temporalmente

Se le pasa el valor al método block() en milisegundos

No es igual al método sleep() de los hilos

Block() espera a la finalización de action(), si el

comportamiento no termina, pasa a la lista de

comportamientos bloqueados durante el tiempo indicado

en el método block() o hasta que ocurra el evento que

espera dicho bloqueo.

Page 17: Tema 2 sma

2.3 MÉTODOSpackage examples.practica2;

import jade.core.Agent;

import jade.core.behaviours.*;

public class Ejemplo3 extends Agent{

// Inicialización del agente protected void setup()

{

addBehaviour( new MiComportamiento() );

}

// Finalización del agente protected void takeDown() { System.out.println("****Agente finalizado****"); }

Page 18: Tema 2 sma

2.3 MÉTODOS// Definición de un comportamiento

private class MiComportamiento extends Behaviour {

int numeroEjecuciones = 1;

// // Función que realiza MiComportamiento

public void action() {

System.out.println("Esta es la ejecucion"+numeroEjecuciones);

//lo bloqueamos durante un segundo block(1000); System.out.println("Despues de 1000

milisengundos"); numeroEjecuciones++; }

// Comprueba si el comportamiento ha finalizado

public boolean done(){

if(numeroEjecuciones>10){

myAgent.doDelete();

return true;

}

else return false; } } }

Page 19: Tema 2 sma

2.3 MÉTODOS Un comportamiento se desbloquea cuando:

El agente al que pertenece recibe un mensage ACL

Sale de la cola de bloqueados y se coloca al final de la cola de activos

Para cada mensaje todos los objetos de la cola de bloqueados deben comprobar si

son los destinatarios, y en cas contrario vuelven a bloquearse

Termina la interrupción asociada al comportamiento por el método block()

Termina el tiempo

Si se llama al método restart() desde el comportamiento.

Behaviour también nos proporciona los métodos onStart() y

onEnd()

onStart(): Se ejecuta justo antes del método action()

onEnd(): Se ejecuta antes de finalizar el comportamiento (cuando done() ha

devuelto true). Devuelve un un entero que representa un valor de terminación

para el comportamiento.

Page 20: Tema 2 sma

2.3 MÉTODOSpackage examples.practica2;

import jade.core.Agent;

import jade.core.behaviours.*;

public class Ejemplo4 extends Agent {

// Inicialización del agente

protected void setup() {

// Añadir un comportamiento.

addBehaviour(new MiComportamiento()); }

// Definición de un comportamiento

private class MiComportamiento extends Behaviour {

// Este método se ejecuta justo antes de la ejecución del método action()

public void onStart() {

System.out.println("Esto se hace cada vez que se inicia el comportamiento"); }

Page 21: Tema 2 sma

2.3 MÉTODOS// Funcion a realizar por el comportamiento

public void action() {

System.out.println("Hola a todos.");

//Lo bloqueamos durante un segundo block(1000); System.out.println("Despues de 1 segundo");

}

// Comprueba si el comportamiento ha finalizado

public boolean done(){ return true;

}

// Se ejecuta antes de finalizar el comportamiento

public int onEnd()

{

// Hace que el comportamiento se reinicie al finalizar.

reset();

myAgent.addBehaviour(this);

return 0; } } }

Page 22: Tema 2 sma

2.4 EJECUCIÓN

Cada agente tiene un scheduler propio.

Planificación preemptiva.

No existe concurrencia real dentro de un mismo agente.

Ahorro de CPU y memoria.

Un comportamiento puede bloquearse cuando termina action().

Se coloca en la cola de comportamientos bloqueados.

Al desbloquear se quita de comportamientos bloqueados y se

pone coloca al final de la cola de comportamientos activos.

Mientras action() se ejecuta no se puede ejecutar ningún otro

método.

Page 23: Tema 2 sma

2.4 FLUJO DE CONTROL

Setup

()

doDele

te()

Siguiente

comportamie

nto de

activos

Action() Done()Eliminar

comportamiento

de activos

takeDown()Si

No

Si

No