1. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Adaptando algoritmos evolutivos paralelos
al lenguaje funcional Erlang
J. Albert-Cruz1, L. Acevedo-Martínez1, J.J. Merelo2, P.A.
Castillo2, M.G. Arenas2
Centro de Estudios de Matemática Computacional, Universidad de Ciencias
Informáticas, Cuba
Dept. Arquitectura y Tecnología de los Computadores, Universidad de Granada,
España
jalbert@uci.cu
Adaptando algoritmos evolutivos al lenguaje Erlang
2. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Sumario
1 Introducción
2 Programación funcional
3 Diseño/implementación de AGs
4 Conclusiones
Adaptando algoritmos evolutivos al lenguaje Erlang
3. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Tecnologías usadas para implementar AGs
Java, C/C++ y Perl
Todas OO (o al menos procedurales)
La implementación importa
Adaptando algoritmos evolutivos al lenguaje Erlang
4. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Paradigmas emergentes
Funcional
Concurrente
En los lenguajes tradicionales se incluyen:
C# 3/4/5 (sucesivas características funcionales)
.NET Framework/Bibliotecas Java (patrones
concurrentes)
Adaptando algoritmos evolutivos al lenguaje Erlang
5. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
El desafío de los multi-núcleos
Necesidad de hacer paralelo el más simple de nuestros
programas de manera que hagan uso de los
microprocesadores modernos.
Adaptando algoritmos evolutivos al lenguaje Erlang
6. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
El desafío de los multi-núcleos
Bibliotecas
Nuevos lenguajes / versiones actualizadas de los
viejos
Adaptando algoritmos evolutivos al lenguaje Erlang
7. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Lenguajes de programación
Clojure, Go, Scala, Erlang
Poseen construcciones para concurrencia: facilitando
razonar sobre ella y simplificando su sintaxis
Adaptando algoritmos evolutivos al lenguaje Erlang
8. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Programación funcional
uso de las funciones como datos (pasándolas por
parámetros y devolviéndolas como resultados)
uso de listas
adecuada para el desarrollo de algoritmos
concurrentes pues estos tienen la primera fuente de
errores y complejidad en la comunicación entre
procesos, a través de cambios de estado
Adaptando algoritmos evolutivos al lenguaje Erlang
9. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Programación funcional: Erlang
lenguaje funcional, concurrente y distribuido
posee entre sus tipos de datos el de proceso
utiliza el modelo actor para su implementación del
paradigma de programación concurrente
Adaptando algoritmos evolutivos al lenguaje Erlang
10. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Mapeo entre conceptos de Erlang y de AGs
Concepto Erlang Concepto AG en el que se emplea
tupla cromosoma evaluado
lista cromosoma y población
función cruzamiento, mutación y selección
actor isla, evaluador y reproductor
mensaje migración
ets pool
módulo random naturaleza estocástica del AG
Adaptando algoritmos evolutivos al lenguaje Erlang
11. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Código desarrollado: erlEA
Módulos lógicos: reproducer, evaluator, poolManager
Módulos auxiliares e interconexión: experiment,
configBuilder, profiler, manager, report
El código se encuentra bajo la licencia AGPL en
https://github.com/jalbertcruz/erlEA/tree/MAEB
Adaptando algoritmos evolutivos al lenguaje Erlang
12. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Resultados
Problema OneMax (cantidad de 1s en la cadena)
Cromosomas de longitud 128
Población de 256 individuos por isla
Evaluadores y reproductores trabajando con bloques
de 50 cromosomas
Máquina con Windows 8, Core i7 y 16 Gb de RAM
Adaptando algoritmos evolutivos al lenguaje Erlang
13. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Resultados de los experimentos
No. Islas Evaluadores Reproductores Tiempo (s)
1 2 5 10 11.62375
2 2 10 20 25.3412
3 4 5 10 10.672001
4 4 10 20 27.09117
5 8 5 10 16.375004
6 8 10 20 36.294951
Adaptando algoritmos evolutivos al lenguaje Erlang
14. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Conclusiones
El escalado no es bueno, siendo en todo caso mejor
cuanto menor es el número de evaluadores.
Alta simplicidad de implementación de un modelo
híbrido de AG, en su versión concurrente.
Adaptando algoritmos evolutivos al lenguaje Erlang
15. Introducción Programación funcional Diseño/implementación de AGs Conclusiones
Trabajo futuro
Implementación de un experimento más complejo
Uso de arquitectura distribuida y heterogénea
(soporte para la distribución de procesos y e
implementación de la MV para varias plataformas)
Adaptando algoritmos evolutivos al lenguaje Erlang