2010-05-18 14 views
7

Estoy buscando agregar algunos algoritmos genéticos a un proyecto de investigación de operaciones en el que participé. Actualmente tenemos un programa que ayuda a optimizar algunas programaciones y queremos agregar algunas heurísticas en forma de algoritmos genéticos. ¿Existen buenas bibliotecas para programación/algoritmos genéticos genéricos en C++? ¿O me recomendarías que solo codificara el mío?Programación genética en C++, ¿sugerencias de la biblioteca?

Debo agregar que, aunque no soy nuevo en C++, soy bastante nuevo para hacer este tipo de trabajo de optimización matemática en C++ ya que el grupo con el que trabajé anteriormente solía usar un paquete de optimización patentado.

Tenemos una función de acondicionamiento físico que es bastante computacionalmente intensa para evaluar y tenemos un clúster para ejecutar esto, por lo que el código paralelizado es muy conveniente.

¿Entonces es C++ un buen lenguaje para esto? Si no, por favor, recomiende algunos otros, ya que estoy dispuesto a aprender otro idioma si hace la vida más fácil.

gracias!

+0

¡Buena pregunta! Tuve el mismo hace un tiempo y decidí comenzar a trabajar en mi propia biblioteca genérica de GA basada en plantillas y clases de políticas y utilizando las convenciones de STL. No vale la pena mostrarlo todavía, pero espero que pronto haya algo que valga la pena divulgar al público. Gracias por recordarme que debo trabajar en ello. –

+0

Un posible duplicado: http://stackoverflow.com/questions/687404/what-genetic-algorithm-programming-library-do-you-use – Kiril

+0

@Derrick, suena muy interesante, ¿tiene una página web para su proyecto? – shuttle87

Respuesta

4

Yo recomendaría hacer el suyo propio. El 90% del trabajo en un GP es codificar el genotipo, cómo se opera y el cálculo de la condición física. Estas son partes que cambian para cada problema/proyecto diferente. La parte del algoritmo evolutivo real suele ser bastante simple.

Hay varias bibliotecas GP por ahí (http://en.wikipedia.org/wiki/Symbolic_Regression#Implementations). Sin embargo, los usaría como ejemplos y referencias.

C++ es una buena opción para GP porque tienden a ser muy intensivos en términos de computación. Por lo general, la función de aptitud es el cuello de botella, por lo que vale la pena al menos hacer esta parte compilada/optimizada.

+0

Terminé codificando el mío desde cero, fue definitivamente una experiencia de aprendizaje interesante. La siguiente y potencialmente difícil tarea será parralelizar el código. – shuttle87

+1

Esa es una respuesta terrible. Al final, tendrá pesadillas sobre el protocolo de comunicación MPI que tendrá que implementar cuando esté incorporado en GAUL. –

0

Le sugiero que eche un vistazo al kit de herramientas de optimización de matlab: viene con GAs out of the box, solo tiene que codificar la función de aptitud (y una función para generar población inicial) y creo que Matlab tiene alguna interoperabilidad de C++ para que pueda código que funciona en C++. Lo estoy usando para mis experimentos y una característica muy buena es que también sacas todo tipo de gráficos de la caja.

Dicho eso, si su objetivo es aprender acerca de los algoritmos genéticos, es mejor que lo codifique, pero si solo desea ejecutar los experimentos, matlab y C++ (o incluso solo matlab) es una buena opción.

+0

Gracias por la sugerencia, sin embargo, dudo que use Matlab debido a que no es software libre. – shuttle87

+0

ese es un buen punto - La versión para estudiantes de FYI es 89 $ + 19 $ para el kit de herramientas de optimización, lo cual no está nada mal – JohnIdol

+0

No es tanto que la licencia de Matlab cueste mucho sino las restricciones que tengo al empaquetar el código. Si no hubiera restricciones en la licencia de Matlab, ciertamente lo haría. – shuttle87

1

utilizo GAUL

es una biblioteca C, con todo lo que quiera.
(pthread/tenedor/OpenMP/MPI)
(varios cruzado/función de la mutación)
(no GA optimización: bajadas, NM Simplex, annealling simulado, Tabu, ...)

Por qué construir su propia biblioteca cuando hay herramientas tan poderosas ???

1

No he usado esto personalmente todavía, pero el método Age Layered Population Structure (ALPS) se ha utilizado para generar resultados humanos competitivos y se ha demostrado que supera varios métodos populares en la búsqueda de soluciones óptimas en paisajes difíciles de entrenamiento. Además, el enlace contiene el código fuente en C++ FTW.

Cuestiones relacionadas