Buscador de Productos basado en Agentes Móviles

Anuncio
Buscador de Productos basado en Agentes Móviles
Daniel Diez Sánchez
Jorge Diez Sánchez
Universidad Carlos III de Madrid
Universidad Carlos III de Madrid
Madrid, España
Madrid, España
100048493@alumnos.uc3m.es
100035972@alumnos.uc3m.es
ABSTRACT
El objetivo de este artículo es explicar el funcionamiento del uso
de agentes JADE [1] para resolver un problema de un buscador
de productos en varias tiendas, encontrando el producto más
barato que se obtiene cumpliendo las exigencias especificadas por
el usuario (marca del producto, modelo y tiempo máximo de
entrega al cliente).
Categoria y Descripción del Tema
D.0 [General]
Términos Generales
Documentación.
Palabras Clave:
Figura 1. Esquema básico del sistema
Buscador, Mobile Agent (Agente móvil), Agente JADE, FIPA
2. INTRODUCCIÓN A JADE
AGENTES DE MOVILIDAD
Y
LOS
1. INTRODUCCIÓN
El sistema de Buscador de Productos se divide en tres partes: un
cliente, un servidor de la aplicación y las tiendas o servidores de
datos. El usuario del sistema utilizará la aplicación del cliente
(una interfaz gráfica que aparecerá en pantalla) para solicitar el
producto. Esta aplicación conectará con el servidor central que se
encargará de intercambiar los datos con todas las tiendas
disponibles. Para realizar este procedimiento se creará un
MobileAgent (Agente Móvil), que se moverá desde el cliente al
servidor central, y desde allí, a todas las tiendas, devolviendo al
cliente la mejor solución. Todo ello se llevará a cabo mediante el
uso de interfaces gráficas.
Permission to make digital or hard copies of all or part of this work for
personal or classroom use is granted without fee provided that copies are
not made or distributed for profit or commercial advantage and that
copies bear this notice and the full citation on the first page. To copy
otherwise, or republish, to post on servers or to redistribute to lists,
requires prior specific permission and/or a fee.
Conference’04, Month 1–2, 2004, City, State, Country.
Copyright 2004 ACM 1-58113-000-0/00/0004…$5.00.
2.1 JADE
JADE (Java Agent DEvelopment Framework) - es una plataforma
de software desarrollada en TILab (Italia) bajo la filosofía Open
Source para el desarrollo de aplicaciones distribuidas basadas en
agentes que cumple con las especificaciones de la FIPA
(Foundation for Intelligent Physical Agents)[2]. El proyecto
JADE comenzó en 1998, y la primera versión (v. 1.3) estuvo lista
en febrero del 2000, y fue lanzada bajo licencia LGPL. JADE se
puede ejecutar en un amplio rango de ambientes: desde los
empresariales, hasta en dispositivos móviles (PDA’s y teléfonos
móviles) gracias a una extensión (API [2]), que se desarrolló para
el proyecto LEAP (Lightweight Extensible Agents Plataform).
2.1.1 Características
Ha sido desarrollado totalmente en Java y debido a que cumple
con las especificaciones de FIPA, puede interoperar con otras
plataformas de Agentes, que cumplan con este estándar. Provee
un conjunto de APIs que son independientes de la red y de la
versión de Java, dejando libertad a los desarrolladores de escoger
el ambiente de desarrollo de Java que se adecue más a sus
necesidades. Las APIs son simples y fáciles de usar, lo cual oculta
al desarrollador la complejidad de la plataforma. Es configurable permite que se usen solo las características que se requieran,
disminuyendo de esta manera la sobrecarga computacional.
JADE es por un lado un framework que nos ayuda a crear
nuestros agentes, y por otro un contenedor que contiene agentes.
Este contenedor les da una serie de servicios a los agentes, como
puede ser el registro de los mismos, dar un cauce de
comunicación entre los agentes locales, y entre estos y otro
agentes distribuidos, autenticación y autorización de los agentes...
2.3 Definición de agente JADE
Un agente JADE es una instancia de una clase JAVA definida por
el usuario que extiende de la clase Agent (jade.core.Agent).
public class MiAgente extends Agent {
...
}
Cada agente JADE se implementa como un único hilo de
ejecución.
2.4 Ciclo de vida de un agente
2.2 LOS AGENTES MÓVILES
Los agentes móviles son procesos de software que son capaces de
transitar por una red, generalmente una WAN, interactuando con
host alejados, reuniendo información para el usuario y volviendo
a su origen cuando las tareas fijadas por el usuario se hayan
completado. Ejemplos de tareas que se pueden realizar son
reservas de vuelos o manejo de una red de telecomunicaciones.
Un agente está sujeto a un ciclo de vida que define los estados en
los que se puede encontrar y cómo se realizan los cambios de un
estado a otro.
El ciclo de vida de un agente JADE sigue el ciclo propuesto por
FIPA, es decir, cumple con la propuesta de estándar de
interoperabilidad entre agentes más aceptada.
Los agentes móviles traen con si grandes beneficios aunque no
son funcionales, esto quiere decir que una tarea que realiza un
agente móvil puede ser realizada por un agente colaborativo, la
diferencia radica en que para movilizar el agente se requiere de un
costo muy alto de recursos.
Algunas de las ventajas que se pueden obtener al usar agentes
móviles son:
• Reducen el costo de comunicación, por ejemplo cuando en una
ubicación hay un gran volumen de información que necesita ser
examinada y transmitida, esto ocuparía una gran cantidad de
recursos en la red y consumiría mucho tiempo. En este caso el
agente móvil puede determinar la información relevante al
usuario y transmitir un resumen comprimido de esta información.
• Facilitar la coordinación, es más sencillo coordinar un cierto
número de requerimientos remotos e independientes al comparar
solo los resultados localmente.
• Reduce los recursos locales, los agentes móviles pueden ejecutar
sus tareas en computadores diferentes del local, de tal manera que
no consuman recursos de procesamiento, memoria y
almacenamiento en estos.
• Computación asíncrona, mientras que un agente móvil realiza su
tarea el usuario puede ir realizando otra, de tal manera que
después de un tiempo el resultado del agente móvil será enviado
al usuario.
Figura 2. Esquema del ciclo de vida de un agente
Descripción de los estados:
•
Activo: El ACC (Agent Communication Channel)
entrega mensajes al agente de forma normal.
•
Iniciado/En espera/Suspendido: El ACC almacena el
mensaje en el buffer correspondiente hasta que el agente
está activo (o lo reenvía a una nueva dirección si el
sistema lo requiere)
•
•
Tránsito. El ACC almacena cualquier mensaje hasta
que el agente se activa o bien entrega el mensaje en otra
localización si antes se ha indicado un forward para ese
agente como en el caso anterior. Solamente los agentes
móviles pueden entrar en este estado.
Desconocido. El ACC almacena cualquier mensaje o
los rechaza, dependiendo de su propia política y de los
requisitos de transporte del mensaje.
Descripción de las transiciones:
•
Crear: La creación o instalación de un nuevo agente.
•
Invocar: La invocación de un nuevo agente.
•
Destruir: La terminación forzosa de un agente. Sólo
puede ser iniciado por el AMS (Agent Management
System) y no puede ser ignorado por el agente.
•
Salir: La terminación normal de un agente. Puede ser
ignorada por el agente.
•
Suspender: Pone un agente en estado de suspensión.
Puede ser iniciado por el agente o por el AMS.
•
Reanudar: Continua con la ejecución de un agente que
se encuentra en estado suspendido. Sólo puede ser
iniciado por el AMS.
•
Esperar: Pone un agente en estado de espera. Sólo
puede ser iniciado por el agente.
•
Despertar: Continua con la ejecución de un agente que
se encuentra en estado de espera. Sólo puede ser
iniciado por el AMS.
2.5 MOVILIDAD EN JADE
Cada instancia de ejecución en JADE es llamada contenedor (es
decir, contiene agentes). El conjunto de todos los contenedores se
llama plataforma y proporciona una capa homogénea que esconde
a los agentes (y la aplicación desarrollada). La plataforma
también incluye un servicio de identificación (asegurando que
cada agente tiene un único nombre) y un servicio de páginas
amarillas, que puede distribuirse a través de múltiples
computadoras. Otra característica muy importante consiste en la
disponibilidad de una gran colección de herramientas gráficas,
que apoyan la depuración y administración del ciclo de vida de la
aplicación. Por medio de estas herramientas, es posible controlar a
los agentes remotamente, aún cuando ya se desplegó y ejecutó la
aplicación: pueden emularse las conversaciones del agente,
pueden olfatearse los mensajes intercambiados, pueden
supervisarse las tareas, así como los ciclos de vida de cada agente
que esté activo sobre la plataforma.
JADE soporta movilidad de código y estado de ejecución. Es
decir, un agente puede dejar de ejecutarse sobre una máquina,
migrando sobre diferentes nodos remotos (sin la necesidad de
tener el código del agente instalado en ese nodo), y reiniciar su
ejecución en el punto en que fue interrumpido (realmente, JADE
implementa una forma de movilidad no tan débil, porque la pila y
el registro del programa no pueden ser salvados en Java). Esta
funcionalidad permite, por ejemplo, distribuir la carga
computacional al tiempo de ejecutar los movimientos del agente,
a las maquinas menos cargadas sin algún impacto en la
aplicación. La movilidad de un agente es la habilidad para que
este migre o haga una copia de sí mismo (clonarse) a través de
uno o múltiples nodos de una red. El soporte de movilidad en
JADE consiste en un conjunto de clases y métodos que permiten a
un agente, ejecutar las acciones requeridas por sí mismo o por el
AMS (Agent Management System), y una ontología específica de
movilidad (MobilityOntology).
Jade soporta movilidad y clonación interplataforma:
Las siguientes transiciones son usadas sólo en Agentes Móviles.
•
Mover. Pone a un agente en estado de tránsito. Sólo
puede ser iniciado por el agente.
•
Ejecutar. Continúa con la ejecución de un agente que
se encuentra en estado de tránsito. Sólo puede ser
iniciado por el AMS.
•
Que involucra varios hosts.
•
Cada uno con su contenedor.
•
A petición del propio agente.
Se ha estudiado a detalle la sección de movilidad de JADE,
específicamente la clase Agent que contiene los métodos para
llevar a cabo el proceso de movilidad y clonación, estos son:
•
doMove()
•
beforeMove()
•
afterMove()
•
doClone()
•
beforeClone()
•
afterClone()
Sin embargo estos métodos requieren de ciertos parámetros
(objetos de tipo Location) porque los agentes necesitan conocer
su localización para saber cuándo y a dónde desplazarse. Para
poder utilizar los objetos de tipo Location debemos incluir el
siguiente import:
import jade.core.*;
Después de que el AMS le proporciona a un agente la
información del destino al cual puede dirigirse, está preparado
para llamar a su método doMove(Location) y comienzar el
proceso de migración. Los métodos beforeMove(), afterMove()
son provistos para especificar algunas tareas antes y después de
moverse. El método doClone() requiere de un parámetro extra,
esto significa que lleva el destino en el cual se clonará además de
un nombre diferente al nombre del agente original,
doClone(Location, String). Los métodos beforeClone() y
afterClone() son provistos para especificar algunas tareas antes y
después de clonarse.
3. ASPECTOS
TÉCNICOS
DE
PROGRAMACIÓN
Y
DISEÑO
BUSCADOR
LA
DEL
DE
Básicamente, como se refleja en el diagrama se tratará de un
cliente que desea obtener el mejor precio de un determinado
producto con un requisito de tiempo máximo de entrega. Estas
especificaciones son transferidas al Servidor Central (Aplication
Server –AS) que mediante el uso de un Mobile Agent creado por
la propia máquina del Cliente y que se desplazará al Servidor
Central, conectará con las tiendas disponibles.
3.2 DESCRIPCIÓN DE LAS CLASES JAVA
A continuación se presentará paso a paso el desarrollo del
software del Buscador de Productos. Primeramente, será expuesto
de manera gráfica mediante un diagrama de flujo para proseguir a
continuación con el modelo de clases planteado (donde
detallaremos el contenido y función de cada una de las siete
clases implementadas).
3.1 DIAGRAMA DE FLUJO
SOLUCIÓN DESARROLLADA
Figura 3. Diagrama de flujo
LA
La solución que se ha desarrollado se muestra gráficamente en el
esquema siguiente:
El siguiente paso será el diseño de la aplicación JAVA. A
continuación se presentan las clases implementadas y una breve
explicación de los métodos desarrollados en ellas y su finalidad.
3.2.1 ClientGUI
Esta clase servirá para desarrollar la interfaz gráfica del usuario,
obtener los datos introducidos por el mismo, y posteriormente
enviarlos a la clase ClientAgent cuando el botón “Buscar
Producto” de la interfaz es pulsado por el usuario. La clase
ClientAgent será la encargada principal de transferir los datos al
servidor central y obtener resultados.
3.2.2 ClientAgent
Esta clase inicializa la clase ClientGui, procediendo a comenzar
con todo el proceso de búsqueda. Cuando el botón “Buscar
Producto” es pulsado, se procederá a crear un Agente Móvil y
dicho agente será movido al Container del Servidor Principal,
desde donde se procederá a analizar todos los datos que se irán
obteniendo de todas las tiendas. Una vez transferido el Agente
Móvil al Servidor Central, el Cliente se pondrá en modo espera
para recibir una respuesta con el resultado definitivo acerca del
producto.
3.2.3 ASAgent
La clase ASAgent será la encargada de inicializar el Agente AS,
con el objetivo de estar preparado para recibir la consulta del
Mobile Agent. Una vez el Agente móvil llegue al Container
principal, este será redirigido a los containers de las tiendas
respectivas. Una vez recibidos los datos de todas las tiendas, será
enviado de nuevo al container del Cliente con los datos
definitivos.
3.2.4 ShopAgent
La clase ShopAgent será la encargada de inicializar el Agente de
cada tienda, con el objetivo de estar preparado para recibir al
agente móvil con su solicitud en el container de cada tienda. Una
vez que es recibida, se procesarán los datos en busca del mejor
producto disponible que cumpla los requisitos. La creación de la
clase ShopAgent también inicializará la base de datos con los
valores de objetos ejemplo que se han usado para el desarrollo de
la aplicación.
3.2.5 MobileAgent
La solución básica del problema a resolver se basará en el uso de
esta clase como se ha explicado previamente. Siguiendo algunos
ejemplos del Tutorial Jade [4] se procederá a la creación de un
Agente Móvil que se irá desplazando de container en container
con el único objetivo de transferir información entre diferentes
hosts de una misma red.
En esta clase serán implementados los diferentes mensajes que
serán intercambiados con el agente que se encuentre en el mismo
container que el Agente Móvil en cada momento (dependerá en
cada caso si se encuentra en el container AS, Tienda o Cliente.
3.2.6 Producto:
Esta clase será la encargada de definir un objeto Producto donde
serán guardadas las características de los Productos (nombre de la
marca, modelo, precio y plazo de entrega). Contendrá asimismo
todos los métodos necesarios para obtener dichos atributos.
3.2.7 TestValues:
Figura 4. Diagrama UML de Clases
4. IMPLEMENTACIÓN
FUNCIONAMIENTO
JADE
Y
El problema planteado en la introducción tal como se ha
explicado en los puntos previos se ha resuelto mediante el uso de
la plataforma JADE, y seguirá los siguientes pasos:
-
El host AS (Servidor Central) inicializará la aplicación,
creando de esta forma el Agente AS, el cuál se
encontrará en el Container Principal (Main Container).
Todos los agentes creados posteriormente se
encontrarán en Containers diferentes.
-
La aplicación se ha desarrollado de forma que, cuando
una tienda se conecta, un agente Tienda es creado
(Tienda1, Tienda2 o Tienda3 para el ejemplo que se
trata en este paper) y se pondrá en modo espera con el
objetivo de esperar cualquier mensaje del Agente
Móvil. Cuando un mensaje se recibe, se procesarán los
datos y se fabricará un mensaje respuesta que será
enviado al Agente Móvil de forma inmediata. Este
procesamiento será llevada a cabo en el método
encontrarProducto de la clase ShopAgent. Consistirá en
buscar el producto demandado en la base de datos de la
tienda. Una vez recibido el mensaje respuesta por el
Agente Móvil, procederá de nuevo a desplazarse al
Container Principal.
-
Una vez que todas las tiendas se encuentran conectadas,
se procederá a inicializar la aplicación en el host
La clase TestValues contendrá todos los productos que se utilizan
como ejemplos en el desarrollo de la aplicación como se ha
descrito previamente. Se crearán diversos objetos de modelos
idénticos con diferentes precios y tiempos de entrega dependiendo
de la Tienda correspondiente, con el fin de poder probar las
diferentes capacidades de la aplicación.
Como se ha comentado previamente, la solución implementada
tendrá como principal estructura diversos ejemplos analizados en
la Guía de Programador JADE [5] y en los Tutoriales JADE[4, 5]
Un breve resumen de la solución implementada sería el siguiente
diagrama UML de las clases JAVA desarrolladas:
Cliente. De esta forma se creará el agente Cliente y se
inicializará la interfaz del usuario mediante la llamada a
la clase ClientAgentGui. Una vez inicializados todos los
agentes, y previamente a crear el Agente Móvil, el
esquema de containers será el mostrado en la siguiente
figura:
Figura 7. Ventana Jade Remote Agent Management GUI con
el MobileAgent ya creado y visitando la Tienda1.
-
El Agente Móvil creado obtendrá los datos del producto
deseado del Cliente, y una vez se ha llevado a cabo esta
operación será movido al Container Principal. En este
punto, dicho agente procederá a preguntar al Agente AS
acerca de las tiendas que hay conectadas, siendo
enviado por el mismo a los containers correspondientes
de cada Tienda. Primeramente se moverá al Container
de la Tienda1, donde preguntará al Agente Tienda1
sobre el producto en cuestión. Una vez que el Agente
Tienda obtiene los datos del producto, realizará una
llamada al método encontrarProducto, el cuál recorrerá
la base de datos correspondiente buscando las
características indicadas por el usuario. A continuación,
procederá a la creación de un nuevo mensaje respuesta
con los resultados enviándoselo al Agente Móvil,
procesando el mismo la respuesta recibida y
moviéndose de nuevo al Container Principal. Una vez
allí, se procederá a repetir el mismo proceso con el resto
de tiendas conectadas.
-
Las respuestas recibidas en cada Tienda, son analizadas
dentro de la clase MobileAgent. Para ello, esta clase
poseerá unas variables determinadas para guardar la
marca, el modelo, el precio y el tiempo de entrega de la
mejor respuesta recibida hasta el momento. Estos
valores serán comparados con los resultados que se
reciben en cada caso de cada Tienda, siendo sustituidos
en caso de ser mejores que los guardados previamente.
Inicialmente, los valores precio y tiempo de entrega
serán fijados a infinito en la clase MobileAgent.
Cuando el Agente Móvil finaliza visitando todas las
tiendas, volverá al Container Principal, y de ahí, al
Container del Cliente, donde enviará un mensaje al
Agente Cliente con las mejores características
encontradas para el objeto en cuestión. Este resultado
será mostrado por pantalla de la siguiente forma:
Figura 5. Ventana Jade Remote Agent Management GUI
Y la interfaz que aparecerá en el host Cliente al usuario será la
siguiente:
Figura 6. Interfaz del Usuario
Por defecto, aparecerán en la misma los datos
correspondientes a un producto de la base de datos siendo
posible modificar esa configuración en la clase
ClientAgentGUI.
En esa interfaz serán introducidos los datos del producto que
se quiere encontrar, y una vez pulsado el botón “Buscar
Producto”, el Agente Móvil será creado dando comienzo a
todo el proceso de búsqueda explicado en los puntos
anteriores.
-
En este ejemplo, se ha desarrollado la aplicación para que pueda
ejecutarse hasta en un máximo de 3 tiendas, ya que para evitar
mayores problemas de complejidad y limitarse al objetivo
principal del uso de agentes móviles, hemos utilizado un fichero
TestValues con valores fijos, tanto de los productos de cada
tienda, como del nombre de los Containers y agentes de cada
tienda.
Figura 8. Resultado obtenido en la aplicación para un
producto disponible
Si el producto requerido con sus características, no es encontrado
o no esta disponible con las mismas, se mostrará un mensaje por
pantalla indicándolo:
Una posible mejora sería desarrollar una interfaz para la clase
ShopAgent, que nos solicitase los productos que tiene cada tienda
o se pudiese leer por fichero los mismos. Asimismo, sería posible
desarrollar una aplicación que descubriese el nombre de todos los
containers que están conectados en cada momento al Servidor, ya
que se van asignando progresivamente (Container-1, Container2….) pero la desconexión de una de las tiendas y la posterior
reconexión es un problema ya que no se le asigna el Container
que tenía previamente, sino uno nuevo.
6. REFERENCES
[1] Java Agent Development Framework
http://jade.tilab.com/
Figura 9. Mensaje mostrado por la aplicación en caso de no
estar disponible el producto
5. CONCLUSIÓN
En el desarrollo de esta aplicación se ha comprobado el posible
uso de agentes móviles, tal como se relataba en las definiciones
de JADE, y la gran facilidad que proporciona para intercomunicar
diferentes hosts.
El uso de diferentes mensajes puede ayudarnos en las diferentes
mejoras posibles tal como se explica en alguna de las
implementaciones desarrolladas en la Guía del Programador
JADE [5].
El único gran problema encontrado aparte de la implementación
misma del software ha sido el encontrar una versión JAVA
adecuada para la versión JADE descargada y utilizada. En este
caso, se trata de la última versión JADE 3.50 disponible. La
versión JAVA utilizada ha sido la 1.6.0.
[2] JADE v3.5 API
http://jade.tilab.com/doc/api/index.html
[3] Foundation for Intelligent Physical Agents
http://www.fipa.org
[4] JADE TUTORIAL. Jade programming for Beginners.
http://jade.tilab.com/doc/JADEProgramming-Tutorial-forbeginners.pdf
Author: Giovanni Caire (TILAB, formerly CSELT)
[5] JADE PROGRAMMER’S GUIDE
http://jade.tilab.com/doc/programmersguide.pdf
Authors: Fabio Bellifemine, Giovanni Caire, Tiziana Trucco
(TILAB, formerly CSELT), Giovanni Rimassa (University
of Parma)
[6] JADE Tutorial and Primer
http://www.iro.umontreal.ca/%7Evaucher/Agents/Jade/JadeP
rimer.html
Author: Jean Vaucher and Ambroise Ncho
Descargar