UIMP: Taller de Sistemas MultiAgente
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

UIMP: Taller de Sistemas MultiAgente

  • 4,813 views
Uploaded on

Presentación utilizada para presentar los contenidos teóricos del taller, básicamente la plataforma/framework de programación de sistemas multiagente basado en Java llamado JADE, y sus extensiones......

Presentación utilizada para presentar los contenidos teóricos del taller, básicamente la plataforma/framework de programación de sistemas multiagente basado en Java llamado JADE, y sus extensiones de agentes BDI (JADEX) y para plataformas móviles (LEAP)

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
4,813
On Slideshare
4,567
From Embeds
246
Number of Embeds
4

Actions

Shares
Downloads
150
Comments
0
Likes
1

Embeds 246

http://yerart.wordpress.com 231
http://www.slideshare.net 9
http://www.slideee.com 5
http://static.slideshare.net 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Cómo programar un Agente: JADE, LEAP y JADEX Javier Carbó, Grupo de Inteligencia Artificial Aplicada Univ. Carlos III de Madrid Curso “SSII en el siglo XXI” Univ. Internacional Menendez Pelayo, Julio de 2008
  • 2. Indice
    • Introducción a Jade, FIPA, LEAP y Jadex
    • JADE:
      • Arquitectura de JADE
      • Un agente en JADE
      • Comportamientos JADE
      • Mensajes JADE
      • Ontologías en JADE
    • LEAP
    • JADEx
      • Invocando agentes en Jadex
      • La definición xml de un agente en Jadex
      • Un plan de un agente Jadex
  • 3. Construir un Sistema de Agentes
    • 1. Idear escenarios y casos de uso
    • 2. Distinguir entre roles y servicios
    • 3. Asignar responsabilidades
    • 4. Definir términos en ontología
    • 5. Determinar mensajes entre agentes y su orden (protocolo)
    • 6. Implementar el agente
    • 7. Crear el interfaz
    Problema a tratar Dominios aplic. Ejemplo, pasos.
      • alumnos, profes
      • Biblioteca, aulas
      • recomendaciones
      • Quién puede pedir libros?
      • Quién puede entrar en el aula?
      • (propose (libro “JADE”) (editorial “wiley”)
      • (author “caire”) (year “2007”) …)
      • “ asignatura”, “libro”, “curso”, “nota”, …
    Propose book; Reject/Accept Proposal En java JADE, LEAP o JADEX
  • 4. Ejemplo de escenario
  • 5. Distinguir entre roles y servicios
    • Roles
      • Pasajero
      • Aeropuerto
      • Tripulante
      • Personal servicios
      • Seguridad
    • Servicios
      • Registro
      • Comercios: prensa, relax, cambio moneda, regalos, bar
      • Viaje: Check-in, Embarque
      • Otros: zona fumadores, wifi, WC, información_aeropuerto, información_turística
  • 6. Asignar responsabilidades
    • Roles
      • Pasajero
      • Aeropuerto
      • Tripulante
      • Personal servicios
      • Seguridad
    Pedir registro, pedir servicios_viaje, pedir servicios_comercio, pedir servicios_otros Ofrecer registro, ofrecer servicios_otros, ofrecer servicios_viaje Ofrecer servicios_comercio
  • 7. Ontología
  • 8. Protocolo: Secuencias de mensajes Gates Prensa Barajas PROPOSE USAToday, Corr. Sera Se mueve junto a prensa REQUEST register ... AGREE REFUSE INFORM-REF checkin INFORM gates, us citizen towards rome ACCEPT-PROPOSAL REJECT-PROPOSAL
  • 9. Introducción a JADE, LEAP, JADEX
    • http://jade.tilab.com/
    • Jade es una plataforma para ejecutar agentes que permite:
      • Ejecución de agentes completamente asíncrona
      • Comunicación entre agentes en la misma o diferentes plataforma/s JADE/LEAP/JADEX
      • Programación de agentes mediante un conjunto de paquetes Java.
      • Validación de la ejecución mediante seguimiento mensajes y estado interno del agente.
    • Es la plataforma más extendida porque implementa el estándar FIPA.
  • 10. SNIFFER de JADE
  • 11. El estándar FIPA
    • www.fipa.org
    • Especifica formalemnte el lenguaje de comunicación (ACL)
      • Codificación, semántica, y uso de los mensajes
    • Indica como interaccionan y son gestionados los agentes
    Message Transport System Agent Management System Directory Facilitator Agent Platform Agent 1 Otras Plataformas FIPA Páginas Amarillas Registro y supervisión de agentes Agent n
  • 12. El ACL del estándar FIPA
    • Cada uno de los mensajes FIPA se define mediante:
      • El contenido del mensaje en donde se detalla qué tipo de contenido debe llevar
      • La intención ( performative ) que es una explicación semántica del acto de comunicación
      • El modelo formal en el que se codificará el mensaje
      • La ontología en la que se describen los términos del contenido del mensaje
  • 13. Un mensaje FIPA-ACL (inform :sender antagent :receiver bob martin :conversation_id example6 :reply_with 275 :reply_by wed 3pm :language lisp :content (target (project “1hour”) (platform “computer15”) (author “sean”)) (time “8/07/01 4pm”) (message “build failed”) (target “compile”) ) ) Intención (performative) Inform, Request, Failure, Refuse, ... Direccionamiento sender, receiver Coordinación de mensajes Respuesta esperada, id de diálogo Detailed action or request problem specific language, ontology, request
  • 14. Un mensaje FIPA-ACL
    • Ejemplo: el agente billgates informa al agente barajas de su llegada (indicando información sobre sí mismo y sobre su viaje)
    • (request
    • :sender (agent-identifier :name billgates)
    • :receiver (set (agent-identifier :name barajas))
    • :content intancia de subclase de accion new Register (new Pasajero (new Person(…) new Travel(…))))
    • :codec SL
    • :ontology airport-ontology
    • :reply-with register-billgates)
    • )
  • 15. Actos comunicativos FIPA-ACL
    • accept-proposal, agree, cancel, call-for-proposal, confirm, disconfirm, failure, inform, inform-if, inform-ref, not-understood, propagate, propose, query-if, query-ref, refuse, reject-proposal, request, request-when, request-whenever, subscribe.
  • 16. Introducción a LEAP
    • Leap es una plataforma casi idéntica a JADE para dispositivos limitados (móviles y pdas).
    • Se distribuye desde la propia página de JADE
    • Clases LEAP son un subconjunto adaptado de las clases que forman el paquete JADE.
    • El código de un agente JADE funciona casi tal cual en LEAP.
    • Para simularlo en un PC necesitamos de Java Wireless Toolkit en lugar de jdk estándar.
  • 17. Introducción a JADEX
    • http://vsis-www.informatik.uni-hamburg.de/projects/jadex/
    • JADE facilita comunicaciones, pero no estructura de razonamiento interno.
    • Razonamiento JADE depende de cómo se programen los comportamientos. Ideal para agentes reactivos.
    • Se puede combinar con JESS o con DROOLS para dotar a los agentes de inteligencia.
    • JADEX es única plataforma compatible con JADE (es una extensión) que facilita implementación del modelo deliberativo (BDI) de comportamiento.
  • 18. Arquitectura de JADE
    • Arquitectura distribuida
      • Multiples Hosts
      • Multiples Procesos
      • Multiples “Agent Containers”
    • Un contenedor de agentes
      • Un proceso java por cada contenedor
      • Es transparente a los agentes
      • El contenedor principal alberga los servicios de la plataforma JADE
      • Contenedores en contacto mediante Java RMI
  • 19. Servicios de plataforma
    • Han sido implementados como agentes
    • AMS: Agent Management Service
      • “ White Pages”
      • Matiene una lista de los identificadores de agentes (AID) que se están ejecutando en la plataforma
    • DF: Directory Facilitator
      • “ Yellow Pages”
      • Proporciona un servicio de búsqueda de agentes
      • Relaciona la descripción del tipo (role) y servicio que proporcionan los agentes con su identificador.
      • Los agentes pueden modificar la información sobre sí mismos.
  • 20. Arquitectura JADE Network protocol stack using RMI JRE JRE JRE Jade Main -container Jade Agent Container Jade Agent Container Jade distributed Agent Platform DF Agent AMS Agent Application Agent Application Agent Application Agent Application Agent Application Agent Application Agent Host 1 Host 2 Host 3 Application Agent Application Agent
  • 21. DF: Directorio de agentes y servicios
    • Proporciona un lugar en donde los agentes registran sus descripciones/servicios de tal forma que otros agentes puedan utilizar ese medio para localizar agentes/servicios con los que deseen interactuar/invocar
    • Datos mínimos de un agente
      • AID: nombre único global
      • Nombre del servicio
      • Tipo del servicio
    • Cómo anunciarse
      • Primero el agente da a conocer sus servicios al DF
      • Y entonces el DF crea una entrada de directorio con sus datos de agente
      • La búsqueda de los agentes es por matching simple de cadenas de caracteres y pares atributo-valor
  • 22. Un agente JADE
    • Un agente es un programa JADE de un solo thread.
    • Incluye un modelo para programar su funcionamiento basado en tareas:
      • Una tarea = un comportamiento ( behaviour )
      • Programadas por el agente
      • Tareas operan en paralelo.
      • Permite coordinación explícita entre tareas
      • Single-threaded
    • Envía y recibe mensajes a través de una API:
      • Que facilita la codificación/decodificación de mensajes
  • 23. Programar un agente JADE
    • Programar un agente en JADE consiste en definir una clase Java que representa al agente y:
      • Implementa los comportamientos que va a mostrar
      • Hereda de la clase jade.core.Agent
      • Programa sus métodos de inicio ( setup ) y fin ( takeDown )
    • Para ejecutar el agente, podemos hacerlo desde el interfaz de JADE o desde cualquier otro programa JAVA explícitamente
  • 24. Dentro de un Agente Agent Communication Language Agente Seve dispatch loop Ontology Profile Preferences Facts Rules Models Behaviour Behaviour Behaviour Agente Olazábal Seve: Golf course Course: Play Cancel Messages: Augusta (propose (course augusta … start cancel
  • 25. Lanzar un agente desde el GUI de JADE
    • export CLASSPATH=/ruta/jade/lib/jade.jar:/ruta/jade/lib/iiop.jar:/ruta/jade/lib/http.jar
    • java jade.Boot -gui
  • 26. Lanzar un agente desde el GUI de JADE
    • Seleccionamos el main-container en el árbol de directorios
    • Pulsamos el botón New Agent
  • 27. Un agente hola-mundo
    • import jade.core.Agent;
    • public class HiWorldAgent extends Agent
    • {
    • protected void setup()
    • {
    • System.out.println(‘‘Hola mundo! ‘‘ +
    • getAID().getName() + ‘‘ is ready.’’);
    • }
    • }
  • 28. Lanzando un agente JADE desde DOS
    • javac HiWorldAgent.java
    • export CLASSPATH=/opt/jade/lib/jade.jar:/opt/jade/lib/http.jar:.
    • java jade.Boot mi_agente:HiWorldAgent
    • This is JADE 3.4.1 - 2007/06/26 13:41:05
    • downloaded in Open Source, under LGPL restrictions,
    • at http://jade.cselt.it/
    • http://simon:7778/acc
    • Agent container Main-Container@JADE-IMTP://simon is ready.
    • Hola mundo! mi_agente@simon:1099/JADE is ready.
  • 29. Lanzar un agente desde un programa Java
    • import jade.core.*;
    • import jade.wrapper.*;
    • Runtime rt= Runtime.instance();
    • Profile p= new ProfileImpl();
    • AgentContainer ac= rt.createMainContainer(p);
    • Object misargs[]= null;
    • Agent miagente= ac.createAgent(“minombre”, ”mipaquete.miclase”, misargs);
    • miagente.start();
  • 30. Prog. Basada en Comportamientos JADE
    • Pasos:
    • 1. determinar qué debe ser capaz de hacer el agente
    • 2. asociar cada funcionalidad con un comportamiento
    • 3. escoger el tipo de comportamiento
    • 4. dejar a JADE la tarea del scheduling (un solo comportamiento se está ejecutando en cada instante)
  • 31. Comportamientos JADE
    • Cada agente tiene asociado un conjunto de comportamientos.
    • Cada comportamiento puede realizar una tarea simple como: “Envía este mensaje”, “Compra X”, etc.
    • Aunque se pueden crear comportamientos compuestos
    • Los comportamientos son objetos java (una subclase de jade.core.Behaviour ).
    • Un comportamiento se programa redefiniendo el método action ()
  • 32. Orden ejecución comportamientos JADE
    • Un agente esta permanentemente verificando si alguno de sus comportamientos puede ejecutarse.
    • Todos los comportamientos intentan ejecutarse con igual frecuencia
    • Cada agente tiene para sí una cola de comportamientos activos
    • Un comportamiento se ejecuta hasta que acaba (si no lo bloqueamos), al acabar se invoca al método done , para decidir si se pone al final de la cola de activos ( false ) o no.
  • 33. Orden ejecución comportamientos JADE
    • Un comportamiento puede bloquearse, método block ().
    • El bloqueo significa que, cuando el método action () termina, se le coloca en una segunda cola, la de comportamientos bloqueados.
    • Se desbloquea cuando llegan mensajes al agente
    • Cuando llega un nuevo mensaje, se le saca de esa cola de comportamientos bloqueados y se le coloca al final de la de comportamientos activos.
  • 34. Tipos de comportamientos
    • SimpleBehaviour
      • Hay que definir el método done
    • CyclicBehaviour
      • No se puede definir done, ya que es como si estuviera permanentemente devolviendo false
    • OneShotBehaviour
      • No se puede definir done ya que es como si estuviera permanentemente devolviendo true
  • 35. Tipos de Comportamientos JADE Behaviour action() done() Simple Behaviour CompositeBehaviour <<protected>> preAction() <<protected>> postAction() <<protected>> bodyAction() addBehaviour() removeBehaviour() OneShotBehaviour Abstract class Abstract class - simple Abstract class – composes children; Finite State Machine done = true done = false CyclicBehaviour SequentialBehaviour <<protected>> bodyAction() ParallelBehaviour <<protected>> bodyAction() FSMBehaviour <<protected>> bodyAction()
  • 36. Mensajes JADE
    • Toda la comunicación está basada en el intercambio de mensajes
    • La Plataforma JADE que alberga al agente se encarga de hacerle llegar los mensajes a la plataforma del agente destinatario.
    • La codificación y decodificación de mensajes la hacen automáticamente los agentes
  • 37. Construir un mensaje
    • Cada mensaje es una objeto de la clase jade.lang.acl.ACLMessage .
    • Se puede acceder a sus campos mediante métodos get y set .
    • Pasos:
    • Crear objeto mensaje
    • Indicar acto comunicativo ( performative )
    • Indicar destinatarios
    • Indicar otros atributos del mensaje (codificación, ontología, lenguaje, reply-with, etc.)
    • Rellenar contenido (Cadena de caracteres en un lenguaje, u objetos de una ontología)
  • 38. Atributos de un mensaje
      • ConversationID – Para enlazar mensajes de un mismo diálogo
      • In reply to – Para distinguir a qué mensaje está respondiendo
      • Reply with – Para indicar cómo responder al mensaje
      • Reply by – Para establecer un tiempo límite de respuesta
      • Language – Para indicar en qué lenguaje está escrito el texto enviado como contenido
      • Ontology – Para especificar qué ontología está usandose
      • Protocol – Especifica el protocolo (predefinido)
      • Content – Contenido principal del mensaje
  • 39. Enviar un mensaje
    • ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
    • msg.addReceiver(new AID(“Peter”, AID.ISLOCALNAME));
    • msg.setLanguage(“English”);
    • msg.setContent(“Today it s raining”);
    • send(msg);
  • 40. Recibir un mensaje
    • Para reconocer ( matching ) si el mensaje recibido es del tipo del que se espera, se utilizan plantillas (objetos de tipo jade.lang.acl.MessageTemplate )
    • Pasos:
    • Creamos plantilla para comparar el mensaje recibido con el esperado: MessageTemplate . Por ejemplo:
      • MatchPerformative(ACLMessage.REQUEST)
    • I nvocamos método receive del agente con el objeto de tipo plantilla como argumento. Este método devuelve un objeto del tipo ACLMessage .
      • si el mensaje != null era el mensaje que esperábamos.
  • 41. Construir una respuesta
    • public void action() {
    • ACLMessage msg = myAgent.receive();
    • if (msg != null) {
    • String title = msg.getContent();
    • ACLMessage reply = msg.createReply();
    • Integer price = (Integer) catalogue.get(title);
    • if (price != null) {
    • reply.setPerformative(ACLMessage.PROPOSE);
    • reply.setContent( String.valueOf(price.intValue()));
    • } else
    • {
    • reply.setPerformative(ACLMessage.REFUSE);
    • reply.setContent( not-available );
    • }
    • myAgent.send(reply);
    • } } }
  • 42. Ontologías en JADE
    • Una ontología proporciona una descripción de los conceptos de un dominio y las relaciones entre ellos. Relaciona estos conceptos con objetos Java.
    • JADE permite el manejo de ontologías para:
    • Representar el dominio de aplicación mediante conceptos, predicados, acciones, tipos de agentes, etc.
    • Intercambiar elementos de la ontología entre agentes (i.e. en el contenido del mensaje FIPA)
    • Definirlas ‘a mano’ es conceptualmente sencillo. Pero pesado si la ontología tiene un tamaño medio. Una alternativa es utilizar Protégé 2000 para el modelado y generación (Beangenerator) de la ontología JADE.
  • 43. Componentes de una ontología
    • Una ontología es un conjunto de elementos ( schemas ) que permiten representar el dominio del que hablan los agentes.
    • Predicados: Afirmaciones sobre el estado del mundo, p.e.
      • '(pertenece (Profesor :name Carbo)(Universidad :name CarlosIII))'
      • Se utilizan en típicamente en mensajes INFORM y QUERY-IF, no en REQUEST.
    • Términos: pueden ser conceptos, acciones, primitivas, agregados, referencias y variables.
  • 44. Términos de una ontología
    • Conceptos: representan una estructura con varios atributos:
      • (Libro :titulo &quot;Razonamiento con incertidumbre&quot; :autor (Profesor :name Carbo))
      • No aparecen aisladamente en los mensajes sino incluidos en predicados u otros tipos de términos.
    • Acciones: Representan una acción a realizar por un agente:
      • (Estudiar (Libro :titulo &quot;Razonamiento con incertidumbre&quot; :autor (Profesor :name Carbo)))
      • Típicamente se utilizan en mensajes de tipo REQUEST.
    • Agregaciones: conjuntos, listas de otros términos.
    • Primitivas: elementos atómicos como números y cadenas de caracteres.
    • Variables: ?x
    • Referencias: Para todo x que:
      • (all ?x (pertenece ?x (Universidad :name Carlos3))
  • 45. Conceptos de una ontología
    • Para implementar nuestros propios concepts, acciones y predicados usaremos instancias de PredicateSchema , AgentActionSchema y ConceptSchema .
    • Estas clases tienen métodos que permiten construir nuestra propia estructura de estos términos para nuestro dominio.
    • Así con una clase Libro que implemente la interfaz Concept , podemos añadir este concepto desde el código de la clase de nuestra ontología con:
      • add(new ConceptSchema(&quot;Libro&quot;, Libro.class);
      • ConceptSchema cs= (ConceptSchema) getSchema(&quot;Libro&quot;);
      • cs.add(&quot;isbn&quot;, (PrimitiveSchema) getSchema(BasicOntology.INTEGER));
  • 46. Conceptos de una ontología
    • Para hacer un campo opcional, incluir el argumento: ObjectSchema.OPTIONAL
    • Para indicar la cardinalidad, incluir dos argumentos númericos (mínima y máxima) o bien ObjectSchema.UNLIMITED
    • Si queremos indicar un id de agente: BasicOntology.AID
    • Una cadena de caracteres: BasicOntology.STRING
    • Cada campo de un termino debe tener sus correspondientes métodos de acceso set y get, p.e. la clase del concepto Libro debe incluir los métodos setTitulo, getTitulo, etc.
  • 47. Predicados y acciones de una ontología
    • Para añadir predicados o acciones, el proceso es equivalente a los conceptos pero utilizando las clases PredicateSchema y AgentActionSchema en lugar de ConceptSchema
    • ... y además la clase indicada como argumento debe implementar la interfaz Predicate o AgentAction en lugar de Concept .
  • 48. Utilizar una ontología
    • Lo primero es utilizar una misma referencia estática a la ontología:
      • private Ontology miont =MiOntologia.getInstance();
    • Luego registrarla junto con el codificador codec : que hayamos escogido ( SLCodec , LEAPCodec ...)
      • getContentManager().registerLanguage( new SLCodec());
      • getContentManager().registerOntology(miont);
  • 49. Utilizar una ontología
    • Para indicar en un mensaje la ontología utilizada:
      • msg.setLanguage(codec.getName());
      • msg.setOntology(miont.getName());
    • A continuacion con los métodos set damos valor a los términos de la ontología a utilizar en el contenido del mensaje, p.e.
      • Libro milibro = new Libro();
      • milibro.set(&quot;Titulo&quot;, &quot;Razonamiento con incertidumbre&quot;');
    • Por último se rellena el contenido del mensaje antes de mandarlo:
      • getContentManager().fillContent(msg,milibro);
  • 50. LEAP
    • Leap es una plataforma casi idéntica a JADE para dispositivos limitados (móviles y pdas).
    • Se distribuye desde la propia página de JADE: LeapAddOn-3.4.1.zip
    • Clases LEAP son un subconjunto adaptado de las clases que forman el paquete JADE.
    • LEAP hace uso de Apache ANT para compilar el ejecutable en dispositivos limitados (.jad). http://ant.apache.org/
    • El código de un agente JADE funciona casi tal cual en LEAP.
    • Se ejecuta sobre la versión micro de Java (J2ME) en lugar la versión estándar (JDK). J2ME incluido en el paquete Sun Java Wireless Toolkit. Descargable gratuitamente de la web.
  • 51. Plataformas de ejecución de LEAP
  • 52. Ejecución de LEAP en móviles/PDAs
  • 53. Ejecución de LEAP en móviles/PDAs
  • 54. Limitaciones de LEAP
    • No se puede utilizar el SNIFFER
    • No se pueden utilizar clases de …
      • … de Java que no estén incluidas en la versión micro (J2ME). Es decir, no todo jdk disponible. Por ejemplo, J2ME no soporta la librería gráfica awt.
      • … de Jade que no pertenezcan a la librería de LEAP.
    • Hay que contar con los fuentes de cualquier otra clase java a incluir, ya que hay que recompilar directamente todo el código fuente a la vez para generar el .jad
  • 55. Compilar LEAP
    • Editar fichero ‘buidleap.properties’ incluyendo la carpeta del jwt y la version 2.0 de midp en los campos j2me-wtk-home y midp-version.
    • Escribiremos ‘ant j2se rebuild’ para generar el fichero jade/leap/j2se/lib/JadeLeap.jar que utilizará la plataforma jade que hace de main-container.
    • Escribiremos ‘ant midp rebuild’ para generar el fichero jade/leap/midp/lib/JadeLeap.jar que utilizará el emulador de jwt.
    • Sugerencia: Para compilar agente de leap, usar netbeans con el mobility pack.
  • 56. Compilar la demo de LEAP
    • Es preciso retocar el código de la demo que viene con LEAP:
    • Línea 87 de ChatClientAgent.java : hacer como haría el preprocesador. Eliminar el código a excluir en caso de usar MIDP, junto con las directivas. Hacer lo mismo en el caso de incluir.
    • En el fichero MIDPChatGUI.java eliminar directivas del principio del fichero.
    • Eliminar las líneas 31, 44 y 115 de Start.java
  • 57. Ejecutar LEAP
    • set classpath=rutajadejadeleapj2selibJadeLeap.jar
    • java jade.Boot -nomtp
    set classpath=rutawtkwtk25in rutawtkwtk25inemulator -Xdescriptor:leapmnet.jad
    • Primero lanzar la plataforma JADE que con la que se comunicará el movil/pda:
    • Después lanzar el emulador jwt del movil/pda con el fichero .jad generado como argumento:
  • 58. Jadex
    • Extensión de JADE para utilizar una arquitectura deliberativa en JADE. Los agentes Jadex se ejecutan en un container de Java.
    • Se definen con dos elementos: una descripción en xml y clases java que representan sus planes.
      • La implementación en java de cada plan accede y modifica las creencias, satisface/abandona objetivos y adopta nuevos objetivos.
      • En el fichero xml incluimos información sobre: creencias, deseos (goals), planes, mensajes y estados iniciales del agente.
  • 59. Arquitectura Jadex
  • 60. Ejecución desde el interfaz de Jadex
    • Desde la ventana principal ( Jadex Control Center ) pulsar el botón“+” para incluir el jar o la carpeta donde están las clases JAVA que utiliza el agente a incluir.
    • Entonces pulsar el botón“…” para incluir el fichero xml que define a tu agente.
    • Una vez compilado el xml sin errores, indicaremos el nombre que le damos al agente, los argumentos que queramos (si procede) y podremos escoger uno de los estados iniciales que hayamos definido en el fichero xml.
  • 61. Ejecución desde el interfaz de jadex
  • 62. Ejecución desde un programa en java
    • import jadex.model.SXML;
    • import jadex.util.Sreflect;
    • import jadex.modelIMBDIAgent;
    • String misimports[]= null;
    • IMBDIAgent miagente= IMBDIAgent model = jadex.model.SXML.loadAgentModel (“mixml”, misimports);
    • Object misargs[]= new Object[] {“mixml”,”miestadoinicial”};
    • Agent miagente= ac.createAgent(“minombre”, &quot;jadex.adapter.jade.JadeAgentAdapter&quot; , misargs);
    • miagente.start();
  • 63. La definición xml de un agente Jadex
  • 64. Creencias de un agente jadex
    • Asocia una clase java a las creencias que manejarán los planes del agente en cuestión:
      • <belief name=“mi_posicion&quot; class=“Posicion&quot;>
    • Podemos definir creencias iniciales usando argumentos con los que se creó el agente JADEX
      • <fact>new Movimientos($arg1)</fact>
    • Podemos definir grupos de creencias
      • <beliefset name=“mis_movtos&quot; class=“Posicion&quot; />
  • 65. Planes de un agente jadex
    • Indicamos el constructor de la clase java correspondiente al plan y las condiciones para que se ejecute:
    • Al iniciarse el agente:
      • <plan name=“MoverPlan“>
      • <body>new MoverPlan()</body>
      • <trigger>Condicion</trigger>
      • </plan>
      • Donde la condición puede ser:
      • Cuando se activa un objetivo
        • <trigger><goal ref=“comerpiezagoal&quot;/></trigger>
      • Cuando se produce un evento (llegada de mensaje)
        • <trigger><messageevent ref=“turnomsg&quot;/></trigger>
  • 66. Los mensajes de un agente jadex
    • Se definen su dirección, performative y típicamente el comienzo del contenido para distinguir su tipo:
    • <messageeventname=“turnomsg&quot; type=&quot;fipa“ direction=&quot;receive&quot;>
    • <parameter name=&quot;performative&quot; class=&quot;String“ direction=&quot;fixed&quot;>
    • <value>jadex.adapter.fipa.SFipa.CFP</value>
    • </parameter> <parameter name=&quot;content-start&quot; class=&quot;String“ direction=&quot;fixed&quot;>
    • <value>&quot;Movement_expected&quot;</value>
    • </parameter>
    • </messageevent>
  • 67. Estados iniciales de un agente Jadex
    • En ellos podremos indicar las creencias y planes que inicialmente asume el agente:
    • <initialstates>
    • <initialstatename=“muevoprimero&quot;>
    • <beliefs><initialbeliefsetref=“mis_movimientos&quot;>
    • <fact>new Posicion(0,0)</fact>
    • </initialbeliefset></beliefs>
    • <plans>
    • <initialplanref=&quot;surveillanceplan&quot; />
    • </plans>
    • </initialstate>
    • </initialstates>
  • 68. Deseos ( goals ) de un agente jadex
    • No tienen asociado una clase java. 4 tipos:
    • Perform : actividades a realizar sobre el estado del mundo
      • <performgoal name=“comerpieza”></performgoal>
    • Achieve : un determinado estado del mundo (definido por las creencias) debe alcanzarse
    • Maintain : reestablece un estado del mundo en cuanto falte alguna creencia.
    • Query : para completar estado del mundo
    • Usualmente activados desde los planes en java:
    • Goal objetivo= createGoal(“comerpieza&quot;);
    • dispatchTopLevelGoal(objetivo);
    • dispatchSubgoal(objetivo);
  • 69. Deseos ( goals ) de un agente jadex
  • 70. Paso de pa rámetros
    • Se pueden indicar parámetros al definir un objetivo:
      • <performgoal name=“comerpieza&quot;>
      • <parameter name=“pieza&quot; class=“Pieza&quot; />
      • </performgoal>
    • Los parámetros son clases java que nos definimos nosotros.
    • El plan instanciado como consecuencia de la adopción de un determinado objetivo recibe dicho parámetro:
      • <plan name=“MoverPlan&quot;>
      • <parameter name=“pieza&quot; class=“Pieza&quot;><goalmapping ref=“comerpieza.pieza&quot;/></parameter>
      • <body>new WarningPlan()</body>
      • <trigger><goal ref=“comerpieza&quot;/></trigger>
      • </plan>
  • 71. Una clase java Plan de jadex
    • Subclase de jadex.runtime.Plan
    • Mandar parámetro a objetivo creado en el plan:
      • Goal comer = createGoal(“comerpieza&quot;);
      • comer.getParameter(“pieza&quot;).setValue(pieza);
      • dispatchSubgoal(comer);
    • Acceder a las creencias
      • private RBeliefbase bb;
      • bb=getBeliefbase();
      • RBeliefSet loc=bb.getBeliefSet(“mis_movimientos&quot;);
      • Tuple[] loc2=(Tuple[])loc.getValues();
  • 72. Una clase java Plan de jadex
    • Acceder al mensaje que provocó un evento:
      • RMessageEvent peticion= ((RMessageEvent)getInitialEvent());
      • String contenido=mensaje.getMessage().getContent();
    • Mandar un mensaje nuevo:
      • ACLMessage mensaje= newACLMessage(ACLMessage.INFORM);
      • mensaje.addReceiver(new AID(receptor,AID.ISLOCALNAME));
      • mensaje.setContent(imagenmundoexterior);
      • sendMessage(createMessageEvent(mensaje));
      • Mandar una respuesta:
      • RMessageEventre=peticion.createReply(ACLMessage.INFORM,respuesta);
      • sendMessage(re);
  • 73. Acceder a Jade desde Jadex
    • Para invocar métodos particulares de JADE como para registrarse en el directorio, JADEX tiene planes predefinidos (ver ejemplos).
    • Una alternativa es hacerlo igual que en JADE desde un plan de JADEX:
      • jade.core.Agent agent = (jade.core.Agent)getScope().getPlatformAgent();
  • 74. Directorio (DF) en jadex
    • <import>jadex.planlib.*</import>
    • <capability name=&quot;dfcap“ file=&quot;jadex.planlib.DF&quot;/>
    • Para registrarse:
    • <maintaingoalref name=&quot;df_keep_registered&quot;>
    • <concrete ref=&quot;dfcap.df_keep_registered&quot;/>
    • </maintaingoalref>
    • Para buscar en el df:
    • <achievegoalref name=&quot;df_search&quot;>
    • <concrete ref=&quot;dfcap.df_search&quot;/>
    • </achievegoalref>
  • 75. Directorio (DF) en jadex
    • <initialstate name=&quot;default&quot;>
    • <goals>
    • <initialgoal ref=&quot;df_keep_registered&quot;>
    • <parameter ref=&quot;description&quot;> <value>$propertybase.getProperty(&quot;fipa.agentdescription.dealer&quot;)</value>
    • </parameter>
    • </initialgoal>
    • </goals>
    • </initialstate>