org.apache.commons.math3.optim.nonlinear.scalar.noderiv
Class CMAESOptimizer
java.lang.Object
org.apache.commons.math3.optim.BaseOptimizer<PAIR>
org.apache.commons.math3.optim.BaseMultivariateOptimizer<PointValuePair>
org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
org.apache.commons.math3.optim.nonlinear.scalar.noderiv.CMAESOptimizer
public class CMAESOptimizer
- extends 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.
For more information, please refer to the following links:
- Since:
- 3.0
- Version:
- $Id: CMAESOptimizer.java 7721 2013-02-14 14:07:13Z CardosoP $
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
CMAESOptimizer
public CMAESOptimizer(int maxIterations,
double stopFitness,
boolean isActiveCMA,
int diagonalOnly,
int checkFeasableCount,
RandomGenerator random,
boolean generateStatistics,
ConvergenceChecker<PointValuePair> checker)
- Parameters:
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.- Since:
- 3.1
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.
optimize
public PointValuePair optimize(OptimizationData... optData)
throws TooManyEvaluationsException,
DimensionMismatchException
- Stores data and performs the optimization.
The list of parameters is open-ended so that sub-classes can extend it
with arguments specific to their concrete implementations.
When the method is called multiple times, instance data is overwritten
only when actually present in the list of arguments: when not specified,
data set in a previous call is retained (and thus is optional in
subsequent calls).
- Overrides:
optimize
in class MultivariateOptimizer
- Parameters:
optData
- Optimization data. The following data will be looked for:
- Returns:
- a point/value pair that satifies the convergence criteria.
- Throws:
TooManyEvaluationsException
- if the maximal number of
evaluations is exceeded.
DimensionMismatchException
- if the initial guess, target, and weight
arguments have inconsistent dimensions.
doOptimize
protected PointValuePair doOptimize()
- Performs the bulk of the optimization algorithm.
- Specified by:
doOptimize
in class BaseOptimizer<PointValuePair>
- Returns:
- the point/value pair giving the optimal value of the
objective function.
Copyright © 2017 CNES. All Rights Reserved.