fcmaes started as a fast CMA-ES implementation combined with a new smart parallel retry mechanism aimed to solve hard optimization problems from the space flight planning domain. It evolved to a general library of state-of-the-art gradient free optimization algorithms applicable to all kind of real world problems covering multi-objective and constrained problems. Its algorithms are implemented both in C++ and support parallel fitness function evaluation. fcmaes-java provides the same functionality as its Python variant fcmaes. See Performance for detailed performance figures. It was used by the team Jena & Wuhan for the 11th China Trajectory Optimization Competition see fcmaes for CTOC11. A comparison of optimization algorithms for the solar orbiter mission optimization problem is shown here: Solar Orbiter. Cluster support is implemented based on the Temporal orchestration engine. See Temporal-readme and Temporal-tutorial
-
Focused on optimization problems hard to solve utilizing modern many-core CPUs.
-
Parallel fitness function evaluation and different parallel retry mechanisms.
-
Excellent scaling with the number of available CPU-cores.
-
Minimized algorithm overhead - relative to the objective function evaluation time - even for high dimensions.
-
New multi-objective/constrained optimization algorithm MODE combining features from Differential evolution and NSGA-II, supporting parallel function evaluation. Features enhanced multiple constraint ranking improving its performance in handling constraints for engineering design optimization.
-
Selection of highly efficient single-objective algorithms to choose from.
-
Supports multi node / cluster execution based on Temporal
On windows there may be an issue with recursive dll dependencies preventing loading of fcmaeslib.dll. It is compiled using mingw64, so if you neither have mingw64 nor Anaconda installed you should add "/YOUR_PATH_TO/fcmaes-java/src/main/resources/natives/" to the "PATH" environment variable.
Runtime:
Compile time (binaries for Linux and Windows are included):
-
Eigen https://gitlab.com/libeigen/eigen (version >= 3.9 is required for CMA).
-
pcg-cpp: https://github.com/imneme/pcg-cpp - used in all C++ optimization algorithms.
-
LBFGSpp: https://github.com/yixuan/LBFGSpp/tree/master/include - used for dual annealing local optimization.
-
Ascent: https://github.com/AnyarInc/Ascent/tree/master/include - used for fast ODE integration
@misc{fcmaes-java2021,
author = {Dietmar Wolz},
title = {fcmaes-java - A Java derivative-free optimization library},
note = {Java/C++ source code, with description and examples},
year = {2021},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {Available at \url{https://github.com/dietmarwo/fcmaes-java}},
}