jueves, 28 de febrero de 2013

Ingeniería del Software basada en Agentes

Autor:
PhD. Guillermo Choque Aspiazu
http://www.eldiario.net/
Publicado en:
Mayo 12 de 2008

En los primeros años del presente siglo, la humanidad se encuentra sufriendo cambios o transformaciones contextuales, que además de ser evolutivas, también representan saltos y rompimiento de paradigmas, que en la mayoría de los casos conllevan al desmonte y sustitución abrupta de viejos paradigmas. La transformación mas significativa la constituye la tecnología, y especialmente la informática; dentro de esta ultima se encuentra el software, que desempeña un papel importante en las organizaciones y mas aún en la sociedad, donde actualmente se está viviendo la revolución de la información. La ingeniería del software, en este contexto, ha caminado pareja al desarrollo de mecanismos de abstracción cada vez más potentes y de más alto nivel. La abstracción modular, tipos abstractos de datos, objetos y, de manera mas reciente, componentes y agentes que son claros ejemplos de este tipo de abstracciones.


Históricamente han ido apareciendo diferentes modelos de programación de forma que cada modelo nuevo ha representado un mayor grado de abstracción que el anterior. Dicha evolución puede resumirse de forma aproximada en los siguientes hitos: (1) La programación orientada a la maquina con los primeros lenguajes de maquina basados en el algebra de Boole. (2) La programación estructurada la que, a través del teorema de la estructura, plantea que cualquier programa puede crearse siguiendo tres estructuras básicas: la secuencial, la decisional y la iterativa. (3) La programación modular, plantea considerar como elemento de diseño el módulo como unidad mínima de análisis. (4) La programación orientada a objetos que considera el mundo como un medio donde predominan los objetos y el paso de mensajes. (5) La programación basada en componentes, que recoge elementos fundamentales agrupados en los componentes para propiciar el diseño y desarrollo orientado a componentes. (6) Programación orientada a agentes, donde se considera que los sistemas multiagente constituyen el núcleo orientador de los procesos de solución de problemas.

Un agente es cualquier proceso computacional dirigido por el objetivo o capaz de interaccionar con su entorno de forma flexible y robusta En este sentido, un agente es un sistema informático, situado en algún entorno, que percibe su medio ambiente y a partir de tales percepciones determina y ejecuta acciones de forma autónoma y flexible, estas acciones le permitan alcanzar sus objetivos, siendo capaz de modificar su entorno. Los agentes pueden ser considerados como sucesores del paradigma orientado a objetos, pero con algunas diferencias significativas como: (1) Los objetos no tienen control sobre su estado interno, los agentes si. (2) Los objetos no tienen iniciativa, los agentes si. (3) Los agentes poseen actitud y el sentido de la orientación, los objetos no. (4) Los agentes son objetos proactivos. (5) Los agentes se pueden comunicar con los humanos, como si fuesen humanos. (6) Un agente puede cuestionar y aprender.

La ingeniería del software orientada hacia agentes es una disciplina reciente que aplica técnicas de ingeniería del software e inteligencia artificial, busca la construcción del anhelado software que piensa o el software con inteligencia. Este paradigma ha tomando cada día más y más importancia ya que posee unas arquitecturas y características propias que no encajan fácilmente en ninguno de los paradigmas de ingeniería del software clásicos. La ingeniería del software orientada a agentes es una disciplina que proviene de la fusión entre la inteligencia artificial, la tecnología de objetos y de componentes, sistemas distribuidos, sociedad y la ciencia del comportamiento entre otros. De la tecnología de objetos rescata: mensajes entre objetos, encapsulamiento, clases y herencia. De los sistemas distribuidos considera: la distribución de datos y procesos, conectividad, redes, protocolos, interoperabilidad e Internet. De la sociedad y la ciencia del comportamiento: interacciones entre humanos, roles, conductismo, cognitivismo. De la inteligencia artificial: representación del conocimiento, razonamiento, aprendizaje y el enfoque de agente inteligentes.

