SlideShare ist ein Scribd-Unternehmen logo
1 von 97
Downloaden Sie, um offline zu lesen
Programación de Agentes con
JADE
Gonzalo A. Aranda Corral
Dpto. Tecnologías de la Información
Universidad de Huelva

Seminario GLC - Enero 2014
Taller de
Programación de Agentes

¿ INTELIGENTES ?
¿Qué es JADE?
• Java Agent DEvelopment framework
• Jade es básicamente dos cosas:
• Una plataforma: que permite “VIVIR” y “CONVIVIR” a los
agentes dentro de ella.
• Un conjunto de herramientas para el desarrollo de
agentes y sistemas de forma rápida.
¿Qué es JADE?
• Totalmente realizado en Java.
• Portabilidad y
• Movilidad‫‏‬
• Software distribuido por TILAB bajo licencia LPGL
• Fuentes y binarios
• http://jade.tilab.com/
Estándares

http://www.fipa.org

• Foundation for Intelligent Physical Agents (FIPA)‫‏‬
• Arquitectura: Integración de diferentes aplicaciones,
incluso con plataformas de diferentes propietarios.
• Servicios de agentes: ciclo de vida, páginas blancas,
páginas amarillas, transporte de mensajes,...
• Lenguaje de comunicación empleado FIPA-ACL.
• Conjunto de Herramientas gráficas que soportan la
depuración y ejecución de agentes (RMA, Sniffer, ...)
FIPA: Arquitectura
• Plataforma distribuida
• Comunicación múltiples
niveles
• Protocolos estándares
• Internet
FIPA: Plataforma
• Soporte para servicios
• Páginas blancas y amarillas
• Soporte a la Comunicación
• Servicios basados en Agentes
FIPA: Plataforma
Los agentes que controlan la plataforma son:
• AMS . Agent Management System:
• Garantiza que cada agente en la plataforma tenga un
único nombre.
• Encargado de los servicios de páginas blancas, ciclo de
vida, y directorio de los identificadores de agentes (AID:
Agent Identifier) y su estado.
• Cada agente debe registrarse con el AMS para obtener
un AID válido
FIPA: Plataforma
Los agentes que controlan la plataforma son:
• DF (Directory Facilitator):
• Agente que proporciona el servicio de páginas amarillas.
• Un agente puede encontrar otros agentes que
proporcionan los servicios que requiere para cumplir sus
objetivos
• El registro en este agente es opcional
FIPA: Plataforma
Los agentes que controlan la plataforma son:
• ACC . Agent Communication Channel:
• Software que controla el intercambio de mensajes
• Selecciona el protocolo adecuado y lo hace
transparente al agente
• Agente inaccesible de forma directa
FIPA: Lenguajes
• Establece estándares a varios niveles
• Protocolos
• Estructura del mensaje
• Lenguaje
FIPA: Herramientas
• Unificación de herramientas para la depuración distribuida
• Las herramientas son agentes
• RMA
• Sniffer
• etc...
FIPA: Algunos frameworks
• Jade
• Jadex Agents (Java)
• Java Intelligent Agent Compontentware (JIAC)
• The SPADE Multiagent and Organizations Platform (Python)
• JACK Intelligent Agents (Java)
• The April Agent Platform (AAP) and Language (April) (No longer actively developed)
• Zeus Agent Building Toolkit (No longer actively developed)
• The Fipa-OS agent platform (No longer actively developed)
• AgentService (C#) (last update: 2009)
http://en.wikipedia.org/wiki/FIPA
JADE
• FIPA - Compliant
• Plataforma
• Agentes
• Arquitectura
• Lenguaje ¿?
• ...
Cómo obtener Jade
• Dirección: http://jade.tilab.com
• Para la mayoría de las acciones es necesario registrarse, y
aceptar los requisitos de la licencia LGPL
• La versión actual de Jade es la 4.3.1(Diciembre 2013)
• Nosotros usaremos: JADE 4.3.0 (Marzo 2013)
• Descarga: http://www.glc.us.es/jade/lib
Instalación
• Descargamos el fichero (JADE-all-4.0.zip) de la versión
correspondiente.
• Se descomprime en un directorio accesible por todos los
agentes
• Se creará un directorio lib/ debajo del cual estarán las
librerías necesarias para la ejecución de Jade
• NECESITA, al menos, JAVA 1.5 (aunque usaremos la 1.6)
Instalación
• En versiones antiguas:
• Descomprimimos el fichero y nos salen cuatro nuevos ficheros:
• JADE-doc-3.7.zip: la documentación javadoc, el manual del
administrador, el del programador y un tutorial.
• JADE-src-3.7.zip: código fuente sin compilar.
• JADE-bin-3.7.zip: código compilado y listo para ser
invocado.
• JADE-examples-3.7.zip: ejemplos de uso de la plataforma.
Eclipse: Creación del proyecto
Eclipse: Creación del proyecto
Eclipse: Creación del proyecto
Eclipse: Creación del proyecto
Eclipse: Creación del proyecto

MANOS A LA OBRA
La clase (jade.core.)Agent
• Clase jade para construcción de agentes: (extend)
jade.core.Agent
•public class miAgente extends Agent ....
• NUNCA SOBREESCRIBIR EL CONSTRUCTOR
• Inicialización: setup().
•protected void setup() { super.setup();..
La clase (jade.core.)Agent
• Clase jade para construcción de agentes: (extend)
jade.core.Agent
• Para terminar:
• Invocar: doDelete().
• Sobreescribir: protected void takeDown().
• Para recuperar los parámetros pasados a un agente:
• Object[] args = getArguments();
AID: Identificadores de agentes
• Descripción del agente se almacen en la clase AID
(jade.core.AID)
• La clase Agent incorpora el método getAID() que
permite recuperar el nombre del agente.
• El nombre del agente, un identificador único
globalmente(normativa FIPA), va a tener la estructura
• <nickname>@<nombre-plataforma>:<puerto>/JADE
Ejercicio 1.
• Nuestro primer agente:
• Debemos de crear un agente cuya misión sea imprimir
un “Hola Mundo”

package ej01;
import jade.core.Agent;
public class Ejercicio01 extends Agent {
!
!
!
}

protected void setup() {
!
System.out.println(“Hola Mundo.”);
}
Ejecución
• Desde línea de comandos:
• java -cp <classpath> jade.Boot [options] [agents]
• 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
• agentes: Nombre y clases(incluyendo paquetes) de nuestro agente
• - agents agente:ClaseAgente
Ejecución
• Desde línea de comandos:
•En el directorio donde está el jade.jar:
java -cp jade.jar jade.Boot -gui -agents pepe:ee
Ejecución
• Desde Eclipse:
• Creamos una configuración de ejecución.
• Menu: Run -> Run Configurations
• Barra Menú:
Ejecución
Ejecución
Ejecución
Ejecución
Resultado
25-may-2006 1:46:38 jade.core.Runtime beginContainer
INFO: ---------------------------------This is JADE 3.3 - 2005/03/02 16:11:05
downloaded in Open Source, under LGPL restrictions,
at http://jade.cselt.it/
SIGUE VIVO!!!
---------------------------------------*******************MAS INFORMACION
INFO: --------------------------------------

SIEMPRE CERRAR
Agent container Main-Container@JADE-IMTP://GON-WS1 is ready.
HACIENDO SHUTDOWN
-------------------------------------------Hola Mundo.

DESDE EL MENU DE LA
PLATAFORMA... SI NO, SE
QUEDA ABIERTA!
Plugin para Eclipse
• http://dit.unitn.it/~dnguyen/ejade/

Last updated
June 2007
Ciclo de vida de un agente
Comportamientos
Comportamientos
• Acciones y Percepciones:
• “Comportamientos”
• El agente “posee” los comportamientos y es el único
que los puede activar y desactivar
• (agente).addBehaviour(...);
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.
Comportamientos
• La clase principal es: jade.core.behaviours.Behaviour
• Tiene 2 métodos principales:
• action(): que es el método que se ejecuta cada vez que se
invoca el método
• done(): hace la comprobación 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.

package ej02;
import jade.core.Agent;
import jade.core.behaviours.Behaviour;
public class Ejercicio02 extends Agent {
!
protected void setup() {
!
!
this.addBehaviour(new Behaviour() {
!
!
!
public void action() {
!
!
!
!
System.out.println("Hola Mundo. Ejercicio2");
!
!
!
}
!
!
!
public boolean done() { return true; }
!
!
});!} }
Comportamientos
• Ejercicio 3: Repetir el agente anterior, con comportamiento
en clase separada.
Comportamiento
public class B_Ej03 extends Behaviour{
!
public void action() {
!
!
!
System.out.println("Hola Mundo. Ejercicio3");
!
}
!
public boolean done() {
!
!
!
return true;
!
}
}

Agente
protected void setup() {
!
!
B_Ej03 ej3 = new B_Ej03();
!
!
this.addBehaviour(ej3);
}
Comportamiento
• Ejercicio 4: Implementar un comportamiento que cuente
desde 1 hasta 10

public class B_Ej04 extends Behaviour{
!
int contador = 1;
!
public void action() {
!
!
!
System.out.println(contador);
!
!
!
contador++;
!
}
!
public boolean done() {
!
!
!
// CONDICION DE FINAL DE COMPORTAMIENTO
!
!
!
return contador > 10;
!
}
}
Comportamiento
• Variable: myAgent
• Todas las acciones las realiza el agente
• Necesitamos myAgent para que un comportamiento
invoque a otro comportamiento
• Reutilización de los comportamientos
Tipos de comportamientos
• Comportamientos estándar:
• Behaviour: Comportamiento genérico.
• OneShotBehaviour: done() siempre devuelve “true”.
• CyclicBehaviour: done() siempre devuelve “false”.
• TickerBehaviour: se ejecuta periódicamente (dado en el
constructor).
• FSMBehaviour: máquina finita de estados(Finite State Machine).
• ..............
Ejemplo
• Ejercicio 5: Crear un comportamiento cíclico que lea un
sensor constantemente

public class CSimple extends Behaviour {
public class B_Ej05 extends CyclicBehaviour{
!
public void action() {
!
private int estado = 0;
!
!
!
while (true) {
!
public void action() {
!
!
!
// Acciones a realizar
!
!
!
int medida = Sensores.getBumper();
!
!
!
}
!
!
!
switch(estado) {
!
}
!
!
!
case 0:
!
public boolean done() {
!
!
!
!
// No ha tocado
!
!
!
return true;
!
!
!
case 1:
!
}
!
!
!
!
// Ha tocado
}
!
!
!
}
!
}
}
Tipos de comportamientos
• Los comportamientos además se pueden componer y
formar comportamientos más complejos.
• Una implementación interesante sería el comportamiento
BDI dentro de Jade.
Comportamientos Compuestos
• FSMBehaviour es un comportamiento compuesto.
• De manera secuencial, y definiendo transiciones entre
estados, se implementa la acción que debe realizar el
comportamiento.
• FSMBehaviour carece de método action()‫‏‬
• Para la devolución del estado se sobreescribe el método
onEnd(), que devuelve el entero que nos decidirá la
transición de estado.
Comportamientos Compuestos
• También existen otros como:
• SequentialBehaviour,
• ParallelBehaviour, …
• y ofrece posibilidades para que el desarrollador los cree
Ejemplo FSM
• Constantes
public class B_Ej06 extends FSMBehaviour {
// estados FSM
private static final String ESTADO_0 =
private static final String ESTADO_1 =
private static final String ESTADO_2 =
private static final String ESTADO_3 =
private static final String ESTADO_ERR
// Valores devueltos
private final int CERO = 0;
private final int CINCO = 5;
private final int DIEZ = 10;
private final int QUINCE = 15;

"cero";
"uno";
"dos";
"tres";
= "error";
Ejemplo FSM
• Constructor
public B_Ej06(Agent a) {
super(a);
// Registrar los estados
registerFirstState(new ZeroBehaviour(myAgent), ESTADO_0);
registerState(new FiveBehaviour(myAgent), ESTADO_1);
registerState(new TenBehaviour(myAgent), ESTADO_2);
registerLastState(new TwentyFiveBehaviour(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

class ZeroBehaviour extends OneShotBehaviour {
int transition = CERO;
!
!
!
public void action() {
! // Cosas que hacer
}
// Se ejecuta al final y es el encargado de devolver el valor.
public int onEnd() {
return transition;
}
}
Comunicación
Comunicación
• Comunicación TRANSPARENTE
• 3 niveles
• Internos (misma máquina): Eventos
• Misma red: RMI (Remote Method Invocation)
• Distinta red: CORBA (Common Object Request Broker Architecture)
Comunicación
• La capacidad de comunicación
• envío de mensajes ACL.
• En 1 mensaje podemos distinguir 4 partes principales:
• Receptor y Emisor
• Contenido
• Directiva
• Lenguaje y Ontologías
Comunicación
• El mensaje es un objeto de la clase
•jade.lang.acl.ACLMessage
• Intención del mensaje: “PERFORMATIVA” (“DIRECTIVA”)
• Además, posee otros parámetros:
• ReplyWith, ConversationId, etc...
• Los mensajes los mandan los agentes
Comunicación
• Creación de un mensaje

ACLMessage mensaje = new ACLMessage(ACLMessage.REQUEST);
AID agente = new AID("agente2",AID.ISLOCALNAME);
mensaje.addReceiver(agente);
mensaje.setContent("Quiero Jugar");
myAgent.send(mensaje);
Comunicación
• Todas las acciones de un agente, deben de estar
implementadas como comportamientos.
• La comunicación es una acción.
• Los comportamientos de envío podrían ser OneShot*.
• Los comportamientos cíclicos se usan para la recepción
continua de mensajes.
Más Parámetros de ejecución
• Si creamos la plataforma y ejecutamos varios agentes:
• (sin parámetros especiales)‫‏‬
• Unir un agente a una plataforma creada (en la misma máquina=desde 2
aplic)‫‏‬
• Parámetro: -container
• Unir un agente a una plataforma creada OTRA máquina
• Parámetro: -host xxx.xxx.xxx.xxx -container
• Parámetro: -host localhost -container
Comunicación
• Ejercicio 7: Crear un comportamiento de un disparo que
envíe un mensaje a la plataforma del servidor.
• Intención: “Inform”
• Nombre del agente servidor: “servidor”
• Ip de la plataforma:
Comunicación

AID

Destino; String Mensaje; int

Intencion;

public B_Ej07(String _destino, String _mensaje, int _intencion) {
!
super();
!
Destino = new AID(_destino,AID.ISLOCALNAME);
!
Mensaje = _mensaje;
!
Intencion = _intencion;
}
public void action() {
!
ACLMessage mensaje = new ACLMessage(Intencion);
!
mensaje.addReceiver(Destino);
!
mensaje.setContent(Mensaje);
!
myAgent.send(mensaje);
}
Comunicación
• Recepción de mensajes.
• El mensaje lo recibe el “agente”:
• myAgent.receive();
• Si no recibe mensaje, el comportamiento se puede de
bloquear hasta que llegue un mensaje para él
•block();
• receive() .vs. blockingReceive()‫‏‬
Comunicación
• Ejercicio 8: Crear un comportamiento cíclico que reciba
mensajes y los muestre por pantalla.

public void action() {
!
ACLMessage envio = myAgent.receive();
!
if (envio != null) {
!
!
!
System.out.println(envio.getSender().getLocalName()
!!
!
+ ": " + envio.getContent());
!
} else
!
!
!
block();
}
Comunicación
• Existen plantillas de mensajes (MessageTemplate)‫‏‬
• Se usan para filtrar la recepción de mensajes
• Las plantillas se pueden componer.

ACLMessage a = myAgent.receive(
MessageTemplate.and(
MessageTemplate.MatchPerformative(ACLMessage.PROPOSE),
MessageTemplate.MatchConversationId("12221")‫‏‬
!
!
)
);
Ping-Pong
• Ejercicio extra:
• Crear dos agentes, donde uno envíe un Ping a otro y este
le conteste con el Pong correspondiente.
• A1 envía un mensaje a A2
• A2 lo escribe y RESPONDE
• A1 lo escribe y se auto-finaliza
Protocolos
Protocolos
• FIPA establece unos protocolos estándares.
• Están 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 Interaction Protocol Specification
• ...
Protocolos
• JADE da libertad de lenguaje.
• FIPA recomienda el lenguaje SL
• JADE trae soporte para lenguaje SL y LEAP(binario)‫‏‬
• También se puede hacer uso de ontologías
Protocolos
• FIPA-REQUEST
• Según FIPA
Protocolos
• FIPA-REQUEST, Según JADE
• Clase AchieveREInitiator inicia la negociación del
protocolo.
• Es para múltiples agentes a la vez
• Para una negociación a 2 implementamos
• SimpleAchieveREInitiator
Protocolos
• Implementación del protocolo
import jade.proto.SimpleAchieveREInitiator;

public class MiRequestI extends SimpleAchieveREInitiator
public B_Protocolo(Agent a, ACLMessage msg) {
!
super(a, msg); }

public void

handleAgree(ACLMessage msg) {

}

public void

handleRefuse(ACLMessage msg) { }

public void

handleInform(ACLMessage msg) { }

public void

handleNotUnderstood(ACLMessage msg) { }

public void

handleOutOfSequence(ACLMessage msg) { }
Protocolos
• Inicialización
• Creación de un mensaje y
• Activación del comportamiento.
import jade.domain.FIPANames.InteractionProtocol;
…
ACLMessage msg = new ACLMessage(ACLMessage.REQUEST);
msg.addReceiver(new AID("entorno",AID.ISLOCALNAME));
msg.setContent(Equipo + Clave);
msg.setProtocol(InteractionProtocol.FIPA_REQUEST);
this.addBehaviour(new B_Protocolo(this,msg));
Protocolos
• Ejercicio 8: Implementación del protocolo FIPA-REQUEST
para conexión a una plataforma.
• Nombre del servidor: “entorno”
• Equipos: 7 Azul, 8 Rojo
• Clave: “a”
Servicios
Servicios

• 2 servicios fundamentales:
• AMS: Páginas Blancas

• DF: Páginas Amarillas
Servicios: Registro y búsqueda

• El registro dentro del servicio de Páginas Blancas es
obligatorio para pertenecer a la plataforma.

• El registro en las Páginas Amarillas es opcional. En él se
registran los servicios que ofrece cada agente, pudiéndose
dar más de una entrada por agente.
Servicios: Registro y búsqueda

• “No tenemos por 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.
• Los agentes se pueden registrar en las plataformas para
poder ser buscados (*)‫‏‬
Registro en Páginas Blancas
• Se realiza automáticamente 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 Páginas 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);
try {
DFService.register(this,dfd);
System.out.println(“Servidor:ttRegistrado");
} catch(FIPAException fe) {
fe.printStackTrace();
}
Búsqueda en Páginas Amarillas
DFAgentDescription template = new DFAgentDescription();
sd = new ServiceDescription();
sd.setType(“Servidor");
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; fe.printStackTrace();
}
if (creadores == null) {
!
this.doDelete();
}
De-Registro
• El borrado de las Páginas Blancas ES AUTOMÁTICO
• El borrado de las Páginas Amarillas ES MANUAL
• Debemos de hacerlo cuando el agente muere, dentro
del método takeDown()‫‏‬
Unos casos prácticos
Tetris: Introducción.

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
implementación rápida de
comportamientos y la
exportabilidad, casi inmediata, a un
funcionamiento en red.

Agente Jugador
CAPTURAR LA BANDERA
CAPTURAR LA BANDERA
• Objetivo del juego:
• Capturar la bandera del equipo contrario y llevarla a su
base.
• Evitar que los contrarios capturen su bandera.
Sistema Razonamiento Distribuido
• Mi trabajo de “DEA”
• Sistema Distribuido de Razonamiento y Aprendizaje

Demostrador

Aprendiz

Otter

Progol
Sistema Razonamiento Distribuido

¿ Teoría ?

Demostrador

Aprendiz
Sistema Razonamiento Distribuido

¿ Formatos ?

Demostrador

Traductor

Aprendiz
Sistema Razonamiento Distribuido

¿ Paralelo ?

Demostrador
Demostrador
Demostrador
Demostrador

Traductor
Traductor
Traductor
Traductor

Aprendiz
Aprendiz
Aprendiz
Aprendiz
Juego de las damas.
Mus
• Colaboración entre agentes por un objetivo común: ganar
Mini-WarCraft
• Implementación del entorno como un agente, que es el
que se encarga de la “física” del sistema.
JGomas
• JGOMAS: Game Oriented Multi Agent System
• basado en Jade
Grandes Retos…
Y más…

Robocup Rescue Simulation

Robocup (Soccer)
Simulation
Enlaces interesantes
• http://programacionjade.wikispaces.com/
• http://dukechile.blogspot.com/search/label/JADE
• http://www.exa.unicen.edu.ar/catedras/tmultiag/apuntes.html
• Conferencia PAAMS
• http://jade.tilab.com
• …. GooGLE!!!
Mas?
• Características Avanzadas
• Seguridad distribuida, tolerancia a fallos, soporte para la replica
de agentes y servicios, persistencia, …
• JADE y .NET
• JADE, Protègè, XML, RDF and OWL
• Integración con JESS (Java Expert System Shell)
• Permite razonar con los mensajes en JESS
• JADE herramientas de Internet
• Integrado con servlets, applets, JSP
• JADE + Android
Gracias por su asistencia!
Gonzalo A. Aranda Corral
Dpto. Tecnologías de la Información
Escuela Técnica Superior “La Rábida”
Universidad de Huelva

Weitere ähnliche Inhalte

Was ist angesagt?

La herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADELa herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADEpcuestaesei
 
Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaMartha Beatriz Coronado Rosales
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje javaMargarita Romero
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVAjesanchez5
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1mellcv
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Javaquesada_diego
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma JavaEudris Cabrera
 
Preguntas sobre lenguaje java
Preguntas sobre lenguaje javaPreguntas sobre lenguaje java
Preguntas sobre lenguaje javaAlexia Lecuona
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2mellcv
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 javajbersosa
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 javajbersosa
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing Laura
 

Was ist angesagt? (19)

La herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADELa herramienta de desarrollo de agentes JADE
La herramienta de desarrollo de agentes JADE
 
Swin01
Swin01Swin01
Swin01
 
Ejercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAvaEjercicios de evaluación de fundametnos de programacion en JAva
Ejercicios de evaluación de fundametnos de programacion en JAva
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Programación con java en Eclipse
Programación con java en EclipseProgramación con java en Eclipse
Programación con java en Eclipse
 
CUESTIONARIO JAVA
CUESTIONARIO JAVACUESTIONARIO JAVA
CUESTIONARIO JAVA
 
Sintaxis Java
Sintaxis JavaSintaxis Java
Sintaxis Java
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Programacion orientada a objetos 1
Programacion orientada a objetos 1Programacion orientada a objetos 1
Programacion orientada a objetos 1
 
Fundamentos de programación Java
Fundamentos de programación JavaFundamentos de programación Java
Fundamentos de programación Java
 
[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java[ES] Primeros pasos con la Plataforma Java
[ES] Primeros pasos con la Plataforma Java
 
Programación en java
Programación en javaProgramación en java
Programación en java
 
Preguntas sobre lenguaje java
Preguntas sobre lenguaje javaPreguntas sobre lenguaje java
Preguntas sobre lenguaje java
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
Clase n°1 java
Clase n°1 javaClase n°1 java
Clase n°1 java
 
Intro
IntroIntro
Intro
 
Clase n°2 3-4 java
Clase n°2 3-4 javaClase n°2 3-4 java
Clase n°2 3-4 java
 
Destructores
Destructores Destructores
Destructores
 
Java GUI La librería Swing
Java GUI La librería Swing Java GUI La librería Swing
Java GUI La librería Swing
 

Ähnlich wie Seminario Jade 2014

Introducción a Java
Introducción a JavaIntroducción a Java
Introducción a JavaLuis Rueda
 
Trabajando con acelerómetros en Android
Trabajando con acelerómetros en AndroidTrabajando con acelerómetros en Android
Trabajando con acelerómetros en Androidykro
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Androidjezabelink
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJSRodrigo Pimentel
 
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas  de rendimiento de Aplicaciones WebPylot : Herramienta para pruebas  de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones WebDeisy Sapaico
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaglfloresgilberto
 
[ES] Fundamentos esenciales de la plataforma java
[ES] Fundamentos esenciales de la plataforma java[ES] Fundamentos esenciales de la plataforma java
[ES] Fundamentos esenciales de la plataforma javaEudris Cabrera
 
Demostración final
Demostración finalDemostración final
Demostración finalcarmensp
 
Introduccion a la algoritmia 2011-i
Introduccion a la algoritmia   2011-iIntroduccion a la algoritmia   2011-i
Introduccion a la algoritmia 2011-iEnrique Vargas
 

Ähnlich wie Seminario Jade 2014 (20)

Introduccion Java.ppt
Introduccion Java.pptIntroduccion Java.ppt
Introduccion Java.ppt
 
Introducción a Java
Introducción a JavaIntroducción a Java
Introducción a Java
 
Trabajando con acelerómetros en Android
Trabajando con acelerómetros en AndroidTrabajando con acelerómetros en Android
Trabajando con acelerómetros en Android
 
Deletreando Android
Deletreando AndroidDeletreando Android
Deletreando Android
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
sesion_01-JAVA.pdf
sesion_01-JAVA.pdfsesion_01-JAVA.pdf
sesion_01-JAVA.pdf
 
Probando aplicaciones AngularJS
Probando aplicaciones AngularJSProbando aplicaciones AngularJS
Probando aplicaciones AngularJS
 
Javajulian
JavajulianJavajulian
Javajulian
 
1.introduccion java
1.introduccion java1.introduccion java
1.introduccion java
 
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas  de rendimiento de Aplicaciones WebPylot : Herramienta para pruebas  de rendimiento de Aplicaciones Web
Pylot : Herramienta para pruebas de rendimiento de Aplicaciones Web
 
Lenguaje java
Lenguaje javaLenguaje java
Lenguaje java
 
Java
JavaJava
Java
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Lenguaje de programación Java
Lenguaje de programación Java Lenguaje de programación Java
Lenguaje de programación Java
 
Mi lenguaje de programación de preferencia
Mi lenguaje de programación de preferenciaMi lenguaje de programación de preferencia
Mi lenguaje de programación de preferencia
 
Java 2010: presente, límites y futuro
Java 2010: presente, límites y futuroJava 2010: presente, límites y futuro
Java 2010: presente, límites y futuro
 
[ES] Fundamentos esenciales de la plataforma java
[ES] Fundamentos esenciales de la plataforma java[ES] Fundamentos esenciales de la plataforma java
[ES] Fundamentos esenciales de la plataforma java
 
Demostración final
Demostración finalDemostración final
Demostración final
 
Introduccion a la algoritmia 2011-i
Introduccion a la algoritmia   2011-iIntroduccion a la algoritmia   2011-i
Introduccion a la algoritmia 2011-i
 
Introduccion programacion en java
Introduccion programacion en javaIntroduccion programacion en java
Introduccion programacion en java
 

Kürzlich hochgeladen

Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Gonella
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJOLeninCariMogrovejo
 
BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................ScarletMedina4
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoJosé Luis Palma
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfsolidalilaalvaradoro
 
Catálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosCatálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosGustavoCanevaro
 
Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Gonella
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfJosé Hecht
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Carol Andrea Eraso Guerrero
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías productommartinezmarquez30
 
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptxfotofamilia008
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAlejandrino Halire Ccahuana
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaMarco Camacho
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacionviviantorres91
 

Kürzlich hochgeladen (20)

Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1Apunte de clase Pisos y Revestimientos 1
Apunte de clase Pisos y Revestimientos 1
 
Mimos _
Mimos                                       _Mimos                                       _
Mimos _
 
Unidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIUUnidad 2 | Teorías de la Comunicación | MCDIU
Unidad 2 | Teorías de la Comunicación | MCDIU
 
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJODIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
DIDÁCTICA DE LA EDUCACIÓN SUPERIOR- DR LENIN CARI MOGROVEJO
 
BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................BOCA Y NARIZ (2).pdf....................
BOCA Y NARIZ (2).pdf....................
 
Biografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro DelgadoBiografía del General Eloy Alfaro Delgado
Biografía del General Eloy Alfaro Delgado
 
Sesión ¿Amor o egoísmo? Esa es la cuestión
Sesión  ¿Amor o egoísmo? Esa es la cuestiónSesión  ¿Amor o egoísmo? Esa es la cuestión
Sesión ¿Amor o egoísmo? Esa es la cuestión
 
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdfBITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
BITÁCORA DE ESTUDIO DE PROBLEMÁTICA. TUTORÍA V. PDF 2 UNIDAD.pdf
 
Catálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial AlbatrosCatálogo general de libros de la Editorial Albatros
Catálogo general de libros de la Editorial Albatros
 
Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2Apunte de clase Pisos y Revestimientos 2
Apunte de clase Pisos y Revestimientos 2
 
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdfMEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
MEDIACIÓN INTERNACIONAL MF 1445 vl45.pdf
 
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
Desarrollo de habilidades del siglo XXI - Práctica Educativa en una Unidad-Ca...
 
historieta materia de ecologías producto
historieta materia de ecologías productohistorieta materia de ecologías producto
historieta materia de ecologías producto
 
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
4° SEM23 ANEXOS DEL DOCENTE 2023-2024.pptx
 
Amor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdfAmor o egoísmo, esa es la cuestión por definir.pdf
Amor o egoísmo, esa es la cuestión por definir.pdf
 
AO TEATRO, COM ANTÓNIO MOTA! _
AO TEATRO, COM ANTÓNIO MOTA!             _AO TEATRO, COM ANTÓNIO MOTA!             _
AO TEATRO, COM ANTÓNIO MOTA! _
 
Buenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria FarmaceuticaBuenas Practicas de Manufactura para Industria Farmaceutica
Buenas Practicas de Manufactura para Industria Farmaceutica
 
Actividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 EducacionActividades eclipse solar 2024 Educacion
Actividades eclipse solar 2024 Educacion
 
Acuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptxAcuerdo segundo periodo - Grado Noveno.pptx
Acuerdo segundo periodo - Grado Noveno.pptx
 
Unidad 1 | Metodología de la Investigación
Unidad 1 | Metodología de la InvestigaciónUnidad 1 | Metodología de la Investigación
Unidad 1 | Metodología de la Investigación
 

Seminario Jade 2014

  • 1. Programación de Agentes con JADE Gonzalo A. Aranda Corral Dpto. Tecnologías de la Información Universidad de Huelva Seminario GLC - Enero 2014
  • 2. Taller de Programación de Agentes ¿ INTELIGENTES ?
  • 3. ¿Qué es JADE? • Java Agent DEvelopment framework • Jade es básicamente dos cosas: • Una plataforma: que permite “VIVIR” y “CONVIVIR” a los agentes dentro de ella. • Un conjunto de herramientas para el desarrollo de agentes y sistemas de forma rápida.
  • 4. ¿Qué es JADE? • Totalmente realizado en Java. • Portabilidad y • Movilidad‫‏‬ • Software distribuido por TILAB bajo licencia LPGL • Fuentes y binarios • http://jade.tilab.com/
  • 5. Estándares http://www.fipa.org • Foundation for Intelligent Physical Agents (FIPA)‫‏‬ • Arquitectura: Integración de diferentes aplicaciones, incluso con plataformas de diferentes propietarios. • Servicios de agentes: ciclo de vida, páginas blancas, páginas amarillas, transporte de mensajes,... • Lenguaje de comunicación empleado FIPA-ACL. • Conjunto de Herramientas gráficas que soportan la depuración y ejecución de agentes (RMA, Sniffer, ...)
  • 6. FIPA: Arquitectura • Plataforma distribuida • Comunicación múltiples niveles • Protocolos estándares • Internet
  • 7. FIPA: Plataforma • Soporte para servicios • Páginas blancas y amarillas • Soporte a la Comunicación • Servicios basados en Agentes
  • 8. FIPA: Plataforma Los agentes que controlan la plataforma son: • AMS . Agent Management System: • Garantiza que cada agente en la plataforma tenga un único nombre. • Encargado de los servicios de páginas blancas, ciclo de vida, y directorio de los identificadores de agentes (AID: Agent Identifier) y su estado. • Cada agente debe registrarse con el AMS para obtener un AID válido
  • 9. FIPA: Plataforma Los agentes que controlan la plataforma son: • DF (Directory Facilitator): • Agente que proporciona el servicio de páginas amarillas. • Un agente puede encontrar otros agentes que proporcionan los servicios que requiere para cumplir sus objetivos • El registro en este agente es opcional
  • 10. FIPA: Plataforma Los agentes que controlan la plataforma son: • ACC . Agent Communication Channel: • Software que controla el intercambio de mensajes • Selecciona el protocolo adecuado y lo hace transparente al agente • Agente inaccesible de forma directa
  • 11. FIPA: Lenguajes • Establece estándares a varios niveles • Protocolos • Estructura del mensaje • Lenguaje
  • 12. FIPA: Herramientas • Unificación de herramientas para la depuración distribuida • Las herramientas son agentes • RMA • Sniffer • etc...
  • 13. FIPA: Algunos frameworks • Jade • Jadex Agents (Java) • Java Intelligent Agent Compontentware (JIAC) • The SPADE Multiagent and Organizations Platform (Python) • JACK Intelligent Agents (Java) • The April Agent Platform (AAP) and Language (April) (No longer actively developed) • Zeus Agent Building Toolkit (No longer actively developed) • The Fipa-OS agent platform (No longer actively developed) • AgentService (C#) (last update: 2009) http://en.wikipedia.org/wiki/FIPA
  • 14. JADE • FIPA - Compliant • Plataforma • Agentes • Arquitectura • Lenguaje ¿? • ...
  • 15. Cómo obtener Jade • Dirección: http://jade.tilab.com • Para la mayoría de las acciones es necesario registrarse, y aceptar los requisitos de la licencia LGPL • La versión actual de Jade es la 4.3.1(Diciembre 2013) • Nosotros usaremos: JADE 4.3.0 (Marzo 2013) • Descarga: http://www.glc.us.es/jade/lib
  • 16. Instalación • Descargamos el fichero (JADE-all-4.0.zip) de la versión correspondiente. • Se descomprime en un directorio accesible por todos los agentes • Se creará un directorio lib/ debajo del cual estarán las librerías necesarias para la ejecución de Jade • NECESITA, al menos, JAVA 1.5 (aunque usaremos la 1.6)
  • 17. Instalación • En versiones antiguas: • Descomprimimos el fichero y nos salen cuatro nuevos ficheros: • JADE-doc-3.7.zip: la documentación javadoc, el manual del administrador, el del programador y un tutorial. • JADE-src-3.7.zip: código fuente sin compilar. • JADE-bin-3.7.zip: código compilado y listo para ser invocado. • JADE-examples-3.7.zip: ejemplos de uso de la plataforma.
  • 22. Eclipse: Creación del proyecto MANOS A LA OBRA
  • 23. La clase (jade.core.)Agent • Clase jade para construcción de agentes: (extend) jade.core.Agent •public class miAgente extends Agent .... • NUNCA SOBREESCRIBIR EL CONSTRUCTOR • Inicialización: setup(). •protected void setup() { super.setup();..
  • 24. La clase (jade.core.)Agent • Clase jade para construcción de agentes: (extend) jade.core.Agent • Para terminar: • Invocar: doDelete(). • Sobreescribir: protected void takeDown(). • Para recuperar los parámetros pasados a un agente: • Object[] args = getArguments();
  • 25. AID: Identificadores de agentes • Descripción del agente se almacen en la clase AID (jade.core.AID) • La clase Agent incorpora el método getAID() que permite recuperar el nombre del agente. • El nombre del agente, un identificador único globalmente(normativa FIPA), va a tener la estructura • <nickname>@<nombre-plataforma>:<puerto>/JADE
  • 26. Ejercicio 1. • Nuestro primer agente: • Debemos de crear un agente cuya misión sea imprimir un “Hola Mundo” package ej01; import jade.core.Agent; public class Ejercicio01 extends Agent { ! ! ! } protected void setup() { ! System.out.println(“Hola Mundo.”); }
  • 27. Ejecución • Desde línea de comandos: • java -cp <classpath> jade.Boot [options] [agents] • 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 • agentes: Nombre y clases(incluyendo paquetes) de nuestro agente • - agents agente:ClaseAgente
  • 28. Ejecución • Desde línea de comandos: •En el directorio donde está el jade.jar: java -cp jade.jar jade.Boot -gui -agents pepe:ee
  • 29. Ejecución • Desde Eclipse: • Creamos una configuración de ejecución. • Menu: Run -> Run Configurations • Barra Menú:
  • 34. Resultado 25-may-2006 1:46:38 jade.core.Runtime beginContainer INFO: ---------------------------------This is JADE 3.3 - 2005/03/02 16:11:05 downloaded in Open Source, under LGPL restrictions, at http://jade.cselt.it/ SIGUE VIVO!!! ---------------------------------------*******************MAS INFORMACION INFO: -------------------------------------- SIEMPRE CERRAR Agent container Main-Container@JADE-IMTP://GON-WS1 is ready. HACIENDO SHUTDOWN -------------------------------------------Hola Mundo. DESDE EL MENU DE LA PLATAFORMA... SI NO, SE QUEDA ABIERTA!
  • 35. Plugin para Eclipse • http://dit.unitn.it/~dnguyen/ejade/ Last updated June 2007
  • 36. Ciclo de vida de un agente
  • 38. Comportamientos • Acciones y Percepciones: • “Comportamientos” • El agente “posee” los comportamientos y es el único que los puede activar y desactivar • (agente).addBehaviour(...);
  • 39. 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.
  • 40. Comportamientos • La clase principal es: jade.core.behaviours.Behaviour • Tiene 2 métodos principales: • action(): que es el método que se ejecuta cada vez que se invoca el método • done(): hace la comprobación de si el comportamiento ha terminado o no. • Aquí se puede sobreescribir el constructor (aunque no es aconsejable)‫‏‬
  • 41. Comportamientos • Ejercicio 2: Crear un agente que implemente un comportamiento que salude al mundo. package ej02; import jade.core.Agent; import jade.core.behaviours.Behaviour; public class Ejercicio02 extends Agent { ! protected void setup() { ! ! this.addBehaviour(new Behaviour() { ! ! ! public void action() { ! ! ! ! System.out.println("Hola Mundo. Ejercicio2"); ! ! ! } ! ! ! public boolean done() { return true; } ! ! });!} }
  • 42. Comportamientos • Ejercicio 3: Repetir el agente anterior, con comportamiento en clase separada. Comportamiento public class B_Ej03 extends Behaviour{ ! public void action() { ! ! ! System.out.println("Hola Mundo. Ejercicio3"); ! } ! public boolean done() { ! ! ! return true; ! } } Agente protected void setup() { ! ! B_Ej03 ej3 = new B_Ej03(); ! ! this.addBehaviour(ej3); }
  • 43. Comportamiento • Ejercicio 4: Implementar un comportamiento que cuente desde 1 hasta 10 public class B_Ej04 extends Behaviour{ ! int contador = 1; ! public void action() { ! ! ! System.out.println(contador); ! ! ! contador++; ! } ! public boolean done() { ! ! ! // CONDICION DE FINAL DE COMPORTAMIENTO ! ! ! return contador > 10; ! } }
  • 44. Comportamiento • Variable: myAgent • Todas las acciones las realiza el agente • Necesitamos myAgent para que un comportamiento invoque a otro comportamiento • Reutilización de los comportamientos
  • 45. Tipos de comportamientos • Comportamientos estándar: • Behaviour: Comportamiento genérico. • OneShotBehaviour: done() siempre devuelve “true”. • CyclicBehaviour: done() siempre devuelve “false”. • TickerBehaviour: se ejecuta periódicamente (dado en el constructor). • FSMBehaviour: máquina finita de estados(Finite State Machine). • ..............
  • 46. Ejemplo • Ejercicio 5: Crear un comportamiento cíclico que lea un sensor constantemente public class CSimple extends Behaviour { public class B_Ej05 extends CyclicBehaviour{ ! public void action() { ! private int estado = 0; ! ! ! while (true) { ! public void action() { ! ! ! // Acciones a realizar ! ! ! int medida = Sensores.getBumper(); ! ! ! } ! ! ! switch(estado) { ! } ! ! ! case 0: ! public boolean done() { ! ! ! ! // No ha tocado ! ! ! return true; ! ! ! case 1: ! } ! ! ! ! // Ha tocado } ! ! ! } ! } }
  • 47. Tipos de comportamientos • Los comportamientos además se pueden componer y formar comportamientos más complejos. • Una implementación interesante sería el comportamiento BDI dentro de Jade.
  • 48. Comportamientos Compuestos • FSMBehaviour es un comportamiento compuesto. • De manera secuencial, y definiendo transiciones entre estados, se implementa la acción que debe realizar el comportamiento. • FSMBehaviour carece de método action()‫‏‬ • Para la devolución del estado se sobreescribe el método onEnd(), que devuelve el entero que nos decidirá la transición de estado.
  • 49. Comportamientos Compuestos • También existen otros como: • SequentialBehaviour, • ParallelBehaviour, … • y ofrece posibilidades para que el desarrollador los cree
  • 50. Ejemplo FSM • Constantes public class B_Ej06 extends FSMBehaviour { // estados FSM private static final String ESTADO_0 = private static final String ESTADO_1 = private static final String ESTADO_2 = private static final String ESTADO_3 = private static final String ESTADO_ERR // Valores devueltos private final int CERO = 0; private final int CINCO = 5; private final int DIEZ = 10; private final int QUINCE = 15; "cero"; "uno"; "dos"; "tres"; = "error";
  • 51. Ejemplo FSM • Constructor public B_Ej06(Agent a) { super(a); // Registrar los estados registerFirstState(new ZeroBehaviour(myAgent), ESTADO_0); registerState(new FiveBehaviour(myAgent), ESTADO_1); registerState(new TenBehaviour(myAgent), ESTADO_2); registerLastState(new TwentyFiveBehaviour(myAgent), ESTADO_3); // transiciones registerTransition(ESTADO_0, ESTADO_0, CERO); registerTransition(ESTADO_0, ESTADO_1, CINCO); registerDefaultTransition(ESTADO_0, ESTADO_ERR); scheduleFirst(); }
  • 52. Ejemplo FSM • Comportamientos internos class ZeroBehaviour extends OneShotBehaviour { int transition = CERO; ! ! ! public void action() { ! // Cosas que hacer } // Se ejecuta al final y es el encargado de devolver el valor. public int onEnd() { return transition; } }
  • 54. Comunicación • Comunicación TRANSPARENTE • 3 niveles • Internos (misma máquina): Eventos • Misma red: RMI (Remote Method Invocation) • Distinta red: CORBA (Common Object Request Broker Architecture)
  • 55. Comunicación • La capacidad de comunicación • envío de mensajes ACL. • En 1 mensaje podemos distinguir 4 partes principales: • Receptor y Emisor • Contenido • Directiva • Lenguaje y Ontologías
  • 56. Comunicación • El mensaje es un objeto de la clase •jade.lang.acl.ACLMessage • Intención del mensaje: “PERFORMATIVA” (“DIRECTIVA”) • Además, posee otros parámetros: • ReplyWith, ConversationId, etc... • Los mensajes los mandan los agentes
  • 57. Comunicación • Creación de un mensaje ACLMessage mensaje = new ACLMessage(ACLMessage.REQUEST); AID agente = new AID("agente2",AID.ISLOCALNAME); mensaje.addReceiver(agente); mensaje.setContent("Quiero Jugar"); myAgent.send(mensaje);
  • 58. Comunicación • Todas las acciones de un agente, deben de estar implementadas como comportamientos. • La comunicación es una acción. • Los comportamientos de envío podrían ser OneShot*. • Los comportamientos cíclicos se usan para la recepción continua de mensajes.
  • 59. Más Parámetros de ejecución • Si creamos la plataforma y ejecutamos varios agentes: • (sin parámetros especiales)‫‏‬ • Unir un agente a una plataforma creada (en la misma máquina=desde 2 aplic)‫‏‬ • Parámetro: -container • Unir un agente a una plataforma creada OTRA máquina • Parámetro: -host xxx.xxx.xxx.xxx -container • Parámetro: -host localhost -container
  • 60. Comunicación • Ejercicio 7: Crear un comportamiento de un disparo que envíe un mensaje a la plataforma del servidor. • Intención: “Inform” • Nombre del agente servidor: “servidor” • Ip de la plataforma:
  • 61. Comunicación AID Destino; String Mensaje; int Intencion; public B_Ej07(String _destino, String _mensaje, int _intencion) { ! super(); ! Destino = new AID(_destino,AID.ISLOCALNAME); ! Mensaje = _mensaje; ! Intencion = _intencion; } public void action() { ! ACLMessage mensaje = new ACLMessage(Intencion); ! mensaje.addReceiver(Destino); ! mensaje.setContent(Mensaje); ! myAgent.send(mensaje); }
  • 62. Comunicación • Recepción de mensajes. • El mensaje lo recibe el “agente”: • myAgent.receive(); • Si no recibe mensaje, el comportamiento se puede de bloquear hasta que llegue un mensaje para él •block(); • receive() .vs. blockingReceive()‫‏‬
  • 63. Comunicación • Ejercicio 8: Crear un comportamiento cíclico que reciba mensajes y los muestre por pantalla. public void action() { ! ACLMessage envio = myAgent.receive(); ! if (envio != null) { ! ! ! System.out.println(envio.getSender().getLocalName() !! ! + ": " + envio.getContent()); ! } else ! ! ! block(); }
  • 64. Comunicación • Existen plantillas de mensajes (MessageTemplate)‫‏‬ • Se usan para filtrar la recepción de mensajes • Las plantillas se pueden componer. ACLMessage a = myAgent.receive( MessageTemplate.and( MessageTemplate.MatchPerformative(ACLMessage.PROPOSE), MessageTemplate.MatchConversationId("12221")‫‏‬ ! ! ) );
  • 65. Ping-Pong • Ejercicio extra: • Crear dos agentes, donde uno envíe un Ping a otro y este le conteste con el Pong correspondiente. • A1 envía un mensaje a A2 • A2 lo escribe y RESPONDE • A1 lo escribe y se auto-finaliza
  • 67. Protocolos • FIPA establece unos protocolos estándares. • Están 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 Interaction Protocol Specification • ...
  • 68. Protocolos • JADE da libertad de lenguaje. • FIPA recomienda el lenguaje SL • JADE trae soporte para lenguaje SL y LEAP(binario)‫‏‬ • También se puede hacer uso de ontologías
  • 70. Protocolos • FIPA-REQUEST, Según JADE • Clase AchieveREInitiator inicia la negociación del protocolo. • Es para múltiples agentes a la vez • Para una negociación a 2 implementamos • SimpleAchieveREInitiator
  • 71. Protocolos • Implementación del protocolo import jade.proto.SimpleAchieveREInitiator; public class MiRequestI extends SimpleAchieveREInitiator public B_Protocolo(Agent a, ACLMessage msg) { ! super(a, msg); } public void handleAgree(ACLMessage msg) { } public void handleRefuse(ACLMessage msg) { } public void handleInform(ACLMessage msg) { } public void handleNotUnderstood(ACLMessage msg) { } public void handleOutOfSequence(ACLMessage msg) { }
  • 72. Protocolos • Inicialización • Creación de un mensaje y • Activación del comportamiento. import jade.domain.FIPANames.InteractionProtocol; … ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); msg.addReceiver(new AID("entorno",AID.ISLOCALNAME)); msg.setContent(Equipo + Clave); msg.setProtocol(InteractionProtocol.FIPA_REQUEST); this.addBehaviour(new B_Protocolo(this,msg));
  • 73. Protocolos • Ejercicio 8: Implementación del protocolo FIPA-REQUEST para conexión a una plataforma. • Nombre del servidor: “entorno” • Equipos: 7 Azul, 8 Rojo • Clave: “a”
  • 75. Servicios • 2 servicios fundamentales: • AMS: Páginas Blancas • DF: Páginas Amarillas
  • 76. Servicios: Registro y búsqueda • El registro dentro del servicio de Páginas Blancas es obligatorio para pertenecer a la plataforma. • El registro en las Páginas Amarillas es opcional. En él se registran los servicios que ofrece cada agente, pudiéndose dar más de una entrada por agente.
  • 77. Servicios: Registro y búsqueda • “No tenemos por 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. • Los agentes se pueden registrar en las plataformas para poder ser buscados (*)‫‏‬
  • 78. Registro en Páginas Blancas • Se realiza automáticamente al unirse a la plataforma. • Se puede realizar “a mano” si se desea, • Si extendemos de la clase Agent, esta lo tiene implementado.
  • 79. Registro en Páginas 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); try { DFService.register(this,dfd); System.out.println(“Servidor:ttRegistrado"); } catch(FIPAException fe) { fe.printStackTrace(); }
  • 80. Búsqueda en Páginas Amarillas DFAgentDescription template = new DFAgentDescription(); sd = new ServiceDescription(); sd.setType(“Servidor"); 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; fe.printStackTrace(); } if (creadores == null) { ! this.doDelete(); }
  • 81. De-Registro • El borrado de las Páginas Blancas ES AUTOMÁTICO • El borrado de las Páginas Amarillas ES MANUAL • Debemos de hacerlo cuando el agente muere, dentro del método takeDown()‫‏‬
  • 83. Tetris: Introducción. 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 implementación rápida de comportamientos y la exportabilidad, casi inmediata, a un funcionamiento en red. Agente Jugador
  • 85. CAPTURAR LA BANDERA • Objetivo del juego: • Capturar la bandera del equipo contrario y llevarla a su base. • Evitar que los contrarios capturen su bandera.
  • 86. Sistema Razonamiento Distribuido • Mi trabajo de “DEA” • Sistema Distribuido de Razonamiento y Aprendizaje Demostrador Aprendiz Otter Progol
  • 87. Sistema Razonamiento Distribuido ¿ Teoría ? Demostrador Aprendiz
  • 88. Sistema Razonamiento Distribuido ¿ Formatos ? Demostrador Traductor Aprendiz
  • 89. Sistema Razonamiento Distribuido ¿ Paralelo ? Demostrador Demostrador Demostrador Demostrador Traductor Traductor Traductor Traductor Aprendiz Aprendiz Aprendiz Aprendiz
  • 90. Juego de las damas.
  • 91. Mus • Colaboración entre agentes por un objetivo común: ganar
  • 92. Mini-WarCraft • Implementación del entorno como un agente, que es el que se encarga de la “física” del sistema.
  • 93. JGomas • JGOMAS: Game Oriented Multi Agent System • basado en Jade
  • 94. Grandes Retos… Y más… Robocup Rescue Simulation Robocup (Soccer) Simulation
  • 95. Enlaces interesantes • http://programacionjade.wikispaces.com/ • http://dukechile.blogspot.com/search/label/JADE • http://www.exa.unicen.edu.ar/catedras/tmultiag/apuntes.html • Conferencia PAAMS • http://jade.tilab.com • …. GooGLE!!!
  • 96. Mas? • Características Avanzadas • Seguridad distribuida, tolerancia a fallos, soporte para la replica de agentes y servicios, persistencia, … • JADE y .NET • JADE, Protègè, XML, RDF and OWL • Integración con JESS (Java Expert System Shell) • Permite razonar con los mensajes en JESS • JADE herramientas de Internet • Integrado con servlets, applets, JSP • JADE + Android
  • 97. Gracias por su asistencia! Gonzalo A. Aranda Corral Dpto. Tecnologías de la Información Escuela Técnica Superior “La Rábida” Universidad de Huelva