39
Tipos de comportamiento Laura Simón Campos Patricia Rodríguez Pérez Juan Miguel García Losada

SMA1011_BUBAL_Tipos de comportamiento

  • Upload
    xoangz

  • View
    763

  • Download
    0

Embed Size (px)

Citation preview

Tipos de comportamientoLaura Simón Campos

Patricia Rodríguez Pérez

Juan Miguel García Losada

Tabla de contenidos

• Introducción• Tipos de comportamiento

▫ Comportamiento Genérico▫ Comportamiento Simple OneShotBehaviour CyclicBehaviour

▫ Comportamiento Compuesto FSMBehaviour SequentialBehaviour ParallelBehaviour

▫ Comportamientos Temporales TickerBehaviour WakerBehaviour

Introducción I

• Los agentes realizan funcionalidades complejas que pueden llegar a implicar tareas simultáneas forzando a implementar agentes multihilo.

• JADE proporciona un sistema de comportamientos (behaviours) que ayudan al usuario a construir sistemas multiagente y reutilizar código.

• El paquete jade.core.behaviours contiene las clases que se usan para implementar comportamientos básicos de agentes.

• Los agentes JADE programan sus comportamientos con un solo hilo y el decidir qué comportamiento se ejecuta en cada momento es tarea del desarrollador del agente.

Introducción IIBehaviour

action(), done()

onStart(), onEnd()

block(), restart()

CompositeBehaviour:checkTermination()

getCurrent()

scheduleFirst()

scheduleNext()

FSM

Behaviour

Sequential

Behaviur

Parallel

Behaviour

Simple Behaviour:

reset ()

OneShot

Behaviour

Cyclic

Behaviour

Comportamiento Genérico

Comportamiento Genérico• Se corresponde con la clase abstracta Behaviour. • Mantienen un estado del agente y en base a él se ejecutan diferentes

operaciones. • Finalizan cuando cierta condición se cumple.

