viernes, 14 de marzo de 2008

Conceptos básicos de programación de un agente en JADE

Hasta el momento hemos visto parte de la especificación FIPA y algunas de las funcionalidades básicas de JADE….pero falta lo mas importante, la programación de un agente, para luego continuar con un SMA!!!

Para crear un agente en JADE se debe extender la clase jade.core.Agent. Esta contiene dos métodos muy importantes que tienen que ser implementados necesariamente. Estos son setup() y takedown(), los cuales permiten inicializar y finalizar el agente respectivamente.

La siguiente figura muestra la estructura de un agente:






Cada agente del sistema multiagente será una instancia de una clase java que sea subclase de la clase Agent. Esta clase se compondrá básicamente de un método setup, que se ejecutara al iniciarse el agente y que contendrá código de inicialización, incluyendo instrucciones que especificaran la ontología a utilizar y los comportamientos asociados al agente. Además del método setup, se dispondrá de una clase interna a la clase del agente por cada uno de los comportamientos asociados al agente.

Estos comportamientos básicamente se utilizan para el envió y recepción de mensajes, aunque también se podrían realizar otras tareas

A continuación se muestra el código del agente EstructuraBasica, correspondiente a un agente simple al que no se ha asociado ningún comportamiento ni ninguna ontología, y que se tomara como base para implementar los futuros ejemplos de agentes:

package ejemplo1;

import jade.core.Agent;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.DFService;
import jade.domain.FIPAException;

public class EstructuraBasica extends Agent {

protected void setup() {
/* Registrarse con el agente DF */
DFAgentDescription dfd = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("EstructuraBasica");
sd.setName(getName());
dfd.setName(getAID());
dfd.addServices(sd);
try {
DFService.register(this,dfd);
}
catch (FIPAException e) {
System.err.println("Problemas : " +e.getMessage());
doDelete();
}
}

}

En este ejemplo se observa como el agente EstructuraBasica es una subclase de Agent y por lo tanto se pueden crear agentes de la clase EstructuraBasica utilizando "java jade.Boot". Todos los agentes heredan la clase jade.core.Agent, para lo cual cada uno de estos al momento de ser creado tiene un identificador único el cual es un objeto de la clase jade.core.AID. El AID que se genera es del tipo:

nombre_agente@host:puerto/JADE

Al momento de crearse el agente se realizan varias tareas automáticamente; algunas de estas son:

  • Se llama al constructor del agente
  • Se crea un identificador del agente (AID)
  • Se registra el agente en el AMS
  • Se ejecuta el método setup

En el método setup se pueden realizar las siguientes operaciones:

  • Modificar el registro del AMS
  • Registra el agente en el DF
  • Agregar los comportamientos (Behaviours) que ejecutara el agente

Otros métodos con los que cuenta la clase Agent son:

  • doDelete: Finaliza la ejecución del agente.
  • TakeDown: Se ejecuta antes de que el agente finalice. Un uso común es el de desregistrar al agente del DF.

La siguiente figura muestra el ciclo de ejecución de un agente:


El acceso a los métodos del DF se realiza importando la clase jade.domain.DFService con la cual se construyen dos tipos de objetos:
  • DFAgentDescription: Permite guardar el nombre del agente y el o los tipos de servicios que este desea registrar.
  • ServiceDescription: Permite guardar el nombre y tipo de servicio que el agente desea registrar.

Hay que recordar que el AMS es un agente de gestión que controla el estado y el acceso a la plataforma. También proporciona un servicio de ”páginas blancas” que permite la localización de agentes a partir de sus nombres, y que el DF proporciona un servicio de “páginas amarillas” al resto de los agentes. Los agentes usan el DF para registrar sus servicios o para obtener los servicios de los demás agentes.

Estos serán unos puntos muy importantes al momento de desarrollar un SMA.

Con esto hasta el momento hemos visto la estructura básica de un agente, los métodos mas importantes que componen las estructura de un agente y una pequeña descripción de estos.

Para que sea mas claro les adjunto un video en el cual se detalla la ejecución de cuatro agentes básicos de ejemplo, estos son:

  • BuscarAMS: Permite obtener una lista de todos los agentes que se encuentren registrados en el AMS.
  • RegistrarDF: Permite registrar un servicio en el directorio facilitador.
  • BuscarDF: Permite obtener un listado de todos los servicios registrados en el directorio facilitador.
  • EjemploCompletoDF: Permite registrar un servicio en el directorio facilitador y obtener un listado de los agentes registrados en el DF que presten un servicio determinado.

En el próximo post veremos los distintos tipos de comportamientos (Behaviours) y comenzaremos a programar nuestros primeros SMA.



1 comentario:

Unknown dijo...

Bueno el comentario sobre el tema , te felicito