Class CMAESOptimizer

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

Deprecated.
As of 3.1 (to be removed in 4.0).

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:
Since:
3.0
  • Field Details

    • DEFAULT_CHECKFEASABLECOUNT

      public static final int DEFAULT_CHECKFEASABLECOUNT
      Deprecated.
      Default value for checkFeasableCount: 0.
      See Also:
    • DEFAULT_STOPFITNESS

      public static final double DEFAULT_STOPFITNESS
      Deprecated.
      Default value for stopFitness: 0.0.
      See Also:
    • DEFAULT_ISACTIVECMA

      public static final boolean DEFAULT_ISACTIVECMA
      Deprecated.
      Default value for isActiveCMA: true.
      See Also:
    • DEFAULT_MAXITERATIONS

      public static final int DEFAULT_MAXITERATIONS
      Deprecated.
      Default value for maxIterations: 30000.
      See Also:
    • DEFAULT_DIAGONALONLY

      public static final int DEFAULT_DIAGONALONLY
      Deprecated.
      Default value for diagonalOnly: 0.
      See Also:
    • DEFAULT_RANDOMGENERATOR

      public static final RandomGenerator DEFAULT_RANDOMGENERATOR
      Deprecated.
      Default value for random.
    • lambda

      private int lambda
      Deprecated.
      Population size, offspring number. The primary strategy parameter to play with, which can be increased from its default value. Increasing the population size improves global search properties in exchange to speed. Speed decreases, as a rule, at most linearly with increasing population size. It is advisable to begin with the default small population size.
    • isActiveCMA

      private boolean isActiveCMA
      Deprecated.
      Covariance update mechanism, default is active CMA. isActiveCMA = true turns on "active CMA" with a negative update of the covariance matrix and checks for positive definiteness. OPTS.CMA.active = 2 does not check for pos. def. and is numerically faster. Active CMA usually speeds up the adaptation.
    • checkFeasableCount

      private int checkFeasableCount
      Deprecated.
      Determines how often a new random offspring is generated in case it is not feasible / beyond the defined limits, default is 0.
    • inputSigma

      private double[] inputSigma
      Deprecated.
      See Also:
    • dimension

      private int dimension
      Deprecated.
      Number of objective variables/problem dimension
    • diagonalOnly

      private int diagonalOnly
      Deprecated.
      Defines the number of initial iterations, where the covariance matrix remains diagonal and the algorithm has internally linear time complexity. diagonalOnly = 1 means keeping the covariance matrix always diagonal and this setting also exhibits linear space complexity. This can be particularly useful for dimension > 100.
      See Also:
    • isMinimize

      private boolean isMinimize
      Deprecated.
      Number of objective variables/problem dimension
    • generateStatistics

      private boolean generateStatistics
      Deprecated.
      Indicates whether statistic data is collected.
    • maxIterations

      private int maxIterations
      Deprecated.
      Maximal number of iterations allowed.
    • stopFitness

      private double stopFitness
      Deprecated.
      Limit for fitness value.
    • stopTolUpX

      private double stopTolUpX
      Deprecated.
      Stop if x-changes larger stopTolUpX.
    • stopTolX

      private double stopTolX
      Deprecated.
      Stop if x-change smaller stopTolX.
    • stopTolFun

      private double stopTolFun
      Deprecated.
      Stop if fun-changes smaller stopTolFun.
    • stopTolHistFun

      private double stopTolHistFun
      Deprecated.
      Stop if back fun-changes smaller stopTolHistFun.
    • mu

      private int mu
      Deprecated.
      Number of parents/points for recombination.
    • logMu2

      private double logMu2
      Deprecated.
      log(mu + 0.5), stored for efficiency.
    • weights

      private RealMatrix weights
      Deprecated.
      Array for weighted recombination.
    • mueff

      private double mueff
      Deprecated.
      Variance-effectiveness of sum w_i x_i.
    • sigma

      private double sigma
      Deprecated.
      Overall standard deviation - search volume.
    • cc

      private double cc
      Deprecated.
      Cumulation constant.
    • cs

      private double cs
      Deprecated.
      Cumulation constant for step-size.
    • damps

      private double damps
      Deprecated.
      Damping for step-size.
    • ccov1

      private double ccov1
      Deprecated.
      Learning rate for rank-one update.
    • ccovmu

      private double ccovmu
      Deprecated.
      Learning rate for rank-mu update'
    • chiN

      private double chiN
      Deprecated.
      Expectation of ||N(0,I)|| == norm(randn(N,1)).
    • ccov1Sep

      private double ccov1Sep
      Deprecated.
      Learning rate for rank-one update - diagonalOnly
    • ccovmuSep

      private double ccovmuSep
      Deprecated.
      Learning rate for rank-mu update - diagonalOnly
    • xmean

      private RealMatrix xmean
      Deprecated.
      Objective variables.
    • pc

      private RealMatrix pc
      Deprecated.
      Evolution path.
    • ps

      private RealMatrix ps
      Deprecated.
      Evolution path for sigma.
    • normps

      private double normps
      Deprecated.
      Norm of ps, stored for efficiency.
    • B

      private RealMatrix B
      Deprecated.
      Coordinate system.
    • D

      private RealMatrix D
      Deprecated.
      Scaling.
    • BD

      private RealMatrix BD
      Deprecated.
      B*D, stored for efficiency.
    • diagD

      private RealMatrix diagD
      Deprecated.
      Diagonal of sqrt(D), stored for efficiency.
    • C

      private RealMatrix C
      Deprecated.
      Covariance matrix.
    • diagC

      private RealMatrix diagC
      Deprecated.
      Diagonal of C, used for diagonalOnly.
    • iterations

      private int iterations
      Deprecated.
      Number of iterations already performed.
    • fitnessHistory

      private double[] fitnessHistory
      Deprecated.
      History queue of best values.
    • historySize

      private int historySize
      Deprecated.
      Size of history queue of best values.
    • random

      private RandomGenerator random
      Deprecated.
      Random generator.
    • statisticsSigmaHistory

      private List<Double> statisticsSigmaHistory
      Deprecated.
      History of sigma values.
    • statisticsMeanHistory

      private List<RealMatrix> statisticsMeanHistory
      Deprecated.
      History of mean matrix.
    • statisticsFitnessHistory

      private List<Double> statisticsFitnessHistory
      Deprecated.
      History of fitness values.
    • statisticsDHistory

      private List<RealMatrix> statisticsDHistory
      Deprecated.
      History of D matrix.
  • Constructor Details

    • CMAESOptimizer

      @Deprecated public CMAESOptimizer()
      Deprecated.
      As of version 3.1: Parameter lambda must be passed with the call to optimize (whereas in the current code it is set to an undocumented value).
      Default constructor, uses default parameters
    • CMAESOptimizer

      @Deprecated public CMAESOptimizer(int lambda)
      Deprecated.
      As of version 3.1: Parameter lambda must be passed with the call to optimize (whereas in the current code it is set to an undocumented value)..
      Parameters:
      lambda - Population size.
    • CMAESOptimizer

      @Deprecated public CMAESOptimizer(int lambda, double[] inputSigma)
      Deprecated.
      As of version 3.1: Parameters lambda and inputSigma must be passed with the call to optimize.
      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 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

      @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.
      As of version 3.1: Parameters lambda and inputSigma must be passed with the call to optimize.
      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 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.
    • 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 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 Details

    • getStatisticsSigmaHistory

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

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

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

      public List<RealMatrix> 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 class BaseAbstractMultivariateOptimizer<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

      protected PointValuePair doOptimize()
      Deprecated.
      Perform the bulk of the optimization algorithm.
      Specified by:
      doOptimize in class BaseAbstractMultivariateOptimizer<MultivariateFunction>
      Returns:
      the point/value pair giving the optimal value of the objective function.
    • parseOptimizationData

      private void parseOptimizationData(OptimizationData... optData)
      Deprecated.
      Scans the list of (required and optional) optimization data that characterize the problem.
      Parameters:
      optData - Optimization data. The following data will be looked for:
    • checkParameters

      private void checkParameters()
      Deprecated.
      Checks dimensions and values of boundaries and inputSigma if defined.
    • initializeCMA

      private void initializeCMA(double[] guess)
      Deprecated.
      Initialization of the dynamic search parameters
      Parameters:
      guess - Initial guess for the arguments of the fitness function.
    • updateEvolutionPaths

      private boolean updateEvolutionPaths(RealMatrix zmean, RealMatrix xold)
      Deprecated.
      Update of the evolution paths ps and pc.
      Parameters:
      zmean - Weighted row matrix of the gaussian random numbers generating the current offspring.
      xold - xmean matrix of the previous generation.
      Returns:
      hsig flag indicating a small correction.
    • updateCovarianceDiagonalOnly

      private void updateCovarianceDiagonalOnly(boolean hsig, RealMatrix bestArz)
      Deprecated.
      Update of the covariance matrix C for diagonalOnly > 0
      Parameters:
      hsig - Flag indicating a small correction.
      bestArz - Fitness-sorted matrix of the gaussian random values of the current offspring.
    • updateCovariance

      private void updateCovariance(boolean hsig, RealMatrix bestArx, RealMatrix arz, int[] arindex, RealMatrix xold)
      Deprecated.
      Update of the covariance matrix C.
      Parameters:
      hsig - Flag indicating a small correction.
      bestArx - Fitness-sorted matrix of the argument vectors producing the current offspring.
      arz - Unsorted matrix containing the gaussian random values of the current offspring.
      arindex - Indices indicating the fitness-order of the current offspring.
      xold - xmean matrix of the previous generation.
    • updateBD

      private void updateBD(double negccov)
      Deprecated.
      Update B and D from C.
      Parameters:
      negccov - Negative covariance factor.
    • push

      private static void push(double[] vals, double val)
      Deprecated.
      Pushes the current best fitness value in a history queue.
      Parameters:
      vals - History queue.
      val - Current best fitness value.
    • sortedIndices

      private int[] sortedIndices(double[] doubles)
      Deprecated.
      Sorts fitness values.
      Parameters:
      doubles - Array of values to be sorted.
      Returns:
      a sorted array of indices pointing into doubles.
    • log

      private static RealMatrix log(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix
      Returns:
      Matrix representing the element-wise logarithm of m.
    • sqrt

      private static RealMatrix sqrt(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      Matrix representing the element-wise square root of m.
    • square

      private static RealMatrix square(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      Matrix representing the element-wise square of m.
    • times

      private static RealMatrix times(RealMatrix m, RealMatrix n)
      Deprecated.
      Parameters:
      m - Input matrix 1.
      n - Input matrix 2.
      Returns:
      the matrix where the elements of m and n are element-wise multiplied.
    • divide

      private static RealMatrix divide(RealMatrix m, RealMatrix n)
      Deprecated.
      Parameters:
      m - Input matrix 1.
      n - Input matrix 2.
      Returns:
      Matrix where the elements of m and n are element-wise divided.
    • selectColumns

      private static RealMatrix selectColumns(RealMatrix m, int[] cols)
      Deprecated.
      Parameters:
      m - Input matrix.
      cols - Columns to select.
      Returns:
      Matrix representing the selected columns.
    • triu

      private static RealMatrix triu(RealMatrix m, int k)
      Deprecated.
      Parameters:
      m - Input matrix.
      k - Diagonal position.
      Returns:
      Upper triangular part of matrix.
    • sumRows

      private static RealMatrix sumRows(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      Row matrix representing the sums of the rows.
    • diag

      private static RealMatrix diag(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      the diagonal n-by-n matrix if m is a column matrix or the column matrix representing the diagonal if m is a n-by-n matrix.
    • copyColumn

      private static void copyColumn(RealMatrix m1, int col1, RealMatrix m2, int col2)
      Deprecated.
      Copies a column from m1 to m2.
      Parameters:
      m1 - Source matrix.
      col1 - Source column.
      m2 - Target matrix.
      col2 - Target column.
    • ones

      private static RealMatrix ones(int n, int m)
      Deprecated.
      Parameters:
      n - Number of rows.
      m - Number of columns.
      Returns:
      n-by-m matrix filled with 1.
    • eye

      private static RealMatrix eye(int n, int m)
      Deprecated.
      Parameters:
      n - Number of rows.
      m - Number of columns.
      Returns:
      n-by-m matrix of 0 values out of diagonal, and 1 values on the diagonal.
    • zeros

      private static RealMatrix zeros(int n, int m)
      Deprecated.
      Parameters:
      n - Number of rows.
      m - Number of columns.
      Returns:
      n-by-m matrix of zero values.
    • repmat

      private static RealMatrix repmat(RealMatrix mat, int n, int m)
      Deprecated.
      Parameters:
      mat - Input matrix.
      n - Number of row replicates.
      m - Number of column replicates.
      Returns:
      a matrix which replicates the input matrix in both directions.
    • sequence

      private static RealMatrix sequence(double start, double end, double step)
      Deprecated.
      Parameters:
      start - Start value.
      end - End value.
      step - Step size.
      Returns:
      a sequence as column matrix.
    • max

      private static double max(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      the maximum of the matrix element values.
    • min

      private static double min(RealMatrix m)
      Deprecated.
      Parameters:
      m - Input matrix.
      Returns:
      the minimum of the matrix element values.
    • max

      private static double max(double[] m)
      Deprecated.
      Parameters:
      m - Input array.
      Returns:
      the maximum of the array values.
    • min

      private static double min(double[] m)
      Deprecated.
      Parameters:
      m - Input array.
      Returns:
      the minimum of the array values.
    • inverse

      private static int[] inverse(int[] indices)
      Deprecated.
      Parameters:
      indices - Input index array.
      Returns:
      the inverse of the mapping defined by indices.
    • reverse

      private static int[] reverse(int[] indices)
      Deprecated.
      Parameters:
      indices - Input index array.
      Returns:
      the indices in inverse order (last is first).
    • randn

      private double[] randn(int size)
      Deprecated.
      Parameters:
      size - Length of random array.
      Returns:
      an array of Gaussian random numbers.
    • randn1

      private RealMatrix randn1(int size, int popSize)
      Deprecated.
      Parameters:
      size - Number of rows.
      popSize - Population size.
      Returns:
      a 2-dimensional matrix of Gaussian random numbers.