Está en la página 1de 96

Taller T ll de d Programacin de Agentes co con JADE

Gon alo A Gonzalo A. Aranda Corral


Dpto. Tecnologas de la Informacin Escuela Politcnica Superior La La Rbida Rbida Universidad de Huelva

Taller de Programacin de Agentes

Taller de Programacin de Agentes

Publireportaje
Para Programacin de Agentes

INTELIGENTES:

Dpto. p Ciencias de la Computacin p e Inteligencia Artificial Programa og a a de Master as e O Oficial c a y Doctorado oc o ado !

http://master.cs.us.es p

Qu es JADE?
Jade es bsicamente dos cosas:

Una plataforma: U l t f que permite it VIVIR y CONVIVIR a los agentes dentro de ella. Un conjunto de herramientas para el desarrollo de g y sistemas de forma rpida. agentes

Java Agent DEvelopment framework

Qu es JADE?
Totalmente realizado en Java. (Portabilidad y

Movilidad)

Software libre distribuido p por TILAB en cdigo g fuente

bajo LPGL

http://jade.tilab.com/

Estndares
Foundation for Intelligent Physical Agents (FIPA) Arquitectura: Integracin de diferentes aplicaciones, incluso con plataformas de diferentes propietarios. Lenguaje de comunicacin empleado FIPA-ACL. Servicios de agentes: ciclo de vida, pginas blancas, pginas amarillas, transporte de mensajes,... Conjunto C j t d de herramientas h i t grficas fi que soportan t l la depuracin y ejecucin de agentes (RMA, sniffer, ...) http://www.fipa.org

FIPA: Arquitectura bsica


Plataforma Pl t f distribuida di t ib id Comunicacin entre plataformas Protocolos estndares

Internet

FIPA: Plataforma
Especificacin FIPA Agentes g y servicios Comunicacin

FIPA: Arquitectura Agentes


AMS . Agent Management System:

Garantiza que cada agente en la plataforma tenga un nico nombre. Encargado de proporcionar los servicios de pginas blancas y ciclo de vida, y de mantener el directorio de los identificadores de agentes (AID: Agent Identifier) y su estado. Cada agente debe registrarse con el AMS para obtener un AID vlido

DF . Directory Facilitator:

Agente que proporciona el servicio de pginas amarillas. Un agente puede encontrar otros agentes que proporcionan los servicios que requiere para cumplir sus objetivos

ACC . Agent Communication Channel:


Software que controla el intercambio de mensajes

JADE
FIPA - Compliant p

Plataforma Arquitectura A Agentes t

Cmo obtener Jade


Direccin: http://jade.tilab.com Para la mayora de las acciones es necesario

registrarse, y aceptar los requisitos de la licencia LGPL


La versin actual de Jade es la 4.0(Abril

2010), aunque nosotros vamos a realizar 2010) este seminario sobre la versin 3.7 (Julio 2009)

Instalacin
Descargamos D el l fi fichero h (JADE-all-3.7.zip JADE ll 3 7 i ) de d la l

versin correspondiente. Descomprimimos el fichero y nos salen cuatro nuevos ficheros: JADE-doc-3.7.zip: la documentacion j javadoc, el manual del administrador, el del programador y un tutorial. JADE-src-3.7.zip JADE src 3 7 zip: el codigo fuente sin compilar compilar. JADE-bin-3.7.zip: el codigo ya compilado y listo para ser invocado. JADE-examples-3.7.zip: ejemplos de uso de la plataforma.

Instalacin
Se crear un directorio lib/ debajo j del cual

estarn las libreras necesarias para la ejecucin j de Jade


NECESITA, NECESITA al menos, menos JAVA 1 1.4.2 42

(Aunque usaremos la 1.6)

Eclipse: Creacin del proyecto

Eclipse: Creacin del proyecto

Eclipse: Creacin del proyecto

