Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

## 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 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.

For more information, please refer to the following links:

- Matlab code
- Introduction to CMA-ES
- Wikipedia

Since:
  3.0
Version:
  $Id: CMAESOptimizer.java 1400108 2012-10-19 14:20:16Z erans $

Nested Class Summary
`static class` | `CMAESOptimizer.PopulationSize` Population size.
`static class` | `CMAESOptimizer.Sigma` Input sigma values.

Field Summary

Fields inherited from class org.apache.commons.math3.optim.BaseOptimizer
`evaluations`

Constructor Summary
`CMAESOptimizer(int maxIterations, double stopFitness, boolean isActiveCMA, int diagonalOnly, int checkFeasableCount, RandomGenerator random, boolean generateStatistics, ConvergenceChecker<PointValuePair> checker)`

Method Summary
`protected PointValuePair` | `doOptimize()` Performs the bulk of the optimization algorithm.
`List<RealMatrix>` | `getStatisticsDHistory()`
`List<Double>` | `getStatisticsFitnessHistory()`
`List<RealMatrix>` | `getStatisticsMeanHistory()`
`List<Double>` | `getStatisticsSigmaHistory()`
`PointValuePair` | `optimize(OptimizationData... optData)` Stores data and performs the optimization.

Methods inherited from class org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer
`computeObjectiveValue, getGoalType`

Methods inherited from class org.apache.commons.math3.optim.BaseMultivariateOptimizer
`getLowerBound, getStartPoint, getUpperBound`

Methods inherited from class org.apache.commons.math3.optim.BaseOptimizer
`getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### 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

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.

### 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:
    - `MaxEval`
    - `InitialGuess`
    - `SimpleBounds`
    - `ObjectiveFunction`
    - `CMAESOptimizer.Sigma`
    - `CMAESOptimizer.PopulationSize`
  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.

Overview | Package | Class | Use | Tree | Deprecated | Index | Help
PREV CLASS NEXT CLASS | FRAMES NO FRAMES
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD

Copyright © 2003-2013 The Apache Software Foundation. All Rights Reserved.