Documentos de Académico
Documentos de Profesional
Documentos de Cultura
0104talleragentesjadejadexleap 1215370307991949 9
0104talleragentesjadejadexleap 1215370307991949 9
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
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
En java
Ejemplo de escenario
Internet Boarding Gate allen Exchange Smoking Zone Spa
Bar
Souvenirs
Tourist Info
Newspapers
BARAJAS
gates
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
Pedir registro, pedir servicios_viaje, pedir servicios_comercio, pedir servicios_otros Ofrecer registro, ofrecer servicios_otros, ofrecer servicios_viaje
Ofrecer servicios_comercio
Ontologa
INFORM-REF checkin
REJECT-PROPOSAL
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.
SNIFFER de JADE
El estndar FIPA
Agent1
Agentn
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
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) )
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
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.
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
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 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
Cancel
cancel
Agente Seve
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.); } }
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()
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.
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
Abstract class
Simple Behaviour
CompositeBehaviour
<<protected>> preAction() <<protected>> postAction() <<protected>> bodyAction() addBehaviour() removeBehaviour()
OneShotBehaviour
CyclicBehaviour
SequentialBehaviour
ParallelBehaviour
FSMBehaviour
<<protected>> bodyAction()
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.
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.
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.
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))
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));
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.
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.
Luego registrarla junto con el codificador codec: que hayamos escogido (SLCodec, LEAPCodec ...)
getContentManager().registerLanguage( new SLCodec()); getContentManager().registerOntology(miont);
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"');
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.
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.
Ejecutar LEAP
Despus lanzar el emulador jwt del movil/pda con el fichero .jad generado como argumento:
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
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.
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>
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>
Paso de parmetros
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>
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();
Para registrarse:
<maintaingoalref name="df_keep_registered"> <concrete ref="dfcap.df_keep_registered"/> </maintaingoalref>