desarrollo de un sistema de selección de componentes de

Anuncio
UNIVERSIDAD DE LOS ANDES
FACULTAD DE INGENIERÍA
ESCUELA DE SISTEMAS
DEPARTAMENTO DE COMPUTACIÓN
MÉRIDA ESTADO MÉRIDA
DESARROLLO DE UN SISTEMA DE SELECCIÓN DE COMPONENTES DE
SOFTWARE UTILIZANDO INTELIGENCIA ARTIFICIAL COLECTIVA
Proyecto de grado presentado ante la Ilustre Universidad de Los Andes como requisito final
para optar al título de Ingeniero de Sistemas
Autor: Juan J. Bastidas B.
Tutor: Prof. Jose Aguilar
Julio, 2006
i
Dedicado a Dios omnipresente,
a la memoria de mi papá, y a
toda mi familia.............
ii
AGRADECIMIENTOS
Mis mas sinceros agradecimientos, tanto al profesor Jose Aguilar como a la
Ingeniero Blanca por toda la colaboración prestada, y por haber sido mis guías en el
desarrollo de este trabajo. Igualmente a todo mi grupo de amigos, compañeros que de una u
otra manera contribuyeron en la consecución de este objetivo.
iii
DESARROLLO DE UN SISTEMA DE SELECCIÓN DE COMPONENTES DE
SOFTWARE UTILIZANDO INTELIGENCIA ARTIFICIAL COLECTIVA
RESUMEN
En este trabajo se propone un sistema de selección de componentes de software
basado en conceptos de Inteligencia Artificial Colectiva (IAC). La dinámica dependerá del
numero de agentes inteligentes en el sistema, encargados de realizar la búsqueda, en
diferentes repositorios de componentes en la Internet, y selección de los componentes
requeridos. Los componentes tienen asociado un archivo XML, el cual contiene las
características más relevantes del mismo y a su vez almacena la marca relacionada con su
rendimiento (traza de feromona). La traza de feromona es un concepto asociado a la teoría
de IAC, que ha sido la principal inspiración de este trabajo. La IAC se basa en la capacidad
que tienen algunos insectos para trabajar individualmente con el fin de alcanzar metas
colectivas, cada insecto es visto como un agente. Este modelo propuesto puede ser utilizado
no solo para la selección de componentes de software, sino también para la selección de
servicios, recursos etc., pues es lo suficientemente general para ser replicado según
requerimientos particulares.
Palabras claves:
Inteligencia Artificial Colectiva, repositorio de componentes, componentes de software,
agentes inteligentes, Ingeniería de Componentes.
iv
INDICE GENERAL
Pág.
CAPITULO I: DEFINICIÓN DEL PROBLEMA......................................................
1
1.1. Introducción.........................................................................................................
1.2. Planteamiento del problema.................................................................................
1.3. Justificación de la investigación...........................................................................
1.4. Antecedentes de la investigación.........................................................................
1.5. Objetivos de la investigación...............................................................................
1.5.1. Objetivo General........................................................................................
1.5.2. Objetivos específicos.................................................................................
1
2
3
4
9
9
9
CAPITULO II: MARCO TEORICO..........................................................................
11
2.1. Inteligencia Artificial Colectiva...........................................................................
2.1.1. Formulas básicas del modelo.....................................................................
2.2. Ingeniería de Software Basada en Componentes.................................................
2.2.1. Componente de software...........................................................................
2.2.2. Arquitectura basada en componente..........................................................
2.2.3. Características mas relevantes de los componentes de software...............
2.2.4. Modelos de componentes..........................................................................
11
13
14
14
15
16
17
CAPITULO III: DISEÑO DEL ALGORITMO.........................................................
20
3.1. Generalidades.......................................................................................................
3.2. Atributos a considerar en la caracterización de los componentes de software....
3.3. Modelo de selección.............................................................................................
3.4. Macro Algoritmo..................................................................................................
20
21
22
26
CAPITULO IV: CONSTRUCCIÓN DEL SISTEMA...............................................
27
4.1. Modelado Funcional del Sistema.........................................................................
4.1.1. Diagramas de casos de uso........................................................................
4.1.2. Diagramas de actividades..........................................................................
4.2. El sistema programado.........................................................................................
4.3. Descripción de la interfaz gráfica........................................................................
27
27
32
36
39
CAPITULO V: PRUEBAS DEL SISTEMA...............................................................
43
5.1. Criterios de selección de componentes más usados.............................................
5.2. Descripción de los experimentos.........................................................................
5.2.1. Experimento 1............................................................................................
5.2.2. Experimento 2............................................................................................
5.3. Análisis de los resultados.....................................................................................
5.3.1. Experimento 1............................................................................................
43
44
45
46
47
48
v
5.3.2. Experimento 2............................................................................................ 49
CAPITULO VI: CONCLUSIONES Y RECOMENDACIONES.............................. 51
BIBLIOGRAFÍA............................................................................................................ 53
APÉNDICE. TABLAS DE RESULTADOS................................................................
57
vi
INDICE DE TABLAS
Pág.
Tabla 1. Descripción del caso de uso Solicitar Componentes.........................................
28
Tabla 2. Descripción de la extensión Descripción..........................................................
28
Tabla 3. Descripción del caso de uso Seleccionar Componentes....................................
29
Tabla 4. Descripción de la extensión Visitar Repositorios..............................................
30
Tabla 5. Descripción de la extensión Calcular Correspondencia...................................
30
Tabla 6. Descripción de la extensión Calcular Probabilidad de Selección....................
30
Tabla 7. Descripción del caso de uso Actualizar Feromona...........................................
31
Tabla 8. Descripción de la extensión Calcular Tasa de Evaporación de la Traza.........
32
Tabla 9. Descripción de la extensión Depositar Feromona............................................
32
Tabla 10. Descripción de los componentes requeridos.................................................... 45
Tabla 11. Orden de ejecución del sistema.......................................................................
45
Tabla 12. Descripción de los componentes requeridos.................................................... 46
Tabla 13. Orden de ejecución del sistema.......................................................................
47
Tabla 14. Primera corrida................................................................................................
58
Tabla 15. Segunda corrida...............................................................................................
58
Tabla 16. Tercera corrida................................................................................................. 58
Tabla 17. Cuarta corrida..................................................................................................
59
Tabla 18. Primera corrida................................................................................................
62
Tabla 19. Segunda corrida...............................................................................................
63
Tabla 20. Tercera corrida................................................................................................. 64
Tabla 21. Continuación tercera corrida............................................................................ 66
vii
INDICE DE FIGURAS
Pág.
Figura 2.1. Esquema de un Componente y su contenedor...............................................
15
Figura 2.2. Arquitectura del software de una aplicación basada en componentes..........
15
Figura 3.1. Archivo de Perfil del Componente................................................................
21
Figura 3.2. Modelo de componente.................................................................................
22
Figura 3.3. Modelo de Selección. Cada agente busca el grupo de componentes a
utilizar..............................................................................................................................
23
Figura 4.1. Diagrama que muestra el caso de uso solicitar componentes.......................
28
Figura 4.2. Diagrama que muestra el caso de uso Seleccionar Componentes.................
29
Figura 4.3. Diagrama que muestra el caso de uso Actualizar Feromona......................... 31
Figura 4.4. Actividades generadas por caso de uso: Solicitar Componentes..................
33
Figura 4.5. Actividades generadas por caso de uso: Seleccionar Componentes..........
34
Figura 4.6. Actividades generadas por caso de uso: Actualizar Feromona..................
35
Figura 4.7. Diagrama de Componentes...........................................................................
36
Figura 4.8. Diagrama de clases del diseño....................................................................... 38
Figura 4.9. Interfaz con el Usuario..................................................................................
40
Figura 4.10. Interfaz con el Usuario. Descripción de los Componentes.........................
40
Figura 4.11. Agregar Perfil Deseado...............................................................................
41
Figura 4.12. Dialogo informativo. El perfil deseado del componente 2 solicitado, no
ha sido especificado.........................................................................................................
41
Figura 4.13. Ventana que muestra el resultado de la búsqueda y selección del grupo
de componentes de software hecha por cada agente........................................................ 42
viii
CAPITULO Ι
DEFINICIÓN DEL PROBLEMA
1.1.
Introducción
La creciente necesidad de realizar sistemas de software complejos en cortos
periodos de tiempo, a la vez que con menores esfuerzos tanto humanos como económicos,
está favoreciendo el avance de lo que se conoce como Desarrollo de Software Basado en
Componentes (DSBC). Esta disciplina se apoya en componentes de software ya
desarrollados, que son combinados adecuadamente para satisfacer los requisitos del
sistema. Dicha disciplina cuenta actualmente con un creciente interés, tanto desde el punto
de vista académico como desde la industria, en donde la existencia de mecanismos y
herramientas de desarrollo basadas en componentes es cada día mayor [3].
Construir una aplicación se convierte en la búsqueda y ensamblaje de piezas
prefabricadas [3]. Bajo este planteamiento, cobran especial interés “los procesos de
búsqueda y selección de los componentes” siendo dichos procesos el objeto central de
nuestra tesis, en la cual se propone un algoritmo de selección de componentes inspirado en
conceptos de Inteligencia Artificial Colectiva (IAC).
El trabajo esta estructurado en 5 capítulos:
En este capitulo se hace el planteamiento formal del problema y se presenta los
antecedentes de la investigación.
El Capitulo ΙΙ contiene el marco teórico de la investigación donde se detallan
los fundamentos de las técnicas usadas para el desarrollo del Sistema de
Selección de Componentes de Software.
1
En el capitulo ΙΙΙ se hace una descripción precisa de las etapas del proceso de
Selección de Componentes de Software.
El capitulo IV esta enfocado a explicar la funcionalidad y el modo de operación
del sistema.
El capitulo V esta dedicado a la realización de experimentos para comprobar la
funcionalidad y efectividad, en cuanto a la selección de componentes por medio
del sistema desarrollado.
El capitulo VI, en función de los resultados y el conocimiento adquirido en la
realización del trabajo, se presenta las conclusiones y se dan algunas
recomendaciones.
1.2.
Planteamiento del problema
Hoy en día podemos decir que existe un consenso al considerar el “desarrollo
basado en componentes” como un avance significativo hacia la construcción de sistemas
mediante el ensamblado de componentes prefabricados. El DSBC trata de sentar las bases
para el diseño y desarrollo de aplicaciones distribuidas basadas en componentes software
reutilizables.
En ese paradigma pueden identificarse varios problemas para la construcción de
aplicaciones utilizando componentes [3]:
El problema de búsqueda de componentes que satisfagan los requisitos
impuestos, tanto por el cliente como por la arquitectura de la aplicación.
La evaluación de los componentes candidatos aborda el problema de
seleccionar los más idóneos.
El problema de la adaptación y/o extensión de los componentes seleccionados
para que se ajusten a los requisitos anteriores.
Y por último, el problema de la integración, configuración e interconexión de
dichos componentes para construir la aplicación final.
2
Es importante señalar que un factor imprescindible en todas esas tareas es la
documentación de los componentes, pues es preciso contar con especificaciones completas,
concisas y precisas de los componentes para poder llevar a cabo dichas tareas [3]. La
mayoría de las propuestas existentes para documentar componentes se basan en el uso de
interfaces, las cuales proporcionan un mecanismo para describir la funcionalidad de los
componentes. Sin embargo, los lenguajes de descripción de interfaces (IDLs) existentes
permiten documentar sólo los aspectos “sintácticos” (o “estáticos”) de dicha funcionalidad,
sin tratar otros aspectos de vital importancia como son los protocolos de acceso a los
servicios, el comportamiento de los métodos, o la semántica de las operaciones de los
componentes [4]. Por supuesto, dichos IDLs tampoco permiten tratar los aspectos “extrafuncionales” de los componentes, como la fiabilidad, la seguridad, o las prestaciones [5,6].
Respecto al problema de búsqueda, existen propuestas para la búsqueda de objetos
dentro de ciertos modelos (como RM-ODP) o plataformas (CORBA) [3]. También
comienzan a aparecer herramientas específicas para componentes, como por ejemplo el
denominado “COTStrader" (www.cotstrader.com). Dicha herramienta permite buscar y
seleccionar componentes a partir de la definición en plantillas XML de su funcionalidad y
otras propiedades de calidad.
El segundo problema se centra en los procesos y herramientas para la evaluación y
selección de componentes. Como se dijo antes, además de tener en cuenta los requisitos
funcionales de la aplicación, es necesario considerar otros factores que también intervienen
a la hora de seleccionar componentes. El problema es que este tipo de requisitos,
denominados “extra-funcionales”, son difíciles de evaluar, aunque seamos conscientes de la
importancia que representan. Este tipo de factores priman muchas veces, incluso más que
los funcionales, pues un diseñador es capaz de adaptar la arquitectura de un sistema para
incluir en ella un componente deseado, o bien para evitar la presencia de un componente de
un fabricante en el cual no se confía.
Como se dijo anteriormente, estos son los dos factores a estudiar en esta
investigación.
1.3.
Justificación de la investigación
Los desarrollos tradicionales de aplicaciones incurren en altos costos y en una
inversión de tiempo extensa. El iniciar un desarrollo de software desde cero es un reto muy
3
grande, incluso para una empresa que pueda soportar este proceso. Esto sesgaría el
desarrollo de software a las grandes empresas, y no le daría cabida a las pequeñas y
medianas empresas que desean adquirir tecnologías o construir sus propias soluciones. El
DSBC busca, dentro de otros objetivos, reducir el tiempo de trabajo, el esfuerzo que
requiere implementar una aplicación, y los costos del proyecto, y, de esta forma,
incrementar el nivel de productividad de los grupos desarrolladores y minimizar los riesgos
globales sin incurrir en gastos exorbitantes. Otra ventaja del DSBC es poder integrar lo
mejor de distintas tecnologías para desarrollar una aplicación de manera personalizada, a la
medida de las necesidades de los clientes. Otra gran ventaja es que permite a los
desarrolladores y a las empresas adquirir las tecnologías que más se adapten a sus
necesidades, muchas de las cuales son gratis y existen bajo la premisa de Freeware y GNU
(General Public License). Esto da como resultado la coexistencia, en una misma aplicación,
de componentes heterogéneos que ingresan o abandonan el sistema de forma dinámica, es
decir que los componentes pueden ser remplazados, por otros independientemente de su
arquitectura y desarrollo [7]. Por lo expuesto anteriormente, se deduce que el campo de
aplicación del DSBC es amplio.
1.4.
Antecedentes de la investigación
La primera vez que se habló formalmente de reutilización en el ámbito de la
ingeniería del software fue en el año 1968, cuando McIlroy propuso la creación de fábricas
de elementos de software análogas a las ya existentes de componentes hardware [19]. Los
foros de discusión de aquella época se centraban en localizar alguna solución viable a la
llamada crisis del software [19]: la demanda de creación y mantenimiento de sistemas de
software crecía vertiginosamente sin que las empresas del sector fueran capaces de hacerle
frente. En este contexto fue donde surgió la propuesta de McIlroy como factor a tener en
cuenta para la resolución de dicha crisis [8].
Desde entonces, y aunque los procesos de obtención de sistemas software han
evolucionado notablemente, mejorando e incrementando la producción de aplicaciones
software, todavía queda mucho por hacer frente a las necesidades de una sociedad cada vez
más consumidora y más dependiente del software y, consiguientemente, menos tolerante a
4
sus fallos. Ante esta situación, la reutilización de procesos y productos de software se divisa
como una alternativa realista y técnicamente factible [8].
Con respecto a la evolución de la “Ingeniería de componentes” se encuentra que esta
contenida en un área mayor, denominada “Ingeniería del Software”, cuyo crecimiento y
evolución se centra no solo en la necesidad de estandarizar los procesos y metodologías de
desarrollo, sino también en la posibilidad de reutilizar los objetos, funciones y códigos
desarrollados [20]. A mediados de los años 60 la creación de software era una tarea
sumamente difícil, lo cual hizo necesario la incorporación de herramientas que facilitaran la
creación de nuevo software y manejo del mismo, esto fue el inicio de lo que actualmente
conocemos como “Ingeniería del Software”. La aparición de componentes estándares y
reutilizables de software permite al ingeniero concentrarse en elementos verdaderamente
innovadores de un diseño, como por ejemplo las partes nuevas a crear; de allí surge la
“arquitectura de desarrollo del software” como una sub-área de la ingeniería del software,
la cual alude a la estructura global del software y las maneras en que esa estructura permite
la integración conceptual de los componentes que van a representar los elementos
principales del sistema [9]. Los componentes ingresan al mundo de la computación con el
fin de brindar una forma de crear activos reutilizables de una granularidad mayor a las
clases. Están ligados a otros conceptos de la ingeniería del software, tales como: Ingeniería
de Dominio, Líneas de Productos, Patrones de Diseño, entre otros [43]. Para un proceso de
desarrollo centrado en el reuso de componentes se debe realizar un trabajo de ingeniería de
dominio, la cual permite obtener para una línea de productos una arquitectura de referencia
y un conjunto de activos reutilizables: componentes, patrones, o combinaciones
organizadas entre estos [43].
La década de los 90 fue sin duda de consolidación y diseminación de la Arquitectura de
Software(AS) en una escala sin precedentes [10]. En esta misma época surge la
programación basada en componentes, lo cual impulsó a algunos arquitectos de software
como Paul Clements a afirmar que la AS promovía un modelo que debía estar enfocado
más a la integración de componentes pre-programados que a la programación como tal
[10].
El avance tecnológico de las telecomunicaciones y el incremento del uso de la
Internet, ha llevado al planteamiento del desarrollo de nuevas soluciones informáticas para
5
dar respuesta a problemas emergentes del área, y por consiguiente, a la aparición de nuevas
metodologías y entornos de desarrollo, los cuales hoy en día pueden ser distribuidos,
heterogéneos en cuanto al lenguaje utilizado, e incluso inteligentes [11]. Entre los esfuerzos
más recientes en esta área se encuentra el .net de Microsoft, el cual permite integrar fuentes
(generalmente componentes de software) desarrolladas en distintos lenguajes de
programación en un solo software que hace la interpretación y gestiona su integración;
también existen herramientas y lenguajes de programación como JADA, Smalltalk, Java,
entre otros, que permiten la incorporación de técnicas sofisticadas de programación como
reflexión, inteligencia artificial, distribución, etc. [20]. Igualmente, dentro del software libre
existen varios sistemas de componentes libres, a continuación se comentan brevemente
algunos de ellos [38].
UNO: Universal Network Objects
Es un modelo de componentes que ofrece interoperabilidad entre diferentes
lenguajes de programación, diferentes modelos de objetos, diferentes arquitecturas de
máquinas y diferentes procesos, tanto en una LAN o a través de Internet. Los productos de
SUN StarOffice y ONE WebTop han demostrado la utilidad de UNO en complejas
aplicaciones del mundo real. UNO es un sistema de libre disposición (se distribuye bajo la
licencia LGPL) y actualmente soporta Java, C y C++ (sobre Windows, Linux y Solaris).
UNO es desarrollado por la comunidad OpenOffice, que incluye a los laboratorios de
desarrollo de Sun MicroSystems.
XPCOM
Proviene de Cross Platform Component Object Model (Modelo de Componentes de
Objetos Multiplataforma), es un entorno para escribir software modular multiplataforma.
Como aplicación, XPCOM usa un conjunto de librerías centrales para cargar y manipular
selectivamente componentes XPCOM. Los componentes XPCOM pueden ser escritos en
C, C++ y JavaScript, con extensiones para Perl y Python que se encuentran en desarrollo.
Además de la modularidad, XPCOM ofrece una multiplataforma ágil. Soporta
prácticamente cualquier plataforma con un compilador de C++. A continuación se listan
algunas aplicaciones que utilizan XPCOM: Komodo (IDE), Chatzilla (IRC), Juegos
6
(MozInvaders, Xultris y otros), Jabberzilla (Mensajería instantánea), NS6 (El navegador de
Netscape), Mozilla (El navegador)
OpenDoc
Desarrollado originariamente por algunos de los líderes de la industria del software, es
una arquitectura de componentes de software orientada a objetos diseñada para acelerar el
desplazamiento de la industria desde las aplicaciones monolíticas hacia aplicaciones
orientadas a objetos más flexibles y modulares. OpenDoc, de IBM, ofrece una colección de
librerías de clases, con su código fuente, que pueden ser reutilizadas por desarrolladores de
C/C++. Actualmente IBM ha evolucionado su estrategia de componentes de software hacia
tecnologías de componentes Java y JavaBeans. A pesar de esto IBM, continúa ofreciendo
OpenDoc como software gratuito.
Entre los trabajos que tratan de forma directa, los procesos de búsqueda y selección de
componentes, están los siguientes:
1.
COTS-Based Requirements Engineering (CRE)
El método CRE propuesto por Alves [32], se desarrollo para facilitar el proceso de
selección y evaluación basado en los requisitos, prestando una especial atención al análisis
de los requisitos no funcionales [3]. La selección de componentes se realiza por rechazo, es
decir, los componentes candidatos que no cumplen alguno de los requisitos del cliente van
siendo rechazados y retirados de la lista de candidatos. Conforme esta lista va decreciendo,
es necesario aumentar el detalle de los requisitos. El resultado es un proceso iterativo
mediante el cual el proceso de adquisición de los requisitos permite la selección de
productos y, adicionalmente, el propio proceso de selección va obligando a generar
información para la obtención de requisitos requeridos.
2.
Off-The-Shelf Option (OTSO)
El método OTSO, desarrollado por Kontio [33], establece un proceso de selección
de “paquetes” de software reutilizables, denominados por los autores como OTS (Off-TheShelf), pues incluyen tanto componentes comerciales (COTS) como componentes
7
desarrollados internamente por las propias organizaciones [3]. El método OTSO facilita la
búsqueda, evaluación y selección de software reutilizables. Entre las fases o actividades que
identifican este método están, definición, búsqueda, filtrado, evaluación y análisis, donde se
van refinando los criterios de evaluación conforme avanza el proceso de selección. La fase
de búsqueda (search) tiene como meta identificar los potenciales candidatos que
posteriormente serán examinados. La fase de filtrado (screening) selecciona los candidatos
más prometedores, los que mejor cumplen con los requisitos de quien los solicita, que
pasarán a la fase de evaluación detallada. En la fase de análisis se consolidan los resultados
de las evaluaciones de los productos y se toma una decisión sobre la reutilización o no de
algún producto software.
3.
Procurement-Oriented Requirements Engineering (PORE)
El método PORE [34] es una propuesta basada en plantillas (templates) para
facilitar la captura de requisitos. Utiliza un proceso iterativo de captura de requisitos y de
selección y evaluación de componentes [3].
El ciclo de vida del modelo PORE tiene seis procesos genéricos. Estos procesos son
definidos a tres niveles de acuerdo a la clasificación propuesta en [39]: Nivel Universal,
Nivel Mundial y Nivel Atómico. Los seis procesos genéricos que PORE define a nivel
atómico son los siguientes:
Gestión del sistema: El objetivo de este proceso es la planificación del sistema.
Adquisición de requisitos: Este proceso obtiene y valida los requisitos de
calidad del usuario. Además, determina la arquitectura del sistema para que los
componentes puedan integrarse en él.
Selección de proveedores: Sus objetivos son establecer los criterios de selección
de los proveedores, evaluarlos, ordenarlos de acuerdo a esos criterios, y
seleccionar el que mejor se ajuste a ellos.
Selección de paquetes/componentes software: El objetivo de este proceso es
identificar los paquetes (componentes) candidatos, establecer los criterios de
selección usando los requisitos del cliente, evaluar los componentes
identificados, ordenarlos de acuerdo a los criterios, y seleccionar uno o más de
entre los que mejor cumplan el núcleo de requisitos esenciales del cliente.
8
Contrato de producción: Su objetivo es negociar los contratos legales con los
proveedores de los componentes de software, y resolver los aspectos legales
relativos a la compra y licencia de los mismos.
Aceptación del paquete/componente: El objetivo de este proceso es comprobar
que el paquete, componente o sistema, cumple con el núcleo original de
requisitos esenciales del cliente.
4.
A Search Architecture for Grid Software Components
Este motor de búsqueda [40], basado en técnicas de recuperación de información,
clasifica los componentes en base a: su semejanza con la descripción del requisito buscado,
su popularidad entre los desarrolladores, su uso dentro de otros servicios, etc.
Las especificaciones de este buscador dependerán del concepto de Ecosistema de
Componentes. El ecosistema provee un ambiente virtual a aplicaciones donde pueden vivir
(ser ejecutadas) y descubrir otros componentes, a los que pueden hacer referencia para
desarrollar componentes más grandes y complejos.
La idea de ecosistema puede ser fácilmente comparada con el concepto de la Web.
Bajo esta perspectiva un componente de software puede ser visto como una pagina Web,
una aplicación construida por composición de diferentes bloques, que a su vez, pueden ser
vistos en un sitio Web (una composición de diferentes páginas Web).
1.5.
Objetivos de la investigación
1.5.1. Objetivo general
Desarrollar un sistema de Selección de Componentes de Software Reutilizables
(CSR) utilizando Inteligencia Artificial Colectiva.
1.5.2. Objetivos específicos
Automatizar el proceso de selección de CSR.
9
Desarrollar algoritmos de Búsqueda y Selección de CSR basado en los Sistemas
de Hormigas Artificiales.
Demostrar que el criterio de selección de componentes utilizado por nuestro
sistema puede ser más fiable que otros criterios propuestos.
Comparar nuestro enfoque con otros trabajos o herramientas existentes.
10
CAPITULO ΙΙ
MARCO TEORICO
Para el desarrollo de la presente investigación, y el alcance de los objetivos
planteados, es necesario abordar las siguientes áreas de estudio, Inteligencia Artificial
Colectiva (IAC) e Ingeniería de software, específicamente en la sub-área de Componentes.
Los conceptos más relevantes son presentados a continuación.
2.1.
Inteligencia Artificial Colectiva (IAC):
Desde mucho tiempo, se ha venido estudiando, en una variedad de animales, un tipo
de conducta bastante interesante llamada “conducta colectiva” [31]. Ejemplos de esa
conducta es: una bandada de pájaros recorriendo el cielo, un grupo de hormigas en busca de
comida, etc. Recientemente, investigadores de la computación, específicamente en el
campo de “vida artificial” e “inteligencia colectiva”, han estudiado esa conducta,
particularmente cómo estos tipos de animales actúan recíprocamente, logran metas
colectivas y evolucionan [31]. La inteligencia colectiva (IC) ha sido aplicada en distintas
áreas como telecomunicaciones, robótica, trasporte, aplicaciones militares [21], etc. La idea
principal de IC sugiere que N agentes en una colonia cooperan mutuamente para lograr
alguna meta. Los agentes usan reglas simples para gobernar sus acciones, y por medio de
las interacciones del grupo entero logran sus objetivos. Un tipo de auto-organización surge
de la colección de acciones del grupo [21]. La IC resuelve problemas de manera flexible,
adaptativa y descentralizada. Esta definición incluye cualquier esfuerzo por diseñar
algoritmos o dispositivos para resolver problemas distribuidos, inspirado por conducta
colectiva de colonias de insectos sociales u otras sociedades de animales [22].
11
Algunas especies de hormigas, dejan rastros cuando se encuentran realizando
actividades de búsqueda, por ejemplo: cada una de las hormigas depositan una sustancia
química, llamada “feromona”, cuando se trasladan desde una fuente de alimento a su nido,
el resto de las hormigas siguen esta sustancia para encontrar el camino más eficaz a una
fuente de alimento. El proceso por el cual una hormiga es influenciada a ir hacia una
determinada fuente de alimento por otra hormiga, o por un sendero químico, es llamado
reclutamiento [22]. Cada hormiga puede ser considerada un agente [23]. En IC, los agentes
se ubican en grupos, llamados colonias, donde ellos hacen un trabajo cooperativo. Los
agentes procesan información, modulan su conducta de acuerdo a estímulos, y toman la
mejor decisión basada en la información del ambiente que les rodea. Pero el desafío más
grande es hacer que los agentes trabajen de manera colectiva, que integren sus actividades
individuales para generar resultados más complejos y eficaces.
La IC se ha usado de muchas diferentes maneras y ha inspirado técnicas como
optimización colectiva de partículas, optimización de colonias de hormigas, modelos
ecológicos, entre otros [31]. En los estudios actuales de IC, la conducta inteligente surge
frecuentemente a través de la comunicación indirecta entre los agentes [24].
Individualmente, las hormigas son insectos de comportamiento simple con memoria
limitada. Sin embargo, colectivamente las hormigas realizan tareas complicadas con un
grado alto de consistencia. Algunos ejemplos de comportamiento sofisticado de hormigas
son 1. Formación de puentes; 2. Construcción y mantenimiento de nidos; 3. Cooperación
al cargar objetos grandes; 4. Conseguir la ruta mas corta del nido a Fuentes de alimentos;
5. Regulación de temperatura del nido; etc. [24]. En los modelos estudiados se han
identificado dos tipos de comunicación indirecta, la primera involucra un cambio en las
características físicas del ambiente. La construcción del nido es un ejemplo de esta forma
de comunicación en que una hormiga observa el desarrollo de la estructura y agrega su
pelota de barro a la cima de él [24]. La segunda esta “basada en señales”. Aquí algo es
depositado en el ambiente que no hace ninguna contribución directa a la tarea, pero se usa
para influir en la conducta subsiguiente [24]. La comunicación indirecta basada en señales
esta muy desarrollada en las hormigas. Las hormigas usan un químico muy volátil llamado
“feromona” para proporcionar un sistema de señalización sofisticado.
12
Una hormiga aislada se mueve esencialmente al azar, pero una hormiga que
encuentra un sendero previamente transitado decidirá seguirlo con una probabilidad alta, y
así reforzarlo con una cantidad extensa de feromona. El comportamiento emergente
colectivo es una forma de comportamiento auto-catalítico en el cual mientras más hormigas
siguen una ruta, mas feromona se deposita y otras hormigas son más propensas a seguir la
misma ruta. Este proceso es caracterizado por un ciclo de retroalimentación positiva,
donde la probabilidad de que una hormiga escoja una ruta dada se incrementa a medida que
otras hormigas hayan hecho la misma selección anteriormente [24].
Uno de los principales trabajos en IC ha sido propuesto por Dorigo, Maniezzo and
Colorni [25]; ellos han propuesto un sistema artificial de hormigas e introducido tres tipos
de algoritmos hormigas [26]: Densidad de hormigas, Cantidad de hormigas, y ciclo de
hormigas, los cuales pueden ser usados para resolver diferentes problemas de optimización
combinatorial. Estos algoritmos, y extensiones a los mismos, han sido usados para resolver
la asignación cuadrática de problemas, el problema del viajero de comercio, problemas de
enrutamiento de vehículos [27], enrutamiento de redes orientado a conexión [28],
problemas de optimización combinatorial [29; 30], entre otros.
2.1.1. Formulas básicas del modelo
La regla de transición, es decir, la probabilidad de que una hormiga k vaya desde una
ciudad i a una ciudad j en el momento t es llamada regla de transición proporcional
aleatoria, y esta dada por:
p ij (t ) =
[τ
k
∑
][ ]
α
ij
(t ) . η ij
α
l∈J ik
β
[τ il (t )] .[ηil ]
β
, si j ∈ J ik , y 0 si j ∉ J ik
(2.1)
donde α y β son dos parámetros ajustables que controlan el peso relativo entre la intensidad
de la traza τ ij (t ) y la visibilidad η ij (es el inverso de la distancia entre las ciudades i y j).
J ik es el conjunto de las ciudades que la hormiga k puede visitar desde la ciudad i. Si α = 0
las ciudades más cercanas tendrán una alta probabilidad de ser seleccionadas: esto
13
corresponde al algoritmo clásico estocástico. Si, por el contrario β = 0, solo se considera la
feromona.
Después de completar la trayectoria, cada hormiga k deposita una cantidad de
feromona ∆τ ijk (t ) en cada camino (i, j) que ha transitado; el valor de ∆τ ijk (t ) depende de
que tan bueno ha sido el recorrido de la hormiga. En una iteración t (el contador de
iteraciones se incrementa en uno cuando todas las hormigas han completado una
trayectoria), la hormiga k deposita ∆τ ijk (t ) en un camino (i, j) transitado, como sigue:
Q / Lk (t )
∆τ (t ) = 
0
k
ij
si (i, j ) ∈ T k (t );
si (i, j ) ∉ T k (t );
(2.2)
Donde T k (t ) es la trayectoria seguida por la hormiga k en la iteración t, Lk (t ) es la
longitud, y Q es un parámetro (aunque el valor de Q influye poco en el resultado final,
debe asignársele un valor similar, en orden de magnitud, al de la longitud de la trayectoria
optima). Existen en la literatura otras expresiones matemáticas para calcular ∆τ ijk (t ) [26].
2.2.
Ingeniería de Software Basada en Componentes
2.2.1. Componente de software (CS)
Es una implementación de software que presenta una o más interfaces por medio de
las cuales ofrece su funcionalidad. Poseen un contenedor, el cual es parecido a un
envoltorio, que maneja los aspectos técnicos y los servicios de infraestructura del
componente [36] (ver Fig.2.1). La idea principal del uso de componentes es su reutilización
y su producción independiente, que permite su integración a diferentes desarrollos de
sistemas [15].
14
Fig. 2.1. Esquema de un Componente y su contenedor [36].
2.2.2. Arquitectura basada en componentes
El objetivo de la tecnología de componentes de software es construir aplicaciones
complejas, mediante ensamblado de módulos (componentes) que han sido previamente
diseñados por otros desarrolladores o empresas de software, a fin de ser reusados en
múltiples aplicaciones [12]. La arquitectura del software de una aplicación basada en
componentes, consiste en uno o un número pequeño de componentes específicos a la
aplicación (que se diseñan específicamente para ella), que hacen uso de otros muchos
componentes prefabricados que se ensamblan entre sí para proporcionar los servicios
que se necesitan en la aplicación [13].
Fig. 2.2. Arquitectura del software de una aplicación basada en componentes.
15
En la tecnología de componentes la interfaz constituye el elemento básico de
interconectividad. Cada componente debe describir de forma completa las interfaces que
ofrece, así como las interfaces que requiere para su operación. Además, debe operar
correctamente con independencia de los mecanismos internos que utilice para soportar la
funcionalidad de la interfaz.
Las características más relevantes de la tecnología de programación basada en
componentes son la modularidad, la reusabilidad y la componibilidad, y en todos ellos
coincide con la tecnología orientada a objetos [14], de la que se puede considerar una
evolución. Sin embargo, en la tecnología basada en componentes también se requiere
robustez, ya que los componentes han de operar en entornos mucho más heterogéneos y
diversos.
2.2.3. Características mas relevantes de los CS
Entre ellas están [44]:
Es autocontenido
Un componente no debe requerir la utilización de otros componentes para
cumplir su función.
Si el componente requiere de otros, el conjunto de componentes o funciones,
visto como un todo, debe ser considerado como un componente de más alto
nivel.
Es accesible solo a través de su interfaz
Es accedido a través de una interfaz claramente definida.
Determina las operaciones que el componente implementa como las que
precisa utilizar de otros componentes durante la ejecución.
Sus servicios son inmutables
Los servicios que ofrece un componente a través de su interfaz no deben
variar.
La implementación física de estos servicios pueden ser modificadas, pero no
deben afectar la interfaz.
16
Esta documentado
Debe tener una documentación adecuada que facilite:
La recuperación del componente desde el repositorio,
La evaluación del componente,
La adaptación al nuevo ambiente y
Su integración con otros componentes del sistema en que se utiliza.
Es reemplazable
Puede ser reemplazado por una nueva versión, o por otro componente que
proporcione los mismos servicios.
2.2.4. Modelos de componentes
El modelo define la forma de sus interfaces y los mecanismos para interconectarlos.
En la actualidad existen multitud de modelos de componentes definidos. A continuación
algunos de ellos:
Fractal
Es un modelo de componente flexible y extensible, desarrollado por el consorcio
ObjectWeb, que puede ser usado por diferentes lenguajes de programación para el diseño,
implementación, y configuración de sistemas y aplicaciones, como sistemas operativos,
middleware e interfaces graficas [41,42].
Este modelo usa tres características principales: separación de las interfaces y las
implementaciones, programación orientada a componentes, e inversión de control. El
primer aspecto, también denominado patrón de puente, corresponde a la separación entre
los aspectos de diseño e implementación. El segundo aspecto corresponde a la
implementación a partir de elementos pequeños, entidades bien separadas llamadas
componentes. El ultimo aspecto corresponde a la separación de las características
funcionales de las de configuración: en lugar de buscar los componentes y configurar los
recursos que ellos necesitan, los componentes FRACTAL son configurados y desplegados
por una entidad externa [41, 42].
17
JavaBeans
Un JavaBean o bean puede ser manipulado por una herramienta de programación en
lenguaje java. Para ello se define una interfaz en el momento del diseño, que permite a la
herramienta de programación, o IDE, conocer las propiedades que lo definen y los tipos de
respuestas que puede generar según diversos eventos [44]. Un javaBean puede variar en
cuanto a su funcionalidad, pero tipicamente unifica características, tales como [44]:
•
Soportan la introspección, es decir una herramienta de programación puede
analizar como trabaja un bean.
•
Soporta la configuración de su apariencia y comportamiento mediante la
utilización de alguna herramienta.
•
Soporta la persistencia, un bean puede ser configurado dentro de un constructor
de aplicaciones, manteniendo su configuración.
CORBA Component Model (CCM)
Para construir aplicaciones de nivel empresarial los desarrolladores deben integrar
su lógica de negocio en un entorno distribuido. Además, deben conseguir que estos
desarrollos sean flexibles y poco costosos de mantener. Esta claro que conseguir modelar,
diseñar e implementar este tipo de aplicaciones es muy complejo ya que hay que especificar
innumerables detalles que impiden que el desarrollo sea eficiente y rápido. Por ello se han
buscado patrones que permitan abstraernos de todos estos detalles y que solucionen las
complejidades que se escapan de la lógica de negocio. Gracias a estos patrones y junto con
herramientas de generación de código se pueden desarrollar componentes que se alojen en
servidores compuestos de estos patrones y que no necesitan ningún otro tipo de desarrollo.
El marco de la OMA (Object Management Arquitecture) que permite la definición,
generación, ensamblaje y despliegue de estos componentes se llama CORBA Component
Model [45]. EL CCM añade al lenguaje de definición de interfaces (IDL) la posibilidad de
definir componentes CORBA, y de describir los detalles de implementación de forma
suficiente como para permitir que el servidor se genere, se ensamble y se despliegue. Todo
el modelo de componentes CORBA tiene grandes similitudes con modelos existentes como
EJB y MTS, ya que de hecho, esta basado en ellos. Pero sigue la filosofía de estándar
18
abierto que le ha dotado de su gran importancia en el pasado y que los otros modelos no
siguen [45].
19
CAPITULO III
DISEÑO DEL ALGORITMO
En este capítulo se describe en forma detallada los distintos procesos que componen
el sistema el Sistema de Selección de Componentes de Software, y se explican las
características principales.
3.1
Generalidades
Se propone un algoritmo estocástico de selección de componentes de software
basado en inteligencia artificial colectiva, que permite seleccionar el mejor componente de
un grupo que cumple con especificaciones dadas. El algoritmo de selección está inspirado
en el uso de “trazas de feromona”, que permiten identificar a los mejores componentes a
utilizar a través de un proceso de retroalimentación positiva o negativa.
El sistema hará uso de un archivo que caracteriza a cada componente (perfil del
componente), que, entre otras cosas, especifica la calidad del mismo. En nuestro caso el
archivo tendrá un formato XML [15]. Este archivo contiene tanto información estática
como dinámica que describe aspectos funcionales y no funcionales del componente. Entre
la información estática se incluyen datos como, nombre, descripción, en la que se detalla
una breve reseña de la funcionalidad del componente, y cualquier otra información que sea
permanente en el tiempo. Entre el grupo de datos dinámicos se tiene información
relacionada a aspectos técnicos como las dependencias del componente, sistema operativo
donde ha sido usado y lenguaje de programación, y aspectos no funcionales como última
20
fecha de actualización, etc. Además, se incluye una variable que está asociada al
rendimiento del componente, llamada “feromona” (Ver Fig. 3.1.).
<componentStaticInformation>
<componentInformation>
<uniqueID>PRU0707</uniqueID>
<projectname>Database Of Our Owlish Wisdom</projectname>
<license>gpl</license>
<desc>
Database Of Our Owlish Wisdom is a knowledge
database, based on MySQL, and PHP4. It allows
one or more people to insert solutions, ideas or
whatever information they like. You can then
search for information in the database, to find
answers to various problems.
</desc>
</componentStaticInformation>
<profile1>
<pheromone>0.1</pheromone>
<location> www.cemisid.ula.ve/components/rmc </location>
<os>debian</os>
<dependency>string.dll - math.dll – proactive.jar –
fractal.jar - examples.jar
</dependency >
<ms>3</ms>
<et>0.01</et>
Fig. 3.1. Archivo de Perfil del Componente.
.
3.2.
Atributos a considerar en la caracterización de los componentes de software
Redefiniendo las características consideradas en [16] para la selección óptima de un
componente, generamos el perfil del componente (Ver Fig.3.1.). Cada componente podrá
tener un número indefinido de perfiles, cada uno representando el dominio donde dicho
componente puede ser usado, y tendrá un rendimiento relativo a este escenario de uso. Esto
permitirá tener una “traza” o marca para cada perfil (representada por la variable
“feromona” que anteriormente se menciono), que podrá incrementarse o decrementarse
según su rendimiento en dicho dominio (Ver Fig.3.2.).
21
Component
Profile 1
Profile 2
…
Profile n
Fig. 3.2. Modelo de Componente.
3.3.
Modelo de Selección
El sistema utilizará tantos agentes como desee, y cada uno deberá seleccionar todo
el grupo de componentes que el sistema a desarrollar requiere, las etapas que componen el
proceso de selección son las siguientes:
1. Cada agente realiza un recorrido por componente solicitado, independiente al seguido
por el resto de los agentes, en busca del componente.
1.1. La trayectoria seguida en cada recorrido consistirá en visitar, aleatoriamente, 1, 2 ó
n repositorios, que son los que contienen los componentes.
1.2. Al final de la trayectoria seguida, en cada uno de los recorridos realizados, el
agente habrá acumulado un grupo de componentes llamado cc, asociados al
componente relacionado al recorrido, candidatos a ser seleccionados.
2. Finalmente, cada agente realiza la selección del mejor componente encontrado, del
grupo de componentes cc conseguido, por componente solicitado.
El ensamblaje de los componentes estará a cargo del programador, luego de que cada
agente creado complete todo el proceso de selección y tenga a disposición todos los
componentes requeridos (Ver Fig. 3.3.). Dicho programador seleccionará, según algún
criterio, los componentes que requiere del grupo de componentes seleccionado por cada
agente, y los incorporará al sistema a desarrollar. Después, los agentes actualizaran la traza
de feromona de los componentes seleccionados por el programador.
22
Repositorio 1
Agente 1
Busca C*1
al C*n
C
C
C
Agente 2
Busca C*1
al C*n
Repositorio 2
C
Repositorio x
Agente m
Busca C*1
al C*n
C
C
C
C
C
Fig.3.3. Modelo de Selección. Cada agente busca el grupo de componentes a utilizar.
Las premisas generales para el modelo se muestran a continuación:
Suponemos que cada componente cuenta con un perfil que lo caracteriza.
Se asume que los requerimientos iniciales son perfectos y se tiene información
exacta de los componentes que se desean seleccionar. Esta información esta
asociada a un archivo XML, el cual agrupa la caracterización de los componentes.
La formula para establecer el grado de correspondencia entre el componente ideal y
el componente preseleccionado, viene dada por:
Xljui = 1 +
Hi
-
Nlju
(3.3)
donde Xljui es el grado de correspondencia entre el componente ideal i, y el componente j
con perfil u, ubicado en el repositorio l.
Hi identifica la sumatoria de las características
ideales que debe tener el perfil del componente i deseado, por ejemplo, sistema operativo,
lenguaje de programación, número máximo de dependencias, entre otras. Por otro
23
lado,
N representa la sumatoria de las características reales encontradas, similares a las
deseadas, del componente preseleccionado (candidato). Mientras más cercano a 1 sea el
valor de Xljui , mayor será la similitud entre las características ideales y las características
reales del componente j encontrado.
Cada agente evaluará un conjunto de componente de software, por cada componente
requerido, considerando [22; 29; 30; 35]:
1. El valor ideal de Xljui
es 1, el agente escogerá componentes cuya
correspondencia entre el componente deseado y el encontrado es cercana a ese
valor.
2. El monto de feromona Ylju (t) relacionado a cada componente j con perfil u,
ubicado en el repositorio l, que conforman cada uno de esos conjuntos, será
actualizado luego de que el usuario escoja los componentes a ensamblar en la
aplicación y los pruebe en ella. El monto se incrementará o decrecerá,
dependiendo del resultado de la evaluación del componente, y de la tasa de
evaporación de feromona.
La ecuación de transición que calcula la probabilidad de que un agente k seleccione
un componente j con perfil u, ubicado en el repositorio l, de entre un grupo ccik de posibles
componentes a seleccionar [1,2]:
ik
lju
P
(t ) = [Y
lju
][
(t ) X i lju
]
−1
∑ [Y
rsn
[
(t )] X
i
]
−1
rsn
(3.4)
rsn∈ccik
tal que ccik = {c rsn encontrados por el agente k, tal que,
∀ r = 1,...# repositorios, ∀ s = 1,...# componentes, ∀ n = 1,...# perfiles, X i rsn 
→1
}
Donde Ylju (t ) representa la cantidad de feromona para el componente j con perfil u
que ha sido encontrado por el agente k en el repositorio l. Los agentes son creados e inician
el proceso de selección al azar. Es importante notar que el valor de la probabilidad Pljuik (t )
24
pudiera ser diferente para dos agentes evaluando un mismo componente, ya que esta
depende del grupo de componentes ccik que cada agente ha encontrado.
Como se dijo anteriormente, cada agente k deposita una cantidad de feromona
∆Ylju (t ) en cada uno de los componentes conseguidos. Si ese agente es seleccionado por el
usuario, esa cantidad dependerá del rendimiento R que tiene el sistema donde el
componente es usado [1,2].
k
∆Ylju (t ) = (X lju
∗ Rlju ) −1
(3.5)
Tal que
Rlju = f (TE , M , NDlju )
(3.6)
La función de rendimiento ( Rlju ) viene dada por el Tiempo de Ejecución (TE ) del
sistema, la cantidad de memoria utilizada ( M ) , y el numero de dependencias ( NDlju ) que
el componente tiene. Si el rendimiento es bueno Rlju tiende a 1, de lo contrario es un
número grande.
En nuestra propuesta es necesario la retroalimentación positiva y negativa. Esta
última se hace a través de la tasa de evaporación de feromona, ya sea en el componente
seleccionado por el usuario o no. En general, la retroalimentación positiva y negativa es
realizada a través de la actualización de la traza como sigue [1,2]:
Ylju (t) = (1 – α) * Ylju (t) + ∆Yljuk (t )
(3.7)
El monto inicial de feromona de los componentes se asume como un número aleatorio. α
es una constante que controla la tasa de evaporación de feromona. Finalmente, para
determinar el componente “i” a seleccionar se define la siguiente regla de transición:
{ }
ik
arg max rsn∈ccik Prsn
S*ki = 
J (Valor Aleatorio)
(3.8)
25
ik
donde el valor de Prsn
viene dado por la Ec.(3.4). Así, S*ki es el componente i seleccionado
por el agente k de un grupo de componentes ccik ó, es un componente J seleccionado
aleatoriamente.
3.4.
Macro Algoritmo:
1. Definición e identificación de los componentes requeridos y sus respectivos perfiles
deseados.
2. Crear k agentes de selección
3. Cada agente realiza la selección de los componentes requeridos usando el
procedimiento “selección”.
4. Seleccionar un componente de entre la selección hecha por los distintos agentes,
ensamblar al sistema y ejecutarlo.
5. Actualizar la traza de feromona para cada perfil de componente de los distintos ccik .
Procedimiento “selección”:
1.
Repita desde i = 1 hasta n (n es el numero de componentes deseados)
1.1. Búsqueda de componentes similares al componente i requerido (estos
componentes conforman al conjunto ccik ).
1.2. Seleccionar uno de ellos usando (3.8).
26
CAPITULO IV
CONSTRUCCIÓN DEL SISTEMA
En esta etapa se describe detalladamente el diseño del sistema. Para ello hemos hecho
uso de los diagramas UML, considerando que la programación de nuestro sistema ha
sido desarrollada bajo la filosofía orientada a objetos.
4.1. Modelado Funcional del Sistema
4.1.1. Diagramas de casos de uso
Las siguientes figuras muestran los diagramas de casos de uso del sistema de
selección de componentes de software.
27
Selección de componentes de software
Solicitar
componentes
Usuario
Descripción
Fig.4.1. Diagrama que muestra el caso de uso solicitar componentes.
Tabla 1. Descripción del caso de uso Solicitar Componentes.
Actores:
Usuario.
Propósito:
Capturar la cantidad de componentes y agentes
(parámetros iniciales).
Resumen:
El usuario especifica el número de componentes que
solicita y la cantidad de agentes necesarios para atender
su solicitud.
Tabla 2. Descripción de la extensión Descripción.
Actores:
Usuario.
Propósito:
Capturar la descripción de cada uno de los
componentes requeridos.
Resumen:
El usuario especifica la descripción de cada
componente, esto incluye, palabras claves asociadas al
componente, así como también el perfil deseado.
28
El diagrama de la Fig.4.1 muestra como Descripción es una extensión del caso de
uso Solicitar Componentes.
Fig.4.2. Diagrama que muestra el caso de uso Seleccionar Componentes.
En la Fig.4.2 se puede apreciar el caso de uso Seleccionar Componentes, el cual
incluye Calcular Correspondencia, Calcular Probabilidad, y Visitar Repositorios.
Tabla 3. Descripción del caso de uso Seleccionar Componentes.
Actores:
Agente.
Propósito:
Conformar el grupo de los componentes solicitados.
Resumen:
El agente se encargará de seleccionar los mejores
componentes encontrados asociados a cada
componente requerido.
29
Tabla 4. Descripción de la extensión Visitar Repositorios.
Actores:
Agente.
Propósito:
Buscar los componentes solicitados.
Resumen:
El agente decide buscar en 1,2 ó n repositorios los
componentes requeridos por el usuario, formando
grupos de componentes encontrados por componente
requerido, candidatos a ser seleccionados por el agente.
Tabla 5. Descripción de la extensión Calcular Correspondencia.
Actores:
Agente.
Propósito:
Evaluar la semejanza entre un componente encontrado
y el deseado.
Resumen:
El agente calcula la correspondencia, entre un
componente deseado y el encontrado. La
correspondencia permite medir la semejanza entre las
características, funcionales y no funcionales, de un
componente solicitado y el encontrado.
Tabla 6. Descripción de la extensión Calcular Probabilidad de Selección.
Actores:
Agente.
Propósito:
Estimar la posibilidad de que el agente seleccione un
componente específico.
Resumen:
El agente calcula la probabilidad de seleccionar un
componente especifico, del grupo de componentes
encontrados, por componente solicitado.
30
Selección de componentes de software
Depositar Feromona
Actualizar Feromona
Agente
Calcular Tasa de
Evaporación de la Traza
Fig.4.3. Diagrama que muestra el caso de uso Actualizar Feromona.
La Fig.4.3 muestra como Depositar Feromona y Calcular Tasa de Evaporación de la
Traza están incluidos en el caso de uso Actualizar Feromona.
Tabla 7. Descripción del caso de uso Actualizar Feromona.
Actores:
Agente.
Propósito:
Modificar la traza de feromona.
Resumen:
El agente actualizara la traza de feromona,
incrementándola o decrementandola, dependiendo del
resultado de la evaluación del componente y de la tasa
de evaporación
31
Tabla 8. Descripción de la extensión Calcular Tasa de Evaporación de la Traza.
Actores:
Agente.
Propósito:
Realizar la retroalimentación negativa de la traza de
feromona.
Resumen:
El agente realiza la retroalimentación negativa, por
medio de la evaporación de la traza, al grupo de
componentes encontrados, por componente solicitado.
Tabla 9. Descripción de la extensión Depositar Feromona.
Actores:
Agente.
Propósito:
Realizar la retroalimentación positiva de la traza de
feromona.
Resumen:
Si un componente seleccionado por el agente, del
grupo de componentes seleccionados, es escogido por
el usuario, este agente deposita una cantidad
determinada de feromona en dicho componente
escogido.
4.1.2. Diagramas de actividades
A continuación se presenta una serie de diagramas que hacen referencia a las
actividades implicadas en los casos de uso estudiados.
32
Establecer pedido
Registra nro. de agentes
Registra nro. de comp. deseados
Establecer descripción de los comp.
Registra nombre de los comp. deseados
Registra caracteristicas deseadas de los comp.
Fig.4.4. Actividades generadas por caso de uso: Solicitar Componentes.
33
Cargar agentes
Buscar componentes solicitados
Calcular correspondencia
Calcular probabilidad de seleccionar un comp. encontrado
Seleccionar los comp. requeridos
Fig.4.5. Actividades generadas por casos de usos: Seleccionar Componentes.
34
Evaporar feromona en los comp. evaluados
Depositar feromona en los comp. seleccionados por el usuario
Mostar resultados
Fig.4.6. Actividades generadas por casos de usos: Actualizar Feromona.
La dinámica en el sistema de selección comienza cuando se especifican los
parámetros para establecer el pedido, es decir, el número deseado de componentes, y de los
agentes que atenderán la solicitud.
Una vez cumplida esta etapa, se procede a especificar los parámetros que
identifiquen a cada componente deseado. La descripción de los mismos consta del nombre
y características deseadas de cada componente solicitado (sistema operativo, lenguaje de
programación, etc) (ver Fig.4.4). Estas actividades descritas representan al caso de uso
Solicitar Componentes de Software.
Seguidamente, se deberán activar los agentes inicialmente asignados, para que
realicen el proceso de ubicar los componentes solicitados, calcular la correspondencia y la
probabilidad de seleccionar a los componentes encontrados, como se explica en el caso de
uso Seleccionar Componentes (ver Fig.4.5). Finalmente, se escogerán los componentes a
usar en el sistema y se actualizará la traza, evaporando feromona en todos los componentes
evaluados y depositando en aquellos que fueron escogidos, como se explica en el caso de
uso Actualizar Feromona (ver Fig.4.6), para luego mostrar los resultados obtenidos.
35
4.2.
El sistema programado
El diseño interno del sistema se muestra en las Fig.4.7 y 4.8, que contienen los
diagramas de componentes y de clases, respectivamente.
Fig.4.7. Diagrama de Componentes.
El objetivo de este diagrama es mostrar, además de los componentes o entidades de
software más relevantes del sistema, los aspectos relacionados a cada uno de ellos. A
continuación se detallan sus características:
Agente.exe: Es equivalente a la clase Agente. Su función consiste en ubicar los
componentes requeridos por el usuario y seleccionar a los mejores. Hace uso de
Componente.class, Repositorio1 y Repositorio2. Después de que cada agente
complete todo el proceso de selección y tenga a disposición todos los
componentes requeridos, muestra los resultados obtenidos como se puede ver en
la Fig.4.13.
36
Componente.class: Esta asociado a la clase Componente. Ofrece sus servicios
de evaluación de componentes a Agente.exe.
Repositorio1 y Repositorio2: Son los repositorios locales que son incorporados
para hacer las pruebas al sistema, estos almacenan los archivos XML que
contienen la información de los componentes que son ubicados y evaluados por
Agente.exe. Pueden haber mas repositorios, según el número de sitios
disponibles para buscar componentes.
perfilDeseado.xml: Archivo XML creado por la clase Perfil, en este se almacena
la información dada por el usuario, en cuanto a características deseadas en los
componentes que requiere.
perfilEncontrado.xml: Archivo XML que contiene la información de los
componentes que serán evaluados.
37
Fig.4.8. Diagrama de clases del diseño.
38
El diagrama de clases del diseño contiene las definiciones de las entidades del
software usadas por nuestro sistema, con las siguientes características:
BusquedaSeleccionComponente: Constituye el punto de partida del sistema. Es
la encargada de construir la primera ventana de interacción con el usuario (ver
Fig. 4.9.), la que permite a este último especificar los parámetros iniciales
(numero deseado de componentes y agentes). En su estructura están definidas
las clases DescripcionComponente y Agente. Una vez registrados los parámetros
iniciales, se encargara de llamar a la clase DescripcionComponente.
DescripcionComponente: Maneja todos los aspectos referentes a la descripción
de los componentes deseados por el usuario (nombres y características
deseadas). Para ello establece el formato que se observa en la Fig. 4.10. Hace
uso de la clase Perfil, que es la que le permite registrar las características
deseadas de los componentes en un archivo XML. Una vez registradas las
descripciones de cada uno de los componentes requeridos, esta clase ejecutara el
grupo de agentes asignados inicialmente para procesar la solicitud de
componentes.
Perfil: Define la estructura grafica (ver Fig. 4.11.) que permite al usuario
especificar las características deseadas en los componentes que requiere. Crea
los archivos XML que contendrán dicha información.
4.3
Descripción de la interfaz gráfica
Al entrar al sistema se presenta la interfaz inicial con el usuario, ella permite
especificar los parámetros iniciales (número deseado de componentes y agentes) como se
muestra en la Fig.4.9.
39
Fig. 4.9. Interfaz con el Usuario.
Una vez especificados los parámetros mencionados y presionado el botón aceptar,
inmediatamente se desplegará una segunda ventana de interacción con el usuario, como se
muestra en la Fig. 4.10. En caso contrario, de presionar el botón cancelar, el sistema
terminara su ejecución.
Fig. 4.10. Interfaz con el Usuario. Descripción de los Componentes.
Al llegar a este punto el usuario se encargará de especificar la descripción de cada
uno de los componentes que solicita, esto incluye, nombre o palabras claves, y perfil
deseado, asociado a cada componente, como se ve en la Fig. 4.10. Para anexar los perfiles
deseados el usuario deberá presionar el botón asociado al perfil del componente que desea
especificar. Seguidamente se presentara un dialogo (ver Fig. 4.11) que le permitirá
especificar características como: sistema operativo donde pueda ejecutarse, lenguaje de
40
programación utilizado para desarrollarlo, licencia y numero de dependencias asociadas a
él.
Fig. 4.11. Agregar Perfil Deseado.
En caso de presionar el botón aceptar (de la Fig. 4.10) sin antes completar la
descripción de su solicitud, se presentará un mensaje de error indicando el perfil deseado
del componente que aun no ha sido especificado (ver Fig. 4.12).
Fig.4.12. Dialogo informativo. El perfil deseado del componente 2 solicitado no ha sido
especificado.
En caso contrario, cada uno de los agentes se encargará de realizar la búsqueda y
selección del grupo de componentes de software requeridos. Los resultados serán
mostrados en una pantalla (ver Fig. 4.13). En esta última se puede observar, en un primer
plano los tres mejores perfiles encontrados por cada agente asociados a cada componente
requerido, junto con la probabilidad asociada a cada uno de ellos; y en un segundo plano, la
selección definitiva hecha por cada agente de cada componente requerido. Con esa
41
información, el usuario puede escoger los componentes que necesite para estructurar su
sistema.
Fig. 4.13. Ventana que muestra el resultado de la búsqueda y selección del grupo de
componentes de software hecha por cada agente.
42
CAPITULO V
PRUEBAS DEL SISTEMA
El presente capitulo esta dedicado a comprobar la funcionalidad y eficiencia del
sistema de selección de componentes desarrollado. Para ello, se procedió a realizar varios
experimentos y evaluar sus resultados, considerando nuestros criterios como una alternativa
diferente a las ya existentes, enfocado hacia una evaluación mas objetiva del componente
de software. Para eso, mostramos los resultados obtenidos con nuestro enfoque usando
nuestro criterio, y los que se obtendrían usando otros criterios, y en función de eso se da
discusión. Es bueno aclarar la independencia del algoritmo propuesto de la especificación
de criterios que se haga (podemos modificar el mismo).
5.1.
Criterios de selección de componentes más usados
Normalmente, los criterios de selección de componentes mas comúnmente usados
son los siguientes:
Popularidad
La popularidad se calcula de la siguiente manera [18]:
((registro de hits + URL hits) * (subscripciones + 1))^ (1/2)
donde:
registro de hits = numero de veces que la página del proyecto (componente de
software) es accedida desde Freshmeat.net ó Sourceforge.net.
URL hits = indica las veces que el URL, asociado a la página del proyecto es
accedido desde fuera del Freshmeat.net ó Sourceforge.net.
43
Subscripciones = número de subscripciones que tiene el proyecto.
Rating
Cada usuario registrado, ya sea en freshmeat.net ó sourceforge.net, puede
categorizar u opinar sobre un proyecto (componente de software) en particular ofrecido por
estos repositorios. Basado en estas categorizaciones y opiniones, estos sitios Web
construyen una lista de los 20 proyectos de software con mejor categorización. Cada
proyecto es evaluado por medio de la siguiente formula [18]:
(WR) = (v ÷ (v+m)) × r + (m ÷ (v+m)) × C
donde:
WR = peso o relevancia obtenida por el proyecto.
r = promedio del proyecto (clasificación o rating) = cada usuario registrado califica
un proyecto, dentro de un rango de puntuación determinado, (r) representa el promedio de
la calificación obtenida.
5.2.
v
= numero de votos que tiene el proyecto.
m
= votos mínimos requeridos que debe alcanzar un proyecto para ser incluido.
C
= promedio de votos en el sistema por proyecto.
Descripción de los experimentos
Como se ha dicho antes, las pruebas serán hechas utilizando 2 repositorios locales
de perfiles de componentes (Repositorio 1 y Repositorio 2). Ambos contienen información
relacionada a los repositorios Freshmeat.net y Sourceforge.net, respectivamente.
La variable R descrita en el Capitulo III, formula (3.6), y que esta asociada al
rendimiento del sistema donde los componentes escogidos son usados, se asume como un
número aleatorio para poder efectuar las pruebas.
A continuación se presenta los experimentos realizados.
44
5.2.1. Experimento 1
Se procedió a ejecutar el sistema, en 4 oportunidades consecutivas, variando el
número de agentes, manteniendo en 2 el número de componentes requeridos. Para dichos
componentes se desearon las características que se pueden ver en la tabla 10.
Tabla 10. Descripción de los componentes requeridos.
Componente 1 (C1)
Componente 2 (C2)
Nombre/Identificador: Library string
Nombre/Identificador: Text editor
Sistema operativo: Windows
Sistema operativo: Linux
Lenguaje de programación: Basic
Lenguaje de programación: C++
Licencia: General Public Licence
Licencia: General Public Licence
Nro. De dependencias: 3
Nro. De dependencias: 6
El componente 1 C1 se refiere a una librería para el manejo de cadenas, y el C2, a
un editor de texto. Los nombres o identificadores de los componentes requeridos se
especifican en ingles debido a que los archivos XML que contienen la descripción de ellos
están escritos en ese idioma. El orden de ejecución del sistema, junto con los parámetros
asignados en cada caso, es el que se puede ver en la tabla 11.
Tabla 11. Orden de ejecución del sistema.
Numero de agentes
Numero de componentes
Primera corrida
1
2
Segunda corrida
2
2
Tercera corrida
3
2
Cuarta corrida
10
2
45
5.2.2. Experimento 2
En este experimento, se procedió a ejecutar el sistema desarrollado, en tres
oportunidades consecutivas, solicitando una cantidad constante de componentes, en este
caso 8, variando la cantidad de agentes. Los componentes solicitados, junto con las
características deseadas, se muestran en la tabla 12.
Tabla 12. Descripción de los componentes requeridos.
Componente 1 (C1)
Componente 2 (2)
Nombre/Identificador: Library math
Nombre/Identificador: Multiplication
Sistema operativo: Solaris
Sistema operativo: Linux
Lenguaje de programación: Php
Lenguaje de programación: Php
Licencia: Mozilla Public License
Licencia: The Apache License
Nro. De dependencias: 0
Nro. De dependencias: 2
Componente 3 (3)
Componente 4 (4)
Nombre/Identificador: Sum
Nombre/Identificador: Manager database
Sistema operativo: Windows
Sistema operativo: Windows
Lenguaje de programación: C
Lenguaje de programación: Basic
Licencia: General Public License
Licencia: General Public License
Nro. De dependencias: 1
Nro. De dependencias: 4
Componente 5 (5)
Componente 6 (6)
Nombre/Identificador: Text editor
Nombre/Identificador: Finder of pictures
Sistema operativo: Linux
Sistema operativo: Solaris
Lenguaje de programación: C++
Lenguaje de programación: Java
Licencia: General Public License
Licencia: Shareware
Nro. De dependencias: 4
Nro. De dependencias: 0
Componente 7 (C7)
Nombre/Identificador: Library string
Componente 8 (C8)
Nombre/Identificador: Calculator
46
Sistema operativo: Solaris
Sistema operativo: Linux
Lenguaje de programación: Java
Lenguaje de programación: Php
Licencia: Shareware
Licencia: General Public License
Nro. De dependencias: 0
Nro. De dependencias: 3
Cada componente requerido se refiere a: C1 una librería para el manejo de operaciones
matemáticas, C2, solicitado para efectuar multiplicaciones matemáticas, C3 para sumas,
C4 un manejador de base de datos, C5 un editor de texto, C6 un visor de imágenes, C7
una librería para el manejo de cadenas de caracteres, y, C8 para efectuar operaciones
matemáticas. La ejecución fue como sigue:
Tabla 13. Orden de ejecución del sistema.
5.3.
Numero de agentes
Numero de componentes
Primera corrida
1
8
Segunda corrida
2
8
Tercera corrida
10
8
Análisis de los resultados
Antes de presentar los resultados obtenidos, a continuación se describe la
nomenclatura utilizada:
Per/Prob/Ri = Indica el perfil (Per) seleccionado por el agente junto con la
probabilidad (Prob) de selección, y el repositorio (Ri) donde fue ubicado.
Per/Pop/Ri = Indica la popularidad (Pop) del perfil (Per) señalado. Ri es el
repositorio donde se ubica.
Per/Rat/Ri = Indica el rating (Rat) del perfil (Per) señalado. Ri es el repositorio
donde se ubica.
47
Antes de entrar en detalle, es de importancia saber que además de los experimentos
que a continuación se detallan, previamente se realizaron pruebas para comprobar el
comportamiento esperado en los agentes, es decir, que su comportamiento fuera acorde a lo
establecido en el diseño de nuestro algoritmo de selección, y así saber que no se cuenta con
fallas funcionales en el sistema. En estas pruebas, a diferencia de las otras, se establecieron
los perfiles de componentes de software deseados (especificaciones técnicas y funcionales),
y se identificaron su presencia en algunos de los reposirorios. Después, se inicio el proceso
de búsqueda con nuestro algoritmo. Al final del proceso de búsqueda se constato si los
perfiles seleccionados por el algoritmo (agentes) fueran los mejores (ideales) previamente
identificados por nosotros. Esto nos permitió comprobar si el algoritmo siguió el
comportamiento esperado.
5.3.1. Experimento 1
Los resultados obtenidos se muestran en el apéndice, tablas de resultados del
experimento 1. Las tablas muestran, por corrida o ejecución del sistema, los cinco mejores
perfiles encontrados de acuerdo al criterio de probabilidad, popularidad y rating, asociados
a cada componente requerido, y el repositorio de donde provienen. Esto permitirá comparar
el criterio de escogencia utilizado por los agentes junto con los otros dos criterios. Los
valores obtenidos de popularidad y rating son características que vienen incluidas en cada
uno de los perfiles de los componentes evaluados.
Comenzando ya con el análisis, al observar los resultados obtenidos en la primera
corrida (ver tabla 14), resalta el hecho de que el mejor perfil encontrado por el agente 1
(44/0.466/2), asociado al C1, no figura entre los cinco más populares. Esto indica que no
siempre es cierto que el componente más popular es el que va a cumplir con los requisitos
iniciales del usuario (funcionales y no funcionales), teniendo en cuenta que estos requisitos
mencionados son evaluados por los agentes, en los componentes encontrados. Además,
nuestros agentes también consideran el factor de desempeño, el cual es evaluado por medio
de la cantidad de feromona asociada al componente. Entre más feromona mejor es el
rendimiento del componente. Así, un componente popular tampoco significa que tenga un
buen desempeño. Aunque es bueno resaltar que el perfil con mejor popularidad es el tercero
48
mejor encontrado por el agente 1, de entre un grupo aproximadamente de 15 componentes
evaluados. Esta es una ventaja que tiene el algoritmo propuesto en esta investigación, el
cual ofrece distintas alternativas al usuario, quien al final tendrá la última palabra al
momento de realizar la escogencia de los componentes. Por otro lado, el mejor perfil
encontrado por el agente 1 (44/0.466/2) es el quinto con mejor rating, lo que igualmente
comprueba que un componente con buen rating no indica que tenga un buen desempeño o
cumpla con los requisitos iniciales del usuario.
Algo similar ocurre con los resultados obtenidos, en la misma primera corrida,
asociados al C2. El mejor perfil encontrado por el agente 1 (109/0.144/1) no figura entre los
cinco más populares y de mejor rating. Esto es perfectamente posible por las circunstancias
anteriormente explicadas. Situación completamente contraria ocurre con los resultados que
presenta el agente 2, asociados al C2, de la segunda corrida (ver tabla 15), donde el perfil
(109/0.6592/1) además de ser el mejor encontrado por el agente, es el más popular y el que
tiene el mejor rating.
Otra característica que se observa en el sistema de selección propuesto es el hecho
de que varios agentes, relacionados a una misma corrida, presentan resultados similares en
la evaluación de los componentes encontrados. Tal es el caso de los agentes 1 y 2 de la
segunda corrida (ver tabla 15), los cuales obtuvieron los mismos resultados asociados al
C1. Esto es debido a que ambos siguieron una misma ruta de búsqueda del componente
solicitado, situación posible ya que los agentes actúan de manera autónoma al decidir en
qué o en cuáles repositorios buscar los componentes solicitados. Algo importante para
resaltar es que los agentes 2 y 3 de la tercera corrida (ver tabla 16) y el agente 5 de la cuarta
corrida (ver tabla 17), respectivamente, visitaron solo un repositorio (en este caso
Repositorio 2) para buscar al C1, formando un mismo grupo de componentes encontrados.
Sin embargo, los resultados obtenidos de la evaluación hecha por estos agentes sobre este
grupo de componentes difieren entre las corridas, debido a que al finalizar un proceso de
búsqueda y selección en una corrida del programa todos los componentes evaluados,
relacionados a los componentes requeridos, son sometidos al proceso de evaporación de su
traza de feromona, y, los componentes escogidos, de entre la selección hecha por los
agentes para ensamblar al sistema a desarrollar, reciben una cierta cantidad de feromona
que dependerá del rendimiento (R) que ellos tengan en el sistema donde son ensamblados.
49
Esta actualización de feromona es lo que incide en que los resultados obtenidos sean
distintos.
5.3.2. Experimento 2
Los resultados obtenidos en el experimento 2 se muestran en el apéndice. Dichos
resultados demuestran que el comportamiento de los agentes, observado en el experimento
1, es consistente en este experimento, a pesar del aumento en el sistema del número de
componentes solicitados. En ambos experimentos se observa un contraste en cuanto a
componentes solicitados, es decir en el experimento 1 se solicitan solo 2 y en el segundo
experimento hasta 8 componentes son solicitados. Situación como la que se ve en la
primera corrida relacionada a este experimento (ver tabla 18) le da al usuario la idea de
cómo debe ser usado el sistema. Se puede apreciar, a pesar de que solo están disponibles 2
repositorios, que un solo agente por lo general no es suficiente para buscar 8 componentes
distintos requeridos. En ese caso se observa que la mayoría de los componentes solicitados
fueron buscados en un solo repositorio, descartando las demás opciones de búsqueda. Caso
contrario ocurre en la tercera corrida de este experimento (ver tablas 20 y 21), donde al
tener una cantidad adecuada de agentes se garantizan búsquedas diversas que permitan
encontrar a los mejores componentes, según la solicitud hecha. También, en esta ultima
corrida se puede apreciar que el C8 requerido fue hallado por unos agentes y por otros no,
lo cual indica que existe en uno de los 2 repositorios disponibles. Por otro lado, el C6 no
fue hallado por ninguno de los agentes.
50
CONCLUSIONES
Luego de realizar la investigación se llego a las siguientes conclusiones:
Se logro el objetivo principal al desarrollar un sistema que selecciona
componentes de software, inspirado en la conducta colectiva de las hormigas,
específicamente en el uso de trazas de feromona. Con el desarrollo de este
sistema se ha contribuido a la automatización de los procesos de búsqueda y
selección de componentes de software.
Se comprobó el hecho de que no siempre los criterios de selección de
componentes mas comúnmente usados (popularidad y rating) son los más
eficaces. Esto lo deducimos porque la selección hecha por los agentes se basa en
los requisitos iniciales del usuario y el desempeño de los componentes, y los
resultados obtenidos por ellos difieren de los obtenidos usando los criterios de
popularidad rating.
Para determinar un número idóneo de agentes en el sistema, debe ser tomado en
cuenta tanto la cantidad de componentes requeridos como de repositorios a ser
considerados. Es decir, el número de agentes a usar debe garantizar conseguir
todos los componentes solicitados, buscándolos a través de todos los
repositorios disponibles, esto permitiría obtener mejores resultados.
El sistema desarrollado se puede utilizar para fortalecer los procesos
relacionados a la Fábrica de Software Libre de Fundacite, que involucren la
búsqueda de componentes de software.
51
Puede ser utilizado no solo para la selección de componentes de software, sino
también para la selección de servicios, recursos etc., pues es lo suficientemente
general para ser replicado según requerimientos particulares.
52
RECOMENDACIONES
Incorporar otros repositorios de componentes y hacer más pruebas al sistema para
observar su comportamiento.
53
BIBLIOGRAFÍA
1. Bonabeau Eric, Dorigo Marco, Theraulaz Guy. Swarm Intelligence. From Natural
to Artificial Systems. Oxford University Press. 1999.
2. Jose Aguilar.
The Combinatorial Ant System for Dynamic Combinatorial
Optimization Problems. CEMISID. Computer Science Department. Universidad de
Los Andes. Technical Report.
3. Manuel F. Bertoa, José M. Troya y Antonio Vallecillo. Aspectos de calidad en el
desarrollo de software basado en componentes. Universidad de Málaga.
4. A. Vallecillo, J. Hernández, and J.M. Troya. “Object Interoperability.” In
ECOOP’99 Workshop Reader, LNCS 1743, pp. 1-21. Springer-Verlag, 1999.
5. Chung, L., Nixon, B., Yu, E., and Mylopoulos, J., “Non-Functional Requirements in
Software Engineering”. Kluwer Academic Publisher, 2000.
6. N. Rosa, C. Alves, P. Cunha, J. Castro and G. Justo. “Using Non-Functional
Requirements to Select Components: A Formal Approach.” In Proceedings of
IDEAS’01, San José, Costa Rica. April 2001.
7. Maribel Ariza Rojas, Juan Carlos Molina García. Introducción y principios básicos
del desarrollo de software basado en componentes. Septiembre 30 de 2004.
8. Rebeca P. Díaz Redondo, José J. Pazos Arias. Reutilización de requisitos
funcionales de sistemas distribuidos utilizando técnicas de descripción formal.
Febrero de 2002.
9. Pressman Roger S. “Ingeniería del Software. Un Enfoque Practico”. McGrawHill,
Cuarta Edición. 1997.
10. Billy Reinoso Carlos. “ Introducción a la Arquitectura de Software”. Versión 1.0
Marzo 2004. Universidad de Buenos Aires Argentina.
57
11. Garcia Serrano Ana, Ossowski Sascha, “Inteligencia Artificial Distribuida y
Sistemas Multiagentes”. Revista Iberoamericana de Inteligencia Artificial. Número
6 - Otoño / 98. Universidad Politecnica de Madrid, Universidad Juan Carlos de
Madrid.
12. Szyperski C.: “Component Software: Beyond Object-Oriented Programming”
Addison- Wesley, 1999.
13. Medina J.L. y Drake J.M.: “Modelado y Análisis de Tiempo Real de Aplicaciones
Basadas en Componentes” V Jornadas de Tiempo Real. Cartagena , 2002.
14. Pedro Javier Espeso Martínez. Diseño de componentes software de tiempo real.
Diciembre de 2002.
15. Dellarocas Chrysanthos. Software Component Interconection Should be Treated as
a Distinct Design Problem. MIT. Technical Report.
16. Asunción Gómez Pérez, Adolfo Lozano. Impact of Software Components
17. Characteristics above decisión-making Factors.
18. Search Engine, http://freshmeat.net, Accessed in 12/Oct/2005.
19. Rebeca P. Días Redondo, José J. Pazos Arias. Reutilización de requisitos
funcionales de sistemas distribuidos utilizando técnicas de descripción formal.
20. Blanca Abraham Z. Arquitectura inteligente de desarrollo de software.
21. Liu Y, Passino K. Swarm Intelligence: Literature Overview. Department of
Electrical Engineering. The Ohio State University. Literature Overview. March
2000.
22. Bonabeau E, Dorigo M, Theraulaz G. Swarm Intelligence. From Natural to
Artificial Systems. Oxford University Press. 1999.
23. Wooldridge, J.P. Muller, M. Tambe (eds.). Assistant Agents that Distribute HowTo-Do Knowledge. Intelligent Agents II. Lecture Notes in AI, Volume 1037.
pages408-411. Springer-Verlag, 1996.
24. Random J. Swarm Intelligence and Problem Solving in Telecommunications.
Canadian Artificial Intelligence Magazine. 1997. N. 41. p. 14-16.
25. Dorigo M., Maniezzo, V., and Colorni, A., 1991, Positive Feedback as a Search
Strategy. Technical Report No. 91-016, Politecnico di Milano, Italy.
58
26. Krishnaiyer K, Hossein S. (2002). Ant Algorithms: Review and Future
Applications, Industrial Engineering Research Conference (IERC´02), Orlando,
Florida, USA, May 2002.
27. Bullnheimer B, Hartl R and Strauss C. "Applying the Ant System to the Vehicle
Routing Problem". Paper presented at 2nd International Conference on
Metaheuristics, Sophia-Antipolis, France. 1997.
28. Aguilar J. (2004). A New Swarm Intelligence Approach for Routing Algorithms.
XIII Congreso Internacional de Computación, (CIC 2004) Mexico City, Mexico.
29. Aguilar J.
The Combinatorial Ant System for Dynamic Combinatorial
Optimization Problems. Revista de Matemática: Teoría y Aplicaciones, Vol. 12,
No. 1&2, pp. 51-60, 2005.
30. Aguilar J, Velasquez L, Pool M. "The Combinatorial Ant System", Applied
Artificial Intelligence, Taylor and Francis, Vol. 18, N. 5, pp. 427-446, 2004.
31. Abraham Blanca, Aguilar Jose. Software Component Selection Algorithm Based on
Artificial Ant Systems.
32. C. Alves and J. Castro. “Um Método Baseado em Requisitos para Seleção de
COTS” 4th Iberoamerican Workshop on Software Engineering and Software
Environment (IDEAS’01) San Jose, Costa Rica, April 2001.
33. J. Kontio, S. Chen, K. Limperos, R. Tesoreiro, G. Caldeira, and M.S. Deutsch, “A
COTS Selection Method and Experience of Its Use”. In Proceeding of the 20th
annual Software Engineering Workshop. NASA. Greenbelt, Maryland. November
1995.
34. C. Ncube and N. Maiden. “M PORE: Procurement-Oriented Requirements
Engineering Method for the Component-Based Systems Engineering Development
Paradigm”. International Workshop on Component-Based Software Engineering,
May 1999.
35. Aguilar J, Labrador M, "An Ant System-based Routing Algorithm for Sensor
Networks", Lecture Series on Computer and Computational Sciences, Brill
Academic Publishers, Volume 1, pp. 1-3, 2005.
36. A. M. Reina, J. Torres. Components + Aspects: A General Overview. Revista
Colombiana de Computación. Volumen 5 Numero 1.
59
37. Ingenieria del software basada en componentes.
38. http://www.aditel.org/jornadas/02/ponencias/bonobo/bonobo-doc/sistemas-libres
39. W.S. Humphrey. “Managing the Software Process”. Addison-Wesley, 1989.
40. Diego Puppin, Fabrizio Silvestri, Domenico Laforenza, Salvatore Orlando. A
Search Architecture For Grid Software Components.
41. Baude Francoise, Caromel Denis, Matthieu Morel. On Hierarchical, Parallel and
Distributed Components for Grid Programming.
42. Objectweb. FRACTAL Project. http://fractal.objectweb.org/tutorial/index.html
43. Julio A. Hurtado A, Lina M. Castillo P. Desarrollo de Software Basado en
Componentes en la Plataforma J2EE. Facultad de Ingenieria Electrónica y
Telecomunicaciones, Universidad del Cauca, Popayán, Colombia.
44. Vanesa Hamar, Jonas Montilva. Aspectos metodológicos del desarrollo y
reutilización de componentes de software. Mérida-Noviembre 2003.
45. Alberto C. Cárcamo. Ventajas del desarrollo basado en componentes con CCM.
Universidad Pontificia de Salamanca, Dept. Lenguajes y Sistemas. Madrid, España,
28028.
60
APÉNDICE. TABLAS
DE RESULTADOS
57
1. Experimento 1
Agente 1
Agente 1
Tabla 14. Primera corrida
C1
C2
Per/Prob/Ri
Per/Pop/Ri
Per/Rat/Ri Per/Prob/Ri Per/Pop/Ri
Per/Rat/Ri
44/0.466/2
37/107503/2
35/98.74/2 109/0.144/1 90/28942/2 94/99.71/2
41/0.274/2
40/49870/2
43/92.79/2 101/0.125/1 88/27756/2 87/98.82/2
37/0.064/2
38/48533/2
41/92.73/2
86/0.104/2 86/23005/2 91/94.72/2
43/0.049/2
39/43707/2
36/87.97/2
85/0.096/2 89/12090/2 92/93.69/2
39/0.032/2
42/41791/2
44/86.57/2 100/0.078/1 92/9620/2
93/93.69/2
Tabla 15. Segunda corrida
C1
Per/Prob/Ri Per/Pop/Ri Per/Rat/Ri Per/Prob/Ri
C2
Per/Pop/Ri
Per/Rat/Ri
40/0.3051/2 37/107503/2 35/98.74/2
93/0.3183/2
90/28942/2
94/99.71/2
41/0.2658/2 40/49870/2 43/92.79/2
86/0.2616/2
88/27756/2
87/98.82/2
44/0.1369/2 38/48533/2 41/92.73/2
85/0.2025/2
86/23005/2
91/94.72/2
39/0.0769/2 39/43707/2 36/87.97/2
87/0.0685/2
89/12090/2
92/93.69/2
37/0.0445/1 42/41791/2 44/86.57/2
94/0.0509/2
92/9620/2
93/93.69/2
Agente 2
40/0.3051/2 37/107503/2 35/98.74/2 109/0.6592/1 109/3583.8/1 109/8.71/1
41/0.2658/2 40/49870/2 43/92.79/2 108/0.1157/1 100/683.82/1 81/8.31/1
44/0.1369/2 38/48533/2 41/92.73/2 102/0.0662/1
81/677.95/1
101/8.2/1
39/0.0769/2 39/43707/2 36/87.97/2 104/0.02968/1 101/303.53/1
98/0.0/1
37/0.0445/1 42/41791/2 44/86.57/2 100/0.0198/1 110/262.58/1
99/0.0/1
Agente 1
Tabla 16. Tercera corrida
Per/Prob/Ri
C2
Per/Pop/Ri
Per/Rat/Ri
38/0.5347/1 37/107503/2 35/98.74/2 85/0.7744/2
90/28942/2
85/99.76/2
39/0.1495/2
88/27756/2
94/99.71/2
Per/Prob/Ri
C1
Per/Pop/Ri
Per/Rat/Ri
40/49870/2 43/92.79/2 90/0.2098/2
58
37/0.0475/1 38/48533/2 41/92.73/2
94/0.0079/2 86/23005/2
87/98.82/2
36/0.0468/1 39/43707/2 36/87.97/2
89/0.0016/2 89/12090/2
91/94.72/2
43/0.0276/2
42/41792/2 44/86.57/2 91/0.0011/2
92/9620/2
92/93.69/2
Agente 2
39/0.5518/2 37/107503/2 35/98.74/2 107/0.2334/1 109/3583.8/1 109/8.71/1
43/0.1021/2
40/49870/2 43/92.79/2 108/0.1436/1 100/683.82/1 81/8.31/1
38/0.0950/2
38/48533/2 41/92.73/2 112/0.1265/1 81/677.95/1
101/8.2/1
37/0.0711/2
39/43707/2 36/87.97/2 81/0.0995/1 101/303.53/1
98/0.0/1
Agente 3
40/0.0457/2
42/41792
44/86.57/2 111/0.0896/1 110/262.58/1
99/0.0/1
39/0.5518/2 37/107503/2 35/98.74/2 85/0.7453/2
90/28942/2
94/99.71/2
43/0.1021/2
40/49870/2 43/92.79/2 90/0.2020/2
88/27756/2
87/98.82/2
38/0.0950/2
38/48533/2 41/92.73/2 107/0.0087/1 86/23005/2
91/94.72/2
37/0.0711/2
39/43707/2 36/87.97/2 94/0.0076/2
89/12090/2
92/93.69/2
40/0.0457/2
42/41791/2 44/86.57/2 108/0.0053/1
92/9620/2
93/93.69/2
Per/Rat/Ri
Agente 3
Agente 2
Agente 1
Tabla 17. Cuarta corrida
C1
Per/Prob/Ri Per/Pop/Ri
Per/Rat/Ri
Per/Prob/Ri
C2
Per/Pop/Ri
38/0.7201/1 45/1100.9/1
37/8.32/1
90/0.5787/2
90/28942/2
94/99.71/2
36/0.0888/1 38/780.6/1
38/8.11/1
85/0.3044/2
88/27756/2
87/98.82/2
45/0.0723/1 37/395.36/1
45/8.11/1
94/0.0509/2
86/23005/2
91/94.72/2
39/0.0278/1 41/331.76/1
35/8.09/1
89/0.0296/2
89/12090/2
92/93.69/2
37/0.0265/1 44/227.61/1
42/8.02/1
88/0.0088/2
92/9620/2
93/93.69/2
38/0.7201/1 45/1100.9/1
37/8.32/1
90/0.4955/2
90/28942/2
94/99.71/2
36/0.0888/1 38/780.6/1
38/8.11/1
85/0.2606/2
88/27756/2
87/98.82/2
45/0.0723/1 37/395.36/1
45/8.11/1
94/0.0436/2
86/23005/2
91/94.72/2
39/0.0278/1 41/331.76/1
35/8.09/1
89/0.0253/2
89/12090/2
92/93.69/2
37/0.0265/1 44/227.61/1
42/8.02/1 107/0.0246/1
92/9620/2
93/93.69/2
40/0.3349/2 37/107503/2 35/98.74/2 90/0.4955/2
90/28942/2
94/99.71/2
41/0.2666/2 40/49870/2 43/92.79/2 85/0.2606/2
88/27756/2
87/98.82/2
36/0.1451/2 38/48533/2 41/92.73/2 94/0.0436/2
86/23005/2
91/94.72/2
59
35/0.1391/2 39/43707/2 36/87.97/2 89/0.0253/2
89/12090/2
92/93.69/2
39/0.1391/2 42/41791/2 44/86.57/2 107/0.0246/1
92/9620/2
93/93.69/2
Agente 5
Agente 4
38/0.4044/1 37/107503/2 35/98.74/2 107/0.1711/1 109/3583.8/1 109/8.71/1
40/0.1468/2 40/49870/2 43/92.79/2 100/0.1485/1 100/683.82/1 81/8.31/1
41/0.1169/2 38/48533/2 41/92.73/2 81/0.1219/1
81/677.95/1
101/8.2/1
36/0.0636/2 39/43707/2 36/87.97/2 102/0.0951/1 101/303.53/1
98/0.0/1
35/0.0610/2 42/41791/2 44/86.57/2 108/0.0948/1 110/262.58/1
99/0.0/1
40/0.3349/2 37/107503/2 35/98.74/2 90/0.5787/2
90/28942/2
94/99.71/2
41/0.2666/2 40/49870/2 43/92.79/2 85/0.3044/2
88/27756/2
87/98.82/2
36/0.1451/2 38/48533/2 41/92.73/2 94/0.0509/2
86/23005/2
91/94.72/2
35/0.1391/2 39/43707/2 36/87.97/2 89/0.0296/2
89/12090/2
92/93.69/2
39/0.1391/2 42/41791/2 44/86.57/2 88/0.0088/2
92/9620/2
93/93.69/2
Agente 9
Agente 8
Agente 7
Agente 6
38/0.4044/1 37/107503/2 35/98.74/2 107/0.1711/1 109/3583.8/1 109/8.71/1
40/0.1468/2 40/49870/2 43/92.79/2 100/0.1485/1 100/683.82/1 81/8.31/1
41/0.1169/2 38/48533/2 41/92.73/2 81/0.1219/1
81/677.95/1
101/8.2/1
36/0.0636/2 39/43707/2 36/87.97/2 102/0.0951/1 101/303.53/1
98/0.0/1
35/0.0610/2 42/41791/2 44/86.57/2 108/0.0948/1 110/262.58/1
99/0.0/1
40/0.3349/2 37/107503/2 35/98.74/2 90/0.4955/2
90/28942/2
94/99.71/2
41/0.2666/2 40/49870/2 43/92.79/2 85/0.2606/2
88/27756/2
87/98.82/2
36/0.1451/2 38/48533/2 41/92.73/2 94/0.0436/2
86/23005/2
91/94.72/2
35/0.1391/2 39/43707/2 36/87.97/2 89/0.0253/2
89/12090/2
92/93.69/2
39/0.1391/2 42/41791/2 44/86.57/2 107/0.0246/1
92/9620/2
93/93.69/2
38/0.4044/1 37/107503/2 35/98.74/2 90/0.5787/2
90/28942/2
94/99.71/2
40/0.1468/2 40/49870/2 43/92.79/2 85/0.3044/2
88/27756/2
87/98.82/2
41/0.1169/2 38/48533/2 41/92.73/2 94/0.0509/2
86/23005/2
91/94.72/2
36/0.0636/2 39/43707/2 36/87.97/2 89/0.0296/2
89/12090/2
92/93.69/2
35/0.0610/2 42/41791/2 44/86.57/2 88/0.0088/2
92/9620/2
93/93.69/2
38/0.4044/1 37/107503/2 35/98.74/2 90/0.4955/2
90/28942/2
94/99.71/2
40/0.1468/2 40/49870/2 43/92.79/2 85/0.2606/2
88/27756/2
87/98.82/2
41/0.1169/2 38/48533/2 41/92.73/2 94/0.0436/2
86/23005/2
91/94.72/2
60
Agente 10
36/0.0636/2 39/43707/2 36/87.97/2 89/0.0253/2
89/12090/2
92/93.69/2
35/0.0610/2 42/41791/2 44/86.57/2 107/0.0246/1
92/9620/2
93/93.69/2
38/0.7201/1 45/1100.9/1
37/8.32/1
90/0.4955/2
90/28942/2
94/99.71/2
36/0.0888/1 38/780.6/1
38/8.11/1
85/0.2606/2
88/27756/2
87/98.82/2
45/0.0723/1 37/395.36/1
45/8.11/1
94/0.0436/2
86/23005/2
91/94.72/2
39/0.0278/1 41/331.76/1
35/8.09/1
89/0.0253/2
89/12090/2
92/93.69/2
37/0.0265/1 44/227.61/1
42/8.02/1 107/0.0246/1
92/9620/2
93/93.69/2
61
2. Experimento 2
Agente 1
Agente 1
Tabla 18. Primera corrida
Per/Prob/Ri
C1
Per/Pop/Ri
Per/Rat/Ri
C3
Per/Pop/Ri
Per/Prob/Ri
C4
Per/Pop/Ri
Per/Rat/Ri
Per/Rat/Ri
33/0.7957/1
28/426.6/1
23/0.0/1
62/0.4050/2 22/113010/2 21/85.24/2 78/0.2617/2 75/94782/2
84/93.8/2
55/0.2327/1
58/574.5/1
50/8.48/1
32/0.0846/1
24/346.9/1
24/0.0/1
101/0.0981/2 23/113010/2 64/85.24/2 80/0.1969/2 81/90383/2
78/93.6/2
50/0.1910/1
55/523.9/1
55/8.44/1
25/0.0236/1
34/282.9/1
25/0.0/1
69/0.0628/2 70/113010/2 20/85.05/2 82/0.1183/2 76/88915/2
79/93.6/2
49/0.1820/1
50/255.9/1
53/8.4/1
27/0.0196/1
27/226.3/1
26/0.0/1
72/0.0469/2 71/104910/2 63/85.05/2 79/0.1051/2 74/68795/2
80/92.1/2
56/0.0778/1
52/192.6/1
58/8.38/1
23/0.0164/1
29/226.3/1
27/0.0/1
95/0.0436/2
61/98194/2 69/85.05/2 75/0.0836/2 83/34283/2
82/90.1/2
57/0.0543/1
54/192.3/1
52/8.04/1
Per/Prob/Ri
C5
Per/Pop/Ri
Per/Prob/Ri
C6
Per/Pop/Ri
Per/Prob/Ri
C8
Per/Pop/Ri
Per/Rat/Ri
Per/Rat/Ri
Per/Prob/Ri
C2
Per/Pop/Ri
Per/Rat/Ri Per/Prob/Ri
Per/Rat/Ri Per/Prob/Ri
C7
Per/Pop/Ri
Per/Rat/Ri
104/0.4371/1 109/3583.8/1 109/8.71/1
36/0.5357/2 37/107503/2 35/98.74/2 101/0.5006/2 100/48245/2 95/68.34/2
101/0.1608/1
100/683/1
81/8.31/1
35/0.1618/1 40/49870/2 43/92.79/2 95/0.2783/2
110/0.0865/1
81/677.9/1
101/8.2/1
102/0.0661/1 101/303.5/1
98/0.0/1
41/0.0359/2 39/43707/2 36/87.97/2 97/0.0465/2 101/15675/2 99/18.7/2
100/0.0409/1 110/262.5/1
99/0.0/1
39/0.0290/1 42/41791/2 44/86.57/2 99/0.0357/2
No encontrado
98/45684/2 101/57.4/2
37/0.0444/1 38/48533/2 41/92.73/2 100/0.1102/2 96/21349/2 98/26.35/2
95/8164/2
97/8.12/2
Agente 2
Agente 1
Tabla 19. Segunda corrida
Per/Prob/Ri
C1
Per/Pop/Ri Per/Rat/Ri
Per/Prob/Ri
C3
Per/Pop/Ri
Per/Rat/Ri
Per/Prob/Ri
C4
Per/Pop/Ri
Per/Rat/Ri
33/0.8029/1
28/426.6/1
23/0.0/1
63/0.5230/2 22/113010/2 21/85.24/2 82/0.6733/2 75/94782/2
84/93.8/2
55/0.4965/1
58/574.5/1
50/8.48/1
32/0.0428/1
24/346.9/1
24/0.0/1
62/0.1706/2 23/113010/2 64/85.24/2 75/0.1037/2 81/90383/2
78/93.6/2
46/0.0931/1
55/523.9/1
55/8.44/1
23/0.0284/1
34/282.9/1
25/0.0/1
100/0.0524/2 70/113010/2 20/85.05/2 78/0.0911/2 76/88915/2
79/93.6/2
50/0.0859/1
50/255.9/1
53/8.4/1
27/0.0253/1
27/226.3/1
26/0.0/1
23/0.0444/2 71/104910/2 63/85.05/2 80/0.0495/2 74/68795/2
80/92.1/2
49/0.0773/1
52/192.6/1
58/8.38/1
25/0.0202/1
29/226.3/1
27/0.0/1
69/0.0230/2
61/98194/2 69/85.05/2 81/0.0309/2 83/34283/2
82/90.1/2
52/0.0719/1
54/192.3/1
52/8.04/1
34/0.6455/2 34/65624/2 33/88.23/2 63/0.5230/2 22/113010/2 21/85.24/2 82/0.6733/2 75/94782/2
84/93.8/2
55/0.4965/1
58/574.5/1
50/8.48/1
33/0.0734/2 32/34605/2 30/86.94/2 62/0.1706/2 23/113010/2 64/85.24/2 75/0.1037/2 81/90383/2
78/93.6/2
46/0.0931/1
55/523.9/1
55/8.44/1
32/0.0732/2 44/20469/2 31/86.94/2 100/0.0524/2 70/113010/2 20/85.05/2 78/0.0911/2 76/88915/2
79/93.6/2
50/0.0859/1
50/255.9/1
53/8.4/1
44/0.0695/2 30/19899/2 44/86.57/2 23/0.0444/2 71/104910/2 63/85.05/2 80/0.0495/2 74/68795/2
80/92.1/2
49/0.0773/1
52/192.6/1
58/8.38/1
25/0.0476/2 31/19899/2 32/77.29/2 69/0.0230/2
82/90.1/2
52/0.0719/1
54/192.3/1
52/8.04/1
Per/Prob/Ri
C8
Per/Pop/Ri
Per/Rat/Ri
Per/Prob/Ri
C5
Per/Pop/Ri Per/Rat/Ri
Per/Prob/Ri
C2
Per/Pop/Ri
61/98194/2 69/85.05/2 81/0.0309/2 83/34283/2
C6
Per/Pop/Ri
Agente 2
Agente 1
111/0.2860/1 90/28942/2 94/99.7/2
104/0.1135/1 88/27756/2 87/98.8/2
90/0.0863/2 86/23005/2 91/94.7/2
Per/Rat/Ri Per/Prob/Ri
Per/Rat/Ri Per/Prob/Ri
C7
Per/Pop/Ri
Per/Rat/Ri
36/0.5095/2 37/107503/2 35/98.74/2 100/0.2386/2 100/48245/2 95/68.34/2
No encontrado
35/0.1078/1 40/49870/2 43/92.79/2 95/0.2028/2
98/45684/2 101/57.4/2
37/0.0632/1 38/48533/2 41/92.73/2 98/0.1549/2
96/21349/2 98/26.35/2
94/0.0648/2 89/12090/2 92/93.6/2
41/0.0461/1 39/43707/2 36/87.97/2 97/0.1498/2 101/15675/2 99/18.7/2
110/0.0492/1 92/9620/2
40/0.0341/2 42/41791/2 44/86.57/2 101/0.1213/2
93/93.6/2
95/8164/2
97/8.12/2
111/0.2860/1 90/28942/2 94/99.7/2
36/0.5095/2 37/107503/2 35/98.74/2 100/0.2386/2 100/48245/2 95/68.34/2
104/0.1135/1 88/27756/2 87/98.8/2
35/0.1078/1 40/49870/2 43/92.79/2 95/0.2028/2
98/45684/2 101/57.4/2
37/0.0632/1 38/48533/2 41/92.73/2 98/0.1549/2
96/21349/2 98/26.35/2
90/0.0863/2 86/23005/2 91/94.7/2
No encontrado
94/0.0648/2 89/12090/2 92/93.6/2
41/0.0461/1 39/43707/2 36/87.97/2 97/0.1498/2 101/15675/2 99/18.7/2
110/0.0492/1 92/9620/2
40/0.0341/2 42/41791/2 44/86.57/2 101/0.1213/2
93/93.6/2
95/8164/2
97/8.12/2
Tabla 20. Tercera corrida
Agente 4
Agente 3
Agente 2
Agente 1
C4
C1
C2
Per/Prob/Ri Per/Pop/Ri Per/Rat/Ri
Per/Prob/Ri
Per/Pop/Ri
Per/Rat/Ri Per/Prob/Ri Per/Pop/Ri Per/Rat/Ri Per/Prob/Ri Per/Pop/Ri Per/Rat/Ri
34/0.1338/2 34/65624/2 33/88.23/2 73/0.5577/1
18/436.7/1
59/8.41/1 78/0.2096/2 75/94782/2 78/93.63/2 49//0.5298/1 58/574.5/1
50/8.48/1
27/0.1156/1 32/34605/2 30/86.94/2 17/0.0687/1
69/436.7/1
14/0.0/1
88/0.1505/1 81/90383/2 79/93.63/2 57/ 0.2057/1 55/523.9/1
55/8.44/1
29/0.1070/1 44/20469/2 31/86.94/2 14/0.0637/1
75/436.7/1
18/0.0/1
82/0.1057/2 74/68795/2 74/54.85/2 47/ 0.0560/1 50/255.9/1
53/8.4/1
28/0.0788/2 30/19899/2 44/86.57/2 62/0.0265/1
59/231.6/1
60/0.0/1
87/0.1027/1
78/9701/2
81/40.68/2 46/ 0.0436/1 52/192.6/1
58/8.38/1
44/0.0768/2 31/19899/2 32/77.29/2 70/0.0220/1
71/175.9/1
61/0.0/1
89/0.0705/1
79/9701/2
75/37.79/2 56/ 0.0262/1 54/192.3/1
52/8.04/1
27/0.2136/1 28/426.6/1
23/0.0/1
73/0.5577/1
18/436.7/1
59/8.41/1 78/0.2096/2 75/94782/2 78/93.63/2 49/0.4333/1 48/92694/2 46/99.2/2
29/0.1978/1 24/346.9/1
24/0.0/1
17/0.0687/1
69/436.7/1
14/0.0/1
88/0.1505/1 81/90383/2 79/93.63/2 57/0.1682/1 49/92694/2 53/95.9/2
26/0.1163/1 34/282.9/1
25/0.0/1
14/0.0637/1
75/436.7/1
18/0.0/1
82/0.1057/2 74/68795/2 74/54.85/2 47/0.0457/1 54/49197/2 47/95.8/2
34/0.1065/1 27/226.3/1
26/0.0/1
62/0.0265/1
59/231.6/1
60/0.0/1
87/0.1027/1
78/9701/2
81/40.68/2 46/0.0357/1 45/38169/2 52/93.3/2
30/0.1043/1 29/226.3/1
27/0.0/1
70/0.0220/1
71/175.9/1
61/0.0/1
89/0.0705/1
79/9701/2
75/37.79/2 53/0.0251/2 51/28828/2 11/91.5/2
27/0.2136/1 28/426.6/1
23/0.0/1
73/0.5577/1
18/436.7/1
59/8.41/1 78/0.2096/2 75/94782/2 78/93.63/2 49//0.5298/1 58/574.5/1
50/8.48/1
29/0.1978/1 24/346.9/1
24/0.0/1
17/0.0687/1
69/436.7/1
14/0.0/1
88/0.1505/1 81/90383/2 79/93.63/2 57/ 0.2057/1 55/523.9/1
55/8.44/1
26/0.1163/1 34/282.9/1
25/0.0/1
14/0.0637/1
75/436.7/1
18/0.0/1
82/0.1057/2 74/68795/2 74/54.85/2 47/ 0.0560/1 50/255.9/1
53/8.4/1
34/0.1065/1 27/226.3/1
26/0.0/1
62/0.0265/1
59/231.6/1
60/0.0/1
87/0.1027/1
78/9701/2
81/40.68/2 46/ 0.0436/1 52/192.6/1
58/8.38/1
30/0.1043/1 29/226.3/1
27/0.0/1
70/0.0220/1
71/175.9/1
61/0.0/1
89/0.0705/1
79/9701/2
75/37.79/2 56/ 0.0262/1 54/192.3/1
52/8.04/1
27/0.2136/1 28/426.6/1
23/0.0/1
72/0.2431/2 22/113010/2 21/85.24/2 78/0.4637/2 75/94782/2
84/93.8/2 49//0.5298/1 58/574.5/1
50/8.48/1
29/0.1978/1 24/346.9/1
24/0.0/1
3/0.2213/1
23/113010/2 64/85.24/2 82/0.2338/2 81/90383/2
78/93.6/2 57/ 0.2057/1 55/523.9/1
55/8.44/1
26/0.1163/1 34/282.9/1
25/0.0/1
70/0.1392/2 70/113010/2 20/85.05/2 80/0.0551/2 76/88915/2
79/93.6/2 47/ 0.0560/1 50/255.9/1
53/8.4/1
34/0.1065/1 27/226.3/1
26/0.0/1
17/0.0272/1 71/104910/2 63/85.05/2 74/0.0544/2 74/68795/2
80/92.1/2 46/ 0.0436/1 52/192.6/1
58/8.38/1
30/0.1043/1 29/226.3/1
27/0.0/1
14/0.0252/1
61/98194/2 69/85.05/2 83/0.0525/2 83/34283/2
82/90.1/2 56/ 0.0262/1 54/192.3/1
52/8.04/1
18/436.7/1
93/8.34/1 49//0.5298/1 58/574.5/1
50/8.48/1
34/0.2916/2 34/65624/2 33/88.23/2 73/0.5577/1
C3
59/8.41/1 88/0.2748/1 93/750.6/1
Agente 5
Agente 6
Agente 7
Agente 8
Agente 9
28/0.1718/2 32/34605/2 30/86.94/2 17/0.0687/1
69/436.7/1
14/0.0/1
87/0.1874/1 92/555.4/1
92/8.22/1 57/ 0.2057/1 55/523.9/1
55/8.44/1
44/0.1675/2 44/20469/2 31/86.94/2 14/0.0637/1
75/436.7/1
18/0.0/1
89/0.1288/1 89/313.06/1 85/8.12/1 47/ 0.0560/1 50/255.9/1
53/8.4/1
30/0.1554/2 30/19899/2 44/86.57/2 62/0.0265/1
59/231.6/1
60/0.0/1
95/0.0748/1 97/240.38/1 95/7.98/1 46/ 0.0436/1 52/192.6/1
58/8.38/1
32/0.0944/2 31/19899/2 32/77.29/2 70/0.0220/1
71/175.9/1
61/0.0/1
84/0.0548/1 12/148.19/1 89/7.66/1 56/ 0.0262/1 54/192.3/1
52/8.04/1
34/0.2916/2 34/65624/2 33/88.23/2 72/0.4031/2 22/113010/2 21/85.24/2 78/0.2096/2 75/94782/2 78/93.63/2 49//0.5298/1 58/574.5/1
50/8.48/1
28/0.1718/2 32/34605/2 30/86.94/2 70/0.2308/2 23/113010/2 64/85.24/2 88/0.1505/1 81/90383/2 79/93.63/2 57/ 0.2057/1 55/523.9/1
55/8.44/1
44/0.1675/2 44/20469/2 31/86.94/2 61/0.0361/2 70/113010/2 20/85.05/2 82/0.1057/2 74/68795/2 74/54.85/2 47/ 0.0560/1 50/255.9/1
53/8.4/1
30/0.1554/2 30/19899/2 44/86.57/2 101/0.0328/2 71/104910/2 63/85.05/2 87/0.1027/1
78/9701/2
81/40.68/2 46/ 0.0436/1 52/192.6/1
58/8.38/1
32/0.0944/2 31/19899/2 32/77.29/2 59/0.0326/2
61/98194/2 69/85.05/2 89/0.0705/1
79/9701/2
75/37.79/2 56/ 0.0262/1 54/192.3/1
52/8.04/1
27/0.2136/1 28/426.6/1
23/0.0/1
72/0.4031/2
22/113010/2 21/85.24/2 78/0.2096/2 75/94782/2 78/93.63/2 49/0.4333/1 48/92694/2 46/99.2/2
29/0.1978/1 24/346.9/1
24/0.0/1
70/0.2308/2
23/113010/2 64/85.24/2 88/0.1505/1 81/90383/2 79/93.63/2 57/0.1682/1 49/92694/2 53/95.9/2
26/0.1163/1 34/282.9/1
25/0.0/1
61/0.0361/2 70/113010/2 20/85.05/2 82/0.1057/2 74/68795/2 74/54.85/2 47/0.0457/1 54/49197/2 47/95.8/2
34/0.1065/1 27/226.3/1
26/0.0/1
101/0.0328/2 71/104910/2 63/85.05/2 87/0.1027/1
78/9701/2
81/40.68/2 46/0.0357/1 45/38169/2 52/93.3/2
30/0.1043/1 29/226.3/1
27/0.0/1
59/0.0326/2
61/98194/2 69/85.05/2 89/0.0705/1
79/9701/2
75/37.79/2 53/0.0251/2 51/28828/2 11/91.5/2
27/0.2136/1 28/426.6/1
23/0.0/1
72/0.4031/2
22/113010/2 21/85.24/2 78/0.2096/2 75/94782/2 78/93.63/2 49/0.4333/1 48/92694/2 46/99.2/2
29/0.1978/1 24/346.9/1
24/0.0/1
70/0.2308/2
23/113010/2 64/85.24/2 88/0.1505/1 81/90383/2 79/93.63/2 57/0.1682/1 49/92694/2 53/95.9/2
26/0.1163/1 34/282.9/1
25/0.0/1
61/0.0361/2 70/113010/2 20/85.05/2 82/0.1057/2 74/68795/2 74/54.85/2 47/0.0457/1 54/49197/2 47/95.8/2
34/0.1065/1 27/226.3/1
26/0.0/1
101/0.0328/2 71/104910/2 63/85.05/2 87/0.1027/1
78/9701/2
81/40.68/2 46/0.0357/1 45/38169/2 52/93.3/2
30/0.1043/1 29/226.3/1
27/0.0/1
59/0.0326/2
79/9701/2
75/37.79/2 53/0.0251/2 51/28828/2 11/91.5/2
34/0.2916/2 34/65624/2 33/88.23/2 72/0.4031/2
22/113010/2 21/85.24/2 88/0.2748/1 93/750.6/1
93/8.34/1 49/0.4333/1 48/92694/2 46/99.2/2
28/0.1718/2 32/34605/2 30/86.94/2 70/0.2308/2
23/113010/2 64/85.24/2 87/0.1874/1 92/555.4/1
92/8.22/1 57/0.1682/1 49/92694/2 53/95.9/2
61/98194/2 69/85.05/2 89/0.0705/1
44/0.1675/2 44/20469/2 31/86.94/2 61/0.0361/2 70/113010/2 20/85.05/2 89/0.1288/1 89/313.06/1 85/8.12/1 47/0.0457/1 54/49197/2 47/95.8/2
30/0.1554/2 30/19899/2 44/86.57/2 101/0.0328/2 71/104910/2 63/85.05/2 95/0.0748/1 97/240.38/1 95/7.98/1 46/0.0357/1 45/38169/2 52/93.3/2
32/0.0944/2 31/19899/2 32/77.29/2 59/0.0326/2
61/98194/2 69/85.05/2 84/0.0548/1 12/148.19/1 89/7.66/1 53/0.0251/2 51/28828/2 11/91.5/2
Agente 10
27/0.2136/1 28/426.6/1
23/0.0/1
72/0.4031/2
22/113010/2 21/85.24/2 88/0.2748/1 93/750.6/1
93/8.34/1
53/0.1378/2 48/92694/2 46/99.2/2
29/0.1978/1 24/346.9/1
24/0.0/1
70/0.2308/2
23/113010/2 64/85.24/2 87/0.1874/1 92/555.4/1
92/8.22/1
48/0.1230/2 49/92694/2 53/95.9/2
26/0.1163/1 34/282.9/1
25/0.0/1
61/0.0361/2 70/113010/2 20/85.05/2 89/0.1288/1 89/313.06/1 85/8.12/1
46/0.0991/2 54/49197/2 47/95.8/2
34/0.1065/1 27/226.3/1
26/0.0/1
101/0.0328/2 71/104910/2 63/85.05/2 95/0.0748/1 97/240.38/1 95/7.98/1
50/0.0939/2 45/38169/2 52/93.3/2
30/0.1043/1 29/226.3/1
27/0.0/1
59/0.0326/2
45/0.0922/2 51/28828/2 11/91.5/2
61/98194/2 69/85.05/2 84/0.0548/1 12/148.19/1 89/7.66/1
Tabla 21. Continuación Tercera corrida
Agente 3
Agente 2
Agente 1
C5
C6
C7
C8
Per/Prob/Ri
Per/Pop/Ri
Per/Rat/Ri Per/Prob/Ri Per/Pop/Ri Per/Rat/Ri Per/Prob/Ri
104/0.5060/1
90/28942/2
94/99.7/2
38/0.7338/1 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
36/0.0548/1 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
103/0.0358/1
89/12090/2
92/93.6/2
37/0.0292/1 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
100/0.0250/1
92/9620/2
93/93.6/2
41/0.0288/1 42/41791/2 44/86.57/2 99/ 0.1035/2
104/0.5060/1
90/28942/2
94/99.7/2
38/0.7338/1 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
36/0.0548/1 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
103/0.0358/1
89/12090/2
92/93.6/2
37/0.0292/1 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
100/0.0250/1
92/9620/2
93/93.6/2
41/0.0288/1 42/41791/2 44/86.57/2 99/ 0.1035/2
104/0.5060/1
90/28942/2
94/99.7/2
38/0.8251/1 45/1100.9/1
37/8.32/1 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
36/0.0617/1
38/780.6/1
38/8.11/1 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
37/0.0329/1
37/395.3/1
45/8.11/1 98/ 0.1439/2
103/0.0358/1
89/12090/2
92/93.6/2
41/0.0324/1
41/331.7/1
35/8.09/1 97/ 0.1067/2 101/15675/2 99/18.7/2
No encontrado
No encontrado
No encontrado
Per/Pop/Ri
Per/Rat/Ri
Per/Prob/Ri
38/0.0365/2 38/48533/2 41/92.73/2 98/ 0.1439/2
38/0.0365/2 38/48533/2 41/92.73/2 98/ 0.1439/2
Per/Pop/Ri
Per/Rat/Ri
96/21349/2 98/26.35/2
95/8164/2
97/8.12/2
96/21349/2 98/26.35/2
95/8164/2
97/8.12/2
96/21349/2 98/26.35/2
Agente 8
Agente 7
Agente 6
Agente 5
Agente 4
100/0.0250/1
92/9620/2
93/93.6/2
45/0.0116/1
44/227.6/1
42/8.02/1 99/ 0.1035/2
95/8164/2
97/8.12/2
104/0.6677/1 109/3583.8/1 109/8.71/1
38/0.7338/1 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
102/0.0766/1
100/683/1
81/8.31/1
36/0.0548/1 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
103/0.0473/1
81/677.9/1
101/8.2/1
38/0.0365/2 38/48533/2 41/92.73/2 98/ 0.1439/2
100/0.0330/1 101/303.5/1
98/0.0/1
107/0.0299/1 110/262.5/1
99/0.0/1
41/0.0288/1 42/41791/2 44/86.57/2 99/ 0.1035/2
90/0.6104/2
90/28942/2
94/99.7/2
38/0.7338/1 37/107503/2 35/98.74/2
87/0.0580/2
88/27756/2
87/98.8/2
36/0.0548/1 40/49870/2 43/92.79/2
93/0.0550/2
86/23005/2
91/94.7/2
85/0.0506/2
89/12090/2
92/93.6/2
37/0.0292/1 39/43707/2 36/87.97/2
88/0.0465/2
92/9620/2
93/93.6/2
41/0.0288/1 42/41791/2 44/86.57/2
No encontrado
No encontrado
96/21349/2 98/26.35/2
37/0.0292/1 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
38/0.0365/2 38/48533/2 41/92.73/2
95/8164/2
97/8.12/2
No encontrado
104/0.6677/1 109/3583.8/1 109/8.71/1
38/0.8251/1 45/1100.9/1
37/8.32/1
102/0.0766/1
100/683/1
81/8.31/1
36/0.0617/1
38/780.6/1
38/8.11/1
103/0.0473/1
81/677.9/1
101/8.2/1
37/0.0329/1
37/395.3/1
45/8.11/1
100/0.0330/1 101/303.5/1
98/0.0/1
41/0.0324/1
41/331.7/1
35/8.09/1
107/0.0299/1 110/262.5/1
99/0.0/1
45/0.0116/1
44/227.6/1
42/8.02/1
104/0.5060/1
90/28942/2
94/99.7/2
38/0.7338/1 37/107503/2 35/98.74/2
90/ 0.1478/2
88/27756/2
87/98.8/2
36/0.0548/1 40/49870/2 43/92.79/2
102/0.0580/1
86/23005/2
91/94.7/2
103/0.0358/1
89/12090/2
92/93.6/2
37/0.0292/1 39/43707/2 36/87.97/2
100/0.0250/1
92/9620/2
93/93.6/2
41/0.0288/1 42/41791/2 44/86.57/2
104/0.5060/1
90/28942/2
94/99.7/2
38/0.3304/2 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
40/0.1251/2 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
41/0.1084/2 38/48533/2 41/92.73/2 98/ 0.1439/2
No encontrado
No encontrado
38/0.0365/2 38/48533/2 41/92.73/2
No encontrado
No encontrado
96/21349/2 98/26.35/2
Agente 9
Agente 10
103/0.0358/1
89/12090/2
92/93.6/2
44/0.1012/2 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
100/0.0250/1
92/9620/2
93/93.6/2
104/0.5060/1
90/28942/2
94/99.7/2
38/0.3304/2 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
40/0.1251/2 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
103/0.0358/1
89/12090/2
92/93.6/2
44/0.1012/2 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
100/0.0250/1
92/9620/2
93/93.6/2
43/0.0716/2 42/41791/2 44/86.57/2 99/ 0.1035/2
104/0.5060/1
90/28942/2
94/99.7/2
38/0.7338/1 37/107503/2 35/98.74/2 101/0.3396/2 100/48245/2 95/68.34/2
90/ 0.1478/2
88/27756/2
87/98.8/2
36/0.0548/1 40/49870/2 43/92.79/2 100/0.1882/2 98/45684/2 101/57.4/2
102/0.0580/1
86/23005/2
91/94.7/2
103/0.0358/1
89/12090/2
92/93.6/2
37/0.0292/1 39/43707/2 36/87.97/2 97/ 0.1067/2 101/15675/2 99/18.7/2
100/0.0250/1
92/9620/2
93/93.6/2
41/0.0288/1 42/41791/2 44/86.57/2 99/ 0.1035/2
No encontrado
No encontrado
No encontrado
43/0.0716/2 42/41791/2 44/86.57/2 99/ 0.1035/2
41/0.1084/2 38/48533/2 41/92.73/2 98/ 0.1439/2
38/0.0365/2 38/48533/2 41/92.73/2 98/ 0.1439/2
95/8164/2
97/8.12/2
96/21349/2 98/26.35/2
95/8164/2
97/8.12/2
96/21349/2 98/26.35/2
95/8164/2
97/8.12/2
Descargar