Está en la página 1de 6

Instalación

Para instalar JADE es necesario descargar el archivo JADE-bin-3.3.zip del sitio oficial.
Después se extraen los archivos en el directorio raíz con el nombre c:\jade con el fin de
hacer más rápida la conexión con el editor y el compilador de java. Se debe tener instalado
previamente Java Run Time Enviroment (JRE) y el kit de desarrollo de Java (JSDK ).
También deben existir las direcciones del compilador y las librerias de java en el PATH de
Windows (por ejemplo c:\java\bin y c:\java\lib) . Es importante que NO se ELIMINE la
ruta anterior, solo se deben agregar las lineas al PATH existente. Por último se debe
establecer el CLASSPATH para incluir los archivos jar que estan en el subdirectorio “lib”
de jade. Para ello en una ventana de sistema ejecutamos el comando:

set CLASSPATH=%CLASSPATH%;.;c:\jade\lib\jade.jar; c:\jade\lib\jadeTools.jar;


c:\jade\lib\Base64.jar; c:\jade\lib\iiop.jar

Si hay problemas otra opción es abrir “Propiedades” en “Mi pc”, elegir la pestaña
“Opciones avanzadas “ y luego seleccionar “Variables de entorno”. El cuadro de diálogo
que aparece es como se muestra a continuación.

Figura 1. Creacion de variables de entorno

Por último crear una nueva variable llamada CLASSPATH. Como valor se puede pegar la
linea
%CLASSPATH%;.;c:\jade\lib\jade.jar; c:\jade\lib\jadeTools.jar; c:\jade\lib\Base64.jar;
c:\jade\lib\iiop.jar

Agentes RMA, AMS y DF

Si JADE se instaló con éxito será posible iniciar la plataforma llamando al agente principal
RMA.

RMA (Remote Management Agent). Un RMA es un objeto o instancia de la clase


jade.tools.rma.rma que es la clase que ejecuta la interfaz gráfica de la plataforma JADE. Un
RMA ofrece un acceso rapido a la plataforma por medio de barras de menu y de
herramientas. Permite visualizar el estado de los agentes ordendos por contenedores y
enviar mensajes entre estos con un click.

Un RMA puede ser inicializado con cualquiera de los siguientes commandos en una
ventana de sistema:

1.java jade.Boot myConsole:jade.tools.rma.rma)


2. java jade.Boot -gui

La primera línea ejecuta un agente RMAde la clase jade.tools.rma.rma con el nombre


myConsole. La segunda línea ejecuta la plataforma sin un nombre especifico. La interfaz
gráfica se muestra a continación.

Figura 2. Interfaz gráfica del RMA

Un RMA almacena uno o más contenedores de agentes y cada contenedor puede organizar
a varios agentes. En la imagen anterior, el RMA tiene un solo contenedor llamado Main
con tres agentes, el RMA, DF y AMS. Es posible iniciar varios contenedores en una misma
plataforma siempre y cuando tengan nombres diferentes.

AMS (Agent Management System) es el agente manejador del sistema y por tanto quien
tiene el control de la plataforma. Provee los nombres de los servicios y se asegura que cada
agente tenga un identificador único. Es posible crear o matar agentes en contenedores
remotos accesando al AMS.
DF (Directory Facilitator). Provee el sevicio de páginas amarillas, es decir es un registro
centralizado de las IDs asociadas a la descripción de los servicios de los agentes.

A continuación se muestra el ejemplo de una red de agentes comunicados por dos


plataformas. La plataforma1 tiene dos contenedores almacenados en el contenedor principal
y la plataforma2 tiene un solo contenedor. Cada contenedor princpal requiere su propio
AMS y DF.

Figura 3. Red de Agentes de dos plataformas

(Tomada de JADE Tutorial: Jade Programming for Beginners-CSELT)

Programación de Agentes

A continuación se explicará como construir un agente simple, uno que emita mensajes y
otro que los reciba. La estructura de los agentes esta basado en el Tutorial Jade Primer de la
Universidad de Montreal, el cual puede consultarse de forma gratuita en la dirección
electrónica http://www.iro.umontreal.ca/~vaucher/Agents/Jade/JadePrimer.html

Agente Mínimo

La estructura mínima de un agente en JADE es la siguiente:


