Está en la página 1de 75

Cmo 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

Indice

Introduccin a Jade, FIPA, LEAP y Jadex JADE:


Arquitectura de JADE Un agente en JADE Comportamientos JADE Mensajes JADE Ontologas en JADE

LEAP JADEx

Invocando agentes en Jadex La definicin xml de un agente en Jadex Un plan de un agente Jadex

Construir un Sistema de Agentes


1. Idear escenarios y casos de uso 2. Distinguir entre roles y servicios alumnos, profes Biblioteca, aulas 3. Asignar responsabilidades recomendaciones 4. Definir trminos en ontologa Quin puede pedir libros? Quin puede entrar en el 5. Determinar mensajes entre agentes y aula? su orden (protocolo) asignatura, libro, curso, nota, 6. Implementar el agente (propose (libro JADE) (editorial wiley) 7. Crear el interfaz (author caire) (year 2007) )
Propose book; Reject/Accept Proposal JADE, LEAP o JADEX Problema a tratar Dominios aplic. Ejemplo, pasos.

En java

Ejemplo de escenario
Internet Boarding Gate allen Exchange Smoking Zone Spa

Bar

Souvenirs

Tourist Info

Newspapers

BARAJAS

gates

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, informacin_aeropuerto, informacin_turstica

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

Ontologa

Protocolo: Secuencias de mensajes


Gates Barajas Prensa
REQUEST register ... AGREE REFUSE

Se mueve junto a prensa

INFORM-REF checkin

INFORM gates, us citizen towards rome

PROPOSE USAToday, Corr. Sera ACCEPT-PROPOSAL

REJECT-PROPOSAL

Introduccin a JADE, LEAP, JADEX

http://jade.tilab.com/ Jade es una plataforma para ejecutar agentes que permite:


Ejecucin de agentes completamente asncrona Comunicacin entre agentes en la misma o diferentes plataforma/s JADE/LEAP/JADEX Programacin de agentes mediante un conjunto de paquetes Java. Validacin de la ejecucin mediante seguimiento mensajes y estado interno del agente.

Es la plataforma ms extendida porque implementa el estndar FIPA.

SNIFFER de JADE

El estndar FIPA

www.fipa.org Especifica formalemnte el lenguaje de comunicacin (ACL)

Codificacin, semntica, y uso de los mensajes

Indica como interaccionan y son gestionados los agentes


Agent Platform Pginas Amarillas Directory Facilitator Otras Plataformas FIPA Message Transport System

Registro y supervisi n de agentes

Agent1

Agentn

Agent Management System

El ACL del estndar 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 intencin (performative) que es una explicacin semntica del acto de comunicacin El modelo formal en el que se codificar el mensaje La ontologa en la que se describen los trminos del contenido del mensaje

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) ) ) Intencin (performative) Inform, Request, Failure, Refuse, ... Direccionamiento sender, receiver Coordinacin de mensajes Respuesta esperada, id de dilogo

Detailed action or request problem specific language, ontology, request

Un mensaje FIPA-ACL
Ejemplo: el agente billgates informa al agente barajas de su llegada (indicando informacin 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) )

Actos comunicativos FIPA-ACL

accept-proposal, agree, cancel, call-for-proposal, confirm, disconfirm, failure, inform, inform-if, inform-ref, notunderstood, propagate, propose, query-if, query-ref, refuse, reject-proposal, request, request-when, request-whenever, subscribe.

Introduccin a LEAP

Leap es una plataforma casi idntica a JADE para dispositivos limitados (mviles y pdas). Se distribuye desde la propia pgina de JADE Clases LEAP son un subconjunto adaptado de las clases que forman el paquete JADE. El cdigo de un agente JADE funciona casi tal cual en LEAP. Para simularlo en un PC necesitamos de Java Wireless Toolkit en lugar de jdk estndar.

Introduccin a JADEX

http://vsis-www.informatik.uni-hamburg.de/projects/jadex/

