Sma

676 views

Published on

Published in: Education
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
676
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Sma

  1. 1. Grupo Sil
  2. 2. <ul><li>Funcionalidad del agente. </li></ul><ul><li>Especifican tareas o servicios. </li></ul><ul><li>Tipos de comportamientos: </li></ul><ul><ul><li>Simples </li></ul></ul><ul><ul><li>Compuestos </li></ul></ul>
  3. 3. <ul><li>jade.core.behaviours.* </li></ul><ul><li>jade.core.behaviours.Behaviour </li></ul><ul><li>class MiComportamiento extends Behaviour{ </li></ul><ul><li>… </li></ul><ul><li>} </li></ul>
  4. 4. <ul><li>La programación basada en comportamientos debe realizar los siguientes pasos: </li></ul><ul><ul><li>Determinar qué debe ser capaz de hacer el agente. </li></ul></ul><ul><ul><li>Asociar cada funcionalidad con un comportamiento. </li></ul></ul><ul><ul><li>Escoger el tipo de comportamientos </li></ul></ul><ul><ul><li>Dejar a JADE la tarea del planificador </li></ul></ul>
  5. 5. <ul><li>Métodos: </li></ul><ul><ul><li>addBehaviour(Behaviour) </li></ul></ul><ul><ul><li>removeBehaviour(Behaviour) </li></ul></ul><ul><li>Los comportamientos pueden ser añadidos o eliminados en cualquier momento de la vida del agente. </li></ul><ul><li>Se crean mediante una clase privada dentro de la clase del agente. </li></ul>
  6. 8. <ul><li>Toda clase que herede de Behaviour deberá implementar 2 métodos: </li></ul><ul><ul><li>action() -> define la acción a ser ejecutada en el comportamiento. </li></ul></ul><ul><ul><li>done() -> se invoca automáticamente después de finalizar action() y comprueba si el comportamiento ha finalizado </li></ul></ul>
  7. 9. <ul><li>public class Ejemplo2 extends Agent{   </li></ul><ul><li>… </li></ul><ul><li>// Definición de un comportamiento </li></ul><ul><li>private class MiComportamiento extends Behaviour{ </li></ul><ul><li>private int estado = 0;   </li></ul><ul><li>// Función que realiza MiComportamiento </li></ul><ul><li>public void action(){ </li></ul><ul><li>switch(estado){ </li></ul><ul><li>case 0: System.out.println(&quot;Do&quot;); break; </li></ul><ul><li>case 1: System.out.println(&quot;Re&quot;); break; </li></ul><ul><li>case 2: System.out.println(&quot;Mi&quot;); break; </li></ul><ul><li>… </li></ul><ul><li>}   </li></ul><ul><li>// Comprueba si el comportamiento ha finalizado. </li></ul><ul><li>public boolean done(){ return (estado > 7); } </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  8. 10. <ul><li>Un comportamiento también puede ser bloqueado utilizando block () </li></ul><ul><li>este método permite bloquear un comportamiento hasta que algún acontecimiento ocurra. </li></ul><ul><li>El método block() no para la ejecución del comportamiento sino que espera a que finalice el método action(). </li></ul>
  9. 11. <ul><li>… </li></ul><ul><li>// Definición de un comportamiento </li></ul><ul><li>private class MiComportamiento extends Behaviour { </li></ul><ul><li>int numeroEjecuciones = 1;   </li></ul><ul><li>// Función que realiza MiComportamiento </li></ul><ul><li>public void action() { </li></ul><ul><li>System.out.println(&quot;Esta es la ejecucion &quot;+numeroEjecuciones);   </li></ul><ul><li>//lo bloqueamos durante un segundo block(1000); </li></ul><ul><li>System.out.println(&quot;Despues de 1000 milisengundos&quot;); </li></ul><ul><li>numeroEjecuciones++; </li></ul><ul><li>} </li></ul><ul><li>… </li></ul>
  10. 12. <ul><li>Se puede desbloquear si: </li></ul><ul><ul><li>El agente al que pertenece ese comportamiento recibe un mensaje ACL </li></ul></ul><ul><ul><li>Una interrupción asociada con este comportamiento por el método block() expira. </li></ul></ul><ul><ul><li>El método restart() es llamado explícitamente por el comportamiento, así se fuerza el desbloqueo. </li></ul></ul>
  11. 13. <ul><li>La clase Behaviour también proporciona dos métodos llamados onStart() y onEnd() </li></ul><ul><ul><li>El método onStart() se ejecuta justo antes de la ejecución del método action(). </li></ul></ul><ul><ul><li>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. </li></ul></ul>
  12. 14. <ul><li>private class MiComportamiento extends Behaviour{   </li></ul><ul><li>// Este método se ejecuta justo antes de la ejecución del método action() </li></ul><ul><li>public void onStart () { </li></ul><ul><li>System.out.println(&quot;Esto se hace cada vez que se inicia el comportamiento&quot;); </li></ul><ul><li>}   </li></ul><ul><li>public void action(){ </li></ul><ul><li>… </li></ul><ul><li>}   </li></ul><ul><li>public boolean done(){ .. }   </li></ul><ul><li>// Se ejecuta antes de finalizar el comportamiento </li></ul><ul><li>public int onEnd (){ </li></ul><ul><li>// Hace que el comportamiento se reinicie al finalizar. </li></ul><ul><li>reset(); </li></ul><ul><li>myAgent.addBehaviour(this);   </li></ul><ul><li>return 0; } </li></ul><ul><li> } </li></ul><ul><li>} </li></ul>
  13. 15. <ul><li>Cada agente tiene un planificador de comportamientos . </li></ul><ul><li>El funcionamiento de los comportamientos está implementado a 2 niveles: </li></ul><ul><ul><li>Una cola circular de los comportamientos activos </li></ul></ul><ul><ul><li>Una cola con los comportamientos bloqueados </li></ul></ul>
  14. 16. <ul><li>La política de planificación se realiza de forma no preemptiva. </li></ul><ul><li>Los comportamientos de un agente no se ejecutan de forma concurrente. </li></ul><ul><li>Cuando el método  action()  se está ejecutando, ningún otro comportamiento puede ejecutarse hasta que termine. </li></ul><ul><li>El programador debe decidir qué comportamiento se ejecuta en cada momento. </li></ul>
  15. 17. <ul><li>Los comportamientos bloqueados se colocan en la cola de los comportamientos bloqueados. </li></ul><ul><li>Cuando este comportamiento se desbloquea se saca de la cola de bloqueados y se coloca al final de la cola de comportamientos activos. </li></ul>
  16. 19. <ul><li>¿Cómo sería la ejecución de un agente que tenga el siguiente comportamiento? </li></ul><ul><ul><li>No se ejecuta puesto falta por definir el método onStart() </li></ul></ul><ul><ul><li>El comportamiento se bloquea durante 1 segundo y el planificador pasa el control al siguiente comportamiento de la cola. </li></ul></ul><ul><ul><li>No finaliza nunca puesto que el método action() no finaliza. </li></ul></ul><ul><ul><li>Finaliza siempre puesto que el método done() devuelve siempre true. </li></ul></ul>
  17. 20. <ul><li>public class MiComportamiento extends Behaviour { </li></ul><ul><li>private boolean salir = true; </li></ul><ul><li>private int cont = 0; </li></ul><ul><li>public void action(){ </li></ul><ul><li>while (salir) { </li></ul><ul><li>if (cont > 10) { </li></ul><ul><li>salir = true; </li></ul><ul><li>} </li></ul><ul><li>cont++; </li></ul><ul><li>} </li></ul><ul><li>block(1000); </li></ul><ul><li>} </li></ul><ul><li>public boolean done(){ </li></ul><ul><li>return true; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  18. 21. <ul><li>Crear un agente con un comportamiento que muestre un día de la semana cada vez que se invoque su método action(). </li></ul><ul><li>El comportamiento finalizará cuando termine la semana. </li></ul><ul><li>En el método onEnd() debe cancelar el agente. </li></ul><ul><li>Cada vez que se muestre un día de la semana, se bloqueará el agente durante un segundo y mostrará un mensaje por pantalla. </li></ul><ul><li>Cuando se inicie el comportamiento, se mostrará un mensaje por pantalla indicando que se ha iniciado correctamente. </li></ul><ul><li>Mostrar por pantalla que el comportamiento ha finalizado. </li></ul>

×