construcción de un sistema multiagente mediante jade

38
Construcción de un sistema multiagente mediante Jade Curso: Agentes Inteligentes Sevilla, 20 de Mayo de 2008 Gonzalo A. Aranda Corral

Upload: blaine-arnold

Post on 02-Jan-2016

48 views

Category:

Documents


5 download

DESCRIPTION

Construcción de un sistema multiagente mediante Jade. Curso: Agentes Inteligentes Sevilla, 20 de Mayo de 2008. Gonzalo A. Aranda Corral. J ava A gent DE velopment framework. Jade es básicamente dos cosas: - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

• Curso: Agentes Inteligentes

• Sevilla, 20 de Mayo de 2008 Gonzalo A. Aranda Corral

Page 2: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

2

Java Agent DEvelopment framework

• Jade es básicamente dos cosas:

– Una plataforma: que permite “VIVIR” y “CONVIVIR” a los agentes dentro de ella. Es decir, proporciona el entorno necesario para la ejecución de estos agentes simultáneamente y los canales para su comunicación y cooperación.

– Un conjunto de herramientas con el que realizar el desarrollo de agentes y sistemas multiagente de forma más sencilla, rápida y efectiva. Labor tediosa.

• Totalmente realizado en Java. (Portabilidad y Movilidad)

• Software libre distribuido por TILAB en código fuente bajo LPGL

http://jade.tilab.com/

Page 3: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

3

Foundation for Intelligent Physical Agents (FIPA)

• Otra de las características más importantes de Jade es el cumplimiento de las especificaciones FIPA

– Arquitectura: Esto nos dará muchas ventajas a la hora de la integración de diferentes aplicaciones, incluso con plataformas de diferentes propietarios.

– Lenguaje de comunicación empleado FIPA-ACL.

– Servicios de agentes: ciclo de vida, páginas blancas, páginas amarillas, transporte de mensajes,...

– Conjunto de herramientas gráficas que soportan la depuración y ejecución de agentes (RMA, sniffer, ...)

http://www.fipa.org

Page 4: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

4

Arquitectura básica (Infraestructura)

•Plataforma distribuida

•Comunicación entre plataformas

•Protocolos estándares: Internet

Page 5: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

5

Arquitectura básica (Plataforma)

•Especificación FIPA

•Agentes y servicios

•Comunicación

Page 6: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

6

Arquitectura básica (Agentes)

• AMS . Agent Management System:

– Garantiza que cada agente en la plataforma tenga un único nombre.

– Encargado de proporcionar los servicios de páginas 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 válido

• 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

• ACC . Agent Communication Channel:

– Software que controla el intercambio de mensajes

Page 7: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

7

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 3.6(Mayo 2008), aunque nosotros vamos a realizar este seminario sobre la versión 3.4 (Marzo 2006)

Page 8: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

8

Instalación

• Descargamos el fichero (JADE-all-3.4.zip) de la versión correspondiente.

• Descomprimimos el fichero y nos salen cuatro nuevos ficheros:

– JADE-doc-3.4.zip: la documentacion javadoc, el manual del administrador, el del programador y un tutorial.

– JADE-src-3.4.zip: el codigo fuente sin compilar.

– JADE-bin-3.4.zip: el codigo ya compilado y listo para ser invocado.

– JADE-examples-3.4.zip: ejemplos de uso de la plataforma.

• Volvemos a descomprimir los 4 ficheros en el mismo directorio.

• 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.4.2

Page 9: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

9

Creación del proyecto

Page 10: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

10

Creación del proyecto

Page 11: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

11

Creación del proyecto

Page 12: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

12

La clase Agent• Para trabajar con agentes se debe conocer mas o menos a fondo la clase

jade.core.Agent

• ya que para crear un agente JADE se debe crear una nueva clase de agente que herede de ésta y que como mínimo implemente el metod setup().

• El método setup() se ejecuta cuando se va a lanzar el agente para su ejecución y únicamente debe contener código relativo a tareas de inicialización. Por lo tanto, de momento, el agente no va a hacer absolutamente nada mas que emitir ese mensaje cuando se lance.

• El agente va a permanecer ejecutándose hasta que se invoca el método doDelete(). Este método llama a su vez a takeDown() que podéis redefinir para incluir código relativo a limpieza de elementos del agente.