JADE facilita comunicaciones, pero no estructura de razonamiento interno. Razonamiento JADE depende de cmo 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 extensin) que facilita implementacin del modelo deliberativo (BDI) de comportamiento.

Arquitectura de JADE

Arquitectura distribuida

Multiples Hosts Multiples Procesos Multiples Agent Containers 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

Un contenedor de agentes

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 estn ejecutando en la plataforma Yellow Pages Proporciona un servicio de bsqueda de agentes Relaciona la descripcin del tipo (role) y servicio que proporcionan los agentes con su identificador. Los agentes pueden modificar la informacin sobre s mismos.

DF: Directory Facilitator


Arquitectura JADE
Host 1 Application Agent Application Agent Host 2 Application Agent Application Agent Application Agent Host 3

Application Agent

AMS Agent

DF Agent

Jade distributed Agent Platform Jade Main-container JRE Jade Agent Container JRE Network protocol stack using RMI Jade Agent Container JRE

Application Agent

Application Agent

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 mnimos de un agente AID: nombre nico global Nombre del servicio Tipo del servicio Cmo 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 bsqueda de los agentes es por matching simple de cadenas de caracteres y pares atributo-valor

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 coordinacin explcita entre tareas Single-threaded Enva y recibe mensajes a travs de una API: Que facilita la codificacin/decodificacin de mensajes

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 mtodos de inicio (setup) y fin (takeDown)

Para ejecutar el agente, podemos hacerlo desde el interfaz de JADE o desde cualquier otro programa JAVA explcitamente

Dentro de un Agente
Agent Communication Language
Behaviour dispatch loop Behaviour Behaviour Ontology Profile Preferences Facts Rules Models

Agente Olazbal

Seve: Golf course

Course: Augusta Play start Messages:

Cancel

cancel

