AGENTES MÓVILES Y CORBA

Ramón M. Gómez Labrador
( ramon.gomez@fie.us.es
)

Deptº de Lenguajes y Sistemas Informáticos
Universidad de Sevilla
Febrero de 1999


Índice.

  1. Introducción.
  2. Introducción a los agentes móviles.
  3. Seguridad.
  4. Sistemas de agentes móviles.
  5. Agentes móviles y CORBA.
  6. Referencias.
    Direcciones en Internet.


 

  1. Introducción.

La programación orientada a objetos representa un mayor nivel de abstracción que la programación basada en procedimientos; es más fácil de comprender y de mantener, por lo tanto, más productiva [5]. La teoría de agentes –y por extensión la relativa a los agentes móviles, tratada en este artículo– establece una serie de mecanismos que pretenden dar un paso más allá en el tratamiento informático distribuido, añadiendo características como la localización o la situación, y permitiendo la interacción dinámica de componentes autónomos y heterogéneos.

Los agentes móviles añaden una singularidad especial al concepto de agentes: la posibilidad de trasladarse de una máquina a otra. Esta característica ofrece ciertas ventajas respecto al tratamiento de la información en modo cliente/servidor, sobre todo en la computación a través de Internet [10]. El auge mundial de "la red de redes" ha permitido el rápido desarrollo de nuevas técnicas inteligentes para búsqueda, filtrado y gestión de datos.

Aunque daremos preferencia al tratamiento de los agentes móviles desde el punto de vista de la orientación a objetos, haciendo especial hincapié en las normas establecidas por el Object Management Group (O.M.G.) [i], también se tendrán en cuenta las aproximaciones al problema realizadas por otras áreas informáticas como la inteligencia artificial.

 

1.1. Definición de agente.

Actualmente hay tres disciplinas informáticas fundamentales en el desarrollo y definición de agentes [7]:

Pero ¿qué es un agente? La respuesta a esta pregunta es compleja, ya que los investigadores utilizan distintas acepciones de dicho término y no existe una definición académica ampliamente aceptada, al igual que tampoco existe una definición exacta para el término inteligencia artificial.

Seguidamente indicaremos –a modo de ejemplo– algunas de las definiciones de agente más utilizadas:

Aunque anteriormente hemos indicado las principales acepciones del término agente, ninguna de ellas puede tomarse con carácter general, sino que consideraremos como claves para una definición adecuada las características más básicas [7]:

En este punto también existe cierta controversia, ya que los investigadores en Inteligencia Artificial consideran que un agente ideal debería tener tres cualidades: posibilidad de cooperar con otros agentes o programas, capacidad de aprendizaje y ser autónomo [6].

 

1.2. Tipos de agentes.

Por supuesto, hay multitud de clasificaciones que dependen del punto de vista del investigador. Aunque podemos considerar la más común la realizada a partir de la enumeración de las características que cumple un agente.

  • Movilidad: capacidad de transportarse de una máquina a otra.
  • Reacción: actuación sobre el entorno mediante un comportamiento estímulo/respuesta.
  • Proacción: toma la iniciativa para alcanzar sus objetivos.
  • Sociabilidad o cooperación: capacidad de comunicarse con otros agentes, programas o personas.
  • Aprendizaje o adaptación: comportamiento basado en la experiencia previa.
  • Continuidad temporal: ejecución continua en el tiempo.
  • Carácter: inclusión de estados de creencia, deseo e intención (modelo BDI [3]).

Teniendo en cuenta que un agente cumple las características mínimas de situación, flexibilidad y autonomía –expuestas en el apartado anterior–, podemos considerar, por ejemplo, agentes móviles con aprendizaje; agentes reactivos y sociables; agentes móviles, proactivos y sociables; etc.

Desde el punto de vista de la Inteligencia Artificial se hace una clasificación a tres niveles:

  • Agentes móviles o estáticos.
  • Agentes reactivos o proactivos.
  • Agentes cooperativos, autónomos, con aprendizaje o con una mezcla de dichas características:
    • Agentes de interfaz: autónomos y con aprendizaje.
    • Agentes colaboradores: autónomos y cooperativos.
    • Agentes ideales: autónomos, cooperativos y con aprendizaje.

 

1.3. Sistemas multiagentes.

Normalmente los agentes no actúan en solitario, sino que se localizan en entornos o plataformas con varios agentes, donde cada uno de ellos tiene sus propios objetivos, toma sus propias decisiones y puede tener la capacidad de comunicarse con otros agentes [9]. Dichos entornos se conocen con el nombre de sistemas multiagentes o agencias.

Los sistemas multiagentes dan un mayor nivel de abstracción con respecto a la informática distribuida tradicional, estando más cercanos a las expectativas del usuario y permitiendo al programador una mayor flexibilidad para expresar el comportamiento de los agentes. Como características principales de las agencias podemos destacar las siguientes [7]:

  • Cada agente del sistema tiene un punto de vista limitado (no tiene la información completa).
  • No existe un control global para todo el sistema.
  • Los datos están descentralizados.
  • La computación es asíncrona.
  • Permite interoperación con sistema existentes.

Sin embargo, este tipo de diseños suele plantear una serie de problemas, como la elección del tipo de comunicación entre los agentes –que se describirá el siguiente apartado–, del tipo de plataforma o del método de desarrollo, de los criterios para la seguridad del sistema –que se tratarán en capítulo 3–, etc.

Los agentes con una arquitectura basada en capas no constituyen por sí mismos un sistema multiagente. Existen dos tipos fundamentales en este tipo de construcciones:

  • Capas verticales: sólo un subagente tiene acceso a los sensores y sólo uno puede actuar sobre el entorno.
  • Capas horizontales: cada subagente puede sentir y actuar.

