sma

Post on 27-May-2015

546 Views

Category:

Education

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Grupo Sil

Funcionalidad del agente. Especifican tareas o servicios. Tipos de comportamientos:

◦ Simples◦ Compuestos

jade.core.behaviours.*jade.core.behaviours.Behaviour

class MiComportamiento extends Behaviour{ …

}

La programación basada en comportamientos debe realizar los siguientes pasos:◦ Determinar qué debe ser capaz de hacer el

agente.◦ Asociar cada funcionalidad con un

comportamiento.◦ Escoger el tipo de comportamientos◦ Dejar a JADE la tarea del planificador

Métodos: ◦addBehaviour(Behaviour)◦ removeBehaviour(Behaviour)

Los comportamientos pueden ser añadidos o eliminados en cualquier momento de la vida del agente.

Se crean mediante una clase privada dentro de la clase del agente.

Toda clase que herede de Behaviour deberá implementar 2 métodos:◦ action() -> define la acción a ser ejecutada en el

comportamiento.◦ done() -> se invoca automáticamente después de

finalizar action() y comprueba si el comportamiento ha finalizado

public class Ejemplo2 extends Agent{   …// 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 1: System.out.println("Re"); break; case 2: System.out.println("Mi"); break; …

}   // Comprueba si el comportamiento ha finalizado. public boolean done(){ return (estado > 7); }

} }

Un comportamiento también puede ser bloqueado utilizando block()

este método permite bloquear un comportamiento hasta que algún acontecimiento ocurra.

El método block() no para la ejecución del comportamiento sino que espera a que finalice el método action().

…// 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++; } …

Se puede desbloquear si:◦ El agente al que pertenece ese comportamiento

recibe un mensaje ACL◦ Una interrupción asociada con este

comportamiento por el método block() expira. ◦ El método restart() es llamado explícitamente por

el comportamiento, así se fuerza el desbloqueo.

La clase Behaviour también proporciona dos métodos llamados onStart() y onEnd()◦ El método onStart() se ejecuta justo antes de la

ejecución del método action().◦ El método onEnd() se ejecuta antes de finalizar el

comportamiento (después de que el método done() devuelva true) y devuelve un entero que representa un valor de terminación para el 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"); }   public void action(){

…}   public boolean done(){ .. }  

// Se ejecuta antes de finalizar el comportamiento public int onEnd(){

// Hace que el comportamiento se reinicie al finalizar. reset(); myAgent.addBehaviour(this);   return 0; }

}}

Cada agente tiene un planificador de comportamientos.

El funcionamiento de los comportamientos está implementado a 2 niveles:◦ Una cola circular de los comportamientos activos◦ Una cola con los comportamientos bloqueados

La política de planificación se realiza de forma no preemptiva.

Los comportamientos de un agente no se ejecutan de forma concurrente.

Cuando el método action() se está ejecutando, ningún otro comportamiento puede ejecutarse hasta que termine.

El programador debe decidir qué comportamiento se ejecuta en cada momento.

Los comportamientos bloqueados se colocan en la cola de los comportamientos bloqueados.

Cuando este comportamiento se desbloquea se saca de la cola de bloqueados y se coloca al final de la cola de comportamientos activos.

¿Cómo sería la ejecución de un agente que tenga el siguiente comportamiento?a) No se ejecuta puesto falta por definir

el método onStart()b) El comportamiento se bloquea

durante 1 segundo y el planificador pasa el control al siguiente comportamiento de la cola.

c) No finaliza nunca puesto que el método action() no finaliza.

d) Finaliza siempre puesto que el método done() devuelve siempre true.

public class MiComportamiento extends Behaviour { private boolean salir = true; private int cont = 0; public void action(){ while (salir) { if (cont > 10) { salir = true; } cont++; } block(1000); } public boolean done(){ return true; }}

Crear un agente con un comportamiento que muestre un día de la semana cada vez que se invoque su método action().

El comportamiento finalizará cuando termine la semana.

En el método onEnd() debe cancelar el agente. Cada vez que se muestre un día de la semana, se

bloqueará el agente durante un segundo y mostrará un mensaje por pantalla.

Cuando se inicie el comportamiento, se mostrará un mensaje por pantalla indicando que se ha iniciado correctamente.

Mostrar por pantalla que el comportamiento ha finalizado.

top related