1. Optimizando la implementación de
algoritmos evolutivos
J.J. Merelo, Pedro Cast illo,
Juan L. Jiménez Laredo, Maribel García Arenas
GeNeura team: http://geneura.wordpress.com
Depto. de Arquitectura y Tecnología de Computadores:
http://atc.ugr.es
Universidad d Granada: http://www.ugr.es
2. Mejorando los algoritmos evolutivos
Usar una metodología de prueba y evaluación
seguida por la aplicación de técnicas de
programación comunes
3. Prestar atención a la optimización
de las aplicaciones
El hardware cada vez es más potente y rápido,
aún así, se deben optimizar las implementaciones
4. En cuanto a la implementación de
los algoritmos evolutivos
Se pueden diseñar mejores algoritmos y obtener
mejoras sustanciales tanto algorítmicas como de
tiempo de ejecución
5. Herramientas que nos ayudarán
Monitores
Tiempo de ejecución,
memoria usada,
consumo de recursos
Profilers
Tiempo invertido y
número de
ejecuciones reales de
fragmentos de código
6. En este trabajo...
Partir de la implementación de un AE sencillo
Programado en Perl con
Algorithm::Evolutionary
Analizar el programa con las herramientas
Aplicar cambios para optimizar la
implementación
Estudiar las mejoras
7. Ejemplo de uso de un profiler
Tiempo en cada
llamada a función
8. Planteamiento del problema
Fitness = MaxOnes
Algoritmo genético
canónico, con élite
Población y longitud
variable
Software libre:
http://bit.ly/bOk3z3
9. Evolución de un programa evolutivo
Salida de la
herramienta Launchpad
11. Posibles mejoras al programa
Mejoras en el cálculo del fitness:
Usar una caché
Cambio del cálculo del fitness
Detección de cuellos de botella:
Usar un profiler para detectarlos
Cambio de la función de ordenación
12. El tamaño siempre importa
Caché para la
función fitness básica
caché
usar tr
Uso de la
función de Perl
tr para cálculo
del fitness
13. Cuantos más semos... más
tardaremos
Uso de un profiler
básica para localización de
cuello de botella:
función sort
mergesort
Sort::Key
Cambio por
Sort::Key
(mejora del comportamiento
peor caso)
14. Conclusiones
Mejoras del tiempo de ejecución de un
programa mediante mejoras en la
implementación.
Conviene aplicar técnicas de programación
habituales y buenas prácticas.
Trabajo futuro: incorporación de técnicas en
Algorithm::Evolutionary, librería de algoritmos
evolutivos en Perl.