• El método getArguments() devuelve un Object[] que proporciona los argumentos que se le han pasado al agente. Para que no haya ningún problema, el lector de los argumentos debe saber el numero y el tipo de cada uno de los argumentos.

Page 13: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

13

Identificadores de agentes

• En JADE, la descripción del agente, el AID (Agent Identier) tiene su correspondiente clase java,

jade.core.AID

a partir de la cuál se pueden manejar las características básicas del agente

• 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>

Page 14: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

14

El primer Agente

import jade.core.Agent;

public class JAgente extends Agent {

protected void setup() {

System.out.println(“Hola Mundo.”);

}

}

•Creamos nuestro primer agente cuya función va a ser saludar al mundo.

Page 15: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

15

Ejecución

• Para la ejecucion de Jade, lo podemos realizar de dos formas distintas:

– Desde la linea de comandos:

java <classpath> [opciones] jade.Boot agente:ClaseAgente

- classpath: direccion y nombre de los *.jar de Jade- opciones: en principio, solo vamos a usar la opcion “-gui” para mostrar

el interface grafico de Jade- jade..Boot: es la clase de arranque de la plataforma- agente:ClaseAgente: Nombre y clases(incluyendo paquetes) de donde

queremos crear el agente

- Desde Eclipse:- Creamos un proyecto y ponemos los siguiente paramentros (Ver pag

siguiente)

Page 16: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

16

Ejecución

Page 17: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

17

Ejecución

Page 18: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

18

Ejecución

Page 19: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

19

Plugin para Eclipse• http://dit.unitn.it/~dnguyen/ejade/

Page 20: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

20

Traza

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/

----------------------------------------

*******************MAS INFORMACION

INFO: --------------------------------------

Agent container Main-Container@JADE-IMTP://GON-WS1 is ready.

--------------------------------------------

Hola Mundo.

SIEMPRE CERRAR HACIENDO SHUTDOWN DESDE EL MENU DE LA PLATAFORMA... SI NO, SE QUEDA ABIERTA!

SIGUE VIVO!!!

Page 21: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

21

Comportamientos

• Los agentes realizan las acciones y las percepciones mediante los “Comportamientos”.

• La clase(y paquete) principal de los comportamientos es:

jade.core.behaviours.Behaviour

• La clase 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.

Page 22: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

22

Comportamientos

public class CSimple extends Behaviour {

public void action() {

while (true) {

// Acciones a realizar

}

}

public boolean done() {

return true;

}

}

•Un comportamiento tipo sería:

OJO: Este comportamiento bloquearía el sistema

Page 23: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

23

Ciclo de vida de un agente

Page 24: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

24

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.

Page 25: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

25

Comportamiento(II)

• Lanzar el comportamiento

• para añadir un comportamiento a un agente usaremos el método “addBehaviour()” que lo podremos llamar de la siguiente forma:

(dentro de la clase agente, todavía)

this.addBehaviour(new Behaviour() {int contador = 12;public void action() {

// ACCIONES A REALIZARSystem.out.println(contador);contador--;

}public boolean done() {

// CONDICION DE FINAL DE COMPORTAMIENTOreturn contador == 0;

}});

Page 26: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

26

miPrimerComportamiento comporta = new miPrimerComportamiento();this.addBehaviour(comporta);

con la clase “miPrimerComportamiento” creada anteriormente, ya sea como clase privada dentro del fichero o como pública en un fichero aparte

