En este repositorio encontrarás una implementación de un Algoritmo Genético para optimizar respecto a varios objetivos la compilación de binarios usando las flags de GCC. Este trabajo forma parte de un trabajo de final de grado creado por Sergio Benlloch.
Puedes encontrar una versión de un Algoritmo genético tradicional y una solución siguiendo Modelo de Islas.
Ambas versiones de los algoritmos están implementadas en Python 3, no usan módulos externos y no tienen dependencias de código, pero, para la medición de cada individuo es necesario tener instalado algunas aplicaciones.
Todas las aplicaciones son compatibles con sistemas basados en Debian, testeadas en Ubuntu 20.04 LTS y Ubuntu Server 20.04.3 LTS.
Para instalar las dependencias cuentas con un script de instalación. Puedes instalarlo ejecutando:
> sudo ./instalacion.sh
> sudo ./auxiliarCode/instalacionDependenciasAuxiliares.sh
Una vez instaladas las dependencias ya puedes ejecutar los algoritmos genéticos.
Para hacer uso de cualquier versión los algoritmos genéticos puedes seguir los siguientes pasos:
Cuentas con un archivo de configuración, conf.ini, donde puedes configurar parámetros como tamaño de población o pesos de los objetivos a optimizar.
Para lanzar a ejecución puedes usar la siguiente orden:
> python3 optimize.py -p path/al/binario [ -a <ARGS> ]
Donde -p indica el path del programa a ejecutar y si los tiene con -a puedes indicar los argumentos.
También existen otros parámetros:
-p : path del programa
-a : argumentos del programa
-dF: Modo depuración de la compilación
-i : Modo impresión de resultados durante ejecución
En el archivo de configuración puedes definir el directorio donde se almacenarán los siguientes elementos:
- Jerarquía AG con los binarios usados
- Archivos con los resultados [ID, GENERACIÓN, RESULTADO]
- Archivos con las flags más utilizadas.
- Archivo con la comparación final.
- Bash - El lenguaje de scripting usado.
- Python 3 - El lenguaje de programación usado.
- C - El lenguaje de programación a optimizar y usado para construir los benchmarks.
🔗 Sergio Benlloch - sg1o
🔗 Treebench benchmark creado por Scott Robert Ladd. 📫
Esta herramienta está bajo una licencia GPL 3.0, puedes modificarla o usarla cuando quieras. Para más detalles leer LICENSE.