Sma

21
Grupo Sil

Transcript of Sma

Page 1: Sma

Grupo Sil

Page 2: Sma

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

◦ Simples◦ Compuestos

Page 3: Sma

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

class MiComportamiento extends Behaviour{ …

}

Page 4: Sma

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

Page 5: Sma

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.

Page 6: Sma
Page 7: Sma
Page 8: Sma

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

Page 9: Sma

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

} }

Page 10: Sma

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

Page 11: Sma

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

Page 12: Sma

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.

Page 13: Sma

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.

Page 14: Sma

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

}}

Page 15: Sma

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

Page 16: Sma

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.

Page 17: Sma

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.

Page 18: Sma
Page 19: Sma

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

Page 20: Sma

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

Page 21: Sma

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.