Java Evolutionary Computation Toolkit
ECJ[1] (также известная как Java Evolutionary Computation Toolkit) — свободная исследовательская система для эволюционных вычислений и метаэвристик, написанная на языке программирования Java.
Общие сведения
| Java Evolutionary Computation Toolkit | |
|---|---|
| Разработчики | Sean Luke, Eric O. Scott, ECLab GMU |
| Написана на | Java |
| Операционная система | Кроссплатформенное программное обеспечение |
| Аппаратная платформа | Java Virtual Machine |
| Последняя версия | 28 |
| Лицензия | AFL, BSD |
| Сайт | cs.gmu.edu/~eclab/projec… |
Описание
Java Evolutionary Computation Toolkit представляет собой программный каркас, поддерживающий широкий спектр метаэвристик[2] и технологий эволюционных вычислений, таких как генетические алгоритмы, генетическое программирование, эволюционные стратегии, параллельная эволюция, оптимизация роя частиц и дифференциальная эволюция. Этот программный каркас моделирует эволюционный процесс по итерациям, используя последовательность конвейеров, которые соединяют одну или несколько подпопуляций индивидуумов с помощью селекции, скрещивания (например, кроссовера) и операторов мутации, порождающих новые экземпляры. Программное обеспечение распространяется с открытым исходным кодом по лицензии AFL. Разработка ведётся в Лаборатории эволюционных вычислений (ECLab) Университета Джорджа Мейсона под руководством Шона Люка (Sean Luke) и Эрика О. Скотта (Eric O. Scott)[1]. В 2016 году проект получил грант от Национального научного фонда США (NSF) для расширения системы в универсальный инструментарий для метаэвристик[2].
Возможности
Основные возможности (по данным официальной страницы проекта):
- графический интерфейс пользователя с диаграммами;
- платформонезависимые контрольные точки и журналирование;
- иерархические файлы параметров;
- поддержка многопоточности;
- генератор случайных чисел Мерсенна;
- абстракции для выполнения различных форм эволюционных вычислений;
- поддержка сборки проекта с использованием Apache Maven[3].
Возможности эволюционных вычислений:
- асинхронная островная модель на базе TCP/IP;
- вычисления по типу ведущий/ведомый для кластерных процессоров;
- генетические алгоритмы и генетическое программирование: режим устойчивого состояния, эволюция поколений, поддержка элитизма и без него;
- эволюционные стратегии по схемам (mu, lambda) и (mu+lambda);
- гибкая архитектура скрещивания;
- множество операторов селекции;
- поддержка нескольких подпопуляций и видов;
- межпопуляционные перестановки;
- загрузка популяций из файлов;
- одно- и многопопуляционная параллельная эволюция;
- SPEA2 для многокритериальной оптимизации (Strength Pareto Evolutionary Algorithm);
- оптимизация роя частиц;
- дифференциальная эволюция;
- пространственно вложенные генетические алгоритмы;
- методы для других многоцелевых методов оптимизации;
- пакеты для низкоуровневого воздействия;
- алгоритмы комбинаторной оптимизации (ACO, GRASP)[3];
- алгоритм NSGA-III и метрика гипер-объёма для многокритериальной оптимизации[3];
- алгоритмы оценки распределений (EDA, AMaLGaM, PBIL)[3];[2]
- оптимизация с одним состоянием (градиентный подъём, имитация отжига)[2];
- нейроэволюция усложняющихся топологий (NEAT)[2].
Представления
Представления деревьев в генетическом программировании:
- строго типизированное, основанное на множествах генетическое программирование;
- эфемерные случайные константы;
- автоматически определяемые функции и макросы;
- леса из нескольких деревьев;
- шесть алгоритмов генерации деревьев;
- широкий набор операторов скрещивания для генетического программирования;
- семь предустановленных приложений генетического программирования для решения различных задач (муравей, регрессия, мультиплексор, закон Мура, определение чётности, два блока, ребро).
Векторные представления (генетические алгоритмы):
- геном фиксированной и переменной длины;
- произвольные представления;
- пять векторных приложений для решения различных задач (сумма, функция Розенброка, сфера, ступенька, четвёртая степень с шумом).
Другие представления:
- геномы на основе мультимножественного представления в линейном пакете: для аппроксимации наборов правил Питта либо других форм, основанных на множествах.