Centrándonos en nuestro problema, el O.M.G. define un sistema multiagente como [1]:

"una plataforma que puede crear, interpretar, ejecutar, transferir y terminar agentes".

Los conceptos relativos a las definiciones de las Utilidades CORBA para la Interoperación de Sistemas de Agentes Móviles (MASIF) se verán en profundidad en el capítulo 2.

 

1.4. Comunicación entre agentes.

Los agentes que forman un sistema pueden colaborar entre ellos para alcanzar sus tareas respectivas. Dicha colaboración se realiza mediante un lenguaje de comunicación comprensible por los agentes del sistema –y por otros programas, si es necesario. En contraste con un objeto convencional –que ejecuta métodos de otro objeto siempre que tenga permiso–, un agente puede rechazar una petición de otro agente, por lo que deben ser capaces de hablar entre sí, para decidir qué acción realizar o qué datos obtener [11].

Históricamente, la comunicación entre agentes de un sistema se realizaba mediante lenguajes propios de cada vendedor, impidiendo la comprensión entre los agentes de sistemas heterogéneos, con una semántica informal y con poca autonomía.

A principios de los años 80, el DARPA estadounidense desarrolló el Knowledge Query Management Language (KQML) [iv], que pretendía convertirse en una norma para la comunicación entre agentes. Dicho lenguaje incluye muchas primitivas –llamadas ejecutivas– que definen las operaciones que un agente realiza en su comunicación con cualquier otro. Además, un entorno KQML puede enriquecerse con agentes especiales –llamados facilitantes– que proveen funciones adicionales como servicio de nombres [8].

Algunos entornos –como el Java Agent Template (JATLite) de la Universidad de Stanford (EE.UU.) [vii]– han desarrollado compatibilidad con KQML. Sin embargo, han aparecido varios dialectos KQML con una sintaxis similar, pero no completamente compatibles.

La Fundación para los Agentes Físicos Inteligentes (FIPA) [iii] propuso como norma a principios de los años 90 el lenguaje Arcol (desarrollado por France Télécom [v]). Arcol conserva –al igual que KQML– una sintaxis similar al Lisp, pero incluye una semántica formal, lo que proporciona una base rigurosa para la interoperación entre agentes y evita la proliferación de dialectos [11].

Sin embargo, Arcol carece aún de algunos aspectos deseables para un lenguaje para la comunicación de agentes como permitir una mayor autonomía, una mayor heterogeneidad y el uso de dialectos abiertos.

CORBA pretende definir una norma genérica para la comunicación y la interacción de sistemas multiagentes creados por distintos fabricantes. Dichas normas se verán en profundidad en los próximos capítulos.

 

  1. Introducción a los agentes móviles.
2.1. Conceptos básicos.

Para comenzar con los agentes móviles, veremos las diferencias principales entre los conceptos de agentes estáticos y agentes móviles, definidos por el O.M.G. en sus Utilidades para la Interoperación entre Sistemas de Agentes Móviles (MASIF) [1].

  • Agente estático: aquél que sólo puede ejecutarse en la máquina donde fue iniciado. Si éste necesita interactuar con otros agentes o programas o requiere cierta información que no se encuentra en el sistema, la comunicación puede llevarse a cabo mediante cualquier método de interacción para objetos distribuido, como CORBA o RMI de Java.

  • Agente móvil: aquél que no está limitado al sistema donde se inició su ejecución, siendo capaz de transportarse de una máquina a otra a través de la red. Esta posibilidad le permite interactuar con el objeto deseado de forma directa sobre el sistema de agentes donde se halla dicho objeto. También puede utilizar los servicios ofrecidos por el sistema multiagente destinatario. Ningún sistema de objetos distribuido existente en la actualidad necesita utilizar agentes móviles para comunicarse.

Las tareas de búsqueda y tratamiento de la información en Internet tienen últimamente una gran importancia en el desarrollo de sistemas basados en agentes móviles. Debido al rápido crecimiento de la Red, el proceso de encontrar los datos más convenientes para un usuario resulta excesivamente tedioso y complejo. En nuestro caso, puede enviarse un agente a los destinos más interesantes para el usuario, localizar y filtrar la información deseada siguiendo las normas dictadas por éste y traerla consigo al ordenador de origen, permitiendo ahorrar tiempo de conexión y ancho de banda –y, por lo tanto, dinero.

Los agentes móviles suelen programarse normalmente en lenguajes interpretados o generadores de código intermedio –Telescript [vi], Java [xii], Tcl [xiii]–, ya que éstos dan un mejor soporte a entornos heterogéneos, permitiendo que los programas y sus datos sean independientes de la plataforma utilizada.

La seriación es el proceso típico por el que se representa el estado completo de un agente mediante una serie que puede ser fácilmente transportada por la red. El proceso de descodificación de dicha serie en el agente se denomina diseriación.

 

2.2. Evaluación.

En resumen, los agentes móviles ofrecen las siguientes ventajas respecto a otras técnicas informáticas distribuidas [2]:

  • Los usuarios que utilizan ordenadores portátiles o con baja capacidad de proceso, los que tienen un bajo ancho de banda en la red o los que disponen de poco espacio de almacenamiento pueden utilizar agentes móviles para solucionar sus problemas, desconectando su ordenador de la red o pidiendo que otra máquina realice los cálculos y recogiendo posteriormente los resultados.

  • El usuario puede personalizar las respuestas de un servidor utilizando agentes móviles que interactúen con las interfaces para programación de aplicaciones (API) exportadas por dicho servidor.

  • Se flexibiliza la búsqueda semántica de información, ya que el usuario puede expresar sus necesidades en un lenguaje natural, enviar los datos a un agente consultor para que las traduzca al lenguaje utilizado por el sistema multiagente y volver a enviar la petición con el formato adecuado a los servidores.

  • Mejoran las posibilidades del comercio electrónico, ya que el usuario puede dar instrucciones a un agente para que realice la compra cuando se cumplan las condiciones necesarias. El proceso es más rápido y económico porque evita tener que hacer comunicaciones periódicas para comprobar el estado del producto.

