¿Cuáles son algunas buenas implementaciones de un algoritmo evolutivo / genético en C / C ++?

Colección de Deb

Primero, el antiguo sitio web de Kalyanmoy Deb (http://www.iitk.ac.in/kangal/cod…) tiene código fuente para varios algoritmos, tanto de un solo objetivo como de múltiples objetivos. Son muy, muy fáciles de trabajar e incrustar en su propio código, pero hay algunos inconvenientes. Existe la licencia, que es “haz lo que quieras siempre que seas académico, pero todos los demás tienen que hablar conmigo sobre los términos y condiciones”. Luego está el hecho de que este es un código académico dirigido a las necesidades de los usuarios académicos, por lo que puede encontrar errores extraños. (Sí. Valgrind es tu amigo).

El MOEA Borg

Uno de mis colegas (obvio descargo de responsabilidad: quiero ver a las personas adoptar su trabajo) ha escrito lo que considero el mejor algoritmo evolutivo de múltiples objetivos (MOEA): el BEA MOEA. Está disponible en http://borgmoea.org/. Tiene algunas ventajas enormes: la fuente C es muy limpia, y una vez que comprende los principios en los que funciona, es fácil de seguir. Se escala a unos diez objetivos, dependiendo del problema que esté optimizando. En nuestros estudios, limpia el piso con otros MOEA, trabajando más rápido y produciendo mejores soluciones. Puede vincularlo a su código, pero no tiene que hacerlo: puede interactuar con su modelo a través de stdin / stdout. Borg MOEA también tiene enlaces para Python, Matlab y varios otros idiomas. Es gratis para uso no comercial, de lo contrario, debe comprar una licencia.

MOEAMarco

Un proyecto LGPL basado en Java, si es más adecuado para sus propósitos, está en http://moeaframework.org/. Está escrito por el autor de Borg MOEA, aunque no incluye una implementación de ese algoritmo. Incluye implementaciones de NSGAII, ɛMOEA, MOEA / D y GDE3. La integración con otro código Java es bastante sencilla.

CMAES

CMAES es un muy buen solucionador de un solo objetivo, disponible bajo GPL o LGPL en https://www.lri.fr/~hansen/cmaes…. No deje que la URL lo arroje, hay implementaciones en muchos idiomas, incluido C. También está la Biblioteca de aprendizaje de máquinas Shark (http://image.diku.dk/shark/sphin…), que es LGPL / C ++ e incluye un Implementación de CMAES.

(Editar: puntuación extraviada).

He implementado mi propio diseño de GA en C ++ para permitirme resolver:

  • GA de objetivo único
  • GA de objetivos múltiples
  • GA interactiva

Este código evalúa soluciones en paralelo para acelerar los cálculos. Abre la mano de los programadores para crear sus genes con mucha más flexibilidad en comparación con MATLAB. He subido el código para que sea accesible en línea para uso público y gratuito en github.

More Interesting

Suponiendo una memoria infinita, ¿siempre es posible aumentar la complejidad de cualquier programa sin introducir redundancia?

Cómo diseñar una nueva función heurística admisible para un algoritmo A * para resolver el problema del mosaico deslizante

¿Podemos utilizar el algoritmo de Clasificación colectiva iterativa (ICA) de forma distributiva para procesar grandes datos?

¿No es posible en un árbol de búsqueda binario que el sucesor de un elemento tenga más de un hijo?

¿Cuál es un buen algoritmo para el problema de la mochila 0-1 cuando los pesos están positivamente relacionados con los valores?

¿Qué algoritmo de compresión de imagen se usa en WhatsApp?

¿Cuál es la razón por la cual las compañías gigantes (por ejemplo, Google o Microsoft) hacen preguntas típicas como el árbol de búsqueda binario o el algoritmo tradicional o preguntas como la complejidad del algoritmo? ¿Cuál es el propósito? La mayoría de ellos no se usan en la vida real.

¿Qué tipo de algoritmo SLAM utiliza Teslas? ¿O incluso están usando algoritmos SLAM?

¿Cuál es la diferencia entre binary y Algoritmo?

¿Cuál es el algoritmo detrás de las OTP (contraseñas de un solo uso)?

No puedo desempeñarme bien en los concursos de programación, incluso después de practicar mucho. ¿Qué debería hacer ahora? ¿Debo dejar de hacer programación competitiva?

¿Qué significa: = significa en algoritmos?

¿Existe un algoritmo de tiempo O (N) para esta pregunta?

¿Cuáles son los mejores algoritmos de aprendizaje sin supervisión para la corrección de errores tipográficos?

¿Qué es un filtro adaptativo?