Jade1 agentes

2,646 views

Published on

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

Jade1 agentes

  1. 1. GRUPO LONIA ANGENTES JADE Componentes: Daniel Pinillos Díaz Rafael Sousa Hervés Leticia Antón Pérez Daniel Diéguez Arias
  2. 2. Definición de agente JADE <ul><ul><li>Un agente JADE es una instacia de una clase JAVA definida por el usuario que extiende de la clase Agent(jade.core.Agent). </li></ul></ul><ul><ul><ul><ul><li>Import jade.core.Agent ; </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Public class MiAgente extens Agent </li></ul></ul></ul></ul><ul><ul><ul><ul><li>{ </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>… </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul>
  3. 3. Características que cumple un agente JADE <ul><ul><li>Tiene un nombre único en el entorno de ejecución. </li></ul></ul><ul><ul><li>Se implementa como un único hilo de ejecución. </li></ul></ul><ul><ul><li>Tiene un método de inicio (setup) y otro de fin (takeDown). </li></ul></ul><ul><ul><li>Ambos métodos deben ser sobrescritos. </li></ul></ul><ul><ul><li>Se define una clase interna por cada uno de los comportamientos. </li></ul></ul>
  4. 4. La clase Agent <ul><ul><li>Superclase que permite a los usuarios crear software de agentes. </li></ul></ul><ul><ul><li>Suministra métodos que permiten ejecutar las tareas básicas de los agentes: </li></ul></ul><ul><ul><ul><li>Pasar mensajes utilizando objetos ACLMessage. </li></ul></ul></ul><ul><ul><ul><li>Dar soporte al ciclo de vida de un agente. </li></ul></ul></ul><ul><ul><ul><li>Planificar y ejecutar múltiples actividades concurrentemente. </li></ul></ul></ul><ul><ul><li>Los programadores deben escribir sus propios agentes como subclases de Agent, añadiendo comportamientos específicos. </li></ul></ul>
  5. 5. Ciclo de vida de una agente <ul><ul><li>Define los estados en los cuales se puede encontrar un agente, así como los cambios que se pueden realizar entre los diferentes estados. </li></ul></ul><ul><ul><li>El ciclo de vida de un agente JADE sigue el ciclo propuesto por FIPA, es decir, cumple con la propuesta del estándar de interoperabilidad entre agentes más aceptado. </li></ul></ul>
  6. 6. Estados de un agente <ul><ul><li>Un agente puede estar en los siguientes estados: </li></ul></ul><ul><ul><ul><li>Iniciado. </li></ul></ul></ul><ul><ul><ul><li>Activo. </li></ul></ul></ul><ul><ul><ul><li>Suspendido. </li></ul></ul></ul><ul><ul><ul><li>En espera. </li></ul></ul></ul><ul><ul><ul><li>Desconocido. </li></ul></ul></ul><ul><ul><ul><li>Tránsito. </li></ul></ul></ul>
  7. 7. Diagrama de transiciones entre estados
  8. 8. Creación de agentes <ul><ul><li>Cuando se crea un agente: </li></ul></ul><ul><ul><ul><li>Se llama al constructor del agente. </li></ul></ul></ul><ul><ul><ul><li>Se crea un identificador del agente (AID). </li></ul></ul></ul><ul><ul><ul><li>Se registra el agente en el AMS. </li></ul></ul></ul><ul><ul><ul><li>Se ejecuta el método setup (), que contiene el código relativo a las tareas de inicialización, como: </li></ul></ul></ul><ul><ul><ul><ul><li>Modificar el registro del AMS. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Registrar el agente en el DF. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Añadir las tareas/comportamientos que ejecutará el agente. </li></ul></ul></ul></ul>
  9. 9. Creación de agentes <ul><ul><li>Esqueleto de un agente JADE </li></ul></ul><ul><ul><ul><li>import jade.core.Agent; </li></ul></ul></ul><ul><ul><ul><li>public class MiAgente extends Agent { </li></ul></ul></ul><ul><ul><ul><li>protected void setup() { </li></ul></ul></ul><ul><ul><ul><li>System.out.println(&quot;El agente se ha iniciado.&quot;); </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul>
  10. 10. Creación del Agente BookBuyerAgent public class BookBuyerAgent extends Agent { private String targetBookTitle; private AID[] sellerAgents; // Almacena los agentes que son vendedores de libros protected void setup() { System.out.println(&quot;Hallo! Buyer-agent “+ getAID().getName() + &quot; is ready.&quot;); // . . . resto del código de inicialización } // . . . resto del código de la clase }
  11. 11. Terminación de agentes <ul><ul><li>Hay tres formas: desde el GUI de JADE (kill), desde consola (control+c), mediante la llamada al método doDelete() dentro del código: </li></ul></ul><ul><ul><li>public void doDelete() </li></ul></ul><ul><ul><ul><li>Método de la clase Agent que realiza una transición del los estados Activo, Suspendido o En espera al estado de Borrado destruyendo al agente. </li></ul></ul></ul><ul><ul><ul><li>Se suele usar para finalizar agentes que están en ejecución continua. </li></ul></ul></ul><ul><ul><ul><li>El método doDelete() llama automáticamente al método takeDown(). </li></ul></ul></ul><ul><ul><li>protected void takeDown() </li></ul></ul><ul><ul><ul><li>Se usa para realizar tareas de limpieza, como desregistrar el agente del DF. </li></ul></ul></ul><ul><ul><ul><li>Es tarea del programador sobrescribir el método para proveer al agente de un comportamiento especial antes de su destrucción. </li></ul></ul></ul>
  12. 12. Terminación del Agente BookBuyerAgent public class BookBuyerAgent extends Agent { // . . . protected void setup() { // . . . if (args != null . . .) { // . . . } else { // si no se ha introducido el argumento título // del libro finaliza System.out.println(&quot;No se ha especificado el título&quot;); doDelete(); // llamada al método para la destrucción //del agente } } protected void takeDown() { // sólo realiza una despedida System.out.println(&quot;Agente comprador &quot; + getAID().getName() + &quot; terminando.&quot;); } // . . . }
  13. 13. Terminación del Agente BookSellerAgent <ul><li>public class BookSellerAgent extends Agent { </li></ul><ul><li>// . . . </li></ul><ul><li>protected void takeDown() { </li></ul><ul><ul><li>try { // Intenta darse de baja de las página </li></ul></ul><ul><ul><li>amarillas </li></ul></ul><ul><ul><li>DFService.deregister(this); } </li></ul></ul><ul><ul><li>catch (FIPAException fe) { </li></ul></ul><ul><ul><li>fe.printStackTrace(); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>// Cierra la interfaz de usuario </li></ul></ul><ul><ul><li>myGui.dispose(); </li></ul></ul><ul><ul><li>// Se despide </li></ul></ul><ul><ul><li>System.out.println(&quot;Seller-agent </li></ul></ul><ul><ul><li>&quot;+getAID().getName()+&quot; terminating.&quot;); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><li>// . . . resto del código </li></ul><ul><li>} </li></ul><ul><li>La llamada a takeDown() por parte del método doDelete() sólo se produce </li></ul><ul><li>si se cierra la interfaz o la consola, por tanto, DoDelete() se utiliza en la clase </li></ul><ul><li>BookSellerGui. </li></ul>
  14. 14. Terminación del Agente BookSellerAgent <ul><li>public class BookSellerGui extends JFrame { </li></ul><ul><li>private BookeSellerAgent myAgent ; </li></ul><ul><li>// . . . </li></ul><ul><li>// constructor </li></ul><ul><li>BookSellerGui(BookSellerAgent a) {// . . . </li></ul><ul><li>myAgent = a; </li></ul><ul><li>// . . . </li></ul><ul><li>// comportamiento de la ventana de interfaz </li></ul><ul><li>addWindowListener (new WindowAdapter() { </li></ul><ul><li>// recoge el evento de cerrar la ventana </li></ul><ul><li>public void windowClosing(WindowEvent e){ </li></ul><ul><ul><ul><ul><ul><li>// llamada al método encargado de la limpieza </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>myAgent.doDelete(); </li></ul></ul></ul></ul></ul><ul><li>} </li></ul><ul><li>)}; </li></ul><ul><li>} </li></ul><ul><li>// . . . </li></ul><ul><li>} </li></ul>
  15. 15. Identificador de un agente <ul><ul><li>Cada agente tiene que estar identificado de forma única en la plataforma. Según las especificaciones FIPA, debe tener la siguiente estructura: </li></ul></ul><ul><ul><ul><li>nombre_agente@host:puerto/JADE </li></ul></ul></ul><ul><ul><li>El método getAID() de la clase Agent devuelve el identificador del agente. </li></ul></ul>
  16. 16. Paso de argumentos <ul><ul><li>Se pueden pasar argumentos a un agente desde la línea de comandos o desde la interfaz gráfica. </li></ul></ul><ul><ul><li>Los argumentos se pueden recuperar usando el método getArguments() de la clase Agent que devuelve un array de objetos. </li></ul></ul>
  17. 17. Detalle de la obtención de los argumentos en el BookBuyerAgent // . . . órdenes package e import public class BookBuyerAgent extends Agent { private String targetBookTitle; // Título del libro que se quiere private AID[] sellerAgents; // Lista de los agentes vendedores de libros conocidos protected void setup() { System.out.println(&quot;Hallo! Buyer-agent &quot;+getAID().getName()+&quot; is ready.&quot;); // Saludo Object[] args = getArguments(); // Obtiene los argumentos del comprador if (args != null && args.length > 0) { // Tiene que haber al menos un argumento targetBookTitle = (String) args[0]; // Obtiene el título del libro a comprar //que se pasó como primer argumento System.out.println(&quot;Target book is &quot;+targetBookTitle); // visualiza el título //que quiere //comprar // . . . resto del código
  18. 18. Paso de argumentos en la línea de comandos <ul><ul><li>Ejemplo con el agente BookBuyerAgent: </li></ul></ul><ul><ul><li>java jade.Boot -container agenteComprador:examples.bookTrading.BookBuyerAgent(libro1 &quot;libro 2&quot; libro3)‏ </li></ul></ul>
  19. 19. Paso de argumentos desde la interfaz gráfica
  20. 20. ¿Cómo obtener un tipo de servicio registrado en el DF? <ul><ul><li>El agente que busca servicios debe proporcionar una plantilla de descripción de la clase DFAgentDescription . </li></ul></ul><ul><ul><li>Como resultado obtendrá una lista de todas las descripciones que coincidan con la plantilla proporcionada. </li></ul></ul><ul><ul><li>Para realizar una búsqueda jade proporciona diversos métodos de búsqueda que se encuentran en la clase DFService. </li></ul></ul>
  21. 21. Ejemplo de búsqueda en BookBuyerAgent //… DFAgentDescription template = new DFAgentDescription(); ServiceDescription sd = new ServiceDescription(); sd.setType(&quot;book-selling&quot;); template.addServices(sd); try { DFAgentDescription[] result = DFService.search(myAgent, template); System.out.println(&quot;Found the following seller agents:&quot;); sellerAgents = new AID[result.length]; for (int i = 0; i < result.length; ++i) { sellerAgents[i] = result[i].getName(); System.out.println(sellerAgents[i].getName()); } } //…
  22. 22. Ejercicio: Introducción a un SMA en un entorno JADE <ul><ul><li>La finalidad de este ejercicio es aprender a crear un agente JADE y que este realice tareas. </li></ul></ul><ul><ul><li>Objetivo: crear 6 agentes </li></ul></ul><ul><ul><ul><li>3 de ellos con un tipo de servicio concreto (“comidaRapida”) y nombre (“telepizzaX”), donde X irá desde 1 hasta 3. </li></ul></ul></ul><ul><ul><ul><li>2 con otro tipo de servicio concreto (“comidaRapida”) y nombre (“teletoltillaX”), donde X irá desde 1 hasta 2. </li></ul></ul></ul><ul><ul><ul><li>y el último agente no ofrece servicios, los solicita. </li></ul></ul></ul><ul><ul><li>Para crear estos agentes, serán necesarias dos clases diferentes: </li></ul></ul><ul><ul><ul><li>una clase para los agentes que ofrecen servicios </li></ul></ul></ul><ul><ul><ul><li>otra clase para los agentes que solicitan servicios. </li></ul></ul></ul>
  23. 23. Ejercicio: Introducción a un SMA en un entorno JADE <ul><ul><li>Los agentes que ofrecen servicios deberán realizar las siguientes tareas: </li></ul></ul><ul><ul><ul><li>Mostrar por pantalla un saludo, su nombre, su AID y su estado. </li></ul></ul></ul><ul><ul><ul><li>Pasar como argumentos el tipo y nombre de servicio, capturar estos argumentos y asignárselos al servicio. </li></ul></ul></ul><ul><ul><ul><li>Registrar su servicio en las páginas amarillas. </li></ul></ul></ul>
  24. 24. Ejercicio: Introducción a un SMA en un entorno JADE <ul><ul><li>El agente que solicita servicios deberá realizar las siguientes tareas: </li></ul></ul><ul><ul><ul><li>Mostrar por pantalla un saludo, su nombre, su AID y su estado. </li></ul></ul></ul><ul><ul><ul><li>Buscar y listar los tipos y nombres de los servicios que ofrece un agente determinado y mostrar el AID del agente que ofrece ese servicio. </li></ul></ul></ul><ul><ul><li>Finalmente los agentes se despiden y eliminan sus registros de las páginas amarillas. </li></ul></ul>
  25. 25. Instrucciones <ul><ul><li>Para realizar el ejercicio hay que seguir los siguientes pasos: </li></ul></ul><ul><ul><li>Crear una carpeta llamada “Practica1” en C:jadesrcexamples </li></ul></ul><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 (este archivo se situará en la carpeta creada anteriormente). </li></ul></ul><ul><ul><li>Completar el código del ejercicio sustituyendo los “… ” por lo que se considere adecuado. </li></ul></ul><ul><ul><li>Compilar el código desde una consola en el directorio especificado en el primer punto con la sentencia “ javac *.java”. </li></ul></ul><ul><ul><li>Abrir una nueva consola para ejecutar el RMA. </li></ul></ul><ul><ul><li>Lanzar desde consola los 6 agentes que se piden en el ejercicio. </li></ul></ul>
  26. 26. Entrega <ul><ul><li>Enviar a “ [email_address] ” los siguientes documentos: </li></ul></ul><ul><ul><ul><li>Los archivos con el código que se pide en el ejercicio. </li></ul></ul></ul><ul><ul><ul><li>Un archivo con: </li></ul></ul></ul><ul><ul><ul><ul><li>Nombre y apellidos </li></ul></ul></ul></ul><ul><ul><ul><ul><li>DNI </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Grupo de prácticas (sil, limia, bubal, …) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Solución a las preguntas planteadas </li></ul></ul></ul></ul>

×