3.5 Programación Orientada a Agentes (POA)

Anuncio
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.
Descargar