Sunteți pe pagina 1din 96

Taller d T ll de Programacin de Agentes co con JADE

Gonzalo A. Gon alo A Aranda Corral


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

Taller de Programacin de Agentes

Taller de Programacin de Agentes

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

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

Qu es JADE?
Jade es bsicamente dos cosas:
Una l t f U plataforma: que permite VIVIR y CONVIVIR a it los agentes dentro de ella. Un conjunto de herramientas para el desarrollo de g agentes y sistemas de forma rpida.

Java Agent DEvelopment framework

Qu es JADE?

Totalmente realizado en Java (Portabilidad y Java. Movilidad)

Software libre distribuido por TILAB en cdigo fuente p g 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 de herramientas grficas que soportan l C j t d h i t fi t la depuracin y ejecucin de agentes (RMA, sniffer, ...)

http://www.fipa.org

FIPA: Arquitectura bsica


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

FIPA: Plataforma
Especificacin FIPA Agentes y servicios g 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 Agentes A 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), 2010) aunque nosotros vamos a realizar este seminario sobre la versin 3.7 (Julio 2009)

Instalacin
Descargamos el fi h D l fichero (JADE ll 3 7 i ) de l (JADE-all-3.7.zip) d la versin correspondiente. Descomprimimos el fichero y nos salen cuatro nuevos ficheros: JADE-doc-3.7.zip: la documentacion javadoc, el j 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 del cual j estarn las libreras necesarias para la ejecucin de Jade j NECESITA, menos NECESITA al menos, JAVA 1 4 2 1.4.2
(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: getArguments() g 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 incorpora el mtodo getAID() q g p g () que permite recuperar el nombre del agente. El nombre del agente, un identificador nico agente globalmente(normativa FIPA), va a tener la estructura <nickname>@<nombre-plataforma>:<puerto>/JADE

Ejercicio 1. 1
Nuestro primer agente: Debemos de crear un agente cuya misin g y 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 lnea d comandos: D d l de d
java <classpath> [opciones] jade.Boot [agente:ClaseAgente] jade Boot

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 downloadedinOpenSource,underLGPLrestrictions, d 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 downloadedinOpenSource,underLGPLrestrictions, d 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 i invoca el mtodo l 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
Comportamientos estndar: C t i t t d
Behaviour: Comportamiento genrico. OneShotBehaviour: done() siempre devuelve true. CyclicBehaviour: d C li B h i done() siempre d () i 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 adems se pueden p p 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{ //estadosFSM // t d FSM 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 Entre Mquinas misma red: RMI E t M i i d 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 AID ISLOCALNAME); AIDagente=newAID("agente2",AID.ISLOCALNAME); mensaje.addReceiver(agente); mensaje.setContent("QuieroJugar"); j ( Q g ); myAgent.send(mensaje);

Comunicacin
Todas las acciones de un agente, deben de estar implementadas como comportamientos. i l t d t i t La L comunicacin es una accin. i i i Estos comportamientos podrin ser O Sh * E i d i OneShot*. Los comportamientos cclicos se usan para la recepcin contnua de mensajes.

Parmetros de ejecucin
Si creamos l plataforma y ejecutamos varios la l t f j t i agentes:
(sin parmetros especiales)

Unir un agente a una p g plataforma creada ( la misma (en 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 de la p 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 d mensajes. R i de j Quien recibe el mensaje es el agente
myAgent.receive();

Si no recibe mensaje, el comportamiento se j , p 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, donde uno enve un Ping g 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 unos protocolos estndares. t bl t l 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 Net I t C t t N t Interaction Protocol Specification ti P t lS 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 + Cl tC t t(E i Clave); ) msg.setProtocol(InteractionProtocol.FIPA_REQUEST); this.addBehaviour(new B_Protocolo(this,msg)); this addBeha io r(ne B Protocolo(this msg))

Servicios

Servicios
2 servicios fundamentales:
AMS DF Pginas Blancas Pginas Amarillas

Servicios: Registro y bsqueda


El registro dentro del servicio de Pginas g 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 pudindose dar ms de agente, una entrada por agente.

Servicios: Registro y bsqueda


No tenemos por q saber como se llama el p que 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 = null; f d ll 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 van a interactuar por medio de mensajes ACL para implementar el juego del Tetris Jade nos ofrece la facilidad de implementacin rpida de p e e ac p da comportamientos y la exportabilidad, casi inmediata, a un funcionamiento en red.

Agente Partida

Agente Jugador g g

Juego de las damas.

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

Mini-WarCraft Mini WarCraft


I l Implementacin del entorno como un agente, t i d l t 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 del j g j juego:
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

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


Bandera: A / B Base*: C / D Jugadores: 1 / 2 Jug con Bandera: 3 / 4 g
(*) Slo si no est la bandera

CAPTURAR LA BANDERA
Descripcin
Cdigo de equipos
Rojo: 8 Azul: 7

Servicio de la partida
Nombre del servicio: "SERVER" Tipo del servicio: "SERVIDOR_PARTIDA

Protocolo de conexin:
FIPA-REQUEST j jade.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 jugador. mensaje con la ventana de visin del j g 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" -> Envia un string con 10 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" -> Cuando el jugador gana la 9 partida, se envia este mensaje

CAPTURAR LA BANDERA
Ejercicio final:
Crear un jugador que, mediante un p q comportamiento basado en una mquina de 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 por su asistencia! p


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

96

S-ar putea să vă placă și