La clase Agent
Implementar agentes(heredar de): jade.core.Agent jade core Agent NUNCA SOBREESCRIBIR EL CONSTRUCTOR Inicializacin: setup(). Morir: doDelete(). Sobreescribir: takeDown(). Argumentos: g getArguments() g g () Object[] que proporciona los argumentos que se le han pasado al agente.

Identificadores de agentes
Descripcin del agente: AID (Agent Identier)

jade core AID jade.core.AID


La clase Agent g incorpora p el mtodo getAID() g () q que

permite recuperar el nombre del agente.


El nombre del agente, agente un identificador nico

globalmente(normativa FIPA), va a tener la estructura <nickname>@<nombre-plataforma>:<puerto>/JADE

Ejercicio 1. 1
Nuestro primer agente: Debemos de crear un agente g cuya y misin sea imprimir un Hola Mundo

package ej01; import jade.core.Agent; public class Ejercicio01 extends Agent { protected void setup() { System.out.println(Hola Mundo.); } }

Ejecucin
Desde D d l lnea d de comandos: d
java <classpath> [opciones] jade.Boot jade Boot [agente:ClaseAgente]

classpath: direccion y nombre de los *.jar de Jade opciones: en principio, usaremos la opcion -gui jade.Boot: es la clase de arranque de la plataforma agente:ClaseAgente: Nombre y clases(incluyendo paquetes) de nuestro agente

Ejecucin

Desde Eclipse:

Creamos una configuracin de ejecucin. Configuramos los siguiente parmetros


(Ver pag siguiente)

Ejecucin

Ejecucin

Ejecucin

Ejecucin

Resultado
25may20061:46:38jade.core.Runtime jade core RuntimebeginContainer INFO: ThisisJADE3.3 2005/03/0216:11:05 d downloaded l d din i Open O Source, S under d LGPLrestrictions, t i ti athttp://jade.cselt.it/ *******************MASINFORMACION INFO: AgentcontainerMainContainer@JADEIMTP://GONWS1isready. HolaMundo.

Resultado
25may20061:46:38jade.core.Runtime jade core RuntimebeginContainer INFO: ThisisJADE3.3 2005/03/0216:11:05 d downloaded l d din i Open O Source, S under d LGPLrestrictions, t i ti athttp://jade.cselt.it/ SIGUE VIVO!!! *******************MAS INFORMACION INFO: AgentcontainerMainContainer@JADEIMTP://GONWS1isready. SIEMPRE CERRAR HACIENDO SHUTDOWN HolaMundo. DESDE EL MENU DE LA PLATAFORMA... SI NO, SE QUEDA ABIERTA!

Plugin para Eclipse


http://dit.unitn.it/~dnguyen/ejade/

Comportamientos

Comportamientos
Acciones y Percepciones: p

Comportamientos.

Comportamientos
El funcionamiento de los comportamientos est

implementado a 2 niveles:

Una cola circular de los comportamientos activos Una cola con los comportamiento bloqueados.

Los comportamientos se desbloquean al recibir el

agente un mensaje.

Ciclo de vida de un agente

Comportamientos
La clase principal es:

jade.core.behaviours.Behaviour
Tiene 2 mtodos principales:

action(): que es el mtodo que se ejecuta cada vez que se invoca i el l mtodo t d done(): hace la comprobacin de si el comportamiento ha terminado o no.

Aqu se puede sobreescribir el constructor (aunque no es aconsejable)

Comportamientos
Ejercicio 2: Crear un agente que implemente un comportamiento que salude al mundo.
packageej02; importjade.core.Agent; importjade.core.behaviours.Behaviour; jade core behaviours Behaviour; publicclassEjercicio02extendsAgent{ protectedvoidsetup(){ this.addBehaviour(newBehaviour(){ public pub cvoid o daction() act o (){ System.out.println("HolaMundo.Ejercicio2"); } public bli b boolean l d done() (){return t true; t } }); }}

