Библиотека параллельных генетических алгоритмов для C/C++

Я ищу библиотеку генетических алгоритмов на С++, которая может работать параллельно, в идеале масштабируясь до нескольких сотен ядер. Насколько я понимаю, GA почти смущающе параллельны, поэтому я немного удивлен, что у меня возникли проблемы с поиском широко используемой параллельной библиотеки.

Стандартом для GA в C++ является galib . Это довольно хорошо, но было сделано около 20 лет назад и рекомендует распараллеливать с помощью PVM , что не подходит для моих кластеров.

До сих пор я нашел GAlib-mpi , который, похоже, был создан одним из аспирантов, который добавил код MPI в galib. Я пробую это сейчас.

Мне интересно:

  1. Есть ли какая-то другая стандартная библиотека, которую я упускаю?
  2. Если нет, есть ли у кого-нибудь хороший опыт работы с GAlib-mpi?

РЕДАКТИРОВАТЬ:

В итоге я заставил GAlib-mpi работать, но для будущих искателей я упомяну еще один вариант, который я нашел, но не пробовал, pgapack .

Примечание для тех, кто рассматривает Open Beagle : документация довольно неполная (примерно на половине страниц просто есть «TODO», и я не смог найти реальный пример с использованием модуля HPC), но есть много информации, доступной через Группа Google и Группа Yahoo .

C++ для движка GA или интерфейса библиотеки?
В основном интерфейс, так как программировать буду на C++.
Наиболее документированная среда EC, о которой я знаю, - это ECJ , но это Java (может быть, где-то существует интерфейс C++?).
Открытый исходный код? Свободно? Какой бюджет?
В идеале бесплатный / с открытым исходным кодом для моих целей.

Ответы (4)

Вы можете использовать Open BEAGLE , одну из наиболее широко используемых сред эволюционных вычислений (EC), которая предоставляет модель ведущий-ведомый для параллельной оценки пригодности.

Ганье, Кристиан и Марк Паризо. « Open BEAGLE: новая универсальная среда C ++ для эволюционных вычислений ». GECCO Late Breaking Papers. 2002.

Универсальность : с помощью Open BEAGLE пользователь может выполнить любой тип EC, если он соответствует некоторым минимальным требованиям. Необходимым условием является наличие популяции особей, к которым итеративно применяется последовательность эволюционирующих операций. На данный момент с использованием Open BEAGLE были реализованы две специализированные структуры: генетические алгоритмы (GA) и генетическое программирование (GP). В будущем выпуске также запланирована структура Evolutionary Strategies (ES). Пользователь может взять любой из этих специализированных фреймворков и модифицировать их, чтобы создать свой собственный специализированный вариант эволюционных алгоритмов.

Удобство для пользователя : Open BEAGLE предоставляет несколько механизмов, предлагающих удобный программный интерфейс. Например, управление памятью динамически размещаемых объектов значительно упрощается за счет использования подсчета ссылок и автоматической сборки мусора.

Переносимость : код Open BEAGLE соответствует стандарту C++ ANSI/ISO 3. Для этого требуется стандартная библиотека шаблонов (STL) (Musser and Saini, 1996). Никаких специальных вызовов ни к операционной системе, ни к оборудованию не делается.

Эффективность : Для обеспечения эффективного выполнения особое внимание было уделено оптимизации критических участков кода. Были сделаны подробные профили выполнения этих разделов. Кроме того, тот факт, что Open BEAGLE написан на C++, способствует его общей хорошей производительности.

Надежность : в код встроено множество операторов проверки, чтобы гарантировать правильную работу и информировать пользователя о возникновении проблемы. Также были реализованы надежные механизмы для периодического сохранения текущего состояния эволюции, позволяющие автоматически перезапускать прерванные эволюции.

Элегантность : Интерфейс Open BEAGLE был тщательно разработан. Большие усилия были вложены в разработку целостного программного пакета, который следует хорошим принципам объектно-ориентированного программирования и универсального программирования. Кроме того, были введены строгие правила программирования, чтобы сделать код C++ легким для чтения, понимания и модификации.