Por el contrario, enumeramos seguidamente las desventajas [2]:

  • Es más rentable dotar de servidores representantes (proxy) a los usuarios de ordenadores portátiles.

  • Las transacciones y peticiones semánticas pueden realizarse con otro tipo de técnicas obteniendo un resultado similar, ya que los servidores de información pueden restringir el acceso a los agentes ejecutados localmente.

  • Hasta ahora no existe una metodología que permita convertir el código de un agente escrito en un lenguaje de programación determinado a otro lenguaje distinto.

  • Los virus informáticos pueden contaminar los sistemas de agentes móviles y utilizarlos para reproducirse rápidamente.

  • Los problemas de seguridad en agentes móviles se verán en profundidad en el capítulo 3 "Seguridad".

 

2.3. Cómo se mueve un agente.

El proceso para transferir un agente de un sistema a otro se realiza en tres fases [1]:

  1. Iniciación de la transferencia.

    • El agente identifica el destino deseado, realiza una petición de viaje al sistema y –si es aceptada– recibe el permiso para ejecutar la transferencia.
    • El sistema suspende la ejecución del agente e identifica el estado y las partes del agente que serán enviadas.
    • Se realiza la conversión en serie del código y del estado del agente (seriación) y se codifica según el protocolo establecido.
    • El sistema hace la autenticación del agente.
    • Se realiza la transferencia.

  2. Recepción del agente.
    • El sistema destinatario acredita al cliente.
    • Se realiza la descodificación del agente y la conversión de serie a código y estado del agente (diseriación).
    • El sistema crea la instancia del agente, restaura su estado y continúa la ejecución.

  3. Transferencia de otras clases (sólo en sistemas orientados a objetos).
  4. Este proceso es necesario cuando el agente se mueve de un sistema a otro, cuando el agente se crea remotamente o cuando necesita otros objetos. La trasnferencia de las clases puede realizarse completamente junto con el viaje del agente o hacer peticiones de carga cuando sea preciso.

     

2.4. Interoperación entre sistemas multiagentes.

La normalización en el proceso de interconexión de agentes móviles se aplica a dos niveles:

  1. Interoperación entre lenguajes de programación.
  2. Interoperación entre sistemas escritos en el mismo lenguaje.

La primera de ellas resulta muy compleja de alcanzar y continúa aún en proceso de estudio, mientras que el segundo caso está siendo normalizado por CORBA.

Para alcanzar el grado de interconexión deseado las MASIF de CORBA definen los siguientes conceptos:

  • Lugar: contexto dentro de un sistema donde puede ejecutarse un agente; por lo tanto, un agente viaja de un lugar a otro, ya sea en el mismo sistema o en otro distinto.

  • Localización: va asociada con un lugar, indicando el nombre y la dirección que ocupa en la agencia.

  • Localidad: propiedad de cercanía al destino, ya sea en el mismo ordenador o en la misma red.

  • Infraestructura de comunicación: provee servicios de transporte al sistema.

  • Autoridad: persona o entidad en nombre de la cual actúa un agente o un sistema de agentes.

  • Región o dominio: conjunto de sistemas de agentes que tienen la misma autoridad y que no tienen que ser del mismo tipo.

Pueden ocurrir tres circunstancias distintas en el proceso de comunicación entre dos agentes que se encuentran en distintos sistemas.

Los sistemas comparten el mismo perfil (la misma norma) para la gestión de agentes (fig. 2.1): no existen problemas de interoperación y el agente puede viajar de un sistema a otro para hacer una comunicación local con el otro agente.

Fig. 2.1

Los sistemas no siguen la misma norma, pero puede realizarse una comunicación local (fig. 2.2): en el ordenador destino existe otro sistema de agentes (C) compatible con el sistema origen (A), el agente se desplaza al sistema compatible y realiza la comunicación –RPC por ejemplo– con el otro agente.

Fig. 2.2

Los sistemas no son compatibles y no puede alcanzarse la propiedad de localidad (fig. 2.3): debe realizarse una comunicación normal entre los agentes.

Fig. 2.3

 

  1. Seguridad.

El control de la seguridad es un grave problema, ya que un agente es un programa que viaja de un ordenador a otro, al igual que un virus. Los sistemas deben hacer hincapié en la seguridad de los ordenadores y de la propia agencia. Los aspectos de seguridad típicos que deben ser controlados son [4]:

  • Protección de la máquina contra los agentes.
  • Protección contra otros agentes.
  • Protección de los agentes contra la máquina
  • Protección de la red.

Los ataques más comunes que pueden realizarse a un sistema de agentes móviles son:

  • Inundar el sistema con peticiones, tanto legales como ilegales.
  • Escuchar la red para obtener información privada.
  • Modificar, borrar o sustituir cualquier elemento transferido por la red.
  • Grabar y retransmitir ilegalmente una comunicación.
  • Falsificar la identidad –enmascaramiento– de un agente o sistema de agentes para tener acceso a la información o a ciertos servicios.
  • Utilización abusiva de algún recurso para que no pueda ser utilizado por otro usuario.
  • Colocar un Caballo de Troya –agente o sistema de agentes– para recibir información confidencial o denegar acceso a los recursos.

 

3.1. Estrategias de seguridad.

Tanto los sistemas como los propios agentes móviles deben reforzar las tareas de seguridad para evitar, de un modo fiable, los ataques descritos anteriormente. Pueden tener varias políticas de seguridad que permitan:

  • Comprobar las credenciales de los participantes en cualquier comunicación.
  • Restringir o garantizar las operaciones que puede ejecutar un agente.
  • Gestionar privilegios de acceso a los recursos y establecer límites de consumo.