Comportamientos
Ejercicio 3: Repetir el agente anterior, con comportamiento en clase separada.
publicclassB_Ej03extendsBehaviour{ publicvoidaction(){ System out println("HolaMundo. System.out.println("Hola Mundo Ejercicio3"); } publicbooleandone(){ returntrue; } } protectedvoidsetup(){ B_Ej03ej3=newB_Ej03(); addBehaviour(ej3); }

Comportamiento
Ejercicio 4: Implementar un comportamiento

que cuente desde 1 hasta 10


publicclassB_Ej04extendsBehaviour{ intcontador=1; publicvoidaction(){ System.out.println(contador); contador++; } publicbooleandone(){ //CONDICIONDEFINALDECOMPORTAMIENTO returncontador>10; } }

Comportamiento
Variable: myAgent Ciertas acciones las realiza el agente Reutilizacin de los

comportamientos

Tipos de comportamientos
C Comportamientos t i t estndar: t d Behaviour: Comportamiento genrico. OneShotBehaviour: done() siempre devuelve true. CyclicBehaviour C li B h i : done() d () siempre i d devuelve l false. TickerBehaviour: se ejecuta peridicamente (dado en el constructor). FSMBehaviour: mquina finita de estados(Finite State Machine). ..............

Ejemplo
Ejercicio 5: Crear un comportamiento cclico

que lea un sensor constantemente


publicclassB_Ej05extendsCyclicBehaviour{ privateintestado=0; publicvoidaction(){ intmedida=Sensores.getBumper(); switch(estado){ case0: //Nohatocado case1: //Hatocado } } }

Tipos de comportamientos
Los comportamientos p adems se p pueden

componer y formar comportamientos ms complejos. j


Una implementacin interesante sera el

comportamiento BDI dentro de Jade.

Comportamientos Compuestos
FSMBehaviour es un comportamiento p

compuesto.

De manera secuencial, y definiendo transiciones entre estados, se implementa la accin que debe realizar el comportamiento.

FSMBehaviour carece de mtodo action() ()

Comportamientos Compuestos
Para la devolucin del estado se

sobreescribe el mtodo onEnd(), que devuelve el entero que nos decidir la transicin de estado.
Tambin existen otros como:

SequentialBehaviour, ParallelBehaviour,

Ejemplo FSM
Constantes
publicclassB_Ej06extendsFSMBehaviour{ //estados t d FSM privatestaticfinalStringESTADO_0="cero"; privatestaticfinalStringESTADO_1="uno"; privatestaticfinalStringESTADO_2="dos"; privatestaticfinalStringESTADO_3="tres"; privatestaticfinalStringESTADO_ERR ESTADO ERR="error"; error ; //Valoresdevueltos privatefinalintCERO=0; privatefinalintCINCO=5; privatefinalintDIEZ=10; privatefinalintQUINCE=15;

Ejemplo FSM
Constructor
publicB_Ej06(Agenta){ super(a); ( ) //Registrarlosestados registerFirstState(newZeroBehaviour(myAgent),ESTADO_0); registerState(newFiveBehaviour(myAgent),ESTADO_1); registerState(newTenBehaviour(myAgent),ESTADO_2); registerLastState(newTwentyFiveBehaviour(myAgent),ESTADO_3); ESTADO 3); //transiciones registerTransition(ESTADO_0,ESTADO_0,CERO); registerTransition(ESTADO_0, ( ESTADO_1,CINCO); ) registerDefaultTransition(ESTADO_0,ESTADO_ERR); scheduleFirst(); }

Ejemplo FSM
Comportamientos internos
classZeroBehaviourextendsOneShotBehaviour{ inttransition=CERO; publicvoidaction(){ //Cosasquehacer } //Seejecutaalfinalyeselencargadodedevolverelvalor. publicintonEnd() { returntransition; } }

Comunicacin

Comunicacin
Comunicacin TRANSPARENTE 3 niveles

Mquina: Eventos E t M Entre Mquinas i misma i red: d RMI Distinta red: CORBA

Comunicacin
La capacidad de comunicacin = envo de

mensajes ACL.
En 1 mensaje podemos distinguir 4 partes

principales:
Receptor y Emisor Contenido Directiva Lenguaje y Ontologas

Comunicacin
El mensaje es un objeto de la clase

jade.lang.acl.ACLMessage
Intencin del mensaje: PERFORMATIVA Adems, posee otros parmetros:

ReplyWith, ConversationId, etc

Comunicacin
Creacin de un mensaje
ACLMessagemensaje=new ACLMessage(ACLMessage.REQUEST); AIDagente=newAID( AID("agente2" agente2 ,AID.ISLOCALNAME); AID ISLOCALNAME); mensaje.addReceiver(agente); mensaje.setContent("Quiero j ( Q Jugar"); g ); myAgent.send(mensaje);

Comunicacin
Todas las acciones de un agente, deben de estar

i l implementadas t d como comportamientos. t i t


La L comunicacin i i es una accin i . Estos E comportamientos i podrin d i ser O OneShot*. Sh * Los comportamientos cclicos se usan para la

recepcin contnua de mensajes.

Parmetros de ejecucin
Si creamos la l plataforma l t f y ejecutamos j t varios i

agentes:

(sin parmetros especiales)

Unir un agente g a una p plataforma creada ( (en la misma

mquina=desde 2 aplic)

Parmetro: -container

Unir un agente a una plataforma creada OTRA

mquina

Parmetro: -host xxx.xxx.xxx.xxx -container Parmetro: -host localhost -container

Comunicacin
Ejercicio 7: Crear un comportamiento de un

disparo que enve un mensaje a la plataforma del servidor.


Intencin: Inform Nombre del agente servidor: servidor Ip p de la p plataforma:

Comunicacin
AIDDestino;StringMensaje;intIntencion; publicB_Ej07(String_destino,String_mensaje,int _intencion) ){ super(); Destino=newAID(_destino,AID.ISLOCALNAME); Mensaje=_mensaje; Intencion=_intencion; } publicvoidaction(){ ACLMessagemensaje=newACLMessage(Intencion); mensaje.addReceiver(Destino); mensaje.setContent(Mensaje); myAgent send(mensaje); myAgent.send(mensaje); }

Comunicacin
Recepcin R i d de mensajes. j Quien recibe el mensaje es el agente myAgent.receive(); Si no recibe mensaje, j , el comportamiento p se

debe de bloquear

block(); ()

receive() () .vs. blockingReceive() g ()

Comunicacin
Ejercicio 8: Crear un comportamiento cclico

que reciba mensajes y los muestre por pantalla.


publicvoidaction(){ ACLMessageenvio=myAgent.receive(); if(envio!=null){ System.out.println(envio.getSender().getLocalName() +":"+envio.getContent()); }else block(); }

Comunicacin
Existen plantillas de mensajes

(MessageTemplate)

Se usan para filtrar la recepcin de mensajes Las plantillas se pueden componer.


ACLMessagea=myAgent.receive( MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.PROPOSE), l h f i ( ) MessageTemplate.MatchConversationId("12221") ));

Ping Pong Ping-Pong


Ejercicio extra: Crear dos agentes, g donde uno enve un Ping g a otro y este le conteste con el Pong correspondiente.

A1 enva un mensaje a A2 A2 lo escribe y RESPONDE A1 lo escribe y se auto-finaliza

Protocolos

Protocolos
FIPA establece t bl unos protocolos t l estndares. t d Estn basados en el uso de directivas

(performativas).
Algunos implementados en JADE FIPA Request Interaction Protocol Specification FIPA Query Interaction Protocol Specification FIPA Request When Interaction Protocol Specification FIPA Contract C t t Net N t Interaction I t ti Protocol P t l Specification S ifi ti ...

Protocolos
JADE da libertad de lenguaje. JADE trae soporte para lenguaje SL y

LEAP(binario)
FIPA recomienda el lenguaje SL Tambin se puede hacer uso de ontologas

Protocolos
Ejercicio 8: Implementacin del protocolo

FIPA-REQUEST para conexin a una plataforma.


Nombre del servidor: entorno Equipos: 7 Azul, 8 Rojo Clave: a Clase a sobreescribir:

SimpleAchieveREInitiator

Protocolos
FIPA-REQUEST Segn FIPA

Protocolos
Implementacion del protocolo
public B_Protocolo(Agent a, ACLMessage msg) { super(a, msg); } public void public void public void public void public void handleAgree(ACLMessage msg) { } handleRefuse(ACLMessage msg) { } handleInform(ACLMessage msg) { } handleNotUnderstood(ACLMessage msg) { } handleOutOfSequence(ACLMessage msg) { }

Protocolos
Inicializacin

Creacin de un mensaje y Activacin del comportamiento.

import jade.domain.FIPANames.InteractionProtocol; ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); msg.addReceiver(new AID("entorno",AID.ISLOCALNAME)); msg.setContent(Equipo tC t t(E i + Cl Clave); ) msg.setProtocol(InteractionProtocol.FIPA_REQUEST); this addBeha io r(ne B this.addBehaviour(new B_Protocolo(this,msg)); Protocolo(this msg))

Servicios

Servicios
2 servicios fundamentales:

AMS Pginas Blancas DF Pginas Amarillas

Servicios: Registro y bsqueda


El registro g dentro del servicio de Pginas g

Blancas es obligatorio para pertenecer a la plataforma.


El registro en las Pginas Amarillas es

opcional. En l se registran los servicios que ofrece cada agente agente, pudindose dar ms de una entrada por agente.

Servicios: Registro y bsqueda


No tenemos p por q que saber como se llama el

agente que posee nuestra partida


El secreto compartido, es decir, tenemos

que saber ALGO de lo que queremos buscar buscar.


Los agentes se pueden registrar en las

plataformas para poder ser buscados (*)

Registro en Pginas Blancas


Se realiza automticamente al unirse a la

plataforma.
Se puede realizar a mano si se desea, Si extendemos de la clase Agent, esta lo

tiene implementado.

Registro en Pginas Amarillas


//----------------------------------------------------------------// // Registrar Servicio en el DF // //----------------------------------------------------------------// // DFAgentDescription dfd = new DFAgentDescription(); dfd.setName(getAID()); ServiceDescription sd = new ServiceDescription(); sd.setType(Servidor"); sd.setName(Tetris"); dfd addServices(sd); dfd.addServices(sd); try { DFService.register(this,dfd); System.out.println( Servidor:\t\tRegistrado ); System.out.println(Servidor:\t\tRegistrado"); } catch(FIPAException fe) { fe.printStackTrace(); }

Bsqueda en Pginas Amarillas


DFAgentDescription template = new DFAgentDescription(); sd = new ServiceDescription(); sd.setType(Servidor"); yp ( ); template.addServices(sd); AID[ ] creadores = null; try { DFAgentDescription[ ] result = DFService.search(this,template); creadores = new AID[result.length]; for (int i=0; i< result.length; i++) { creadores[i] = result[i].getName(); } } catch (FIPAException fe) { creadores d = null; ll f fe.printStackTrace(); i tSt kT () } if (creadores == null) { this doDelete(); this.doDelete(); }

De Registro De-Registro
El borrado de las Pginas Blancas ES

AUTOMTICO
El borrado de las Pginas Amarillas ES

MANUAL

Debemos de hacerlo cuando el agente muere muere, dentro del mtodo takeDown()

Unos casos prcticos

Tetris: Introduccin.
Sistema Multi-agente (2) que

Agente Partida

van a interactuar por medio de mensajes ACL para implementar el juego del Tetris
Jade nos ofrece la facilidad de

implementacin p e e ac rpida p da de comportamientos y la exportabilidad, casi inmediata, a un funcionamiento en red.

Agente g Jugador g

Juego de las damas.

Mus
C Colaboracin l b i entre t agentes t por un objetivo bj ti comn: ganar

Mini WarCraft Mini-WarCraft


I Implementacin l t i del d l entorno t como un agente, t que es el que se encarga de la fsica del sistema. sistema

JGomas
JGOMAS: Game Oriented Multi Agent

System

basado en Jade

Grandes Retos Retos

Robocup Rescue Simulation

Y ms

Robocup (Soccer) Simulation

CAPTURAR LA BANDERA

CAPTURAR LA BANDERA
Objetivo j del j juego: g

Capturar la bandera del equipo contrario y llevarla a su base. Evitar que los contrarios capturen su bandera.

CAPTURAR LA BANDERA
Descripcin:

Tablero de dimensin: n x m Las celdas pueden


Estar libres: Pared: H Bandera: A / B Base*: C / D Jugadores: 1 / 2 Jug g con Bandera: 3 / 4

Por equipos q p ( (Rojo/Azul) j )


(*) Slo si no est la bandera

CAPTURAR LA BANDERA
Descripcin

Cdigo de equipos

Rojo: 8 Azul: 7 Nombre del servicio: "SERVER" Tipo del servicio: "SERVIDOR_PARTIDA FIPA-REQUEST j jade.proto.SimpleAchieveREInitiator p p

Servicio de la partida

Protocolo de conexin:

CAPTURAR LA BANDERA
Flujo:
INICIO

BUSQUEDA

NEGOCIAC

JUEGO

CAPTURAR LA BANDERA
INICIO

Inicializacin de la representacin de datos ( ) internos (Cerebro). Lanzamiento del comportamiento de bsqueda

CAPTURAR LA BANDERA
Bsqueda

Bsqueda del servicio dentro del DF Obtencin del nombre del servidor y almacenarlo. almacenarlo

CAPTURAR LA BANDERA
Negociacin N i i

Implementacin del FIPA-REQUEST Cuando se acepta,


En el inform se manda un mensaje con la informacin del tablero [ANCHO MAPA] [ALTO MAPA] [ANCHO_MAPA],[ALTO_MAPA], [ANCHO_VENTANA],[ALTO_VENTANA], [POS_X],[POS_Y], [MAPA] No enva la posicin de los jugadores contrarios

CAPTURAR LA BANDERA
Juego

El servidor enva cada x ms(1 ciclo) un j con la ventana de visin del j jugador. g mensaje Slo acepta 1 accin por ciclo ciclo.

Si se envan varias, elige una al azar.

Si se realizan acciones NO permitidas, el agente es sancionado sancionado.

CAPTURAR LA BANDERA
Movimientos posibles(Acciones):

Derecha: "1" Izquierda: "2" Arriba: "3" Abajo: "4 TableroCompleto: "10" 10 -> Envia un string con el mismo formato del tablero parcial, pero con todo lo que contiene el mapa, jugadores del mismo equipo y rivales, banderas...

Penaliza con varios ciclos

CAPTURAR LA BANDERA
Otras percepciones

"6" -> el jugador ha sido expulsado de la plataforma Game Over: "9" 9 -> Cuando el jugador gana la partida, se envia este mensaje

CAPTURAR LA BANDERA
Ejercicio final:

Crear un jugador que, mediante un p basado en una mquina q de comportamiento estados finitos, vaya a por la bandera contraria y vuelva.

Enlaces interesantes
http://programacionjade.wikispaces.com/ http://dukechile.blogspot.com/search/label/JADE http://www.exa.unicen.edu.ar/catedras/tmultiag/apunt

es.html
http://jade.tilab.com . GOOGLE!!!

Gracias p por su asistencia!


Gonzalo A. Aranda Corral
Dpto. Tecnologas de la Informacin Escuela Politcnica Superior La Rbida Universidad de Huelva

96

También podría gustarte