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.

SMA_Agentes

988 views

Published on

Presentacion de la Parte de Agentes

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

SMA_Agentes

  1. 1. Agentes Alberto Montes López José María Santibáñez García Héctor Manuel Feijóo López
  2. 2. <ul><li>Definición Agente Jade. </li></ul><ul><ul><li>Clase Agent. </li></ul></ul><ul><li>Ciclo de Vida de un Agente. </li></ul><ul><ul><li>Estados de un agente. </li></ul></ul><ul><ul><li>Diagrama. </li></ul></ul><ul><li>Creación de Agentes. </li></ul><ul><ul><li>Ejemplo: BookBuyerAgent. </li></ul></ul><ul><li>Ejecución de Agentes. </li></ul><ul><ul><li>Gui de Jade. </li></ul></ul><ul><ul><li>Consola. </li></ul></ul><ul><ul><li>Ejecución remota. </li></ul></ul>Índice
  3. 3. <ul><li>Terminación de la ejecución de un Agente. </li></ul><ul><ul><li>Gui de Jade. </li></ul></ul><ul><ul><li>Consola. </li></ul></ul><ul><ul><li>Método doDelete(). </li></ul></ul><ul><ul><li>Ejemplos. </li></ul></ul><ul><li>Identificador de un agente. </li></ul><ul><li>Paso de argumentos. </li></ul><ul><ul><li>Consola. </li></ul></ul><ul><ul><li>Gui de Jade. </li></ul></ul><ul><li>Ejercicio Propuesto. </li></ul>Índice
  4. 4. Definición Agente JADE
  5. 5. <ul><li>Un agente JADE es una instancia de una clase Java definida por el usuario y que extiende de la clase “ Agent ” </li></ul><ul><li>(jade.core.Agent). </li></ul><ul><li>import jade.core.Agent; </li></ul><ul><li>public class MiAgente extends Agent { </li></ul><ul><li>protected void setup() { </li></ul><ul><li>} </li></ul><ul><li>protected void takeDown() { </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Definición
  6. 6. <ul><li>Tiene un nombre único en el entorno de ejecución (AID). </li></ul><ul><li>Se implementa como un único hilo de ejecución. </li></ul><ul><li>Tiene un método de inicio (setup) y otro de fin (takeDown). Ambos métodos deben ser sobreescritos. </li></ul><ul><li>Se define una clase interna para cada uno de los comportamientos asociados al agente. </li></ul>Características
  7. 7. <ul><li>Extiende de la clase Object. Esta clase es una superclase común para los agentes definidos por el usuario. </li></ul><ul><li>La Clase Agent suministra métodos que permiten ejecutar las tareas básicas de los agentes. Dichos métodos son: </li></ul><ul><ul><li>Pasar mensajes utilizando objetos ACLMessage. </li></ul></ul><ul><ul><li>Dar soporte al ciclo de vida de un agente. </li></ul></ul><ul><ul><li>Planificar y ejecutar múltiples actividades de forma concurrente. </li></ul></ul>Clase Agent
  8. 8. Ciclo de vida de un Agente
  9. 9. <ul><li>Define los estados en los cuales se puede encontrar un agente, así como los cambios que pueden producirse entre los diferentes estados. </li></ul>Ciclo de Vida
  10. 10. Ciclo de Vida Podremos consultar el estado de un Agente mediante el método getAgentState()
  11. 11. Diagrama
  12. 12. Creación de Agentes
  13. 13. <ul><li>Tareas que se producen cuando se crea un agente: </li></ul><ul><ul><li>Se llama al constructor del agente. </li></ul></ul><ul><ul><li>Se crea un identificador del agente (AID). </li></ul></ul><ul><ul><li>Se registra el agente en el AMS. </li></ul></ul><ul><ul><li>Se ejecuta el método setup(). </li></ul></ul><ul><ul><ul><li>Debe contener el código relativo a las tareas de inicialización. </li></ul></ul></ul><ul><ul><ul><li>Puede modificar el registro del AMS </li></ul></ul></ul><ul><ul><ul><li>Puede registrar el agente de forma explícita en el DF. </li></ul></ul></ul><ul><ul><ul><li>Añade las tareas/comportamientos que ejecutará el agente. </li></ul></ul></ul>Creación
  14. 14. <ul><li>Ejemplo de un agente JADE: </li></ul><ul><li>import jade.core.Agent; </li></ul><ul><li>public class MiAgente extends Agent { </li></ul><ul><li>protected void setup() { </li></ul><ul><li>System.out.println( &quot;El agente se ha iniciado.&quot; ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>Creación
  15. 15. <ul><li>public class BookBuyerAgent extends Agent { </li></ul><ul><li>private String targetBookTitle; // Almacena el Título del libro que se quiere comprar </li></ul><ul><li>private AID[] sellerAgents; // Almacena la lista de los agentes conocidos que son vendedores de libros </li></ul><ul><li>protected void setup() { // Código de inicialización del agente </li></ul><ul><li>// Escribe un mensaje de bienvenida </li></ul><ul><li>// Mediante el método getAID() se obtiene el AID del Agente, (ej.: peter@fipa.org) </li></ul><ul><li>// getAID().getName() obtendremos el GUID del Agente (ej.: peter@fipa.org:50/JADE ) </li></ul><ul><li>// getLocalName() nos devuelve el nombre del Agente </li></ul><ul><li>(ej.:peter) </li></ul><ul><li>System.out.println( &quot;Hallo! Buyer-agent &quot; +getAID().getName() + ” is ready.&quot; ); </li></ul><ul><li>// . . . resto del código de inicialización del agente </li></ul><ul><li>} // Fin de setup() </li></ul><ul><li>// . . . resto del código de la clase (otros métodos, comportamientos) </li></ul><ul><li>} // Fin de la clase BookBuyerAgent </li></ul>BookBuyerAgent
  16. 16. Ejecución de Agentes
  17. 17. Gui de JADE
  18. 18. Gui de JADE
  19. 19. Consola
  20. 20. Forma Remota
  21. 21. Terminación de la ejecución de un Agente
  22. 22. Gui de JADE
  23. 23. Consola
  24. 24. <ul><li>public void doDelete() </li></ul><ul><ul><li>Método de la clase Agent que realiza una transición de los estados activo, suspendido o en espera al estado borrado, destruyendo al agente. </li></ul></ul><ul><ul><li>Se suele usar para finalizar agentes que están en ejecución continua. </li></ul></ul><ul><ul><li>Este método llama automáticamente al método takeDown() ( protected void takeDown()) </li></ul></ul><ul><ul><ul><li>Se usa para realizar tareas de limpieza, por ejemplo, para dar de baja el agente del DF. </li></ul></ul></ul>doDelete()
  25. 25. <ul><li>public class BookBuyerAgent extends Agent { </li></ul><ul><li>protected void setup() { </li></ul><ul><li>if (args != null . . .) { // … } </li></ul><ul><li>else { // si no se ha introducido el argumento título del libro finaliza </li></ul><ul><li>System.out.println( &quot;No se ha especificado el título del libro&quot; ); </li></ul><ul><li>doDelete(); // llamada al método para la destrucción del agente </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>protected void takeDown() { //aquí se definen las operaciones de limpieza </li></ul><ul><li>System.out.println( &quot;Agente comprador &quot; +getAID().getName ()+ &quot; terminando.&quot; ); // sólo realiza una despedida </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>BookBuyerAgent
  26. 26. <ul><li>public class BookSellerAgent extends Agent { </li></ul><ul><li>protected void setup() { // . . . } </li></ul><ul><li>protected void takeDown() { // Aquí se ponen las operaciones de limpieza de recursos </li></ul><ul><li>try { </li></ul><ul><li>DFService.deregister( this ); // Intenta darse de baja del registro de las páginas amarillas </li></ul><ul><li>} </li></ul><ul><li>catch (FIPAException fe) { // Captura la excepción FIPA </li></ul><ul><li>fe.printStackTrace(); // Dirige la excepción al terminal de salida </li></ul><ul><li>} </li></ul><ul><li>myGui.dispose(); // Cierra la interfaz de usuario </li></ul><ul><li>System.out.println( &quot;Seller-agent &quot; +getAID().getName()+ &quot; terminating.&quot; ); // Se despide </li></ul><ul><li>} </li></ul><ul><li>// . . . resto del código </li></ul><ul><li>} </li></ul>BookSellerAgent
  27. 27. <ul><li>// el vendedor no llama por sí solo al método doDelete ya que su comportamiento es cíclico. La llamada a takeDown por parte del método doDelete sólo se produce si se cierra la interfaz o la consola. doDelete se utiliza en la clase BookSellerGui </li></ul><ul><li>public class BookSellerGui extends JFrame { </li></ul><ul><li>private BookSellerAgent myAgent; </li></ul><ul><li>// . . . </li></ul><ul><li>BookSellerGui(BookSellerAgent a) { // constructor </li></ul><ul><li>// . . . </li></ul><ul><li>myAgent = a; </li></ul><ul><li>// . . . </li></ul><ul><li>addWindowListener ( new WindowAdapter() { </li></ul><ul><li> // comportamiento de la ventana de interfaz </li></ul><ul><li>public void windowClosing(WindowEvent e) { </li></ul><ul><li>// recoge el evento de cerrar la ventana </li></ul><ul><li>myAgent.doDelete(); // llamada al método encargado de la limpieza </li></ul><ul><li>} </li></ul><ul><li>}); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>BookSellerAgent
  28. 28. Identificador de un Agente
  29. 29. <ul><li>Cada agente tiene que estar identificado de forma única en la plataforma. </li></ul><ul><li>Estructura: </li></ul><ul><ul><li>nombre_agente@host:puerto/JADE </li></ul></ul><ul><li>Mediante el método getAID() se obtiene el AID del Agente </li></ul><ul><ul><li>(ej.: [email_address] ) </li></ul></ul><ul><li>getAID().getName() obtendremos el GUID del Agente </li></ul><ul><ul><li>(ej.: peter@fipa.org:50/JADE ) </li></ul></ul><ul><li>getLocalName() nos devuelve el nombre del Agente </li></ul><ul><ul><li>(ej.:peter) </li></ul></ul><ul><li>import jade.core.Agent; </li></ul><ul><li>import jade.core.AID; </li></ul><ul><li>public class MiAgente extends Agent { </li></ul><ul><li>protected void setup() { </li></ul><ul><li>System.out.println( &quot;Hola! El agente&quot; +getAID().getName()+ &quot; está listo.&quot; ); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>AID Agente
  30. 30. Paso de argumentos
  31. 31. <ul><li>public class BookBuyerAgent extends Agent { </li></ul><ul><li>private String targetBookTitle; // Título del libro que se quiere </li></ul><ul><li>private AID[] sellerAgents; // Lista de los agentes vendedores de libros conocidos </li></ul><ul><li>protected void setup() { </li></ul><ul><li>System.out.println( &quot;Hallo! Buyer-agent &quot; +getAID().getName() + &quot; is ready.&quot; ); // Saludo comprador </li></ul><ul><li>Object[] args = getArguments(); // Obtiene los argumentos dados en la inicialización del comprador </li></ul><ul><li>if (args != null && args.length > 0 ) { // Tiene que haber al menos un argumento </li></ul><ul><li>targetBookTitle = (String) args[ 0 ]; // Obtiene el título del libro a comprar que se pasó como primer argumento </li></ul><ul><li>System.out.println( &quot;Target book is &quot; +targetBookTitle); // visualiza el título que quiere comprar </li></ul><ul><li>} </li></ul><ul><li>} </li></ul><ul><li>} Cierre de la clase BookBuyerAgent </li></ul>getArguments()
  32. 32. Consola
  33. 33. Gui JADE
  34. 34. Ejercicio Propuesto
  35. 35. <ul><li>Introducción a un SMA en un entorno JADE </li></ul><ul><li>La finalidad de este ejercicio es aprender a crear un agente JADE y que este realice tareas. </li></ul><ul><li>Objetivo: crear 5 agentes, 4 de ellos con nombres de balnearios (ej. Arnoia) y nombre del servicio, lo que ofrecen (ejemplos: SPA, Alojamiento, Alojamiento_Y_SPA), el quinto agente, se corresponderá con un cliente que desea un listado de los servicios disponibles, (ej. El Balneario Arnoia , ofrece las siguientes posibilidades: Alojamiento_Y_SPA, …). </li></ul><ul><li>Para crear estos agentes, serán necesarias dos clases diferentes: una clase para los agentes que ofrecen servicios y otra clase para los agentes que solicitan servicios. </li></ul><ul><li>Los agentes que ofrecen servicios deberán realizar las siguientes tareas: </li></ul><ul><li>Mostrar por pantalla un saludo, su nombre, su AID y su estado. </li></ul><ul><li>Pasar como argumentos el tipo y nombre de servicio, capturar estos argumentos y asignárselos al servicio. </li></ul><ul><li>Registrar su servicio en las páginas amarillas. </li></ul>Ejercicio
  36. 36. <ul><li>El agente que solicita servicios deberá realizar las siguientes tareas: </li></ul><ul><li>Mostrar por pantalla un saludo, su nombre, su AID y su estado. </li></ul><ul><li>Buscar y listar los tipos y nombres de los servicios que ofrecen los agentes y mostrar el AID del agente que ofrece ese servicio. </li></ul><ul><li>Finalmente, este agente se despide y se elimina su registro de las páginas amarillas. </li></ul><ul><li>Para realizar el ejercicio se deben seguir los siguientes pasos: </li></ul><ul><li>Crear una carpeta llamada ”Ejercicio&quot; en &quot;C:jadesrcexamples&quot;. </li></ul><ul><li>Copiar y pegar el código proporcionado en cada una de las plantillas en un nuevo fichero con nombre igual al de la clase (estos archivos se situarán en la carpeta creada anteriormente). </li></ul><ul><li>Completar el código del ejercicio sustituyendo los &quot; ... &quot; por lo que se considere adecuado. </li></ul><ul><li>Compilar el código desde una consola en el directorio especificado en el primer punto con la sentencia &quot;javac *.java&quot;. </li></ul><ul><li>Abrir una nueva consola para ejecutar el RMA. </li></ul><ul><li>Lanzar desde consola los 5 agentes que se piden en el ejercicio. </li></ul>Ejercicio
  37. 37. ¿Preguntas?

×