Los requisitos que deben garantizarse en cualquier comunicación son:

  • Confidencialidad: evitar la escucha del canal.

  • Integridad: comprobar que los datos no han sido modificados durante la transferencia.

  • Autenticación: tanto el agente –o sistema– emisor como el receptor deben ser identificados para evitar accesos a información o a recursos reservados.

  • Detección de reproducción: evitar la duplicación de un agente durante una comunicación.

Es importante resaltar que los agentes no deben incluir en su viaje ninguna clave criptográfica, sino que ha de utilizarse un algoritmo –denominado autenticador en las MASIF– que verifique la validez del agente y del sistema origen, las autoridades de los sistemas y agentes involucrados en la comunicación y cuáles son las autoridades consideradas como seguras [1].

Aunque hay una gran variedad de políticas de seguridad que pueden utilizarse para evitar los ataques, un proceso de comprobación típico antes de iniciarse el viaje de un agente incluye los siguientes aspectos [4]:

  • El sistema debe verificar la autoridad propietaria del agente.
  • Durante la creación de la petición, el propietario define las preferencias de seguridad para el agente.
  • Al crearse la instancia del agente, se incluye información sobre su autoridad y la de su sistema.
  • El sistema origen codifica la información.
  • Los sistemas origen y destino crean un canal de comunicaciones seguro.
  • El sistema destino descodifica la información y realiza las comprobaciones necesarias.

Por último recordaremos que –al contrario que un objeto normal– un agente tiene la potestad de restringir o permitir a otros agentes el acceso a sus métodos, a sus datos o a los recursos que controla, según su comportamiento o sus objetivos.

 

  1. Sistemas de agentes móviles.

La tecnología de agentes móviles está en continuo crecimiento. Hay una gran variedad de sistemas y arquitecturas de gestión, escritos en varios lenguajes de programación y ejecutables en distintas plataformas, compatibles o no con las especificaciones incluidas en las MASIF y con diferentes aspectos de seguridad.

El O.M.G. como autoridad de nombres relativa a agentes móviles incluye explícitamente en las MASIF los siguientes identificadores [1]:

  • Lenguajes de programación: Java, Tcl, Scheme y PERL.
  • Sistemas comerciales: Aglets, MOA y AgentTcl (D’Agents).
  • Métodos de seriación: Seriación de Objetos Java (JOS).

Los siguientes apartados de este capítulo pretenden dar una breve descripción sobre algunos de los entornos para gestión de agentes móviles existentes actualmente y que pueden ser evaluados y descargados desde Internet.

 

4.1. Aglets.

La arquitectura del Aglets Software Development Kit (ASDK) presenta una herramienta de desarrollo para agentes móviles, creada por los laboratorios de I.B.M. en Tokio [viii], siendo una de las primeras en participar en las especificaciones MASIF para CORBA.

Un aglet es un objeto escrito en Java capaz de visitar máquinas que soporten el entorno de ejecución Aglets WorkBench (AWB) [4]. Dicho entorno permite:

  • Cifrar el código y los datos de un aglet utilizando el método de seriación de Java (JOS).

  • Trasladar agentes utilizando el Protocolo para el Transporte de Aglets (ATP).

  • Ofrecer un Interfaz de Programación para Aglets (A-API).

  • Interconexión e intercambio de información entre aglets y otros objetos mediante paso de mensajes.

  • El ciclo de vida de un aglet puede tratarse por métodos basados en captura de eventos. Los eventos definidos son: creación, clonación, expedición, retractación, eliminación, activación, desactivación y paso de mensaje.

  • Control de seguridad mediante definición de autoridades y de sus privilegios y preferencias.

Los elementos principales de la arquitectura aglet son (ver figura 4.1):

  • Aglet: define los métodos básicos para el control de un agente móvil.
  • Representante: aisla al aglet del entorno, permitiendo un mayor grado de seguridad y ofreciendo transparencia respecto a la localización del agente.
  • Contexto: ofrece al aglet un interfaz con su entorno de operación.
  • Mensaje: objetos utilizados para la comunicación entre aglets.

Fig. 4.1

 

4.2. Proyecto MOA (Agentes y Objetos Móviles).

La arquitectura ofrecida por el Open Group [ix] –que también ha participado en MASIF– está en fase de diseño, habiéndose definido las especificaciones funcionales y la implementación del modelo de objetos. MOA permite crear objetos y agentes móviles escritos en lenguaje Java.

Un objeto móvil puede contener tareas y, por lo tanto, estar activo. Si dicho objeto es independiante y actúa en nombre de un usuario entonces el modelo MOA lo denomina agente.

Las características fundamentales del modelo MOA son:

  • Proveer puntos de comprobación para poder reiniciar las clases Java.
  • Diseño e implementación de un modelo para objetos y agentes móviles escritos en Java similar al aportado por el lenguaje Telescript de General Magic.

  • Ofrecer un esquema de nombres apropiado.

  • Conservar los canales de comunicación tras cada migración de un objeto.

  • Definir una interfaz para el control de agentes, ofreciendo suspensión, reanudación, eliminación, localización y monitorización.

  • Soportar control histórico de la actividad de los agntes.

 

4.3. ARA (Agentes para Acción Remota).

ARA [x] es una plataforma desarrollada por la Universidad de Kaiserslauten (Alemania) para la ejecución de agentes móviles enfocada especialmente a entornos con conexión intermitente o con un gran volumen de intercambio de información.

La arquitectura ARA consta de los siguientes elementos (ver figura 4.2):

  • Núcleo: ofrece utilidades básicas de seguridad, interacción, acceso al interfaz de usuario, al sistema de archivos o a otros programas y migración a nodos remotos.
  • Sistema de agentes: código compilado de agentes estáticos.
  • Intérpretes: entornos de ejecución para agentes móviles.