Бесплатный исходный код Исходный код Open BEAGLE является бесплатным и доступен по лицензии GNU Lesser General Public License (LGPL) (Free Software Foundation Inc., 2000). Таким образом, его можно распространять и модифицировать без какой-либо платы. Программа Open BEAGLE доступна в Интернете по адресу http://www.gel.ulaval.ca/~beagle .

Диаграмма архитектуры программного обеспечения

Когда я работал над своей магистерской диссертацией во Франции, я использовал Sferes2 , который также использует MPI для распараллеливания оценки пригодности. Он имеет меньше функций и менее зрел/задокументирован, чем Open BEAGLE, но код намного короче ( SLOC: 5K против 40K для Open BEAGLE (1) ) и очень хорошо организован.

(1) Муре, Ж.Б., и Стефан Донсье. " Sferes v2: Эволюция в многоядерном мире ". Evolutionary Computation (CEC), 2010 IEEE Congress on. IEEE, 2010:

Это направление мысли приводит нас к следующим основным целям Sferesv2:

  • Будьте многоядерными с нуля: включайте многоядерные оптимизации с самого начала процесса проектирования
  • Будьте современными и многоцелевыми: предоставьте несколько, но хорошо отобранных реализаций «современных» советников, и особенно многоцелевых советников (MOEA).
  • Опирайтесь на современные методы C++, чтобы быть одновременно абстрактными и эффективными.

Кроме того, мы ставим перед собой следующие цели, которые можно резюмировать как «фреймворк должен быть хорошим и простым программным обеспечением»:

  • Быть расширяемым: добавление новых алгоритмов должно быть простым.
  • Будьте проще: простые эксперименты (например, оптимизация реальных параметров) должны быть простыми в настройке и требовать минимального объема кода.
  • Делайте акцент на эффективных реализациях, а не на охвате наибольшего количества алгоритмов.
  • Будьте небольшими: исходный код должен быть как можно короче, чтобы новые пользователи могли быстро освоить библиотеку и упростить обслуживание.
  • Пройти тестирование: каждая важная функция должна сопровождаться модульным тестом.
  • быть переносимым на все современные версии Unix (особенно GNU/Linux и MacOSX);
  • Быть открытым исходным кодом (совместимым с GPL).
  • Легко взаимодействовать с текущим существующим кодом (особенно для фитнес-функций).

Диаграмма классов UML основных классов Sferesv:

Диаграмма классов UML основных классов Sferesv

Несмотря на опоздание, я счел важным упомянуть openGA.

OpenGA — это библиотека генетических алгоритмов C++. Эта библиотека работает быстро и опирается на std::threadпараллелизм. В этой библиотеке многопоточность включена по умолчанию. Эта библиотека является кроссплатформенной и может быть скомпилирована современными компиляторами, поддерживающими C++11.

OpenGA поддерживает однозадачные, многоцелевые и интерактивные режимы NSGA-III.

Основное внимание в этой библиотеке уделяется комфорту пользователя. Он не требует от вас использования указателей, он сильно шаблонизирован и позволяет вам определять свой собственный тип генетических данных вместо наложения вектора. Он также может решить проблемы генетического программирования. Кроме того, он имеет функцию помощи GA, которая создает базовый автоматический шаблон кода на основе исходной информации от вас для запуска кода.

Я сделал несколько кусочков с генетическими алгоритмами (как одноцелевыми, так и многоцелевыми) на своем веб-сайте для приложений, включая оптимизацию маршрутизации, оптимизацию функций, сортировку сетей и т. д.

Все эти приложения были написаны на C++ либо как простые консольные приложения, либо как однооконные/диалоговые приложения. Это не структура, но через некоторое время реализации начинают приобретать сходство, например, классы/методы для кроссовера, мутации, отбора, оценки пригодности, обработки ограничений, поддержания популяций и т. д.

Возможно, стоит поиграть с ними, если вы просто хотите почувствовать эволюционные вычисления, и можно закодировать различные генетические операторы. Не стесняйтесь скачать их и посмотреть, что вы думаете. Комментарии и отзывы всегда приветствуются!

http://www.technical-recipes.com/category/genetic-algorithms/