class miPrimerComportamiento extends Behaviour { int contador = 10; public void action() { // ACCIONES A REALIZAR System.out.println("\t" + contador); contador--; }

public boolean done() { // CONDICION DE FINAL DE COMPORTAMIENTO return contador == 0; }}

Comportamiento(III)

o creando un objeto y activándolo

Page 27: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

27

Tipos de comportamientos

• Dentro de Jade, vienen implementado diferentes comportamientos listos para ser usados. Son los siguientes:

– Behaviour: Comportamiento genérico.

– OneShotBehaviour: El método done() siempre devuelve “true”, de forma que solo se ejecuta una vez y de forma ininterrumpida.

– CyclicBehaviour: El método done() siempre devuelve “false”, de forma que está siempre ejecutándose. Esto puede tener el peligro de quedarse con toda la CPU.

– TickerBehaviour: Comportamiento que se ejecuta periódicamente cada cierto tiempo(dado en el constructor).

– ..............

• 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.

Page 28: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

28

Implementación de un comportamiento cíclicopublic class Mensajeria extends CyclicBehaviour {

private int estado = 0;

public void action() {

ACLMessage mensajes = myAgent.receive();

if (mensajes != null) {

switch(estado) {

case 0:

// Llega una peticion de partida nueva

case 1:

break;

}

} else {

block();

}

}

}

Los comportamientos cíclicos se suelen implementar como una máquina de estados, y con bloqueos a la espera de recibir mensajes.

Page 29: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

29

Mensajería

• La capacidad de comunicación de un agente viene soportada por el envío de mensajes ACL.

• En un mensaje podremos distinguir 4 partes principales:

– Receptor y Emisor

– Contenido

– Directiva

– Lenguaje y Ontologías

• El mensaje es un objeto de la clase jade.lang.acl.ACLMessage y cuando se crea el mensaje, invocando al constructor, le pasamos un parámetro que es la “PERFORMATIVA”

• Además, el mensaje posee otros parámetros para identificar los mensajes, como ReplyWith, ConversationId, etc

Page 30: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

30

Mensajería

• El envío de mensajes lo deberemos de realizar dentro de los comportamientos. Estos comportamientos podrán ser OneShot o Cyclic, dependiendo de lo que nos interese.

- Los comportamientos cíclicos se realizan para la recepción de mensajes, ya que los podemos bloquear hasta la recepción de uno nuevo.

• En el Agente Jugador, tendríamos un comportamiento de disparo para solicitar que empiece la partida.

• Todas las acciones de un agente, deben de estar implementadas como comportamientos.

Page 31: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

31

Mensajería

package Jugador;

import jade.core.AID;

import jade.core.behaviours.OneShotBehaviour;

import jade.lang.acl.ACLMessage;

public class MEmpezar extends OneShotBehaviour {

public void action() {

ACLMessage mensaje = new ACLMessage(ACLMessage.REQUEST);

AID partida = new AID("miPartida",AID.ISLOCALNAME);

mensaje.addReceiver(partida);

mensaje.setContent("Quiero Jugar");

myAgent.send(mensaje);

}

}

Page 32: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

32

Mensajería-Dentro de Jade, y haciendo uso de las directivas, se han implementado diferentes protocolos, que sólo vamos a nombrar ya que se escapan de nuestro alcance.

-FIPA Request Interaction Protocol Specification

-FIPA Query Interaction Protocol Specification

-FIPA Request When Interaction Protocol Specification

-FIPA Contract Net Interaction Protocol Specification

-...

-El lenguaje de contenido FIPA es el SL, que es un lenguaje con una sintaxis muy parecida al LISP, aunque no está demás recordar que FIPA lo que tiene son RECOMENDACIONES.

-También se puede hacer uso de ontologías, que podemos crear con programas como Protégé.

Page 33: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

33

Registro y búsqueda

• Los agentes se pueden registrar en las plataformas para ser buscados (*)

“No tenemos por que saber como se llama el agente que posee nuestra partida”

• Aunque al menos tiene que existir lo que se denomina: “El secreto compartido”, es decir, tenemos que saber ALGO de lo que queremos buscar. En nuestro caso es el nombre de los dos agentes especiales AMS y DF

• 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.

Page 34: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

34

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.

Page 35: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

35

Registro en Páginas Amarillas

//----------------------------------------------------------------//

// Registrar el Creador en el facilitador de directorio

//----------------------------------------------------------------//

DFAgentDescription dfd = new DFAgentDescription();

dfd.setName(getAID());

ServiceDescription sd = new ServiceDescription();

sd.setType("Crear");

sd.setName("Creacion");

dfd.addServices(sd);

try {

DFService.register(this,dfd);

cad.println("Creador\t\tRegistrado");

} catch(FIPAException fe) {

fe.printStackTrace();

}

Page 36: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

36

Búsqueda de serviciosDFAgentDescription template = new DFAgentDescription();

sd = new ServiceDescription();

sd.setType("Traducir");

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();

}

Page 37: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

37

Un caso práctico: Tetris

Page 38: Construcción de un sistema multiagente mediante Jade

Construcción de un sistema multiagente mediante Jade

38

Tetris: Introducción.

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

Agente Partida