Fig. 4.2

Las características principales de ARA son:

  • Permite agentes móviles interpretados en Tcl y en C/C++ (usando MACE).

  • Los agentes pueden transportarse mediante TCP o SMTP.

  • Utiliza permisos para todos los recursos relevantes del sistema (ficheros, conexiones, ancho de banda, espacio en disco, etc.).

  • Permite la codificación y certificación de los agentes móviles.

  • La comunicación entre agentes se realiza mediante paso de mensajes asíncrono.

 

4.4. Grasshopper.

Grasshopper [xi] es una plataforma para el desarrollo y la ejecución de agentes móviles escritos en lenguaje Java creada por la empresa alemana IKV++ y que cumple con las normas especificadas en MASIF por el O.M.G..

La arquitectura de esta plataforma consta de los siguientes elementos (ver figura 4.3):

  • Agencia: entorno mínimo de ejecución para agentes móviles y estáticos.
  • Núcleo de la agencia: contiene las funciones básicas de la agencia (comunicación, registro, seguridad y persistencia).
  • Lugar: agrupación funcional lógica dentro de una agencia.
  • Región: mantiene un registro de todos los componentes pertenecientes a una determinada organización.

Fig. 4.3

Las características principales de Grasshopper son:

  • Soporta interacción mediante CORBA, RMI o sockets.

  • Permite transparencia respecto a la localización de los objetos.

  • La comunicación entre agentes puede ser asíncrona, dinámica o multipunto.

  • Puede trabajar con los siguientes ORB: JDK 1.2 de Sun, VisiBroker de Inprise y OrbixWeb de IONA.

  • Los agentes, otros entornos y las aplicaciones normales pueden acceder a la funcionalidad de agencias remotas y del registro de la región.

  • Cada agencia mantiene servicios de seguridad interna y externa.

  • Soporta las siguientes operaciones para la gestión de agentes: creación, borrado, suspensión, reanudación, clonación, copia, migración, almacenamiento e invocación de acciones.

 

4.5. Odyssey.

Esta plataforma –creada por la empresa estadounidense General Magic [vi]– consta de una serie de clases Java 100% puro, que –incorporadas a una aplicación distribuida– permiten crear lugares accesibles por agentes móviles. Odyssey es independiente del protocolo de transportes utilizado y ofrece compatibilidad con RMI de Java.

Sus características fundamentales son:

  • Tanto los agentes y como los lugares son tareas Java.

  • Define una interfaz de transporte basada en RMI con prestaciones adicionales de seguridad.

  • Futuras versiones serán compatibles con CORBA y con DCOM de Microsoft.

  • Adaptación a Java de las mayor parte de las prestaciones del lenguaje Telescript (ya abandonado por General Magic).

  • Define el concepto de trabajador, que permite capturar en cualquier momento el estado de ejecución de un agente.

 

  1. Agentes móviles y CORBA.

Las Utilidades para Agentes Móviles (MAF) son unas reglas desarrolladas por el O.M.G. en 1.997 –incluidas dentro de la estructura de la norma CORBA– que proporcionan las bases para la intercomunicación entre agentes heterogéneos. Este artículo tratará la actualización realizada en 1.998, denominada Utilidades para la Interoperación entre Sistemas de Agentes Móviles (MASIF) [1].

El O.M.G. es el organismo encargado de normalizar las bases para el tratamiento y la interoperación de los agentes móviles. Sin embargo, es consciente de que en la actualidad resulta imposible generalizar ciertos aspectos tecnológicos, hasta que la industria sea más madura o haya adquirido mayor experiencia.

Áreas normalizadas por las MASIF:

  • Gestión de agentes.
  • Transmisión de agentes.
  • Nombres de agentes y de sistemas de agentes.
  • Tipos de sistemas de agentes.
  • Sintaxis de localización.

Áreas no normalizadas aún por las MASIF:

  • Viajes con varios saltos entre distintos dominios de seguridad (regiones), actualmente sólo se permite mover agentes de una región a otra (viaje de un único salto).

  • Conversión de código entre distintos lenguajes de programación.

 

5.1. Estructura del modelo MASIF.

Fig. 5.1

Recordando lo que ya hemos expuesto en el capítulo 2 "Introducción a los agentes móviles", en la estructura de un sistema de agentes móviles definida en las MASIF podemos distinguir los siguientes elementos: agentes, lugares e infraestructura de comunicaciones (ver figura 5.1).

Un lugar es un entorno de operación donde se ejecuta una serie de agentes, que están agrupados lógicamente. Por otro lado, la infraestructura de comunicaciones provee a la agencia una serie de servicios de transporte, que le permite interoperar con otros sistemas conectados a la red –tanto multiagentes, como de cualquier otro tipo–, así como servicios de nombres y de seguridad.

Los sistemas multiagentes pertenecientes a una misma organización se agrupan en una región. Cada una de ellas debe contar con una agencia que sirve de punto de acceso a la región, para conseguir la intercomunicación entre sistemas de distintas regiones. La figura 5.2 muestra la arquitectura genérica de una región.

Teniendo en cuenta estos conceptos, el modelo definido en MASIF consta de dos interfaces:

  • MAFFinder para el servicio de nombres de la región (apartado 5.3).
  • MAFAgentSystem para la gestión de agentes (apartado 5.4).

Fig. 5.2

Las utilidades para sistemas de agentes móviles forman parte del conjunto de utilidades definidas en CORBA, según la Arquitectura para la Gestión de Objetos (OMA). Los objetos definidos en las interfaces MASIF son objetos CORBA normales que pueden hacer uso de otros servicios y utilidades incluidos en la norma. Los servicios que más estrechamente están ligados a las MASIF son (ver figura 5.3):