1. import jade.core.Agent; / //importa la clase Agent
2. public class MyAgent extends Agent //crea la clase MyAgent extendiendola de la calse
Agent
3. { protected void setup() //este el el método principal y es equivalente a main
4. { System.out.println(“Hello World. “); // imprime en pantalla
5. // obiene su identificador local y lo imprime
6. System.out.println(“My name is “+ getLocalName());
7. try{//mi codigo }catch(Exception e){}//aqui se puede agregar código
8. }//termina setup
9. }//termina clase

Para ejecutar este agente con el nombre a1 se utiliza la instrucción %java jade.Boot
a1:MyAgent

en una ventana de sistema.

Comportamientos

Los comportmientos (Behaviours) son métodos que permiten realizar acciones en hilos de
ejecución. Dan soporte al agente para realizar varias tareas y establecer los tiempos de
ejecución de cada una. Son útiles para atender peticiones de forma ordenada. Por ejemplo
recibiendo mensajes de un solo emisor. Jade proporciona comportamientos de tipo simple,
cíclico, de recepción y envío de mensajes y los que ejecutan tareas al despertar de un
bloqueo o porciones de código en segmentos de tiempo.

El comportamiento mas fácil de usar es CyclicBehaviour pues ejecuta una tarea de forma
cíclica, deteniendola algunos segundos si asi se le indica. El segmento de código para
ejecutar un comportamiento cícliclo se muestra a continuación.

1.addBehaviour(new CyclicBehaviour(this){ //agrega un comportamiento de tipo cíclico


2.public void action() { //aqui inicia la acción
3.System.out.println(“tarea1”); //imprime una cadena
4…… //aqui se puede agregar código de la tarea a realizar
5.block(1000);} }); //detiene la ejecución del comportamiento unos //milisegundos y luego
vuelve a iniciar

En este caso la accion asociada al comportamiento imprimirá la linea ‘tarea1′ cada segundo
(block recibe el tiempo de bloqueo en milisegundos).

Nota: El setup es la inicialización del agente. Los comportamientos se ejecutan en el orden


en que aparecen en el setup.
Por tanto, un loop infinito en el setup antes de un comportamiento impedirá que este ultimo
se ejecute.

Mensajes
Para construir un mensaje se utiliza la clase ACLMessage. Al construir el mensaje se debe
especificar el tipo de mensaje, el contenido y el agente al que va dirigido. Algunos de los
tipos de mensaje que tiene implementada la clase ACLMessage son :

ACCEPT_PROPOSAL,AGREE, CANCEL,CFP, CONFIRM,


DISCONFIRM,FAILURE,INFORM,
INFORM_IF,INFORM_REF,NOT_UNDERSTOOD,PROPOSE,QUERY_IF,QUERY_RE
F, REFUSE,REJECT_PROPOSAL y REQUEST entre ortras.

A continuación se muestra un ejemplo de codificación de un mensaje dirigido a un agente


con identificador ‘a1′:

1.ACLMessage msg = new ACLMessage(ACLMessage.INFORM); //tipo de mensaje


2.msg.setContent( “Hola agente a1″ ); //contenido
3.msg.addReceiver( new AID( “a1″, AID.ISLOCALNAME) ); //destinatario
4.send(msg); //instrucción de envío

El mensaje puede ser enviado a varios destinatarios agregando instrucciones similares a la


contenida en la línea 3, cambiando ‘a1′ por cada uno de los IDs de los agentes receptores.

Agente Emisor

Para construir un agente que envie mensajes usaremos la clase Emisor como se muestra a
continuación.

1. /*Clase Emisor
2. *Emite un mensaje a un agente con nombre a1 */
3.
4. import jade.core.Agent; //importa la clase Agent
5. import jade.core.AID; //importa los metodos para identificación de agentes
6. import jade.lang.acl.*; //importa lenguaje
7.
8. public class Emisor extends Agent //crea la clase Emisor extendiendola de Agent
9. {
10. protected void setup() //metodo principal
11. {
12. //Construye mensaje de tipo INFORM
13. ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
14. //agrega contenido
15. msg.setContent( “Hola!!! como estas a1?” );
16. //agrega la direccion del destinatario
17. msg.addReceiver( new AID( “a1″, AID.ISLOCALNAME) );
18. //envia mensaje
19. send(msg);
20. }//termina setup
21.
22. }//fin de clase
Este agente envia un mensaje a un agente con identificador ‘a1′. El mensaje es de tipo
informe y contiene una cadena con contenido “Hola como estas a1?”.

Agente Receptor

Para construir un agente que reciba mensajes y de respuesta a una peticion usaremos la
clase Receptor como sigue.

1. /*Clase Receptor
2. *Captura mensajes de forma
3. *ciclica y los responde.*/
4.
5. import jade.core.Agent; //importa la clase Agent
6. import jade.core.AID; //importa los metodos para identificación de agentes
7. import jade.core.behaviours.*; //importa comportamientos
8. import jade.lang.acl.*; //importa lenguaje
9.
10. public class Receptor extends Agent //crea la clase Receptor extendiendola de Agent
11. { protected void setup() //metodo principal
12. {
13. addBehaviour(new CyclicBehaviour(this){ //agrega un comportamiento ciclico
14. public void action() {//captura mensajes de forma ciclica
15. ACLMessage msg = receive(); //captura un mensaje de la bandeja de entrada
16. if (msg!=null) {//si hay un mensaje
17. System.out.println(msg.getContent());//imprime el contenido
18. ACLMessage reply = msg.createReply();//crea una respuesta usando el remitente
19. reply.setPerformative( ACLMessage.INFORM );//define el tipo de respuesta ACL
20. System.out.println(“bien, gracias…”); //imprime respuesta
21. reply.setContent(“bien, gracias…”);//agrega contenido a la respuesta
22. send(reply);//envia la respuesta al remitente
23. }
24. block();}//termina acción
25. });//termina comportamiento
26. }//termina setup
27. }//fin de clase

En este caso, el agente permanece atento a cualquier petición utilizando un comportamiento


cíclico. Si recibe un mensaje lo imprime. Captura la dirección del remitente para construir
una respuesta. Establece el tipo y contenido de la respuesta y la envia.

Para visualizar la interacción entre los agentes Emisor y Receptor, se utiliza la instrucción

%java jade.Boot a1:Receptor a2:Emisor

También podría gustarte