uimp: taller de sistemas multiagente

75
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

Upload: gerardo-demiguel

Post on 08-Jun-2015

3.404 views

Category:

Technology


1 download

DESCRIPTION

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)

TRANSCRIPT

Page 1: UIMP: Taller de Sistemas MultiAgente

Cómo programar un Agente:JADE, LEAP y JADEX

Javier Carbó, Grupo de Inteligencia Artificial AplicadaUniv. Carlos III de MadridCurso “SSII en el siglo XXI”Univ. Internacional Menendez Pelayo, Julio de 2008

Page 2: UIMP: Taller de Sistemas MultiAgente

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

Page 3: UIMP: Taller de Sistemas MultiAgente

Construir un Sistema de Agentes 1. Idear escenarios y casos de uso

2. Distinguir entre roles y servicios3. Asignar responsabilidades4. Definir términos en ontología5. Determinar mensajes entre agentes y

su orden (protocolo)6. Implementar el agente 7. Crear el interfaz

Problema a tratar Dominios aplic.Ejemplo, pasos.

alumnos, profesBiblioteca, aulasrecomendaciones

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

Page 4: UIMP: Taller de Sistemas MultiAgente

Ejemplo de escenario

SmokingZone

Bar

Newspapers

BoardingGate

gates

Internet

Exchange

Souvenirs

TouristInfo

Spa

BARAJAS

allen

Page 5: UIMP: Taller de Sistemas MultiAgente

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

Page 6: UIMP: Taller de Sistemas MultiAgente

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

Page 7: UIMP: Taller de Sistemas MultiAgente

Ontología

Page 8: UIMP: Taller de Sistemas MultiAgente

Protocolo: Secuencias de mensajes

Gates PrensaBarajas

REQUEST register ...

AGREE

REFUSE

INFORM-REF checkin

INFORM gates, us citizen towards rome

PROPOSE USAToday, Corr. Sera

ACCEPT-PROPOSAL

REJECT-PROPOSAL

Se mueve junto a prensa

Page 9: UIMP: Taller de Sistemas MultiAgente

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.

Page 10: UIMP: Taller de Sistemas MultiAgente

SNIFFER de JADE

Page 11: UIMP: Taller de Sistemas MultiAgente

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

AgentManagement

System

DirectoryFacilitator

Agent Platform

Agent1

OtrasPlataformas

FIPA

PáginasAmarillas

Registro y supervisió

n de agentes

Agentn

Page 12: UIMP: Taller de Sistemas MultiAgente

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

Page 13: UIMP: Taller de Sistemas MultiAgente

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, ...

Direccionamientosender, receiver

Coordinación de mensajesRespuesta esperada, id de diálogo

Detailed action or requestproblem specific

language, ontology, request

Page 14: UIMP: Taller de Sistemas MultiAgente

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) )

Page 15: UIMP: Taller de Sistemas MultiAgente

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.

Page 16: UIMP: Taller de Sistemas MultiAgente

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.

Page 17: UIMP: Taller de Sistemas MultiAgente

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.

Page 18: UIMP: Taller de Sistemas MultiAgente

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

Page 19: UIMP: Taller de Sistemas MultiAgente

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.

Page 20: UIMP: Taller de Sistemas MultiAgente

Arquitectura JADE

Network protocol stack using RMI

JRE JRE JRE

Jade Main-container Jade Agent Container Jade Agent Container

Jade distributed Agent Platform

DF

Age

nt

AM

S A

gent

App

lica

tion

Age

nt

App

lica

tion

Age

nt

App

lica

tion

Age

nt

App

lica

tion

Age

nt

App

lica

tion

Age

nt

App

lica

tion

Age

nt

Host 1 Host 2 Host 3

App

lica

tion

Age

nt

App

lica

tion

Age

nt

Page 21: UIMP: Taller de Sistemas MultiAgente

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

Page 22: UIMP: Taller de Sistemas MultiAgente

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

Page 23: UIMP: Taller de Sistemas MultiAgente

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

Page 24: UIMP: Taller de Sistemas MultiAgente

AgenteSeve

Dentro de un AgenteAgent

CommunicationLanguage

dispatchloop

Ontology

ProfilePreferences

FactsRules

Models

Behaviour

Behaviour

Behaviour

AgenteOlazábal

Seve: Golf course

Course:

Play Cancel

Messages:

Augusta