Fig. 5.3

  • Servicios de nombres: permiten mantener un registro de los objetos CORBA –incluyendo los objetos MASIF– y asociarles nombres. Los agentes que tengan que operar con otro tipo de objetos CORBA, deben inscribirse en el servicio de nombres, además de en el registro de su región.

  • Servicios para el ciclo de vida: normalizan las operaciones de creación, borrado, copia y movimiento de objetos CORBA. Los agentes representados como objetos CORBA también harán uso de estos servicios.

  • Servicios de seriación: reúnen los mecanismos para almacenar el estado de un objeto en una serie o flujo de datos y para poder restaurarlo posteriormente. Un agente utiliza estos servicios en los procesos de seriación y de diseriación.

  • Servicios de seguridad: suministran los mecanismos necesarios de seguridad descritos en el capítulo 3 "Seguridad". Actualmente estos servicios no alcanzan todas las aspectos relacionados con los agentes móviles.

 

5.2. El Módulo CfMAF.

El módulo CfMAF –incluido en las utilidades CORBA (CORBAfacilities)– contiene las definiciones de las interfaces MAFFinder y MAFAgentSystem. Antes de entrar en la descripción general de dichas interfaces, comentaremos los conceptos generales incluidos en el citado módulo. Sin embargo, en este artículo no pretendemos entrar en explicaciones exhaustivas sobre el código IDL de cada interfaz, para ello el lector debe acudir a la documentación suministrada por el O.M.G. en las MASIF [1].

Un nombre (Name) es una estructura formada por tres atributos, que permite crear un identificador único para un agente o un sistema de agentes. Estos atributos son:

  • Autoridad: persona u organización que representa a la agencia o al agente (en los servicios de seguridad CORBA este término se denomina principal).

  • Identidad: identificador –propiamente dicho– del agente o del sistema de agentes.

  • Tipo de sistema de agentes: contiene información sobre el modelo de la agencia o del sistema que ha generado la identidad del agente.

struct Name {
            Authority authority;
            Identity identity;
            AgentSystemType agent_system_type;
       };
typedef sequence<Name> NameList;

Un nombre de clase (ClassName) identifica de un modo legible a una clase en el ámbito de un determinado sistema de agentes. El administrador de la región puede optar por usar nombres de clases únicos dentro de dicha región.

struct ClassName {
                 string name;
                 OctetString descriminator;
       };

La localización (Location) en la interfaz MAFFinder especifica el camino a un sistema de agentes, indicando nombre de sistema, nombre de agente y nombre de lugar.

typedef string Location;
typedef sequence<Location> Locations;

Una localización puede especificarse de dos maneras diferentes:

Un nombre CORBA es una secuencia de componentes que constan de nombre y tipo. El formato expresando como Identificador Universal de Recursos (URI) es:

CosNaming:/ident1!tipo1/ident2!tipo2/...

Una dirección de Internet permite obtener la referencia actual de un objeto, indicando máquina donde se encuentra, puerto (opcional), sistema de agentes y lugar. El formato expresado como Localizador Universal de Recursos (URL) es:

mafiiop://máquina:puerto/agencia/lugar1/...

Por otro lado, el O.M.G. ha normalizado una serie de identificadores que deben ser únicos en todas las implementaciones de las MASIF, que permiten obtener información sobre el sistema de agentes y sobre el perfil para la ejecución de un agente. Éstos son: lenguajes de programación permitidos, tipos de sistema de agentes, modos de autenticación, métodos de seriación, propiedades de un agente y excepciones que pueden ocurrir durante una determinada operación.

 

5.3. La Interfaz MAFFinder.

Un objeto de este tipo realiza la función de servidor dinámico de nombres para las agencias, los agentes y los lugares de una región, aunque varias regiones pueden compartir el mismo MAFFinder. Un cliente debe obtener la referencia al objeto MAFFinder antes de realizarle cualquier petición.

Existen 4 métodos básicos para localizar agentes:

La estructura fundamental de la base de datos de un objeto MAFFinder soporta operaciones de inscripción, fin de inscripción y localización para agentes, sistemas de agentes y lugares.

