viernes, 5 de febrero de 2010

Agentes distribuidos

Con el desarrollo que ha alcanzado Internet a nivel mundial, se han observado tres problemas principales que han generado preocupación para toda la comunidad de la red, y para los desarrolladores de aplicaciones, que son: la cantidad de información disponible en diferentes portales Web por todo el mundo, el tráfico de datos por la red y la poca experiencia computacional de muchos usuarios. Una posible solución para tales problemas consiste en el uso de agentes. Estos pueden desplazarse para la aplicación Web donde los datos se encuentran almacenados para seleccionar la información que el usuario requiere. Con esto, la cantidad total de datos de las diferentes fuentes no es transferida, lo que se refleja en un ahorro de ancho de banda, tiempo y dinero. Los agentes también colaboran con los usuarios que tienen poca experiencia computacional, actúan como interfaces “expertas” con el usuario para detectar y resolver problemas, así como aprender las preferencias y hábitos cotidianos del usuario, con el propósito de automatizarlas.

En la última década ha cobrado fuerza la hipótesis de que si los programas que componen los sistemas computacionales distribuidos fueran inteligentes, si pudiesen reorganizar sus funciones para corregir o tolerar los fallos y si su coordinación pudiese estructurarse en términos intuitivos, el diseño y el mantenimiento de dichos sistemas sería más fácil de elaborar, más adaptable y más fiable. En la construcción de estos programas se está aplicando una tecnología íntimamente relacionada con la inteligencia artificial. Se trata de los agentes que, de momento, se entenderán como programas autónomos e inteligentes. Bajo el punto de vista de esta tecnología, los sistemas distribuidos pasan a ser “sistemas multiagente”. Los sistemas multiagente se desarrollan sobre middleware, que es un tipo especial de software cuyo cometido es unir o mediar entre varios programas aislados y proporcionar un nuevo nivel de abstracción más intuitivo.

El término “agente” describe una abstracción del software, una idea, o un concepto, similar a la programación orientada a objetos términos tales como métodos, funciones, y objetos. El concepto de un agente proporciona una manera conveniente y de gran alcance de describir una entidad compleja del software que sea capaz de actuar con cierto grado de autonomía para lograr tareas a nombre de su usuario. Pero de manera semejante a los objetos, en términos de los cuales se definen métodos y cualidades, un agente se define en términos de su comportamiento. Puesto que los agentes están bien adaptados incluir sus recursos requeridos en su descripción, pueden ser diseñados para estar muy débilmente acoplados y llega a ser fácil para hacerlos ejecutar en procesadores distribuidos. Así se convierten agentes distribuidos y se aplican las consideraciones del cálculo distribuido. El código del agente es particularmente fácil de poner en ejecución en una manera distribuida y suele escalar bastante bien.

Dentro del paradigma de agentes, uno de los conceptos más atrayentes es la resolución de problemas mediante la utilización de sistemas multiagente. La mayor complejidad en los sistemas multiagente se encuentra centrada en la resolución de la comunicación y la coordinación de los agentes que componen el sistema. Existe una gran cantidad de ventajas para la elección de una arquitectura multiagente, como posibles motivos se tienen: (1) La facilidad de diseño o implementación. (2) La información y los sistemas se encuentran distribuidos y no pueden ser accedidos de forma centralizada. La complejidad de los sistemas participantes requiere un enfoque distribuido, por algunas de las siguientes razones: (1) Los sistemas se encuentran geográficamente distribuidos. (2) Los sistemas poseen muchos componentes. (3) Los sistemas son fuertemente heterogéneos. (4) Existe la necesidad de soportar un contenido masivo, tanto en cantidad de conceptos, como en la información almacenada acerca de estos. (5) El dominio de la aplicación que debe ser cubierto por el sistema puede ser bastante amplio. Dado que el sistema se compone de más de un agente, es sumamente necesario establecer un sistema de comunicación entre los mismos. Esta comunicación permite además la cooperación entre todos los agentes para lograr los objetivos globales del sistema, más allá de que cada agente posea sus propios objetivos individuales, los cuales pueden ser conocidos por los demás agentes del sistema o no.

