org.apache.commons.math3.optimization.direct

## Class CMAESOptimizer

• All Implemented Interfaces:
BaseMultivariateOptimizer<MultivariateFunction>, BaseMultivariateSimpleBoundsOptimizer<MultivariateFunction>, BaseOptimizer<PointValuePair>, MultivariateOptimizer

public class CMAESOptimizer
extends BaseAbstractMultivariateSimpleBoundsOptimizer<MultivariateFunction>
implements MultivariateOptimizer

An implementation of the active Covariance Matrix Adaptation Evolution Strategy (CMA-ES) for non-linear, non-convex, non-smooth, global function minimization. The CMA-Evolution Strategy (CMA-ES) is a reliable stochastic optimization method which should be applied if derivative-based methods, e.g. quasi-Newton BFGS or conjugate gradient, fail due to a rugged search landscape (e.g. noise, local optima, outlier, etc.) of the objective function. Like a quasi-Newton method, the CMA-ES learns and applies a variable metric on the underlying search space. Unlike a quasi-Newton method, the CMA-ES neither estimates nor uses gradients, making it considerably more reliable in terms of finding a good, or even close to optimal, solution.

In general, on smooth objective functions the CMA-ES is roughly ten times slower than BFGS (counting objective function evaluations, no gradients provided). For up to $N=10$ variables also the derivative-free simplex direct search method (Nelder and Mead) can be faster, but it is far less reliable than CMA-ES.

The CMA-ES is particularly well suited for non-separable and/or badly conditioned problems. To observe the advantage of CMA compared to a conventional evolution strategy, it will usually take about $30 N$ function evaluations. On difficult problems the complete optimization (a single run) is expected to take roughly between $30 N$ and $300 N2$ function evaluations.

This implementation is translated and adapted from the Matlab version of the CMA-ES algorithm as implemented in module cmaes.m version 3.51.

Since:
3.0
Version:
\$Id\$
• ### Constructor Detail

• #### CMAESOptimizer

public CMAESOptimizer()
Default constructor, uses default parameters
• #### CMAESOptimizer

public CMAESOptimizer(int lambda)
Parameters:
lambda - Population size.
• #### CMAESOptimizer

public CMAESOptimizer(int lambda,
double[] inputSigma)
Parameters:
lambda - Population size.
inputSigma - Initial search volume; sigma of offspring objective variables.
• #### CMAESOptimizer

public CMAESOptimizer(int lambda,
double[] inputSigma,
int maxIterations,
double stopFitness,
boolean isActiveCMA,
int diagonalOnly,
int checkFeasableCount,
RandomGenerator random,
boolean generateStatistics)
Parameters:
lambda - Population size.
inputSigma - Initial search volume; sigma of offspring objective variables.
maxIterations - Maximal number of iterations.
stopFitness - Whether to stop if objective function value is smaller than stopFitness.
isActiveCMA - Chooses the covariance matrix update method.
diagonalOnly - Number of initial iterations, where the covariance matrix remains diagonal.
checkFeasableCount - Determines how often new random objective variables are generated in case they are out of bounds.
random - Random generator.
generateStatistics - Whether statistic data is collected.
• #### CMAESOptimizer

public CMAESOptimizer(int lambda,
double[] inputSigma,
int maxIterations,
double stopFitness,
boolean isActiveCMA,
int diagonalOnly,
int checkFeasableCount,
RandomGenerator random,
boolean generateStatistics,
ConvergenceChecker<PointValuePair> checker)
Parameters:
lambda - Population size.
inputSigma - Initial search volume; sigma of offspring objective variables.
maxIterations - Maximal number of iterations.
stopFitness - Whether to stop if objective function value is smaller than stopFitness.
isActiveCMA - Chooses the covariance matrix update method.
diagonalOnly - Number of initial iterations, where the covariance matrix remains diagonal.
checkFeasableCount - Determines how often new random objective variables are generated in case they are out of bounds.
random - Random generator.
generateStatistics - Whether statistic data is collected.
checker - Convergence checker.
• ### Method Detail

• #### getStatisticsSigmaHistory

public List<Double> getStatisticsSigmaHistory()
Returns:
History of sigma values.
• #### getStatisticsMeanHistory

public List<RealMatrix> getStatisticsMeanHistory()
Returns:
History of mean matrix.
• #### getStatisticsFitnessHistory

public List<Double> getStatisticsFitnessHistory()
Returns:
History of fitness values.
• #### getStatisticsDHistory

public List<RealMatrix> getStatisticsDHistory()
Returns:
History of D matrix.