Está en la página 1de 90

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
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 la
l
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
ell fifichero
h
(JADE
(JADE-all-3.7.zip)
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 jjavadoc, 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().
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 llnea 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.RuntimebeginContainer
25
may 20061:46:38jade core RuntimebeginContainer
INFO:
ThisisJADE3.3 2005/03/0216:11:05
d
downloadedinOpenSource,underLGPLrestrictions,
l d di O
S
 d LGPL
t i ti
athttp://jade.cselt.it/

*******************MASINFORMACION
INFO:
AgentcontainerMainContainer@JADEIMTP://GONWS1isready.

HolaMundo.

Resultado
25may20061:46:38jade.core.RuntimebeginContainer
25
may 20061:46:38jade core RuntimebeginContainer
INFO:
ThisisJADE3.3 2005/03/0216:11:05
d
downloadedinOpenSource,underLGPLrestrictions,
l d di O
S
 d LGPL
t i ti
athttp://jade.cselt.it/

SIGUE VIVO!!!
*******************MASINFORMACION
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
ell 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;
importjade.core.behaviours.Behaviour;
publicclassEjercicio02extendsAgent{
protectedvoidsetup(){
this.addBehaviour(newBehaviour(){
pub c o d act o () {
publicvoidaction(){
System.out.println("HolaMundo.Ejercicio2");
}

publicbooleandone(){returntrue;}
bli b l
d
(){ t
t
}
}); }}

Comportamientos
Ejercicio 3: Repetir el agente anterior, con
comportamiento en clase separada.
publicclassB_Ej03extendsBehaviour{
publicvoidaction(){

System out println("HolaMundo Ejercicio3");


System.out.println("HolaMundo.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
d
done()
() 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,
SequentialBehaviour
ParallelBehaviour

Ejemplo FSM
Constantes
publicclassB_Ej06extendsFSMBehaviour{
// t d FSM
//estadosFSM

privatestaticfinalStringESTADO_0="cero";
privatestaticfinalStringESTADO_1="uno";
privatestaticfinalStringESTADO_2="dos";
privatestaticfinalStringESTADO_3="tres";
privatestaticfinalStringESTADO ERR="error";
privatestaticfinalStringESTADO_ERR=
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);
registerLastState(newTwentyFiveBehaviour(myAgent),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("agente2"
AIDagente=newAID(
agente2 ,AID.ISLOCALNAME);
AID ISLOCALNAME);
mensaje.addReceiver(agente);
mensaje.setContent("QuieroJugar");
j
( Q
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 lla 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 ffe.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.

Agente Partida

Sistema Multi-agente (2) que

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
IImplementacin
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 jjuego:
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

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

Estar libres:
Pared: H

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

(*) Slo si no est la bandera

CAPTURAR LA BANDERA
Descripcin

Cdigo de equipos

Servicio de la partida

Rojo: 8
Azul: 7

Nombre del servicio: "SERVER"


Tipo del servicio: "SERVIDOR_PARTIDA

Protocolo de conexin:

FIPA-REQUEST
jjade.proto.SimpleAchieveREInitiator
p
p

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 jjugador.
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!!!