(propose (course augusta …

start cancel

Page 25: UIMP: Taller de Sistemas MultiAgente

Lanzar un agente desde el GUI de JADEexport

CLASSPATH=/ruta/jade/lib/jade.jar:/ruta/jade/lib/iiop.jar:/ruta/jade/lib/http.jar

java jade.Boot -gui

Page 26: UIMP: Taller de Sistemas MultiAgente

Lanzar un agente desde el GUI de JADE Seleccionamos el main-container en el árbol de directorios Pulsamos el botón New Agent

Page 27: UIMP: Taller de Sistemas MultiAgente

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.’’);

}

}

Page 28: UIMP: Taller de Sistemas MultiAgente

Lanzando un agente JADE desde DOSjavac HiWorldAgent.javaexport CLASSPATH=/opt/jade/lib/jade.jar:/opt/jade/lib/http.jar:.java jade.Boot mi_agente:HiWorldAgentThis is JADE 3.4.1 - 2007/06/26 13:41:05downloaded in Open Source, under LGPL restrictions,at http://jade.cselt.it/http://simon:7778/accAgent container Main-Container@JADE-IMTP://simon is ready.Hola mundo! mi_agente@simon:1099/JADE is ready.

Page 29: UIMP: Taller de Sistemas MultiAgente

Lanzar un agente desde un programa Javaimport 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();

Page 30: UIMP: Taller de Sistemas MultiAgente

Prog. Basada en Comportamientos JADEPasos:1. determinar qué debe ser capaz de hacer el agente2. asociar cada funcionalidad con un comportamiento3. escoger el tipo de comportamiento4. dejar a JADE la tarea del scheduling (un solo

comportamiento se está ejecutando en cada instante)

Page 31: UIMP: Taller de Sistemas MultiAgente

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()

Page 32: UIMP: Taller de Sistemas MultiAgente

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.

Page 33: UIMP: Taller de Sistemas MultiAgente

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.

Page 34: UIMP: Taller de Sistemas MultiAgente

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

Page 35: UIMP: Taller de Sistemas MultiAgente

Tipos de Comportamientos JADEBehaviour

action()done()

Simple Behaviour CompositeBehaviour

<<protected>> preAction()<<protected>> postAction()<<protected>> bodyAction()

addBehaviour()removeBehaviour()OneShotBehaviour CyclicBehaviour

SequentialBehaviour

<<protected>> bodyAction()

Abstract class

Abstract class - simple

Abstract class – composeschildren;

ParallelBehaviour

<<protected>> bodyAction()

FSMBehaviour

<<protected>> bodyAction()

Finite State Machine

done = true

done = false

Page 36: UIMP: Taller de Sistemas MultiAgente

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

Page 37: UIMP: Taller de Sistemas MultiAgente

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)

Page 38: UIMP: Taller de Sistemas MultiAgente

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

Page 39: UIMP: Taller de Sistemas MultiAgente

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);

Page 40: UIMP: Taller de Sistemas MultiAgente

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)

Invocamos 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.

Page 41: UIMP: Taller de Sistemas MultiAgente

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);} } }

Page 42: UIMP: Taller de Sistemas MultiAgente

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.

Page 43: UIMP: Taller de Sistemas MultiAgente

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.

Page 44: UIMP: Taller de Sistemas MultiAgente

Términos de una ontología

Conceptos: representan una estructura con varios atributos: (Libro :titulo "Razonamiento con

incertidumbre" \ :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 "Razonamiento con incertidumbre"\ :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))

Page 45: UIMP: Taller de Sistemas MultiAgente

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("Libro", Libro.class);

ConceptSchema cs= (ConceptSchema) getSchema("Libro");

cs.add("isbn", (PrimitiveSchema) getSchema(BasicOntology.INTEGER));

Page 46: UIMP: Taller de Sistemas MultiAgente

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.

Page 47: UIMP: Taller de Sistemas MultiAgente

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.

Page 48: UIMP: Taller de Sistemas MultiAgente

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);