El diseño de sistemas multiagente, generalmente, se aborda pensando en los agentes como entes con motivación. En lugar de modelar un sistema con componentes que ejecutan métodos, el desarrollador tiene que pensar en los objetivos que los componentes deben alcanzar y en las tareas necesarias para que lo consigan. Al desarrollar los componentes así, se espera que el proceso sea más intuitivo ya que esta forma de modelar y de razonar se halla más cerca del pensamiento humano que los paradigmas de programación tradicionales. La construcción de sistemas multiagente integra tecnologías de distintas áreas del conocimiento: técnicas de ingeniería del software para estructurar el proceso de desarrollo; técnicas de inteligencia artificial para dotar a los programas de capacidad para tratar situaciones imprevistas y tomar decisiones, y programación concurrente y distribuida para tratar la coordinación de tareas ejecutadas en diferentes máquinas bajo diferentes políticas de planificación.

Existen plataformas de desarrollo que dan soluciones parciales al modelado del comportamiento y a la coordinación de agentes. El rango de estas soluciones va desde proporcionar servicios básicos, tales como la gestión de agentes, bibliotecas de algoritmos, localización de agentes o movilidad, como sucede con JADE o ABLE, hasta entornos de desarrollo donde se parametrizan armazones de software, como ZEUS o AgenTool. Aunque facilitan el proceso, las plataformas de desarrollo quedan incompletas sin un proceso de desarrollo de software especializado para agentes que haga similar la creación de sistemas multiagente a la producción de software convencional. Las técnicas convencionales de ingeniería tales como el Proceso Unificado y CommonKADS, no tienen en cuenta las necesidades de especificación de los sistemas multiagente, tales como la especificación de planificación de tareas, intercambio de información con lenguajes de comunicación orientados a agentes, movilidad del código o motivación de los componentes del sistema. Por lo mencionado, se plantean nuevas metodologías basadas en agentes, tales como BDI, Vowel Engineering, MAS-CommonKADS y GAIA entre otros. Estas metodologías parten de un modelo, informal en la mayoría de casos, de cómo debe ser un sistema multiagente y dan guías para su construcción. En las primeras metodologías, las guías consistían en una lista breve de pasos a seguir. Las más modernas, aunque han progresado en la integración con la ingeniería del software clásica, aún no muestran la madurez que se puede encontrar en metodologías convencionales como el Proceso Unificado. El motivo principal es que siguen faltando herramientas de soporte y un lenguaje para la especificación del sistema multiagente que permitan trabajar de forma similar a como se trabaja en Rational Rose, TogetherJ o Paradigm+.

De entre las metodologías existentes, es posible seleccionar un conjunto utilizando tres criterios: utilización de diferentes vistas para la especificación del sistema, incorporar la idea de proceso de desarrollo, e integrar técnicas de ingeniería y teoría de agentes. De acuerdo con estos criterios, se han identificado siete metodologías. La primera es la ingeniería de vocales que fue una de las primeras en considerar diferentes aspectos, tales como agentes, entorno, interacciones y organización, en el desarrollo de los sistemas multiagente. La segunda es MAS-CommonKADS que, debido a su origen, se trata de una metodología orientada al desarrollo utilizando experiencia en sistemas expertos. A continuación el diseño basado en BDI que ha influido notablemente en la forma de concebir el control de los agentes. Después, se encuentran dos metodologías soportadas por herramientas: ZEUS y MaSE. Seguidamente, se estudia GAIA, de gran influencia, que comprende la definición de vistas en una metodología y trata de integrarse en un ciclo de vida de software tipo cascada. Por último, INGENIAS, creada a partir del trabajo de MESSAGE.

A momento de elegir un método se debe recordar que cada una se especializa en áreas concretas. Si se está acostumbrado a trabajar con sistemas basados en conocimiento con la metodología CommonKADS, lo lógico es que se elija MASCommonKADS. Si la experiencia del usuario está en el área de los objetos, la recomendación sería de MaSE. Si por el contrario está interesado en un enfoque más orientado a agentes, puede seleccionar ZEUS, INGENIAS, BDI o GAIA. Y si lo que se quiere es contar con un soporte de herramientas, la lista de metodologías válidas se reduce considerablemente: ZEUS, MaSE, INGENIAS. En los casos en que se requiera un proceso de desarrollo robusto, detallado y ensayado en desarrollos reales, la recomendación sería MASCommonKADS o INGENIAS. Si solo interesa una visión superficial del sistema, sin entrar en detalles de diseño e implementación, se recomendaría GAIA. Si se busca una metodología desarrollada a partir de modelos formales, entonces la elección sería BDI. Otra opción que tienen los desarrolladores es quedarse con lo que más les interese de cada metodología. Una recomendación sería utilizar la técnica de modelado de INGENIAS junto con su herramienta de especificación e implementarla con ZEUS.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Diciembre 14 de 2009

No hay comentarios: