Class CMAESOptimizer
- All Implemented Interfaces:
BaseMultivariateOptimizer<MultivariateFunction>
,BaseMultivariateSimpleBoundsOptimizer<MultivariateFunction>
,BaseOptimizer<PointValuePair>
,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 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 function evaluations. On difficult problems the complete optimization (a single run) is expected to take roughly between and 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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Deprecated.Population size.static class
Deprecated.Input sigma values. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
Deprecated.Default value forcheckFeasableCount
: 0.static final int
Deprecated.Default value fordiagonalOnly
: 0.static final boolean
Deprecated.Default value forisActiveCMA
: true.static final int
Deprecated.Default value formaxIterations
: 30000.static final RandomGenerator
Deprecated.Default value forrandom
.static final double
Deprecated.Default value forstopFitness
: 0.0.Fields inherited from class org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateOptimizer
evaluations
-
Constructor Summary
ConstructorsConstructorDescriptionDeprecated.As of version 3.1: Parameterlambda
must be passed with the call tooptimize
(whereas in the current code it is set to an undocumented value).CMAESOptimizer
(int lambda) Deprecated.As of version 3.1: Parameterlambda
must be passed with the call tooptimize
(whereas in the current code it is set to an undocumented value)..CMAESOptimizer
(int lambda, double[] inputSigma) Deprecated.CMAESOptimizer
(int lambda, double[] inputSigma, int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics) Deprecated.CMAESOptimizer
(int lambda, double[] inputSigma, int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) Deprecated.CMAESOptimizer
(int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) Deprecated. -
Method Summary
Modifier and TypeMethodDescriptionprotected PointValuePair
Deprecated.Perform the bulk of the optimization algorithm.Deprecated.Deprecated.Deprecated.Deprecated.protected PointValuePair
optimizeInternal
(int maxEval, MultivariateFunction f, GoalType goalType, OptimizationData... optData) Deprecated.Optimize an objective function.Methods inherited from class org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateSimpleBoundsOptimizer
optimize, optimize
Methods inherited from class org.apache.commons.math3.optimization.direct.BaseAbstractMultivariateOptimizer
computeObjectiveValue, getConvergenceChecker, getEvaluations, getGoalType, getLowerBound, getMaxEvaluations, getStartPoint, getUpperBound, optimize, optimizeInternal
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.apache.commons.math3.optimization.BaseMultivariateOptimizer
optimize
Methods inherited from interface org.apache.commons.math3.optimization.BaseOptimizer
getConvergenceChecker, getEvaluations, getMaxEvaluations
-
Field Details
-
DEFAULT_CHECKFEASABLECOUNT
public static final int DEFAULT_CHECKFEASABLECOUNTDeprecated.Default value forcheckFeasableCount
: 0.- See Also:
-
DEFAULT_STOPFITNESS
public static final double DEFAULT_STOPFITNESSDeprecated.Default value forstopFitness
: 0.0.- See Also:
-
DEFAULT_ISACTIVECMA
public static final boolean DEFAULT_ISACTIVECMADeprecated.Default value forisActiveCMA
: true.- See Also:
-
DEFAULT_MAXITERATIONS
public static final int DEFAULT_MAXITERATIONSDeprecated.Default value formaxIterations
: 30000.- See Also:
-
DEFAULT_DIAGONALONLY
public static final int DEFAULT_DIAGONALONLYDeprecated.Default value fordiagonalOnly
: 0.- See Also:
-
DEFAULT_RANDOMGENERATOR
Deprecated.Default value forrandom
.
-
-
Constructor Details
-
CMAESOptimizer
Deprecated.As of version 3.1: Parameterlambda
must be passed with the call tooptimize
(whereas in the current code it is set to an undocumented value).Default constructor, uses default parameters -
CMAESOptimizer
Deprecated.As of version 3.1: Parameterlambda
must be passed with the call tooptimize
(whereas in the current code it is set to an undocumented value)..- Parameters:
lambda
- Population size.
-
CMAESOptimizer
Deprecated.- Parameters:
lambda
- Population size.inputSigma
- Initial standard deviations to sample new points around the initial guess.
-
CMAESOptimizer
@Deprecated public CMAESOptimizer(int lambda, double[] inputSigma, int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics) Deprecated.- Parameters:
lambda
- Population size.inputSigma
- Initial standard deviations to sample new points around the initial guess.maxIterations
- Maximal number of iterations.stopFitness
- Whether to stop if objective function value is smaller thanstopFitness
.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
@Deprecated public CMAESOptimizer(int lambda, double[] inputSigma, int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) Deprecated.- Parameters:
lambda
- Population size.inputSigma
- Initial standard deviations to sample new points around the initial guess.maxIterations
- Maximal number of iterations.stopFitness
- Whether to stop if objective function value is smaller thanstopFitness
.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.
-
CMAESOptimizer
public CMAESOptimizer(int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker) Deprecated.- Parameters:
maxIterations
- Maximal number of iterations.stopFitness
- Whether to stop if objective function value is smaller thanstopFitness
.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.- Since:
- 3.1
-
-
Method Details
-
getStatisticsSigmaHistory
Deprecated.- Returns:
- History of sigma values.
-
getStatisticsMeanHistory
Deprecated.- Returns:
- History of mean matrix.
-
getStatisticsFitnessHistory
Deprecated.- Returns:
- History of fitness values.
-
getStatisticsDHistory
Deprecated.- Returns:
- History of D matrix.
-
optimizeInternal
protected PointValuePair optimizeInternal(int maxEval, MultivariateFunction f, GoalType goalType, OptimizationData... optData) Deprecated.Optimize an objective function.- Overrides:
optimizeInternal
in classBaseAbstractMultivariateOptimizer<MultivariateFunction>
- Parameters:
maxEval
- Allowed number of evaluations of the objective function.f
- Objective function.goalType
- Optimization type.optData
- Optimization data. The following data will be looked for:- Returns:
- the point/value pair giving the optimal value for objective function.
-
doOptimize
Deprecated.Perform the bulk of the optimization algorithm.- Specified by:
doOptimize
in classBaseAbstractMultivariateOptimizer<MultivariateFunction>
- Returns:
- the point/value pair giving the optimal value of the objective function.
-