private class MiComportamiento extends Behaviour{

private int estado = 0;

public void action(){

switch(estado){

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

break;

case 1: System.out.println(“Re");

break;

. . .

case 7:{

System.out.println("Do");

myAgent.doDelete();

break;

} }

estado++; }

public boolean done(){

return (estado > 7);

} }

Comportamiento Simple

Comportamiento Simple

• Se corresponde con la clase SimpleBehaviour.

• Representa comportamientos atómicos, (realizar tareas simples).

• Se utilizarán los siguientes métodos:reset ():Devuelve el comportamiento a su estado inicial.

Comportamiento Simple• OneShotBehaviour

• CyclicBehaviour

OneShotBehaviour

• El método done() siempre devuelve "true", de forma que sólo se ejecuta una vez y de forma ininterrumpida.

Public class MyOneShotBehaviour extendsOneShotBehaviour{public void action(){

//perform operation X}

}

La operación X se ejecuta solo una vez

Comportamiento Simple• OneShotBehaviour

• CyclicBehaviour

CyclicBehaviour

• Comportamiento que debe ejecutarse una serie de veces.

• El método done() devuelve false.

• Se mantiene activo tanto tiempo como esté activo el agente.

• Hay riesgo de que se pueda quedar con toda la CPU.

CyclicBehaviour

Public class MyCyclicBehaviour extendsCyclicBehaviour{

public void action(){

//perform operation Y

}

}

La operación Y se ejecuta repetitivamente hasta que termine la ejecución del agente.

Comportamiento Compuesto

Comportamiento Compuesto

• Compuesta por diferentes subcomportamientos que se pueden ejecutar siguiendo diferentes políticas de planificación.

• Pueden ser del tipo: ▫ SequentialBehaviour, ▫ ParallelBehaviour▫ FSMBehavior.

• Se utilizarán los siguientes métodos:

▫ checkTermination(): Se ejecuta después de la ejecución de cada hijo para saber cuando se debe terminar el comportamiento.

▫ getCurrent(): Devuelve el comportamiento hijo que actualmente está programado para ejecutarse.

▫ scheduleFirst(): Programa al primer hijo para ser ejecutado.▫ scheduleNext(): Programa al siguiente hijo para ser ejecutado

Comportamiento Compuesto

primera vez?

scheduleFirst() scheduleNext()

b=getCurrent()

b.action()

checkTerminat

ion()

Comportamiento Compuesto

• FSMBehaviour

• SequentialBehaviour

• ParallelBehaviour

FSMBehaviour I

• Define una Máquina de Estados finita mediante subcomportamientos.

• Cada subcomportamiento representa un estado de la máquina y las transiciones se van produciendo según la salida de dichos estados.

FSMBehaviour II

• A tener en cuenta I:

▫ carece de método action(), la implementación de estados y transiciones debe realizarse en:

el constructor en su método onStart() o después de añadir el comportamiento en el nacimiento del

agente.

▫ Identificar los estados definiendo unas constantes cómo etiquetas.

Ejemplo: private static final String ONE_STATE = "UNO";

FSMBehaviour III

• A tener en cuenta II:

▫ Registrar los distintos comportamientos que componen FSMBehavioura modo de estados.

Ejemplo: registerFirstState(new OneBehaviour(),ONE_STATE); registerState(new TwoBehaviour(), TWO_STATE); registerLastState(new ErrorBehaviour(),ERROR_STATE);

▫ El agente finaliza cuando se termina de ejecutar algún sub-comportamiento que se haya registrado como estado final.

▫ Las transiciones puede ser: por defecto

Ejemplo: registerDefaultTransition(ONE_STATE, ERROR_STATE);

teniendo en cuenta un valor de salida del comportamiento origen, que será devuelto por el método onEnd() de cada comportamiento Ejemplo: registerTransition(ONE_STATE, TWO_STATE, DOS);

FSMBehaviour IV• Práctica guiada

• http://programacionjade.wikispaces.com

ONE_STATE

TWO_STATE

THREE_STATE

ERRORERROR_STATE

DOS TRES

UNO

Comportamiento Compuesto

• FSMBehaviour

• SequentialBehaviour

• ParallelBehaviour

SequentialBehaviour

• ejecuta los subcomportamientos de manera secuencial y termina cuando todos ellos han terminado.

• Se utiliza cuando una tarea compleja se puede descomponer en una secuencia de pasos atómicos.

• Para añadir los subcomportamientos se utiliza el método addSubBehaviour() y se ejecutarán en el orden en que sean agregados.

Comportamiento Compuesto

• FSMBehaviour

• SequentialBehaviour

• ParallelBehaviour

ParallelBehaviour• Ejecuta los subcomportamientos de manera concurrente

• Define las constantes que han de ser notificadas al constructor para que el comportamiento termine cuando:▫ todos los subcomportamientos lo han hecho

(ParalellBehaviour.WHEN_ALL)▫ un subcomportamiento cualquiera termine

(ParalellBehaviour.WHEN_ANY)▫ cuando un número (entero) especificado de subcomportamientos

terminen

• Para añadir los subcomportamientosse utiliza el método addSubBehaviour()como en el comportamiento secuencial.

Comportamientos Temporales

Comportamientos Temporales

• Jade proporciona dos comportamientos adicionales sencillos.

• Estos comportamientos son para ejecutar operaciones en determinados instantes de tiempo.

Comportamientos Temporales• TickerBehaviour

• WakerBehaviour

TickerBehaviour

• Define un comportamiento cíclico que ejecuta periódicamente una tarea.

• Esta tarea será implementada sobrecargando el método abstracto onTick().

• Esta tarea se realiza cada X tiempo, especificado en el constructor.

• Los métodos action() y done() ya están implementados.

TickerBehaviour

• El método getTickCount() devuelve el número de ticks desde el último reseteo del comportamiento.Ejemplo:

public class MyAgente extends Agent{Protected void setup(){

addBehaviour(new TickerBehaviour(this,5000){Protected void onTick(){//tarea a realizar cada 5 segundos}

});

}}

La tarea ser realiza cada 5 segundos

Comportamientos Temporales•TickerBehaviour

• WakerBehaviour

WakerBehaviour

• Implemente un comportamiento One-Shot que se ejecuta una vez haya transcurrido un tiempo especificado X especificado en el constructor.

• Esta tarea será implementada sobrecargando el método abstracto onWake().

• Una vez realizada esta tarea el comportamiento se dará por completado.

• Los métodos action() y done() ya están implementados.

WakerBehaviour

Ejemplo:public class MyAgente extends Agent{

Protected void setup(){

System.out.println(“Añadiendo nuevo behaviour”);

addBehaviour(new WakerBehaviour(this,5000){

Protected void onWaket(){

//tarea x

}

});

}

}

La operación X se ejecutara 5 segundos después que aparece el mensaje “Añadiendo nuevo behaviour”

Ejemplo Comportamientos Temporales

• Entramos en la página http://programacionjade.wikispaces.com

• Clickamos en 2.Comporamientos - > 2.4.6 Comportamientos Temporales

• Y copiamos el código del apartado:

2.6.4.2 Comportamiento WakerBehaviour

Resultado

Resultado

• Este es un ejemplo mixto entre los dos tipos de comportamientos.

• El comportamiento TickerBehaviour escribe la línea precedida por el [1].

new TickerBehaviour(this, 1000) {protected void onTick() {

System.out.println("[ 1 ] Tiempo transcurrido: "+ (System.currentTimeMillis()-tini) + "ms.");

}}

Como podemos observar, esta tarea se ejecuta cada segundo, de manera cíclica durante todo el tiempo de ejecución.

Resultado

• El comportamiento WakerBehaviour escribe la línea precedida por el [*2*].

new WakerBehaviour(this, 10000){protected void onWake() {System.out.println("[*2*] Tiempo transcurrido: " + (System.currentTimeMillis()-tini) + "ms.");try {

Thread.sleep(5000); }catch (InterruptedException e) {

System.out.println("error");}

}

Como podemos observar, esta tarea se ejecuta a los 10 segundos, se ejecuta una sola vez y pone el hilo a dormir durante 5 segundos, en los cuales no se mostrara nada por pantalla, pues el comportamiento TickerBehaviour corresponde al mismo hilo que el del WakerBehaviour, el cual estara dormido durante 5 segundos.

Ejercicio Final

Ejercicio Final

• En este ejercicio vamos a desarrollar los comportamientos paralelos y secuenciales. Para ello simularemos la siguiente figura. Tendremos en cuenta que:

▫ A y B se ejecutarán 2 veces

▫ PA, PB se ejecutarán 1 vez

▫ PC, PD,PE se ejecutarán 3 veces

▫ F, G se ejecutarán 1 vez.