Nuevos Paradigmas de Desarrollo de Software La Programación Orientada a Agentes Diana Carolina Ahogado Alvarez Ana María Reinemer Valencia Proyecto de Investigación I 1 Resumen Un agente es una entidad física o virtual, ubicada en un ambiente del cual tiene representación parcial, obtiene percepciones, y al cual responde tratando de cumplir con sus objetivos de la manera más eficiente. Los agentes se comportan de manera autónoma y proactiva, poseen habilidades y recursos propios, y además están en capacidad de ofrecer servicios. Al reunir un grupo de agentes para obtener un conjunto de interacciones de manera cooperativa, con el fin de lograr un objetivo global, se crea un Sistema Multiagentes. El sistema posee como componentes a los agentes, objetos pasivos sobre los cuales los agentes realizan operaciones para manipularlos por medio de operadores, y relaciones entre los objetos y agentes. Los agentes tienen una habilidad social que les permite comunicarse directamente con otros agentes. Esta habilidad hace que entre ellos existan relaciones de interacción y cooperación. El concepto de Organizaciones Multiagentes describe un conjunto de relaciones entre sus componentes, en donde los objetivos de la organización no se describen en términos individuales, sino en términos del todo al que pertenecen. Las organizaciones son recursivas, dado que pueden ser vistas en si mismas como componentes de otras organizaciones. El análisis que se puede realizar a las organizaciones, está dado en tres etapas: análisis funcional, análisis estructural y parámetros de concretización [FER99]. La programación concurrente es una forma de desarrollar programas con múltiples componentes que se ejecutan de manera paralela [HOL78], los cuales pueden acceder simultáneamente a los recursos de manera consistente y contando con la disponibilidad de los mismos. Por medio de la programación concurrente se generan entidades autónomas que encapsulan datos y comportamientos. Estas entidades son componentes pequeños entre los cuales se distribuye una tarea a realizar. Los Sistemas Multiagentes pueden verse como sistemas concurrentes que manejan tanto comunicación como sincronización entre ellos, y además encapsulan comportamiento. La característica que diferencia los dos tipos de sistemas es que las entidades que hacen parte de un Sistema Multiagentes, guardan una relación semántica con el problema que están modelando. La Programación Orientada a Agentes puede ser considerada un mejoramiento y una extensión de la Programación Orientada a Objetos. En la Programación Orientada a Objetos la entidad principal es el objeto, el cual es una combinación de atributos y comportamientos, que se caracteriza por tener un comportamiento pasivo y responder ante motivaciones externas. Los agentes en cambio, son activos y su comportamiento es autónomo, lo cual les permite tomar decisiones, además de poseer representaciones de estados mentales, compromisos, creencias y deseos. De esta manera no son directamente controlados desde el exterior. La Programación Orientada a Agentes está motivada por la necesidad que existe de modelar sistemas complejos y de manejar arquitecturas abiertas que cambien continuamente y evolucionen para acomodarse a nuevos componentes, logrando así satisfacer nuevos requerimientos. En la actualidad no existe una metodología estándar creada para ser utilizada en el desarrollo de sistemas basados en agentes. Se hará referencia al trabajo realizado en este campo, en el desarrollo del artículo, para lo cual será necesaria la introducción de los conceptos que hasta ahora se han descrito. 2 Introducción El propósito del presente artículo, es constituir un marco teórico a través del cual sustentar el objetivo de revisar y analizar algunas metodologías existentes, para el desarrollo de Programación Orientada a Agentes. El concepto de agentes constituye un nuevo y promisorio paradigma para la realización de una nueva generación de sistemas computacionales que asistan, den soporte activo, y en algunos casos hasta modelen ciertos aspectos del usuario. Por ejemplo, las aplicaciones basadas en tecnología de agentes pueden ser encontradas en la Web (e-commerce [IBM02], agentes de búsqueda [YOU02], etc.) y en programas que dan soporte a procesos de negocios donde el flujo de información es alto [JEN00]. La Programación Orientada a Agentes, ofrece una nueva perspectiva en el diseño de software para manejar la complejidad inherente de los sistemas construidos a partir de esta actividad. Dicha alternativa, brindada por la aproximación orientada a agentes, está basada en un conjunto de conceptos que se proveen tanto para una aproximación de diseño de software estructurada, como para una intuitiva. Incluye diferentes niveles de abstracción para analizar un sistema de software y una perspectiva de alto nivel para diseño de sistemas. Además, facilita el análisis, y más específicamente, la fase de diseño de la arquitectura en el proceso de desarrollo de software [BOE02]. La Ingeniería de Software Orientada a Agentes está siendo descrita como un nuevo paradigma para el área de investigación en Ingeniería de Software. Pero para que pueda convertirse en un nuevo paradigma aceptado por está industria, se deben desarrollar herramientas y metodologías robustas y fáciles de usar [TVE01]. Se divide en dos partes la estructura que se seguirá para presentar la información en el artículo. En la primera de ellas se relacionan los temas que tienen que ver con el concepto de agentes, Sistemas Multiagentes, Concurrencia y Programación Orientada a Agentes. En la segunda, se hace una referencia a los antecedentes encontrados acerca del tema de metodologías de desarrollo de sistemas basados en Programación Orientada a Agentes, e investigaciones realizadas en la Universidad Javeriana en el área de Sistemas Multiagentes. Por último, se sacan algunas conclusiones y se plantean problemáticas sobre los temas tratados, y su relación con la investigación acerca de metodologías de desarrollo orientado a agentes. 3 Agentes y Programación En la actualidad, se presenta la tendencia a crear y manejar sistemas inteligentes para obtener mejores resultados en la resolución de problemas complejos. Dichos sistemas pueden ser construidos utilizando como base a los Agentes y a los Sistemas Multiagentes, dadas sus características y comportamientos que brindan un desempeño más ágil y eficiente. El desarrollo de software que tiene en cuenta estas características y comportamientos, ha dado origen a un nuevo paradigma denominado Programación Orientada a Agentes, utilizado ampliamente en la actualidad en diferentes campos. Los problemas generados dentro del contexto de un sistema concurrente, como los bloqueos y la inanición, a causa de la lucha por los recursos, pueden verse relacionados con las situaciones de conflicto que ocurren entre los componentes de un Sistema Multiagentes. También, existe una similitud entre las interacciones y cooperación características de los Sistemas Multiagentes, y la forma en la que se establecen mecanismos para que los elementos de un sistema concurrente se organicen, con el fin de actuar correctamente controlando los problemas ya mencionados. Considerando esta correspondencia, se debe tener en cuenta la concurrencia como un aspecto a ser representado dentro de una metodología de desarrollo de software orientado a agentes. 3.1 Agentes Inteligentes Un agente es todo aquello que puede considerarse que percibe su ambiente mediante sensores y que responde o actúa en tal ambiente por medio de efectores [RUS96]. Un agente racional es una entidad física (robot) o virtual (software), capaz de actuar de manera correcta, lo cual quiere decir, que al obtener una serie de percepciones del entorno en el que se encuentra, y teniendo en cuenta sus recursos y conocimientos, el agente selecciona la acción más adecuada para cumplir sus objetivos buscando alcanzar el mejor desempeño [FER99]. Para poder determinar si la acción tomada fue la mejor, se debe poder medir el desempeño del agente. La medición del desempeño se aplica al como: es el criterio que sirve para definir qué tan exitoso ha sido un agente [RUS96]. Esta medición debe ser objetiva y establecida por los observadores del ambiente para mejores resultados; lo ideal es realizarla midiendo el desempeño a largo plazo. Basándonos en la definición de agente dada por Ferber [FER99], un agente es una entidad física o virtual que: Se encuentra en un ambiente que percibe y representa parcialmente y sobre el cual actúa autónoma y proactivamente. Cuenta con un conjunto de tendencias u objetivos las cuales trata de optimizar y las cuales tiende a satisfacer por medio de su conducta. Posee habilidades y está en capacidad de ofrecer servicios. Posee recursos propios. Es importante detenernos a explicar el concepto de autonomía. Un agente es autónomo cuando, basándose en sus percepciones realiza sus acciones. La conducta de un agente se basa tanto en su propia experiencia como en el conocimiento integrado que sirve para construir al agente para el ambiente específico en el cual va a operar. Un sistema será autónomo en la medida en que su conducta está definida por su propia experiencia [RUS96]. La autonomía de un agente hace que este pueda operar independientemente sin necesidad de la intervención humana [WOL00]. Sin embargo, una noción menos exigente de autonomía propone que un agente es autónomo si toma sus propias decisiones. Otra característica importante de los agentes es su proactividad. Este comportamiento está dirigido por las metas u objetivos del agente [WOL00]. Si un agente tiene un objetivo o intención, este debe tratar de lograrlo. Los agentes también deben ser reactivos ante cambios en el ambiente, además de ser deliberativos, es decir, que planean que hacer ante una percepción antes de ejecutar una acción sobre el ambiente en el que se encuentran. El comportamiento de un agente depende exclusivamente de la secuencia de sus percepciones en un momento dado [RUS96]. Estas percepciones del ambiente llegan al agente de forma limitada teniendo así una representación parcial del mismo. Al enfrentarse a esta limitación, deben aplicar su racionalidad para determinar la acción que van a llevar a cabo ante una percepción dada. Para lograrlo realizan un “mapeo”, el cual consiste en seleccionar la acción más apropiada que puede emprender como respuesta a determinadas secuencias de percepciones [RUS96]. En la construcción de un programa de agente se debe implantar el mapeo que le permite actuar. Para llevar a cabo esta construcción se pueden utilizar diferentes clases de lenguajes de programación: lenguajes de implementación como C, C++, Lisp, Prolog y Java; lenguajes de comunicación usados para representar interacciones entre los agentes; lenguajes para describir comportamientos y reglas del ambiente; lenguajes para representar conocimiento, usados para describir los modelos internos del mundo y permitirles “razonar” acerca del mismo; por último lenguajes para cuestiones de formalización y especificación. Así, el mapeo se puede realizar utilizando entre otros, reglas imperativas (Java) o declarativas (Prolog), métodos derivados de redes neuronales, o de forma más simple una tabla de correspondencia. Existen dos tipos de agentes: los cognitivos y los reactivos [FER99]. Los agentes cognitivos tienen una base de conocimientos que comprende toda la información y experiencia requeridos para llevar a cabo sus objetivos, y para el manejo de interacciones con otros agentes y con el ambiente; también se dice que son intencionales, es decir, tienen objetivos y planes explícitos que les permiten alcanzar sus metas. Los agentes reactivos no manejan una representación del mundo, más bien se basan estrictamente en cuanto perciben por medio de sus sensores, mientras que los cognitivos si tienen una representación interna del ambiente en que se encuentran. Otra característica importante que marca la diferencia entre los cognitivos y los reactivos, es que los cognitivos hacen una planeación deliberativa, por medio de la cual siguen una serie de pasos para conseguir el objetivo deseado. Los reactivos, en cambio, responden ante sus percepciones para actuar, sin seguir ningún plan previo. El ideal es desarrollar agentes que sigan un esquema híbrido, que les permita tener un modelo del mundo y a la vez tomen medidas reactivas, con el fin de no tener demoras en su tiempo de respuesta ante las percepciones. Los agentes se han utilizado para manejo de comercio electrónico, en teoría de direcciones, teoría de juegos y hasta en misiones espaciales recientes como la DeepSpace de la NASA en 1998 [WOL00]. 3.2 Sistemas Multiagentes (SMA) Un SMA es un conjunto organizado de agentes que interactúan de forma cooperativa para lograr de manera colectiva un objetivo global. Basándonos en la definición de SMA dada por Ferber [FER99], un SMA está compuesto por los siguientes elementos: Ambiente: Espacio en el que perciben y actúan los agentes, el cual generalmente tiene volumen (E). Objetos: Conjunto de entes pasivos, situados en E (O). Estos pueden ser afectados por los agentes. Agentes (A): Conjunto de entes activos. Los Agentes forman parte del conjunto de objetos (A c 0). Relaciones entre los objetos (agentes) (R): Conjunto de relaciones que vinculan a los objetos, y por lo tanto a los agentes entre si. Operaciones: Acciones para que los Agentes puedan percibir, producir, consumir, transformar y manipular objetos. Operadores: Representan la aplicación de las operaciones y la reacción del mundo en los intentos de modificación por parte de los agentes. Los agentes tienen una habilidad social que les permite comunicarse directamente con otros agentes. Esta habilidad hace que entre ellos existan relaciones de interacción y cooperación. Una situación de interacción es un conjunto de comportamientos que resultan del agrupamiento de agentes que deben actuar juntos para lograr sus objetivos [FER99]. Las interacciones se presentan en términos de: Compatibilidad de Objetivos: Cuando se pueden lograr los objetivos de ambos agentes, e incompatibles cuando lograr un objetivo implica no lograr el otro. Relación con los recursos disponibles: Se producen conflictos cuando dos o más agentes requieren el mismo recurso simultáneamente, lo cual se soluciona por medio de técnicas de coordinación y resolución de conflictos. Capacidades de los agentes en relación con las tareas: Existen tareas para las cuales los agentes necesitan ayuda de otros por que sus capacidades no son suficientes. Partiendo de dichos componentes, La interacción se puede clasificar en ocho tipos: Independencia, colaboración simple, obstrucción, colaboración coordinada, competencia individual, competencia colectiva y conflictos por recursos. La siguiente tabla muestra las relaciones entre los componentes y las diferentes situaciones de interacción. Objetivos (metas) Recursos Suficientes Compatibles Insuficientes Suficientes Incompatibles Habilidades Situación Categoría Suficientes Independencia Indiferencia Insuficientes Colaboración Simple Suficientes Obstrucción Insuficientes Colaboración Coordinada Suficientes Competencia Individual Insuficientes Competencia Colectiva Suficientes Conflictos Individuales por recursos Insuficientes Conflictos Colectivos por recursos Insuficientes Cooperación Antagonismo Una característica muy importante en los SMA es la cooperación que se presenta entre los agentes, la cual se da cuando al ingresar un nuevo agente al sistema el desempeño aumenta diferencialmente. Cuando en un SMA hay cooperación, se presentan ventajas cuantitativas y cualitativas, lo cual quiere decir que la tarea a ser realizada se completa en un menor tiempo y de una manera mejor. La cooperación tiene tres elementos que son la coordinación, la colaboración y la resolución de conflictos. La coordinación determina la existencia de sincronización entre los agentes para realizar sus tareas, de manera que funcionen correctamente. Es una forma de realizar una planeación distribuida, para que las acciones conjuntas de los agentes se realicen ordenadamente. La colaboración consiste en hacer una asignación de pequeñas tareas a cada uno de los agentes, con el fin de cumplir el objetivo global del sistema. Esta asignación se debe realizar teniendo en cuenta técnicas por medio de las cuales se distribuyan de manera adecuada las tareas. Gracias a esta asignación, se presentan interacciones entre los agentes, en las cuales cada uno desempeña un rol y se produce una combinación de las capacidades de los mismos para cumplir la tarea común del sistema. Una estrategia de colaboración debe considerar la población de agentes, el ambiente y la solución deseada [DUR01]. Los conflictos se producen como consecuencia de dos situaciones: el antagonismo de objetivos y la lucha por los recursos. Se propone como solución a estos conflictos, la negociación entre los agentes, el manejo de jerarquías, en las cuales uno de ellos es quien toma la decisión de lo que harán los demás, y el manejo de contratos (contract net) [FER99]. 3.3 Organizaciones de SMA Una organización de SMA se describe como un conjunto de relaciones entre componentes, en donde las características de la misma no se describen en términos individuales, sino en términos de la organización como un todo [FER99]. Las organizaciones son recursivas, dado que los componentes de la misma se pueden ver a la vez como organizaciones conformadas por componentes más pequeños. En el nivel más bajo se encuentran los componentes que no se pueden dividir en otros, y en el nivel más alto la organización que no forma parte de ninguna otra. Al hacer referencia a las organizaciones se debe hablar de dos términos en particular La estructura organizacional y la organización concreta. En la estructura organizacional se definen de forma general los tipos de agentes que existen en la organización y las clases de relaciones que se pueden dar entre ellos. En la organización concreta se da una instancia de una estructura organizacional por medio del establecimiento de agentes y relaciones concretas entre ellos [FER99]. El análisis que se puede realizar a las organizaciones, está dado en tres etapas: el análisis funcional, el análisis estructural y la concretización de parámetros [FER99]. Por medio del análisis funcional, se estudia a la organización desde las diferentes funciones que se pueden encontrar en la misma, que son la función representativa, la organizacional, la conativa, la de percepción, la de ejecución, la productiva u operativa y la vegetativa o preservativa. A su vez, se puede hablar de las dimensiones de una organización, que son la física, la social, la relacional, la ambiental y la personal. Cada una de las funciones se puede proyectar sobre las dimensiones mencionadas formando una matriz. Por su parte en el análisis estructural de la organización, se explica que son los agentes, las tareas que realizan y sus relaciones dependiendo del contexto del problema en el que se encuentran. Se tienen dos enfoques para resolver estas preguntas, el de objetos y el funcional, en los que las funciones pueden ser concebidas de manera horizontal y vertical. Existen varias taxonomías para el análisis estructural; estas son las relaciones abstractas (estáticas y dinámicas), los métodos de acoplamiento (fijo, variable y evolutivo), las estructuras de subordinación y toma de decisiones (jerárquica e igualitaria) y las maneras de establecer estructuras organizacionales (a priori y a posteriori). Por último, los parámetros de concretización explican la manera en la que se deben distribuir las habilidades entre los agentes, de manera que el trabajo sea realizado efectivamente, para resolver el problema de la aplicación específica. Hay dos variables que definen esta distribución, que son el grado de especialización, y el grado de redundancia. El rendimiento del sistema puede verse como función de estas dos variables. 3.4 Programación Concurrente La concurrencia se presenta cuando dos o más operaciones se pueden ejecutar en paralelo, es decir, al mismo tiempo. La programación concurrente se puede definir como la forma de desarrollar programas con múltiples componentes que se ejecutan de manera paralela [HOL78]. La concurrencia permite acceder simultáneamente a los recursos, asegurando la consistencia y disponibilidad de los mismos. La principal razón para realizar una programación concurrente es lograr mayor eficiencia al poder desarrollar las tareas en un menor tiempo aprovechando mejor los recursos disponibles. Cuando se trabaja concurrentemente, se presentan problemas de sincronización y comunicación, los cuales se pueden solucionar mediante el uso de mecanismos como los semáforos y los monitores, en el caso de la sincronización, y el manejo de mensajes para la comunicación. Dada la competencia que se presenta entre los procesos de un sistema concurrente para tener acceso a los recursos compartidos, se originan situaciones problemáticas, entre las cuales podría decirse que la más grave es el abrazo mortal. Para que un abrazo mortal se produzca se deben presentar cuatro situaciones necesarias al tiempo: la no apropiación, espera circular, exclusión mutua, y la condición de ocupar y esperar un recurso [TAU02]. Por no apropiación, se debe entender que si un proceso tiene asignado un recurso, dicho recurso no puede arrebatársele por ningún motivo, y estará disponible hasta que el proceso lo libere por voluntad propia. Una espera circular ocurre, cuando dos o más procesos forman una cadena de espera que los involucra a todos (A pide un recurso que B posee y al contrario). La exclusión mutua, consiste en que en cualquier momento solamente un proceso puede usar un recurso a la vez. Por último, la condición de ocupar y esperar un recurso, consiste en que un proceso pide un recurso y se le asigna; antes de liberarlo, pide otro recurso que otro proceso ya tiene asignado [TAU02]. Se define entonces, que un conjunto de procesos se encuentra en una situación de abrazo mortal, cuando cada uno de ellos espera un evento que sólo puede originar otro proceso del mismo conjunto [MAL02]. Otro problema que se encuentra presente en un sistema concurrente es la inanición. Una situación de inanición se crea cuando un proceso se mantiene en ejecución pero sin hacer progresos. La misma, se puede presentar debido a que en el sistema se tenga una política para decidir quién obtiene cual recurso y en que momento; aunque suena razonable, esta política podría hacer que ciertos procesos nunca tuvieran acceso a un servicio aún en caso de que no estuvieran bloqueados [TAN92]. Cuando se maneja concurrencia se puede seguir el modelo de CSP (Communicating Sequential Processes). Este modelo consiste en manejar un esquema de comunicación sincronizada entre procesos secuénciales sin utilizar memoria compartida. Esta basado en el protocolo Rendevouz, el cual maneja la sincronización para que se pueda dar la comunicación entre procesos. La sincronización implica que los procesos que se estén comunicando se pongan de acuerdo para empezar la comunicación. Esto genera bloqueos cuando se presentan procesos que no están listos para realizar la comunicación [SAF02B]. Los procesos en CSP describen un comportamiento de un objeto en términos de eventos. Estos objetos son componentes que encapsulan estructuras de datos y algoritmos para manipular los datos de manera privada. La ventaja que se puede encontrar en la programación concurrente, es que genera entidades autónomas que encapsulan datos y comportamientos. Estas entidades son componentes pequeños entre los cuales se distribuye una tarea a realizar. Relacionándola con nuestro contexto, los SMA pueden verse como sistemas concurrentes que manejan tanto comunicación como sincronización entre ellos, y además encapsulan comportamiento. 3.5 Programación Orientada a Agentes (POA) El término “Programación Orientada a Agentes”, POA, fue introducido por Shoham en 1993 [SHO93]. La POA se puede ver como un mejoramiento y una extensión de la Programación Orientada a Objetos (POO) la cual a su vez es un sucesor de la programación estructurada. En la POO la entidad principal es el objeto. Un objeto es sencillamente un tipo abstracto de dato al que se añaden importantes innovaciones en compartición de código y reutilización. Los mecanismos básicos de orientación a objetos son: objetos, mensajes y métodos, clases e instancias y herencia [JOY98]. Un objeto es una combinación de atributos (información, estructuras de datos) y sus correspondientes comportamientos. Los objetos son entidades pasivas que responden a un control externo, sólo reaccionan cuando son invocados por medio de uno de sus métodos. Los agentes en cambio, son activos y su comportamiento es autónomo, y de este modo no es directamente controlado desde el exterior. En otras palabras, los agentes toman decisiones. Los agentes son parecidos a los objetos pero manejan estructuras que les permiten tener representaciones de estados mentales, compromisos, creencias, y deseos. La POA está motivada por la necesidad que existe de manejar arquitecturas abiertas que cambien continuamente y evolucionen para acomodarse a nuevos componentes, logrando así satisfacer nuevos requerimientos. Un sistema desarrollado basándose en este paradigma, debe operar sobre diferentes plataformas y sin recompilacion, debe ser robusto, autónomo y proactivo [BRE01]. Ejemplos de aplicaciones de la POA se pueden ver en comercio electrónico, enterprise resource planning [WAG02], sistemas de control de tráfico aéreo y asistentes personales digitales, entre otros [WOL95]. La POA se encuentra muy relacionada con la Ingeniería de software orientada a Agentes (ISOA) dados los propósitos de esta. Los propósitos de la ISOA son crear metodologías y herramientas que permitan el desarrollo a bajo costo y el mantenimiento de software basado en agentes [TVE01]. La aproximación Orientada a agentes promete la habilidad de construir sistemas flexibles con comportamientos complejos y sofisticados al combinar componentes modulares (los agentes) [CAI01]. Un problema complejo es descompuesto en problemas más simples, cuyas interacciones son claramente establecidas. 4 Otros trabajos acerca POA y Sistemas Multiagentes 4.1 Trabajos previamente aproximación a POA realizados acerca de diseño con una Dada la importancia que ha adquirido en la actualidad el desarrollo de sistemas basados en POA, desde hace unos años se han venido desarrollando proyectos de investigación, cuyo objetivo es el de obtener metodologías de diseño para sistemas que se orientan con este enfoque. Desde el punto de vista de ingeniería de software, la generación de dichas metodologías de diseño tiene varias ventajas; entre las más significativas se deben nombrar la de conducir a arquitecturas de software más flexibles, robustas y abiertas, y además, la de obtener estructuras coherentes que abarquen todas las fases del desarrollo de software, desde el levantamiento de requerimientos hasta la implementación [MYL99]. Por otra parte, se tiene la perspectiva de los sistemas basados en agentes, donde se contempla que con la elaboración de una metodología, se ofrece una dimensión de diseño a través de la cual se decide la manera de fijar acuerdos entre cualidades como flexibilidad, robustez y rendimiento. Recientemente se ha reconocido que el uso de agentes de software no puede ganar una amplia aceptación en la industria, a menos que se relacione con los estándares que de hecho ya existen, desarrollo de software orientado a objetos, y sustente el ambiente de desarrollo a través de un ciclo de vida de sistemas completo. Poner la tecnología de agentes de manera exitosa en el mercado requiere de técnicas que reduzcan los riesgos inherentes a cualquier tecnología nueva; esto se puede lograr presentándola como una extensión de métodos conocidos y confiables, y proveyendo herramientas de ingeniería explicitas para el desarrollo de dichos métodos [BAU00]. A continuación se hace una reseña de cuatro de los trabajos que se han estado realizando por parte de diferentes organizaciones, con el objetivo de crear metodologías y herramientas para el desarrollo de sistemas orientados a agentes. Con el cumplimiento de este objetivo se busca lograr el cubrimiento de la necesidad del reconocimiento del paradigma de POA para su utilización en la industria de desarrollo de software. Además se quiere identificar las ventajas que se pueden obtener al realizar un desarrollo de sistemas utilizando este paradigma. 4.1.1 AUML Buscando la aceptación de la tecnología de agentes en la industria de desarrollo de software, se estableció una cooperación entre la Foundation of Intelligent Physical Agents (FIPA) [FIP02] y el Object Management Group (OMG) [OMG02]. Como resultado de la misma se propuso AGENT UML [BAU99] [ODE00], en donde la idea de lograr introducir el desarrollo de software orientado a agentes en la industria, se concibe en relacionar este paradigma a los estándares establecidos para desarrollo orientado a objetos, y en dar soporte a al ambiente de desarrollo orientado a agentes por medio de un ciclo de vida de sistemas completo. Esos son los dos requisitos manejados por este conjunto de idiomas y extensiones de UML, que ahora esta siendo aumentado para ser utilizado en un ambiente de desarrollo basado en agentes [ODE01]. UML es un lenguaje para especificar, visualizar, construir, y documentar los artefactos de un proceso intensivo de sistemas [ALH02]. Entiéndase por artefacto, un segmento de información que puede ser usado o producido por un proceso de desarrollo de software. Un artefacto puede ser un modelo, una descripción, o software [RAT02]. La misión de AUML, es desarrollar una semántica neutral y común, un meta-modelo y una sintaxis abstracta para las metodologías basadas en agentes. Se pretende que así como UML es el estándar para diseño en POO, AUML sea el estándar en POA [AUM02]. Para apalancar la aceptación de la tecnología moderna, AUML representa a los agentes como una extensión de los objetos activos, exhibiendo autonomía dinámica, la habilidad de iniciar una acción sin recibir invocación externa, y autonomía determinística, la habilidad de rehusar o modificar un requerimiento externo. Bajo esta aproximación, el enfoque que se tiene es el de crear agentes de grano fino [ODE00]. En el trabajo hasta ahora realizado para lograr el objetivo propuesto por AUML, se han desarrollado diferentes conceptos desde la perspectiva de construcción de sistemas de software. Para ello, se han usado los enfoques de interacciones entre agentes, diseño de sistemas orientados a agentes por medio de extensiones UML, y métodos de diseño de arquitecturas e Ingeniería de Software aplicados a los Sistemas Multiagentes. Una explicación detallada al respecto, se encuentra en los documentos de trabajo publicados en la página Web de la organización [AUM02]. A continuación, se hace una breve reseña sobre algunos de estos documentos, que al criterio de las autoras de este artículo son los más representativos de cada uno de los temas que se nombraron. La aproximación realizada por AUML para modelar las interacciones en un sistema de agentes, se ha hecho por medio de una representación en tres capas para protocolos de interacción entre agentes: Las plantillas y paquetes sirven para representar el protocolo como un todo. Los diagramas de secuencia y colaboración se usan para capturar las dinámicas entre agentes. Los diagramas de actividad y gráficos de estados se emplean para capturar las dinámicas Inter-agentes e Intra-agentes [ODE00]. Para obtener una explicación acerca de la elaboración y significado de estos diagramas, referirse a [RAT02]. Parunak [PAR00], hace de nuevo una ilustración de la aproximación de AUML, por medio del protocolo de tres capas para representar la interacción entre agentes, descrito anteriormente, concluyendo con la inclusión de una extensión basada en agentes a UML. El Unified Modeling Language (UML), puede ser extendido de manera natural para dar apoyo a los requerimientos distintivos de los Sistemas Multiagentes .Uno de estos requerimientos, está en incrementar el énfasis en la correspondencia entre los Sistemas Multiagentes y los Sistemas Sociales; relación que se presenta, dado que a partir de analogías sociológicas, se pueden obtener buenos modelos a ser utilizados en construcciones basadas en agentes, y a su vez, los agentes se están usando actualmente como una herramienta de modelado para estudiar Sistemas Sociales. La propuesta hecha por Parunak y Odell para representar estructuras sociales en UML, combina muchos modelos organizacionales existentes, teoría de la dependencia, protocolos de interacción, en una estructura de trabajo teórica general. Además, muestra como UML puede ser aplicado y extendido para capturar construcciones en ese marco de trabajo [PAR01]. Por último, el trabajo descrito por Hongsoon, introduce un método de diseño de arquitectura orientado a objetos para los Sistemas Multiagentes, usando UML extendido. La extensión de UML, está basada en principios de diseño que se derivan de características de los SMA y conceptos de arquitectura de software que ayudan a diseñar arquitecturas multiagentes reusables y bien estructuradas. La extensión permite usar el método orientado a agentes original, sin cambios sintácticos o semánticos, lo cual implica la preservación de la productividad Orientada a Agentes, por ejemplo, la disponibilidad de desarrolladores y herramientas, la utilización de experiencias y conocimientos anteriores, y la integración con otros sistemas [HON00]. 4.1.2 Tropos Tropos es una metodología que está siendo desarrollada por un grupo de investigación conformado por personas pertenecientes a diferentes universidades del mundo, y que tiene su principal centro en la Universidad de Trento en Italia. Esta metodología de desarrollo de sistemas, toma como base tecnologías de Sistemas Multiagentes para definir la fase de implementación; además, se propone cubrir todo el ciclo de desarrollo de vida y está centrada en el modelamiento temprano de requisitos. Los conceptos relacionados con esta actividad, son la base de la metodología y la estructura de trabajo para desarrollo que proponen. Tropos adopta el marco de trabajo planteado por Yu (i*) [YU02], el cual ofrece las nociones de actor, meta y dependencia de actores, utilizándolas para modelar los requerimientos y el diseño de la arquitectura. La metodología propuesta por Tropos es un complemento para las propuestas de plataformas para POA [TRO02]. Una de las principales características de esta metodología se encuentra en el manejo de requerimientos, dado que los actores y las metas son usadas como fundamentos para el modelamiento y el análisis en todas las fases del desarrollo. De esta manera, se manejan cinco fases para el desarrollo de software, las cuales son [KOL99]: Requerimientos tempranos: En esta fase se entiende el problema mediante el estudio de una organización existente. El resultado de esta fase es un modelo organizacional que incluye a los actores relevantes y sus respectivas dependencias. Requerimientos tardíos: En esta fase el futuro sistema se describe en su entorno operacional junto con las funciones relevantes y cualidades. Esta descripción modela el sistema como un conjunto de actores que así mismo tienen dependencias con actores de su entorno. Estas dependencias definen los requerimientos funcionales y no-funcionales del sistema. Diseño de arquitectura: En esta fase se define la arquitectura global del sistema en términos de subsistemas interconectados por medio de flujos de datos y de control. En este marco de trabajo, los subsistemas son representados como actores y flujo de datos o control y las interconexiones son representadas como dependencias del sistema o del actor. Diseño detallado: En esta fase se define cada componente de la arquitectura con mayor detalle en cuanto a entradas, salidas, controles y otra información relevante. En este marco de trabajo se adoptan algunos elementos de AUML para complementar a i*. Implementación: Esta es la fase en la cual se desarrolla la implementación del sistema de manera consistente con el diseño detallado. Se utiliza una plataforma para programación de agentes basada en la arquitectura BDI (Beliefs-Desires-Intentions) [WOL00]. 4.2 Trabajos previamente realizados acerca de SMA y Concurrencia en la Universidad Javeriana Actualmente, en la PUJ se están llevando a cabo diferentes investigaciones en el área de Sistemas Inteligentes por parte del Departamento de Ingeniería de Sistemas. Los mismos, están a cargo de los estudiantes que pertenecen al área temática SIVEC, y abarcan específicamente los campos de SMA y Concurrencia. El proyecto de investigación que está siendo llevado a cabo por Ardila y Rodríguez, tiene como objetivo estudiar y analizar la programación concurrente bajo diferentes configuraciones utilizando como herramienta de análisis la construcción de un simulador con arquitectura de un SMA [ARD02]. Por su parte, el trabajo adelantado por Safa propone la construcción de una herramienta concurrente útil para la supervisión de procesos industriales; la programación concurrente aplicada en este ámbito le proporciona a la aplicación a realizar, las características de escalabilidad y flexibilidad prestadas por éste enfoque. Así, se esperan suplir las falencias que tienen los SCADA desarrollados con un enfoque clásico, y además analizar y validar las ventajas del diseño y programación concurrente [SAF02A]. Para terminar, Pérez y Farías han llevado a cabo un trabajo de investigación cuyo objetivo es generar una estrategia de cooperación para SMA, y permitir que los agentes que participen en dicha estrategia tengan la posibilidad de almacenar el conocimiento que adquieran, para poderlo utilizar posteriormente. La metodología que se desarrolle debe ser validada en un contexto de simulación, que en este caso se basa en la comunidad Robocup [FAR02]. 5 Conclusiones La POA ha adquirido una gran importancia como paradigma prometedor, dadas las ventajas que ofrece a los desarrolladores de software para modelar sistemas complejos, representar el mundo real de forma más fácil y crear arquitecturas abiertas que se acomoden a nuevos requerimientos. Para que la POA sea aceptada por completo como una nueva forma de programación en la industria del software, es necesario que esté respaldada por métodos y herramientas para su desarrollo, de la misma manera que ocurre con la Programación Orientada a Objetos. Actualmente no existe una metodología de desarrollo para Programación Orientada a Agentes que sea aceptada de manera oficial en el mundo. Varios grupos de Investigación se encuentran trabajando en este esfuerzo, en el cual se han realizado adelantos teniendo en cuenta diferentes enfoques como el centrado en la fase de requerimientos de Tropos, o la extensión de UML para agentes realizada por AUML. En el diseño de metodologías para desarrollo de sistemas basados en agentes, es necesario tener en cuenta todas las características inherentes a los Agentes y Sistemas Multiagentes, lo cual permite aprovechar al máximo las ventajas que puede brindar el comportamiento, interacciones y relaciones que los caracterizan. El aspecto de los Sistemas Multiagentes como estructuras organizacionales y como Organizaciones Sociales, es útil para modelar diferentes aspectos del mundo real; en las metodologías en desarrollo se están creando maneras de representarlos y modelarlos para un sistema basado en la POA. La forma de interactuar de manera concurrente que poseen los agentes en un Sistema Multiagentes, crea una relación entre la POA y la programación concurrente, campo en el cual debe ser ampliamente utilizada, para aprovechar sus características y la facilidad que brinda para representar los componentes concurrentes de un sistema. Todas las necesidades que se tienen que manejar para obtener un sistema concurrente, como lo son los problemas de bloqueo y la comunicación entre sus integrantes, son aspectos a ser tenidos en cuenta para la creación de metodologías de desarrollo de sistemas basados en agentes. Al manejar un enfoque orientado a agentes se adquieren todas las ventajas que estos tienen sobre los objetos. Cabe anotar que no siempre se puede modelar un sistema en términos de agentes. En ocasiones es necesario utilizar objetos para que sean invocados y controlados por los agentes, con el fin de cumplir con su objetivo. El paradigma de la POA puede funcionar como una extensión de la POO, teniendo en cuenta ciertas limitaciones que se presentan en esta última y que requieren cambios para el manejo de una metodología de desarrollo. Un aspecto a tener en cuenta por ejemplo, está en el caso de la herencia, pues dadas las características de los agentes, no tiene mucho sentido manejarla tal como se maneja en los objetos. Podría existir la posibilidad de un manejo de herencia entre agentes llegando a pensar en relacionarla con los algoritmos genéticos. 6 Bibliografía [RUS96] Rusell N., “Inteligencia Artificial: Un enfoque moderno”, Prentice Hall, 1996. [FER99] Ferber J., "Multiagent Systems: An Introduction to Distributed Artificial Intelligence". Addison – Wesley. 1999. [HOL78] Holt R.C., “Structured Concurrent Programming with Operating Systems Aplications”. Addison-Wesley Publishing Company. [BOE02] De Boer F, ”Methodology for Agent-Oriented Software Design” – Última consulta 23 de Abril de 2002. [SHO93] http://www.csc.liv.ac.uk/~mjw/pubs/ker95/bibliography3_8.html, “Shoham – agent oriented program”. [email protected] – Última consulta 23 de Abril de 2002. [TRO02] http://www.science.unitn.it/tropos/, “Tropos – Requirement-Driven Development for Agent Software”. Universidad de Trento – Última consulta 23 de Abril de 2002. [AUM02] http://www.auml.org, “AUML Web Site”, AUML - Última consulta 23 de Abril de 2002. [WOL00] Woldridge M., “Reasoning About Rational Agents”, MIT press 2000. [DUR01] Durfee E.H., “Scaling up Agent Coordination Strategies”, Computer Magazine July 2001 [BRE01] Bresciani P., Perini A., Giorgini P., Mylopoulos J., “A Knowledge Level Software Engeneering Methodology for Agent Oriented Programming” - Última consulta Mayo 4 de 2002. [WOL95] Woldridge M. y Jennings N.R., “Intelligent Agents: Theory and practice”. Knowledge engineering Review, 10(2), 1995. [TVE01] Tveit A., “A Survey of Agent-Oriented Software Engineering”, Norwegian University of Science and Technology, Mayo 2001. [CAI01] Caire G., Leal F., Evans R., “Agent Oriented Analysis using MESSAGE/UML”. [MYL99] Mylopoulos J., “Requirements - Driven Software Development”, University of Toronto, Octubre 1999. [BAU99] Bauer B., “Extending UML for the Specification of Interaction Protocols”. submission for the 6th Call for Proposal of FIPA and revised version part of FIPA 99,1999. [BAU00] Bauer B. y Odell J., “Agent UML: A Formalism for Specifying Multiagent Interaction”. FIPA, OMG. [ODE00] Odell J., Parunak H.V.D., Bauer B., “Representing Agent Interaction Protocols in UML”, submitted for Autonomous Agents 2000, 2000. [TAN92] Tanenbaum A., “Sistemas Operativos Modernos”, Prentice Hall, 1992. [TAU02] http://www.tau.org.ar/base/lara.pue.udlap.mx/sistoper/capitulo5.html, Nodo TAU Asociación Civil – Última consulta 16 de Mayo de 2002 [MAL02] http://polaris.lcc.uma.es/~aguayo/docs/so2/pdf/soii_a2.pdf, Universidad de Malaga – Última consulta 16 de Mayo de 2002 [ODE01] Bauer B., “UML Class Diagrams Revisited in the Context of Agent Based Systems”, Siemens AG, Corporate Tecnology, Information and Comunications 2001. [PAR01] Parunak H.V.D., Odell J., “Representing Social Structures in UML”, ERIM, James Odell Associates, 2001. [ARD02] http://pegasus.javeriana.edu.co/~concurre/ “Concurrencia en Sistemas Multiagente: Implementación de un Simulador de Tráfico Urbano”, German Ardila, Daniel Rodríguez, Pontificia Universidad Javeriana - Última consulta Mayo 17 de 2002 [SAF02A] http://pegasus.javeriana.edu.co/~scada/ “Diseño e Implementación de un SCADA con una Aproximación Concurrente”, Mahgub Safa, Pontificia Universidad Javeriana - Última consulta Mayo 17 de 2002 [FAR02] http://pegasus.javeriana.edu.co/~robocup/ “Cooperación en sistemas multiagentes, un caso de estudio Robocup”, Damián Farias, Adith Pérez, Pontificia Universidad Javeriana - Última consulta Mayo 17 de 2002 [HON00] Hongsoon Y., Kyehyun C., Jongwoo K. y Sunjoo P., “Architecture–Centric Object–Oriented Desing Method for Multi-Agents Systems”, ICMAS [PAR00] http://www.auml.org/auml/working/Odell-W001.pdf, Odell J., Parunak V. y Bauer B., Trabajo en AAAI – Última Consulta 18 de Mayo de 2002 [ALH02] http://www.cs.ucsb.edu/~kshen/papers/ipdps2002.pdf, Alhir S., “What is the Unified Modeling Languaje (UML)?“, O´Reilly & Associates – Última consulta 19 de Mayo de 2002 [RAT02] http://www.rational.com/uml, Rational web site – Última consulta 19 de Mayo de 2002 [SAF02B] Safa M, “Concurrencia Modelamiento y Herramientas”, Pontificia Universidad Javeriana, 2002 [JOY98] Joyanes L., “Programación Orientada a Objetos”, 2° Edición Mc Graw Hill, 1998 [YU02] http://www.cs.toronto.edu/km/istar/, “An agent-oriented modelling framework”, Yu Eric – Última consulta 2 de Junio de 2002 [YOU02] http://www.acm.org/crossroads/xrds5-4/webhunting.html, “Web Hunting: Design of a Simple Intelligent Web Search Agent”, Youngblood G. - Última consulta Junio 2 de 2002 [IBM02] http://www.research.ibm.com/rules/home.html, “Business Rules for Electronic Commerce: Project at IBM”, Watson Research T.J., Última consulta Junio 2 de 2002 [JEN00] "Autonomous Agents for Business Process Management", Jennings N.R., Faratin P., Norman T. J., O'Brien P. y Odgers B. (2000) "Autonomous Agents for Business Process Management" Int. Journal of Applied Artificial Intelligence [FIP02] http://www.fipa.org Ultima consulta Junio 4 de 2002 [OMG02] http://www.omg.org Ultima consulta Junio 4 de 2002 [WAG02] http://www.inf.fu-berlin.de/~wagnerg/ “Agent-Oriented Analysis and Design of Organizational Information Systems”, Proc. of Fourth IEEE International Baltic Workshop on Databases and Information Systems, 1 Mayo 2000, Vilnius (Lithuania).- Última consulta 4 de Junio de 2002.