GAmeraHOM


Mirando hacia adelante
¡Pero esto no acaba aquí!
Nuestros próximos pasos serán:
- Integrar la interfaz gráfica que se dispone de MuBPEL con GAmeraHOM.
- Estudiar la calidad de los mutantes generados.
- Estudiar la combinación de parámetros óptimos para el fichero de configuración.
- Ampliar GAmeraHOM a otros lenguajes.
Mirando atrás
Haciendo balance el resultado ha sido muy positivo =)
Desde el punto de vista técnico:
- Se ha creado la primera herramienta generadora de mutantes de orden superior para composiciones WS-BPEL.
- Mejora GAmera, escrita en C++, que sólo trata con mutantes de primer orden.
- GAmeraHOM, al haberse escrito en Java, se integra mejor con el resto de herramientas de las que depend[...]
Tierra llamando a la Luna (probando)
Terminada la primera versión de GAmeraHOM es hora de probarlo.
Si seguimos los pasos indicados en la forja, basta abrir un terminal para llamar a GAmeraHOM indicándole nuestro fichero de configuración.
$> gamera2 miConfiguracion.yamlA partir de aquí, el algoritmo realiza su trabajo produciendo tantas generaciones como sean necesarias, y una vez que se cumpla alguna de las condiciones de parada, se hace uso de un logger para la impresión del HOF.
El HOF<[...]
Herramientas útiles
Creo que no hace falta explicar por qué es esencial el uso de un sistema de control de versiones a estas alturas, pero quizás algun@s de vosotr@s no conozca estas herramientas que me han hecho la vida muuuucho más sencilla:
SonarEs una herramienta que permite gestionar la calidad del código controlando los siete ejes principales de dicha calidad del código: arquitectura y diseño, duplicaciones, pruebas unitarias, complejidad, e[...]
Cruzando individuos
En esta ocasión, hablaremos del cruce de individuos, consistente en intercambiar la información de dos individuos iniciales para producir dos nuevos individuos.
Dado el carácter de los mutantes con los que trabaja GAmeraHOM también es necesario tratar con dos tipos de cruce: cruce de individuo y cruce de orden.
Cruce de individuo
A partir de dos individuos progenitores, elegir aleatoriamente la mutación que va a tomar parte del cruce[...]
Mutando individuos
Siguiendo el sino de los algoritmos genéticos, para crear una nueva población es necesario que los individuos de la población se reproduzcan. Para ello, contamos con la mutación y el cruce.
En este post, os mostraré en qué consiste la mutación, que como bien puedes intuir es la modificación de alguna parte de un individuo.
Dado el carácter de los mutantes con los que trabaja GAmeraHOM es necesario tratar con dos tipos de mutaciones: mutación de individ[...]
Arquitectura del sistema
Con objeto de hacer extensible y adaptable este trabajo a cualquier otro lenguaje de programación, se decide dividir GAmeraHOM en tres componentes:
- API: Modelo de datos e interfaces genéricas.
- Core: Núcleo genérico y lanzador por línea de órdenes.
- BPEL: Soporte de WS-BPEL 2.0 para GAmeraHOM.
Componentes de GAmeraHOM
Esta división garantiza que gamera2-bpel<[...]
Genéticamente hablando
Si conoces los aspectos básicos de la algoritmia genética puedes obviar este post, sino continúa leyendo… Como GAmeraHOM es en esencia un algoritmo genético e parece bien pararme y explicar en pocas palabras qué es y cómo funciona un AG.
Los Algoritmos Genéticos (AG) son métodos adaptativos que pueden usarse para resolver problemas de búsqueda y optimización. Se llaman así porque se inspiran en la evolución biológica y su base genético-molecular.
Los conce[...]
FOM vs HOM
En este punto, ya le hemos pillado el truco a los mutantes, pero como una imagen vale más que mil palabras, este post va en honor a él.
Cada individuo codifica cada mutación a realizar al programa original mediante estos elementos:
- Operador Operador de mutación que se aplica al programa original.
- Localidad Número de instrucción del programa original donde se aplicará el operador.
- Atributo Valor qu[...]
Mi proyecto tiene padre, ¡GAmera!
GAmera es una herramienta para la generación y ejecución automática de mutantes para composiciones de Servicios Web en WS-BPEL.
Producir todos los mutantes posibles de un programa inicial tiene un alto coste computacional. Por ello, se usa la mutación evolutiva que permite seleccionar un subconjunto de los mutantes totales que pueden generarse. Esto se logra mediante la utilización de un algoritmo genético que genera y selecciona sólo los mutantes de mayor c[...]