Los métodos definidos en la interfaz MAFFinder son:

  1. Buscar agente (lookup_agent): devuelve la localización de un agente específico o de los agentes que tienen un determinado perfil. Este método devuelve la localización registrada del agente, pero no evita que dicho agente se mueva. Además pueden existir errores de localización, si un agente no realiza la función de fin de inscripción antes de terminar su ejecución.

    Locations lookup_agent (in Name agent_name,
                            in AgentProfile agent_profile)
                  raises (EntryNotFound);
    	
  2. Buscar sistema de agentes (lookup_agent_system): devuelve la localización de un sistema de agentes registrado o de aquellas agencias que cumplen una serie de criterios de búsqueda.

    Locations lookup_agent_system (in Name agent_system_name,
                                   in AgentSystemInfo agent_system_info)
                  raises (EntryNotFound);
    	
  3. Buscar sistema de agentes (lookup_agent_system): devuelve la localización de un sistema de agentes registrado o de aquellas agencias que cumplen una serie de criterios de búsqueda.

    Locations lookup_agent_system (in Name agent_system_name,
                                   in AgentSystemInfo agent_system_info)
                  raises (EntryNotFound);
    	
  4. Buscar lugar (loocup_place): devuelve la localización de un lugar registrado en el MAFFinder.

    Locations lookup_place (in string place_name)
                  raises (EntryNotFound);
    	
  5. Inscribir agente (register_agent): añade un agente a la lista de los inscritos en el MAFFinder, indicando su nombre, su localización y su perfil. Si el agente ya estaba registrado previamente, actualiza los datos de localización y perfil.

    void register_agent (in Name agent_name,
                         in Location agent_location,
                         in AgentProfile agent_profile)
             raises (NameInvalid);
    	
  6. Buscar lugar (loocup_place): devuelve la localización de un lugar registrado en el MAFFinder.

    Locations lookup_place (in string place_name)
                  raises (EntryNotFound);
    	
  7. Inscribir agente (register_agent): añade un agente a la lista de los inscritos en el MAFFinder, indicando su nombre, su localización y su perfil. Si el agente ya estaba registrado previamente, actualiza los datos de localización y perfil.

    void register_agent (in Name agent_name,
                         in Location agent_location,
                         in AgentProfile agent_profile)
             raises (NameInvalid);
    	
  8. Inscribir sistema de agentes (register_agent_system): registra en el MAFFinder un nuevo sistema de agentes, indicando su nombre, su localización y su información. Si la agencia debe moverse de lugar, tendrá que finalizar su inscripción antes de volver a registrarse.

    void register_agent_system (in Name agent_system_name,
                                in Location agent_system_location,
                                in AgentSystemInfo agent_system_info)
             raises (NameInvalid);
    	
  9. Inscribir lugar (register_place): añade un nuevo lugar y su localización a la base de datos del MAFFinder. Antes de mover un objeto de este tipo, deberá finalizarse su inscripción.

    void register_place (in string place_name,
                         in Location place_location)
             raises (NameInvalid);
    	
  10. Fin de inscripción de agente (unregister_agent): borra un determinado agente de la lista de objetos inscritos en el MAFFinder.

    void unregister_agent (in Name agent_name)
             raises (EntryNotFound);
    	
  11. Fin de inscripción de sistema de agentes (unregister_agent_system): termina la inscripción de una determinada agencia.

  12. void unregister_agent_system (in Name agent_system_name)
             raises (EntryNotFound);
    	
  13. Fin de inscripción de lugar (unregister_place): elimina el registro de un determinado lugar en el MAFFinder.

    void unregister_place (in string place_name)
             raises (EntryNotFound);
    	

 

5.4. La Interfaz MAFAgentSystem.

En este apartado describiremos las operaciones y los objetos necesarios para normalizar la gestión básica de los agentes móviles.

Los métodos definidos en la interfaz MAFAgentSystem son:

  1. Crear agente (create_agent): la agencia crea un nuevo agente y devuelve al cliente remoto el nombre del agente generado. Los parámetros que deben incluirse en esta petición son:

    Name create_agent (in Name agent_name,
                       in AgentProfile agent_profile,
                       in OctetString agent,
                       in string place_name,
                       in Arguments arguments,
                       in ClassNameList class_names,
                       in string code_base,
                       in MAFAgentSystem class_provider)
             raises (ClassUnknown, ArgumentInvalid,
                     DeserializationFailed, MAFExtendedException);
    	
  2. Capturar clase (fetch_class): devuelve las definiciones de una o más clases o del código necesario. Permite completar el proceso de captura de código para los métodos de creación y recepción de agentes.

    OctetStrings fetch_class (in ClassNameList class_name_list,
                              in string code_base,
                              in AgentProfile agent_profile)
                     raises (ClassUnknown, MAFExtendedException);
    	
  3. Buscar agencia más cercana con cierto perfil (find_nearby_agent_system_of_profile): realiza una petición al MAFFinder de la región para encontrar cuál es el sistema de agentes más cercano que puede ejecutar un determinado cliente o que cumple ciertas características operativas.

    Location find_nearby_agent_system_of_profile (in AgentProfile profile)
                 raises (EntryNotFound);
    	
  4. Obtener estado de agente (get_agent_status): devuelve el estado actual del agente (ejecución, suspensión o terminación).

    AgentStatus get_agent_status (in Name agent_name)
                     raises (AgentNotFound);
    	
  5. Obtener información de sistema de agentes (get_agent_system_info): devuelve una estructura con información sobre el nombre de la agencia y el perfil de agentes que soporta.

    AgentSystemInfo get_agent_system_info();
    	
  6. Obtener información de autoridad (get_authinfo): indica si el agente ha sido autentificado y el método de autorización.

    AuthInfo get_authinfo (in Name agent_name)
                 raises (AgentNotFound);
    	
  7. Obtener MAFFinder (get_MAFFinder): obtiene la referencia al registro para poder ejecutar operaciones de búsqueda de agencias, agentes y lugares.

    MAFFinder get_MAFFinder ()
                  raises (FinderNotFound);
    	
  8. Listar todos los agentes (list_all_agents): permite al gestor de la agencia obtener una lista con todos los agentes registrados en dicho sistema.

    NameList list_all_agents();
    	
  9. Listar todos los agentes de una autoridad (list_all_agents_of_authority): devuelve una lista con todos los agentes del sistema que trabajan en nombre de una determinada autoridad.

    NameList list_all_agents_of_authority (in Authority authority);
    	
  10. Lista todos los lugares (list_all_places): obtiene una lista de todos los lugares del sistema registrados por el MAFFinder.

    Locations list_all_places();
    	
  11. Recibir agente (receive_agent): permite que un sistema de agentes obtenga la referencia del agente recibido. Deben especificarse los mismos parámetros que en el método para creación de agentes.

    void receive_agent (in Name agent_name,
                        in AgentProfile agent_profile,
                        in OctetString agent,
                        in string place_name,
                        in ClassNameList class_names,
                        in string code_base,
                        in MAFAgentSystem agent_sender)
             raises (ClassUnknown, ArgumentInvalid, DeserializationFailed,
                     MAFExtendedException);
    	
  12. Restaurar agente (resume_agent): reanuda la ejecución de un agente que ha entrado en estado de suspensión.

    void resume_agent (in Name agent_name)
             raises (AgentNotFound, ResumeFailed, AgentIsRunning);
    	
  13. Suspender agente (susend_agent): suspende temporalmente la ejecución de un agente.

    void suspend_agent (in Name agent_name)
             raises (AgentNotFound, SuspendFailed, AgentIsSuspended);
    	
  14. Terminar agente (terminate_agent): detiene definitivamente la ejecución de un determinado agente.

    void terminate_agent (in Name agent_name)
             raises (AgentNotFound, TerminateFailed);
    	

 

  1. Conclusiones finales.