La ingeniería del software basada en agentes ha surgido en respuesta a la demanda de los requerimientos de los sistemas multiagente. Estos sistemas son esencialmente distribuidos y están compuestos por un conjunto de agentes del software que interactúan a fin de satisfacer sus objetivos. Si bien los sistemas multiagente son aplicados a una diversidad enorme de sistemas de computadoras comparten una serie de características, entre las que se mencionan: (1) la información es distribuida, (2) las entidades tienen conocimiento parcial, (3) la computación es asincrónica y (4) no existe un sistema de control central. Los agentes del software son entidades computacionales autónomas que están dirigidas por objetivos e insertas en un entorno que pueden percibir y actuar sobre él. Autonomía significa que las acciones ejecutadas por el agente no son explícitamente iniciadas por el usuario u otro agente; además de que el agente persiste en el tiempo, es decir que no termina su ejecución cuando ha finalizado una tarea, sino que continúa observando su entorno, decidiendo qué acción ejecutar en el próximo instante de tiempo.

Estas y otras características de los sistemas multiagente hacen que su ciclo de vida sea una tarea poco trivial. Por ello es deseable contar con herramientas que asistan en las etapas involucradas en la construcción de un sistema multiagente. Sin embargo, no existe al momento tal herramienta, más allá del gran esfuerzo en investigación dirigido en este sentido. Una alternativa propuesta desde hace tiempo en la ingeniería del software consiste en reutilizar los componentes previamente construidos. Entre las técnicas de reuso empleadas en el paradigma orientado a objetos están la reutilización de librerías de clases, los patrones de diseño y los frameworks. Éstos últimos son el esqueleto de un conjunto de aplicaciones que pertenecen a un dominio concreto.

Hay que notar que los agentes no son necesariamente inteligentes. Existen como en todo el resto del dominio de la inteligencia artificial, dos enfoques para construir sistemas multiagente: (1) El enfoque formal o clásico, que consiste en dotar de los agentes de la mayor inteligencia posible utilizando descripciones formales del problema a resolver y de hacer reposar el funcionamiento del sistema en tales capacidades cognitivas. Usualmente la inteligencia es definida utilizando un sistema formal para la descripción, raciocinio, inferencia de nuevo conocimiento y planificación de acciones a realizar en el medio ambiente. (2) El enfoque constructivista, que persigue la idea de brindarle inteligencia al conjunto de todos los agentes, para que a través de mecanismos ingeniosamente elaborados de interacción, el sistema mismo genere comportamiento inteligente que no necesariamente estaba planeado desde un principio o definido dentro de los agentes mismos. Este tipo de conducta es habitualmente llamado comportamiento emergente.

Como casi todo enfoque informático para la solución de problemas, los sistemas multiagente proponen ayudas metodológicas de ingeniería de software, en este caso metodologías de ingeniería del software orientada a agentes y las notaciones respectivas, es decir, artefactos de desarrollo que son específicamente concebidos para crear sistemas basados en agentes. Las metodologías y notaciones de ingeniería de software orientada a agentes, son: (1) Vocales de Yves Demazeau, es una de las primeras propuestas en el área, y considera la concepción de sistemas multiagente desde varios puntos de vista, correspondientes a las vocales: Agente, Entorno, Interacciones, y Organización. (2) GAIA de Michael Wooldridge y Nick Jennings de la Universidad de Southampton, propone cómo realizar un análisis basado en roles del sistema multiagente. (3) MASE de Scott A. Deloach, propone agentes como extensiones de objetos y proporciona la herramienta AgentTool para análisis, diseño e implementación. (4) AgentUML de James Odell, propone una notación, extendiendo el Lenguaje de Modelado unificado, para especificar protocolos de comunicación entre agentes. (5) MADKiT es una herramienta de desarrollo, propuesta por Jacques Ferber, basada en el paradigma Agente-Rol-Organización de la metodología Aalaadin. (6) ADELFE del grupo IRIT de la Universidad de Toulouse, trata especialmente los temas de cooperación entre agentes. (7) INGENIAS del grupo GRASIA de la UCM, extiende la metodología MESSAGE y proporciona un conjunto de herramientas para modelar y generar código de sistemas multiagente. (8) Mas-CommonKADS de Carlos Iglesias en la UPM extiende la metodología CommonKADS, para sistemas expertos, a agentes, utilizando estructuración orientada a objetos y lenguajes de especificación de protocolos.

Para conocer más acerca del Doctor Choque y sus publicaciones, haz clic en el siguiente vínculo: