Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Tema 2 sma

747 views

Published on

Published in: Education, Technology, Business
  • Be the first to comment

  • Be the first to like this

Tema 2 sma

  1. 1. 2.Comportamientos<br />Agentes Jade<br />
  2. 2. 2.1 ¿Qué es un comportamiento?<br />Un comportamiento (behavior) es una funcionalidad o conducta que tiene un agente.<br />Especifican tareas o servicios enfocados a un objetivo<br />Tareas simples<br />Enviar un mensaje<br />Comprar libro<br />Comportamientos compuestos<br />
  3. 3. Cada tarea es una instancia de una clase que debe heredar de la clase Behaviour<br />class MiComportamiento extends Behaviour{…}<br />El código java que implementa la funcionalidad ha de importar el paquete, o simplemente la clase Behaviour<br />jade.core.behaviours.*<br />jade.core.behaviours.Behaviour<br />2.1 ¿Qué es un comportamiento?<br />
  4. 4. Descripción de los métodos de la clase Behaviour<br />Los comportamientos son la base de la programación de agentes.<br />Pasos para la programación de agentes:<br />Determinar las capacidades del agente<br />Asociar funcionalidades a comportamientos<br />Elegir tipo de comportamientos<br />Jade se encarga de la planificación (scheduling)<br />En cada instante de tiempo sólo un comportamiento se está ejecutando<br />2.1 ¿Qué es un comportamiento?<br />
  5. 5. 2.2 Añadir y eliminar<br />Los métodos para añadir y borrar comportamientos los provee la clase Agent<br />addBehaviour(Behaviour)<br />removeBehaviour(Behaviour)<br />Gestionan la entrada y salida de los objetos Behaviour en la cola del planificador<br /> Cola FIFO y política Round-Robin<br />
  6. 6. 2.2 Añadir y eliminar<br />Los comportamientos se añaden o eliminar en cualquier momento de la vida del agente<br />Se usará el método setup() o cualquier otro comportamiento u otros agentes<br />Crear un comportamiento<br />Es crear una clase privada dentro de la clase del agente<br />Asociarlo al agente mediante el método addBehaviour(Behaviour)<br />Debe considerarse el añadir un comportamiento como la ejecución de un nuevo hilo dentro del agente<br />
  7. 7. 2.2 Añadir y eliminar<br />Ejemplo de cómo añadir un comportamiento desde el método setup()<br />importjade.core.Agent; <br />importjade.core.behaviours.*;   <br />publicclass MiAgente extends Agent {   <br />protectedvoidsetup() { <br /> //Aqui es donde se añade el comportamiento. <br />addBehaviour(new MiComportamiento1()); <br />} <br /> //Este es el comportamiento. <br />privateclass MiComportamiento1 extends Behaviour { <br />publicvoidaction(){ <br />System.out.println("Mi nombre es: "+getName() ); System.out.println("Soy el comportamiento del agente");   <br /> } <br />publicboolean done(){ <br />returntrue; <br /> }<br />}<br />}<br />
  8. 8. 2.2 Añadir y eliminar<br />Ejemplo de cómo añadir un comportamiento desde otro comportamiento<br />Usamos la variable myAgent de la clase Behaviour. Funciona como una referencia al agente que está ejecutando el comportamiento.<br />importjade.core.Agent; <br />importjade.core.behaviours.*;   <br />publicclass MiAgente extends Agent {<br />protectedvoidsetup() { <br /> //Aqui es donde se añade el comportamiento. <br />addBehaviour(new MiComportamiento1()); <br />} <br />//Este es el comportamiento. <br />privateclass MiComportamiento1 extends Behaviour {<br />publicvoidaction(){ <br />System.out.println("Mi nombre es: "+getName() ); <br />System.out.println("Soy el primer comportamiento");<br />
  9. 9. 2.2 Añadir y eliminar<br />Ejemplo de cómo añadir un comportamiento desde otro comportamiento (continuación)<br />myAgent.addBehaviour(new MiComportamiento2()); <br /> }<br />publicboolean done(){<br />return true; <br />}<br /> }<br />//Este es el otro comportamiento <br />private class MiComportamiento2 extends Behaviour {<br />publicvoidaction()v{ <br />System.out.println("Soy el segundo comportamiento"); <br /> } publicboolean done(){<br />return true; <br /> }<br /> }<br /> }<br />
  10. 10. 2.2 Añadir y eliminar<br />Un comportamiento también puede ser eliminado de un agentecon el método removeBehaviour(Behaviour)<br />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)<br />
  11. 11. 2.2 Añadir y eliminar<br />package examples.practica2;   <br />importjade.core.Agent; importjade.core.behaviours.*;<br /> <br />publicclass Ejemplo1 extends Agent{<br />privateBehaviour comp;<br /> // Inicialización del agente <br />protectedvoidsetup() {<br /> //Creamos un comportamiento: un objeto de la clase MiComportamiento1 comp = new MiComportamiento1(); <br /> //Aqui es donde se añade el comportamiento. addBehaviour(comp); <br />}<br />//Definición de un comportamiento<br />privateclass MiComportamiento1 extends Behaviour {<br />// define la acción a ser ejecutada cuando se ejecute el comportamiento. <br />publicvoidaction(){ <br />System.out.println("Mi nombre es: "+getName() ); <br />System.out.println("Soy el primer comportamiento"); <br />// Añade un comportamiento desde otro comportamiento. myAgent.addBehaviour(new MiComportamiento2()); }<br />
  12. 12. 2.2 Añadir y eliminar<br /> // Determina si el comportamiento ha sido completado o no. <br /> // Si el comportamiento ha finalizado, éste se elimina de la cola de comportamientos activos. <br />publicboolean done(){ <br />returntrue; <br /> } <br /> }   <br /> //Definición de un segundo comportamiento<br />privateclass MiComportamiento2 extends Behaviour{ <br />publicvoidaction() { <br />System.out.println("Soy el segundo comportamiento"); myAgent.removeBehaviour(comp);//Borramos el primer comportamiento; <br />}<br />publicboolean done() {<br />returntrue; <br /> }<br /> }<br />}<br />
  13. 13. 2.3 Métodos<br />Toda clase heredada de Behaviour debe implementar:<br />Método Action():<br />Define la acción que define el comportamiento. Incluye el código de las acciones a realizar.<br />Se invoca con el evento asociado al comportamiento<br />Es recomendable que sean de rápida ejecución ya que no pueden ser interrumpidos por otro comportamiento.<br />Método done()<br />Se invoca cuando finaliza el método action()<br />Determina con un boolean si se ha finalizado el comportamiento.<br />En caso afirmativo, el comportamiento se elimina de la cola de comportamientos activos<br />Marca opcional que se activa cuando se quiere que finalice el comportamiento<br />Es evaluada en el método done()<br />
  14. 14. 2.3 Métodos<br />Ejemplo del funcionamiento de action() y done()<br />importjade.core.Agent; <br />importjade.core.behaviours.*;<br />publicclass Ejemplo2 extends Agent {   <br /> // Inicialización del agente<br />protectedvoidsetup() {<br /> // Añade un comportamiento<br />addBehaviour(new MiComportamiento());<br />}<br />// Finalización del agente<br />protectedvoidtakeDown() {<br />System.out.println("La escala ha terminado"); <br />}<br />
  15. 15. 2.3 Métodos<br /> // Definición de un comportamiento<br />privateclass MiComportamiento extends Behaviour {<br />privateint estado = 0; <br />// Función que realiza MiComportamiento<br />publicvoidaction() {<br />switch(estado) {<br />case 0: System.out.println("Do"); break; <br /> {…}<br /> case 6: System.out.println("Si"); break;<br /> case 7:{ <br />System.out.println("Do"); <br />myAgent.doDelete(); <br /> break; <br /> } } <br /> estado++; <br />}   // Comprueba si el comportamiento ha finalizado.<br />publicboolean done() {<br />return (estado > 7); } } }<br />
  16. 16. 2.3 Métodos<br />Para bloquear un comportamiento usamos el método block()<br />Bloquea un comportamiento hasta algún evento<br />No afecta a los demás comportamientos del agente<br />Al finalizar el método action(), block() coloca el comportameinto en la cola de comportamientos bloqueados<br />Un objeto de la clase Behaviour puede bloquearse temporalmente<br />Se le pasa el valor al método block() en milisegundos<br />No es igual al método sleep() de los hilos<br />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.<br />
  17. 17. 2.3 Métodos<br />package examples.practica2;<br />importjade.core.Agent;<br />importjade.core.behaviours.*;<br />publicclass Ejemplo3 extends Agent{<br /> // Inicialización del agente protectedvoidsetup()<br /> {<br />addBehaviour( new MiComportamiento() ); <br /> }<br /> // Finalización del agente protectedvoidtakeDown() { System.out.println("****Agente finalizado****"); }<br />
  18. 18. 2.3 Métodos<br />// Definición de un comportamiento<br />privateclass MiComportamiento extends Behaviour {<br />intnumeroEjecuciones = 1;<br />// // Función que realiza MiComportamiento<br />publicvoidaction() {<br />System.out.println("Esta es la ejecucion "+numeroEjecuciones);<br /> //lo bloqueamos durante un segundo block(1000); System.out.println("Despues de 1000 milisengundos"); numeroEjecuciones++; }<br />// Comprueba si el comportamiento ha finalizado<br />publicboolean done(){<br />if(numeroEjecuciones>10){<br />myAgent.doDelete();<br />returntrue; <br /> } <br />elsereturn false; } } }<br />
  19. 19. 2.3 Métodos<br />Un comportamiento se desbloquea cuando:<br />El agente al que pertenece recibe un mensage ACL<br />Sale de la cola de bloqueados y se coloca al final de la cola de activos<br />Para cada mensaje todos los objetos de la cola de bloqueados deben comprobar si son los destinatarios, y en cas contrario vuelven a bloquearse<br />Termina la interrupción asociada al comportamiento por el método block()<br />Termina el tiempo<br />Si se llama al método restart() desde el comportamiento.<br />Behaviour también nos proporciona los métodos onStart() y onEnd()<br />onStart(): Se ejecuta justo antes del método action()<br />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.<br />
  20. 20. 2.3 Métodos<br />packageexamples.practica2;<br />importjade.core.Agent; <br />importjade.core.behaviours.*;<br />publicclass Ejemplo4 extends Agent{<br />// Inicialización del agente<br />protectedvoidsetup() {<br /> // Añadir un comportamiento.<br />addBehaviour(new MiComportamiento()); }<br />  // Definición de un comportamiento<br />privateclass MiComportamiento extends Behaviour {<br />// Este método se ejecuta justo antes de la ejecución del método action()<br />publicvoidonStart() {<br />System.out.println("Esto se hace cada vez que se inicia el comportamiento"); }<br />
  21. 21. 2.3 Métodos<br />// Funcion a realizar por el comportamiento<br />publicvoidaction() {<br />System.out.println("Hola a todos.");<br />//Lo bloqueamos durante un segundo block(1000); System.out.println("Despues de 1 segundo"); <br />}<br />// Comprueba si el comportamiento ha finalizado<br />publicboolean done(){ return true; <br />}<br /> // Se ejecuta antes de finalizar el comportamiento<br />publicintonEnd()<br />{ <br />// Hace que el comportamiento se reinicie al finalizar.<br />reset();<br />myAgent.addBehaviour(this);<br />return0; } } }<br />
  22. 22. 2.4 Ejecución<br />Cada agente tiene un scheduler propio.<br />Planificación preemptiva.<br />No existe concurrencia real dentro de un mismo agente.<br />Ahorro de CPU y memoria.<br />Un comportamiento puede bloquearse cuando termina action().<br />Se coloca en la cola de comportamientos bloqueados.<br />Al desbloquear se quita de comportamientos bloqueados y se pone coloca al final de la cola de comportamientos activos.<br />Mientras action() se ejecuta no se puede ejecutar ningún otro método.<br />
  23. 23. 2.4 Flujo de control<br />doDelete()<br />Si<br />takeDown()<br />Setup()<br />No<br />No<br />Eliminar comportamiento de activos<br />Done()<br />Siguiente comportamiento de activos<br />Si<br />Action()<br />

×