(propose (course augusta

Agente Seve

Lanzar un agente desde el GUI de JADE


export CLASSPATH=/ruta/jade/lib/jade.jar:/ruta/jade/lib/iiop.jar:/ruta/j ade/lib/http.jar java jade.Boot -gui

Lanzar un agente desde el GUI de JADE


Seleccionamos el main-container en el rbol de directorios Pulsamos el botn New Agent

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

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.

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

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)

Comportamientos JADE

Cada agente tiene asociado un conjunto de comportamientos. Cada comportamiento puede realizar una tarea simple como: Enva 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 mtodo action()

Orden ejecucin 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 mtodo done, para decidir si se pone al final de la cola de activos (false) o no.

Orden ejecucin comportamientos JADE


Un comportamiento puede bloquearse, mtodo block(). El bloqueo significa que, cuando el mtodo 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.

Tipos de comportamientos

SimpleBehaviour Hay que definir el mtodo 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

Tipos de Comportamientos JADE


Behaviour Abstract class - simple
action() done()

Abstract class

Abstract class composes children;

Simple Behaviour

CompositeBehaviour
<<protected>> preAction() <<protected>> postAction() <<protected>> bodyAction() addBehaviour() removeBehaviour()

OneShotBehaviour

CyclicBehaviour

done = true done = false

SequentialBehaviour

ParallelBehaviour

FSMBehaviour

<<protected>> bodyAction() <<protected>> bodyAction()

<<protected>> bodyAction()

Finite State Machine

Mensajes JADE

Toda la comunicacin 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 codificacin y decodificacin de mensajes la hacen automticamente los agentes

Construir un mensaje

Cada mensaje es una objeto de la clase jade.lang.acl.ACLMessage. Se puede acceder a sus campos mediante mtodos get y set. Pasos: Crear objeto mensaje Indicar acto comunicativo (performative) Indicar destinatarios Indicar otros atributos del mensaje (codificacin, ontologa, lenguaje, reply-with, etc.) Rellenar contenido (Cadena de caracteres en un lenguaje, u objetos de una ontologa)

Atributos de un mensaje

ConversationID Para enlazar mensajes de un mismo dilogo In reply to Para distinguir a qu mensaje est respondiendo Reply with Para indicar cmo responder al mensaje Reply by Para establecer un tiempo lmite de respuesta Language Para indicar en qu lenguaje est escrito el texto enviado como contenido Ontology Para especificar qu ontologa est usandose Protocol Especifica el protocolo (predefinido) Content Contenido principal del mensaje

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

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 mtodo receive del agente con el objeto de tipo plantilla como argumento. Este mtodo devuelve un objeto del tipo ACLMessage. si el mensaje != null era el mensaje que esperbamos.

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

Ontologas en JADE
Una ontologa proporciona una descripcin de los conceptos de un dominio y las relaciones entre ellos. Relaciona estos conceptos con objetos Java. JADE permite el manejo de ontologas para: Representar el dominio de aplicacin mediante conceptos, predicados, acciones, tipos de agentes, etc. Intercambiar elementos de la ontologa entre agentes (i.e. en el contenido del mensaje FIPA) Definirlas a mano es conceptualmente sencillo. Pero pesado si la ontologa tiene un tamao medio. Una alternativa es utilizar Protg 2000 para el modelado y generacin (Beangenerator) de la ontologa JADE.

Componentes de una ontologa

Una ontologa 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 tpicamente en mensajes INFORM y QUERYIF, no en REQUEST. Trminos: pueden ser conceptos, acciones, primitivas, agregados, referencias y variables.

Trminos de una ontologa

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 trminos. Acciones: Representan una accin a realizar por un agente:
(Estudiar (Libro :titulo "Razonamiento con incertidumbre"\ :autor (Profesor :name Carbo)))

Tpicamente se utilizan en mensajes de tipo REQUEST. Agregaciones: conjuntos, listas de otros trminos. Primitivas: elementos atmicos como nmeros y cadenas de caracteres. Variables: ?x Referencias: Para todo x que:
(all ?x (pertenece ?x (Universidad :name Carlos3))

Conceptos de una ontologa

Para implementar nuestros propios concepts, acciones y predicados usaremos instancias de PredicateSchema, AgentActionSchema y ConceptSchema. Estas clases tienen mtodos que permiten construir nuestra propia estructura de estos trminos para nuestro dominio. As con una clase Libro que implemente la interfaz Concept, podemos aadir este concepto desde el cdigo de la clase de nuestra ontologa con:
add(new ConceptSchema("Libro", Libro.class); ConceptSchema cs= (ConceptSchema) getSchema("Libro"); cs.add("isbn", (PrimitiveSchema) getSchema(BasicOntology.INTEGER));

Conceptos de una ontologa

Para hacer un campo opcional, incluir el argumento: ObjectSchema.OPTIONAL Para indicar la cardinalidad, incluir dos argumentos nmericos (mnima y mxima) 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 mtodos de acceso set y get, p.e. la clase del concepto Libro debe incluir los mtodos setTitulo, getTitulo, etc.

Predicados y acciones de una ontologa

Para aadir predicados o acciones, el proceso es equivalente a los conceptos pero utilizando las clases PredicateSchema y AgentActionSchema en lugar de ConceptSchema ... y adems la clase indicada como argumento debe implementar la interfaz Predicate o AgentAction en lugar de Concept.

Utilizar una ontologa

Lo primero es utilizar una misma referencia esttica a la ontologa:


private Ontology miont =MiOntologia.getInstance();

Luego registrarla junto con el codificador codec: que hayamos escogido (SLCodec, LEAPCodec ...)
getContentManager().registerLanguage( new SLCodec()); getContentManager().registerOntology(miont);

Utilizar una ontologa

Para indicar en un mensaje la ontologa utilizada:


msg.setLanguage(codec.getName()); msg.setOntology(miont.getName());

A continuacion con los mtodos set damos valor a los trminos de la ontologa 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);

LEAP

Leap es una plataforma casi idntica a JADE para dispositivos limitados (mviles y pdas). Se distribuye desde la propia pgina de JADE: LeapAddOn3.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 cdigo de un agente JADE funciona casi tal cual en LEAP. Se ejecuta sobre la versin micro de Java (J2ME) en lugar la versin estndar (JDK). J2ME incluido en el paquete Sun Java Wireless Toolkit. Descargable gratuitamente de la web.

Plataformas de ejecucin de LEAP

Ejecucin de LEAP en mviles/PDAs

Ejecucin de LEAP en mviles/PDAs

Limitaciones de LEAP

No se puede utilizar el SNIFFER No se pueden utilizar clases de de Java que no estn incluidas en la versin micro (J2ME). Es decir, no todo jdk disponible. Por ejemplo, J2ME no soporta la librera grfica awt. de Jade que no pertenezcan a la librera de LEAP. Hay que contar con los fuentes de cualquier otra clase java a incluir, ya que hay que recompilar directamente todo el cdigo fuente a la vez para generar el .jad

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.

Compilar la demo de LEAP


Es preciso retocar el cdigo de la demo que viene con LEAP: Lnea 87 de ChatClientAgent.java: hacer como hara el preprocesador. Eliminar el cdigo 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 lneas 31, 44 y 115 de Start.java

Ejecutar LEAP

Primero lanzar la plataforma JADE que con la que se comunicar el movil/pda:

set classpath=rutajade\jade\leap\j2se\lib\JadeLeap.jar java jade.Boot -nomtp

Despus lanzar el emulador jwt del movil/pda con el fichero .jad generado como argumento:

set classpath=rutawtk\wtk25\bin rutawtk\wtk25\bin\emulator -Xdescriptor:leapmnet.jad

Jadex

Extensin 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 descripcin en xml y clases java que representan sus planes. La implementacin en java de cada plan accede y modifica las creencias, satisface/abandona objetivos y adopta nuevos objetivos. En el fichero xml incluimos informacin sobre: creencias, deseos (goals), planes, mensajes y estados iniciales del agente.

Arquitectura Jadex

Ejecucin desde el interfaz de Jadex

Desde la ventana principal (Jadex Control Center) pulsar el botn+ para incluir el jar o la carpeta donde estn las clases JAVA que utiliza el agente a incluir. Entonces pulsar el botn 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.

Ejecucin desde el interfaz de jadex

Ejecucin 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, "jadex.adapter.jade.JadeAgentAdapter" , misargs); miagente.start();

La definicin xml de un agente Jadex

Creencias de un agente jadex

Asocia una clase java a las creencias que manejarn los planes del agente en cuestin:
<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" />

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

Los mensajes de un agente jadex

Se definen su direccin, performative y tpicamente 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>

Estados iniciales de un agente Jadex


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

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"); dispatchTopLevelGoal(objetivo); dispatchSubgoal(objetivo);

Deseos (goals) de un agente jadex

Paso de parmetros

Se pueden indicar parmetros al definir un objetivo:


<performgoal name=comerpieza"> <parameter name=pieza" class=Pieza" /> </performgoal>

Los parmetros son clases java que nos definimos nosotros. El plan instanciado como consecuencia de la adopcin de un determinado objetivo recibe dicho parmetro:
<plan name=MoverPlan"> <parameter name=pieza" class=Pieza"><goalmapping ref=comerpieza.pieza"/></parameter> <body>new WarningPlan()</body> <trigger><goal ref=comerpieza"/></trigger> </plan>

Una clase java Plan de jadex


Subclase de jadex.runtime.Plan Mandar parmetro 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();

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,r espuesta); sendMessage(re);

Acceder a Jade desde Jadex

Para invocar mtodos 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();

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>

Directorio (DF) en jadex


<initialstate name="default"> <goals> <initialgoal ref="df_keep_registered"> <parameter ref="description"> <value>$propertybase.getProperty("fipa.agentdescri ption.dealer")</value> </parameter> </initialgoal> </goals> </initialstate>

También podría gustarte