Page 49: UIMP: Taller de Sistemas MultiAgente

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("Titulo", "Razonamiento con incertidumbre"');

Por último se rellena el contenido del mensaje antes de mandarlo: getContentManager().fillContent(msg,milibro);

Page 50: UIMP: Taller de Sistemas MultiAgente

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.

Page 51: UIMP: Taller de Sistemas MultiAgente

Plataformas de ejecución de LEAP

Page 52: UIMP: Taller de Sistemas MultiAgente

Ejecución de LEAP en móviles/PDAs

Page 53: UIMP: Taller de Sistemas MultiAgente

Ejecución de LEAP en móviles/PDAs

Page 54: UIMP: Taller de Sistemas MultiAgente

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

Page 55: UIMP: Taller de Sistemas MultiAgente

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.

Page 56: UIMP: Taller de Sistemas MultiAgente

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

Page 57: UIMP: Taller de Sistemas MultiAgente

Ejecutar LEAP

set classpath=rutajade\jade\leap\j2se\lib\JadeLeap.jar

java jade.Boot -nomtp

set classpath=rutawtk\wtk25\bin

rutawtk\wtk25\bin\emulator -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:

Page 58: UIMP: Taller de Sistemas MultiAgente

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.

Page 59: UIMP: Taller de Sistemas MultiAgente

Arquitectura Jadex

Page 60: UIMP: Taller de Sistemas MultiAgente

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.

Page 61: UIMP: Taller de Sistemas MultiAgente

Ejecución desde el interfaz de jadex

Page 62: UIMP: Taller de Sistemas MultiAgente

Ejecución desde un programa en javaimport 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”, "jadex.adapter.jade.JadeAgentAdapter" , misargs);

miagente.start();

Page 63: UIMP: Taller de Sistemas MultiAgente

La definición xml de un agente Jadex

Page 64: UIMP: Taller de Sistemas MultiAgente

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" class=“Posicion">

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" class=“Posicion" />

Page 65: UIMP: Taller de Sistemas MultiAgente

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"/></trigger> Cuando se produce un evento (llegada de mensaje)

<trigger><messageevent ref=“turnomsg"/></trigger>

Page 66: UIMP: Taller de Sistemas MultiAgente

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" type="fipa“

direction="receive">

<parameter name="performative" class="String“ direction="fixed">

<value>jadex.adapter.fipa.SFipa.CFP</value>

</parameter> <parameter name="content-start" class="String“ direction="fixed">

<value>"Movement_expected"</value>

</parameter>

</messageevent>

Page 67: UIMP: Taller de Sistemas MultiAgente

Estados iniciales de un agente JadexEn ellos podremos indicar las creencias y planes que

inicialmente asume el agente:<initialstates>

<initialstatename=“muevoprimero">

<beliefs><initialbeliefsetref=“mis_movimientos">

<fact>new Posicion(0,0)</fact>

</initialbeliefset></beliefs>

<plans>

<initialplanref="surveillanceplan" />

</plans>

</initialstate>

</initialstates>

Page 68: UIMP: Taller de Sistemas MultiAgente

Deseos (goals) de un agente jadexNo 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"); dispatchTopLevelGoal(objetivo); dispatchSubgoal(objetivo);

Page 69: UIMP: Taller de Sistemas MultiAgente

Deseos (goals) de un agente jadex

Page 70: UIMP: Taller de Sistemas MultiAgente

Paso de parámetros

Se pueden indicar parámetros al definir un objetivo:<performgoal name=“comerpieza">

<parameter name=“pieza" class=“Pieza" />

</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">

<parameter name=“pieza" class=“Pieza"><goalmapping ref=“comerpieza.pieza"/></parameter>

<body>new WarningPlan()</body>

<trigger><goal ref=“comerpieza"/></trigger>

</plan>

Page 71: UIMP: Taller de Sistemas MultiAgente

Una clase java Plan de jadex

Subclase de jadex.runtime.Plan Mandar parámetro a objetivo creado en el plan:

Goal comer = createGoal(“comerpieza");

comer.getParameter(“pieza").setValue(pieza);

dispatchSubgoal(comer); Acceder a las creencias

private RBeliefbase bb;

bb=getBeliefbase();

RBeliefSet loc=bb.getBeliefSet(“mis_movimientos");

Tuple[] loc2=(Tuple[])loc.getValues();

Page 72: UIMP: Taller de Sistemas MultiAgente

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);

Page 73: UIMP: Taller de Sistemas MultiAgente

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();

Page 74: UIMP: Taller de Sistemas MultiAgente

Directorio (DF) en jadex

<import>jadex.planlib.*</import>

<capability name="dfcap“ file="jadex.planlib.DF"/>

Para registrarse:<maintaingoalref name="df_keep_registered">

<concrete ref="dfcap.df_keep_registered"/>

</maintaingoalref>

Para buscar en el df:<achievegoalref name="df_search">

<concrete ref="dfcap.df_search"/>

</achievegoalref>

Page 75: UIMP: Taller de Sistemas MultiAgente

Directorio (DF) en jadex

<initialstate name="default">

<goals>

<initialgoal ref="df_keep_registered">

<parameter ref="description"> <value>$propertybase.getProperty("fipa.agentdescription.dealer")</value>

</parameter>

</initialgoal>

</goals>

</initialstate>