4. Trabajos relacionados
4.4. Enfoque basado en algoritmos genéticos
en otros, agregando sub-vistas a un elemento, y especificando vínculos de refinamiento explícitos entre elementos.
En forma complementaria al proceso de refinamiento, es necesaria la intervención de los agentes de análisis para producir modelos consistentes y de calidad en sistemas complejos, brindando soporte para la verificación de situaciones tales como asegurar que todos los componentes estén vinculados con otros, o verificar que cada uno de los componentes pueda ser mapeado/refinado desde una especificación OOA a una realización de diseño de clases. El meta-modelo provisto por SoftArch especifica varios tipos de validez de información (asociaciones válidas, propiedades y rango de valores asociados, refinamiento de asociaciones, etc).
Finalmente, una vez que el diseño arquitectónico está completo, es posible exportar los componentes especificados a nivel de diseño de objetos hacia herramientas CASE o entornos de programación. Los desarrolladores completan la implementación utilizando dichas herramientas. Por otro lado, el arquitecto puede analizar el comportamiento de la implementación lograda a partir de la arquitectura. Para esto, SoftArch provee soporte para analizar y corregir errores y evaluar métricas de performance del sistema.
4.4. Enfoque basado en algoritmos genéticos
Como se vió anteriormente, en lo que concierne al diseño de la aplicación tanto ArchE como DesignBots hacen uso de algoritmos de planning para llevar a cabo el proceso de búsqueda de soluciones; el enfoque Architect tratado en el presente trabajo final incor- pora algoritmos de negociación para resolver en forma conjunta el problema, dada la interdependencia de variables. Otro enfoque posible para la búsqueda de soluciones se trata de la utilización de algoritmos genéticos, concepto que será explicado brevemente en esta sección.
El modelado de una arquitectura basada en atributos de calidad puede presentarse co- mo un problema de búsqueda, en la cual se trata de determinar un patrón que satisfaga los requerimientos no funcionales dados. Una de las alternativas para la resolución de este tipo de situaciones puede darse mediante el uso y aplicación de algoritmos gené- ticos (GAs). Los algoritmos genéticos son métodos de búsqueda basados en principios de selección natural y genética [Sastry et al., 2005].
Este enfoque codifica las variables de decisión de un problema de búsqueda como cade- nas finitas de un alfabeto con determinada cardinalidad. Las cadenas que constituyen
4.4 Enfoque basado en algoritmos genéticos
soluciones candidatas al problema de búsqueda se denominan cromosomas, mientras que los elementos que conforman la cadena se conocen como genes, y cada uno de los valores de estos genes se identifican como alelos.
Para implementar el modelo de selección natural asegurando la calidad de las solu- ciones obtenidas, es necesario determinar una forma de distinguir soluciones “buenas” de las “malas”. Esto es llevado a cabo mediante la definición de una función objetiva, basada en un modelo matemático o una simulación computacional; o bien una función subjetiva basada en el juicio del usuario. Esta función que determina la probabilidad de que una solución/cromosoma sea seleccionado para conformar una próxima generación se denomina función de fitness.
Una vez que el problema ha sido modelado utilizando los conceptos anteriores, se pueden desarrollar posibles soluciones a la problemática de búsqueda mediante la aplicación del siguiente proceso [Sastry et al., 2005]:
1. Inicialización: La población inicial de soluciones candidatas es generado al azar sobre el espacio de búsqueda. De todas formas, es posible incorporar en este punto conocimiento específico sobre el domino para obtener una población inicial más ajustada a los resultados deseados.
2. Evaluación: Una vez que la población fue inicializada, o bién se ha generado una población de “descendientes”, se calculan los valores de fitness para las soluciones candidatas.
3. Selección: permite obtener copias de las soluciones evaluadas con mayor valor de fitness para su posterior procesamiento, alineando el procedimiento con el concepto de “supervivencia del más apto” entre los cromosomas de la población inicial. Para este paso existen varios procedimientos, tales como selección por el método de la ruleta, selección estocástica, selección por ranking o torneo. 4. Recombinación (crossover): combina partes de dos o más cromosomas selecciona-
dos de la población actual para formar nuevas soluciones, posiblemente mejores. En este punto también existen varios mecanismos para llevar a cabo la recom- binación, y la performance de este proceso depende en gran parte del diseño del mecanismo adoptado.
Por ejemplo, si se tienen los cromosomas a1a2a3...an y b1b2b3...bn, y se elige la
posición k < npara realizar la recombinación, entonces los cromosomas descen-
dientes serán a1a2...akbk+1...bn y b1b2...bkak+1...an. Como se mencionó anterior-
4.4 Enfoque basado en algoritmos genéticos
Figura 4.6.: Flujo de actividades de un proceso basado en Algoritmos Genéticos
5. Mutación: la mutación constituye otra forma de generar nuevas soluciones a par- tir de la población actual, mediante la modificación de alelos en forma aleatoria en los cromosomas seleccionados.
Si, por ejemplo, un cromosoma está representado por un vector de bits, una mutación básica es intercambiar un 0 por 1 o viceversa. Si se tiene el cromosoma 00101 una posible mutación del mismo sería 01101.
6. Reemplazo: La población de descendientes creada mediante la aplicación de se- lección, recombinación y mutación reemplazará a la población anterior (es decir, a sus padres). Este reemplazo puede ser parcial o total, existiendo diversas téc- nicas tales como reemplazo “elitista”, generacional, etc.
7. Se repiten los pasos 2 al 6 hasta que se alcanza una condición de fin (el algoritmo converge o se encuentra una solución que satisfaga los requerimientos dados, o bien se realizan determinada cantidad de ciclos sobre el proceso).
Lafigura 4.6sintetiza el flujo de pasos del proceso de aplicación de algoritmos genéticos anteriormente explicado.
En el proceso de desarrollo de arquitecturas de software, se sabe que es necesaria la aplicación de un conjunto de patrones de diseño para producir el modelo arquitectó- nico deseado. Esto puede ser realizado aplicando una serie de transformaciones. En consecuencia, la solución deseada consistirá en la secuencia óptima de transformacio- nes. Por otra parte, la función de fitness podría componerse de acuerdo a métricas
4.4 Enfoque basado en algoritmos genéticos
basadas sobre los atributos de calidad influyentes en la arquitectura.
A continuación se detalla una posible forma de representar el proceso de genera- ción y evaluación de arquitecturas mediante algoritmos genéticos, considerando un grafo de dependencias que representa el conjunto de responsabilidades del sistema [Räihä, 2008]:
En primera instancia, es necesario codificar las alternativas en forma de cromosomas. En este caso, la codificación elegida utiliza la idea de “supergenes” [Amoui et al., 2006]. Un cromosoma está formado por supergenes, cada uno de los cuales representa una responsabilidad en el sistema. Un supergen Gi contiene dos tipos de información: una
es la información de entrada para la responsabilidad ri (las responsabilidades que de-
penden de esta {r1i, r2i, ..., rmi}, su nombre ni, tiempo de ejecución ti, frecuencia de
uso fi, tipo di, etc); otra es la información relacionada con la posición de la respon-
sabilidad ri en la arquitectura, junto con las clases e interfaces necesarias para su
inicialización, entre otros datos. La figura 4.7 ilustra la codificación de un cromosoma con n responsabilidades.
Figura 4.7.: Codificación de un cromosoma para la representación de una arquitec- tura
Las mutaciones transforman la arquitectura en dos sentidos: a nivel de sistema, donde la mutación afecta al cromosoma completo, y a nivel de responsabilidad, donde la mu- tación afecta solamente a un supergen. El índice del cromosoma donde se realizará la mutación se elige aleatoriamente, y en consecuencia el cambio afectará a la responsa- bilidad asociada al supergen con el índice escogido. Algunas mutaciones posibles sobre un supergen Gi que representa una responsabilidad ri son:
Dividir la clase Ci en dos clases Ci y Ck
4.5 Resumen
Introducir una interface Ik a Gi
Remover una interface Ii deGi
Por otra parte, el propósito del crossover es combinar las propiedades beneficiosas de dos arquitecturas candidatas. La salida óptima de una recombinación en un punto
k podría ser que el cromosoma CR1 posea soluciones deseables respecto a interfaces,
dispatcher de mensajes y una clara estructura para las responsabilidadesr1ark, yCR2
contenga buenas soluciones para las responsabilidadesrk+1 arnpara un sistema con n
responsabilidades. En efecto, el cromosoma resultante CR12 será una combinación de
estas soluciones, constituyendo la arquitectura que mejor satisfaga los requerimientos del sistema.
Como último punto, la función de fitness deberá contemplar métricas tales como can- tidad de clases e interfaces que intervienen en cada responsabilidad y la dependencia entre estas, como forma de determinar el costo de cohesión y acoplamiento.
4.5. Resumen
Existen varias herramientas en el mercado destinadas a asistir al arquitecto en el di- seño de una arquitectura. Entre las más destacadas, ArchE y DesignBots constituyen sistemas expertos orientados a la búsqueda de posibles soluciones que apunten a me- jorar la arquitectura en base a requerimientos de atributos de calidad dados, mientras que SoftArch constituye una más de las numerosas herramientas CASE existentes brindando soporte para el modelado de una arquitectura diseñada por el arquitecto a través de componentes gráficos (sin intervención de agentes de asistencia), y validación del modelo trazado.
Tanto el diseño como la funcionalidad de Architect (la herramienta a tratar en este trabajo) están altamente influenciados por los antecedentes de ArchE y DesignBots.