Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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:
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.
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
Si JADE se instaló con éxito será posible iniciar la plataforma llamando al agente principal
RMA.
Un RMA puede ser inicializado con cualquiera de los siguientes commandos en una
ventana de sistema:
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.
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
Para ejecutar este agente con el nombre a1 se utiliza la instrucción %java jade.Boot
a1:MyAgent
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.
En este caso la accion asociada al comportamiento imprimirá la linea ‘tarea1′ cada segundo
(block recibe el tiempo de bloqueo en milisegundos).
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 :
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
Para visualizar la interacción entre los agentes Emisor y Receptor, se utiliza la instrucción