Los sistemas de agentes móviles constituyen una serie de herramientas relativamente recientes para la informática distribuida y heterogénea. En este artículo hemos descrito la diversidad de disciplinas informáticas que investigan sobre agentes, los conceptos teóricos ofrecidos por cada una de ellas, sus distintas soluciones y los problemas más comunes.

Asimismo, hemos comentado la teoría específica relativa a los agentes móviles y a los sistemas de agentes móviles. Se han descrito los conceptos básicos relativos a los sistemas de agentes móviles, hemos evaluado sus ventajas e inconvenientes y tratado en profundidad los asuntos relacionados con la intercomunicación, interoperación y seguridad de las agencias.

Seguidamente hemos comentado algunos de los sistemas comerciales que pueden ser evaluados y cargados desde Internet.

Se ha estudiado, por último, la solución ofrecida por el O.M.G. en las Utilidades para la Interoperación de Sistemas de Agentes Móviles (MASIF), que –pese a estar todavía en fase de desarrollo– deberán ser utilizadas por los nuevos productos comerciales.

Aunque MASIF es una herramienta importante para conseguir solucionar las dificultades de interoperación propias de los agentes móviles, los entornos de programación tienen aún que completar la norma con sus propios mecanismos de seguridad y de comunicación, ya que los servicios y las utilidades CORBA no cubren por completo todas estas necesidades.

Suponemos que el esfuerzo realizado por el O.M.G. seguirá dando sus frutos y llegaremos a un estado en el que un agente podrá trasladarse sin dificultad a distintos entornos de operación, situados en máquinas con sistemas operativos diferentes. Por lo tanto, resulta importante recalcar que los programas y entornos comerciales deben ser compatibles al máximo con las normas CORBA.


 

Referencias.
  1. "MASIF-RTF Results". Object Management Group, 1.998.
  2. D. Chess, C. Harrison, A. Kershenbaum. "Mobile Agents: Are They a Good Idea?" . I.B.M., 1.995.
  3. S. Franklin, A. Graesser. "Is it an Agent or just a Program? A Taxonomy for Autonomous Agents". Universidad de Memphis, 1.996. http://www.msci.memphis.edu/~franklin/AgentProg.html
  4. G. Karjoth, D. B. Lange, M. Oshima. "A Security Model for Aglets". IEEE Internet Computing, julio-agosto 1.997.
  5. B. Venners. "Solve Real Problems with Aglets, a Type of Mobile Agents". JavaWorld, mayo 1.997. http://www.javaworld.com/javaworld/jw-05-1997/jw-05-hood.html
  6. H. S. Nwana. "Software Agents: An Overview". Knowledge Engineering Review, septiembre 1.996.
  7. N. R. Jennings, K. Sycara, M. Wooldridge. "A Roadmap of Agent Research and Development". Autonomous Agents and Multi-Agent Systems, I, 1.998.
  8. D. Benech, T. Desprats, Y. Raynaud. "A KQML-CORBA based Architecture for Intelligent Agents Communication in Cooperative Service and Network Management".
  9. U. Cortés, T. P. Hall, E. Mor, M. Sánchez. "Agentes en la Red". Novatica, noviembre-diciembre 1.996.
  10. B. Falchuck, A. Karmouch. "Visual Modelling for Agent-Based Applications". Computer, diciembre 1.998.
  11. M. P. Singh. "Agent Communication Languages: Rethinking the Principles". Computer, diciembre 1.998.
  12. A. Bieszczad, B. Pagurek, T. White. "Mobile Agents for Network Management". IEEE Communications Surveys. 1.998. http://www.comsoc.org/pubs/surveys/4q98issue/bies.html>
  13. "Grasshopper: The Agent Platform. Technical Overview". IKV++ GmbH. 1.998.
  14. "Diccionario de la Lengua Española". Real Academia Española. XXI Edición, 1.992.
  15. "VisiBroker Version 3.3 Programmer's Guide. Naming and Event Services". Inprise Corp. 1.998.

 

Direcciones en Internet.
  1. Object Management Group: http://www.omg.org/
  2. The Agent Society: http://www.agent.org/
  3. Foundation for Intelligent Physical Agents: http://drogo.cselt.stet.it/fipa/
  4. KQML (AgentWeb, Universidad de Maryland en Baltimore): http://www.cs.umbc.edu/kqml/
  5. France Télécom: http://www.francetelecom.fr/
  6. Odyssey (General Magic): http://www.genmagic.com/technology/odyssey.html
  7. JATLite (CDR, Universitdad de Stanford). http://java.stanford.edu/java_agent/html/
  8. The Aglets Software Development Kit (I.B.M. Corp.): http://www.trl.ibm.co.jp/aglets/
  9. Mobile Objects and Agents (Open Group): http://www.caab.opengroup.org/RI/java/moa/index.htm
  10. Agents for Remote Action (Universidad de Kaiserslauten):
    http://www.uni-kl.de/AG-Nehmer/Projekte/Ara/index_e.html
  11. Grasshopper: The Agent Platform (IKV++): http://www.ikv.de/products/grasshopper/
  12. Java Technology Home Page (Sun Microsystems): http://java.sun.com/
  13. The Tcl Company (Scriptics): http://www.scriptics.com/


<- Tesis. -> CELSIUS. -> SMA.