CMAEvolution Strategy Optimizer Class
Definition
Assembly: Numerics.NET (in Numerics.NET.dll) Version: 10.9.0
public class CMAEvolutionStrategyOptimizer : PopulationBasedOptimizer<Population<Candidate>, Candidate>- Inheritance
- Object → ManagedIterativeAlgorithm<Vector<Double>, Double, OptimizationSolutionReport<Vector<Double>>> → MultidimensionalOptimizer<Vector<Double>, OptimizationSolutionReport<Vector<Double>>> → PopulationBasedOptimizer<Vector<Double>, Population<Candidate>, Candidate> → PopulationBasedOptimizer<Population<Candidate>, Candidate> → CMAEvolutionStrategyOptimizer
Remarks
CMA-ES is a stochastic, derivative-free optimization algorithm for difficult optimization problems in continuous domains. It adapts the full covariance matrix of a normal search distribution.
Use the CMAEvolutionStrategyOptimizer class to find an extremum of an objective function through population-based evolutionary optimization. The algorithm maintains a population of candidate solutions and creates new candidates through sampling from a multivariate normal distribution.
The method searches without derivatives and can be useful for nonconvex and multimodal objectives. Its stopping tests measure progress and the size of the search population; they do not certify stationarity or global optimality. Tighten geometric and fitness tolerances when more accuracy is needed.
The objective function must be supplied as a multivariate function delegate to the ObjectiveFunction property.
For a bounded search, set the LowerBounds and UpperBounds properties to specify the search space constraints and select BoundaryHandling. Bounds are optional when boundary handling is disabled. The ExtremumType property specifies whether a minimum or a maximum of the objective function is desired.
Example
The following example attempts to find a minimum for the Rastrigin function using the CMA-ES optimizer.
The Rastrigin function is a challenging test problem for global optimization algorithms. The function has many local minima, which makes it tricky for an optimizer to find the global minimum.
// Define the Rastrigin function
Func<Vector<double>, double> rastrigin = (x) =>
{
int n = x.Length;
double A = 10;
double sum = A * n;
for (int i = 0; i < n; i++)
{
sum += x[i] * x[i] - A * Math.Cos(2 * Math.PI * x[i]);
}
return sum;
};
// Define the initial guess
Vector<double> initialGuess = Vector.Create<double>(2, 2);
// Create the optimizer
var optimizer = new CMAEvolutionStrategyOptimizer(
objectiveFunction: rastrigin,
initialGuess: initialGuess
);
// Run the optimization
optimizer.FindMinimum();
// Get the result
Vector<double> solution = optimizer.Extremum;
double value = optimizer.ValueAtExtremum;
Constructors
| CMA | Constructs a new CMA-ES optimizer. |
| CMA | Constructs a new CMA-ES optimizer. |
| CMA | Constructs a new CMA-ES optimizer. |
Properties
| Boundary | Gets or sets the boundary handling strategy for the optimizer. |
| Convergence |
Gets the collection of convergence tests for the algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Covariance | Gets or sets the maximum number of generations between covariance factor refreshes. |
| Dimensions |
Gets or sets the number of dimensions of the optimization problem.
(Inherited from PopulationBasedOptimizer<TPopulation, TCandidate>) |
| Diversity |
Gets the convergence test that measures population diversity.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Estimated |
Gets a value indicating the size of the absolute
error of the result.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Evaluations |
Gets the number of evaluations needed to execute the algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Evaluations |
Gets the number of evaluations still available.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Extremum |
Gets or sets the current best approximation to the extremum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Extremum |
Gets or sets the type of extremum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Has |
Gets a value indicating whether the optimizer has constraints.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Has |
Indicates whether the degree of parallelism is a property that is shared
across instances.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Initial |
Gets or sets the initial value for the iteration.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Initialization |
Gets or sets the method used to initialize the population.
(Inherited from PopulationBasedOptimizer<TPopulation, TCandidate>) |
| Initial | Gets or sets the initial step size |
| Iterations |
Gets the number of iterations needed by the
algorithm to reach the desired accuracy.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Iterations |
Gets the number of iterations remaining.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Lower |
Gets or sets the vector of lower bounds for the solution.
(Inherited from PopulationBasedOptimizer<TPopulation, TCandidate>) |
| Max |
Gets or sets the maximum degree of parallelism enabled by this instance.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Max |
Gets or sets the maximum number of evaluations during the calculation.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Max | Gets or sets the maximum number of iterations
to use when approximating the roots of the target
function.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Min |
Gets or sets the minimum iterations that have to be performed.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Objective |
Gets or sets the objective function.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Parallel |
Gets or sets the configuration for the parallel behavior of the algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Population |
Gets the current population of solutions.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Population |
Gets the convergence test that measures the range of population function values.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Population |
Gets or sets the population size used in the algorithm.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Random |
Gets or sets the random number generator used by the optimizer.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Random |
Gets or sets the random number generator used by the optimizer.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Result |
Gets the result of an algorithm after it has executed.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Solution |
Gets the result of an algorithm after it has executed.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Status |
Gets the AlgorithmStatus following
an execution of the algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Throw |
Gets or sets whether to throw an
exception when the algorithm fails to converge.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Upper |
Gets or sets the upper bounds for the solution.
(Inherited from PopulationBasedOptimizer<TPopulation, TCandidate>) |
| Use | Gets or sets a value indicating whether to use active CMA. |
| Use | Gets or sets a value indicating whether to use a diagonal covariance matrix. |
| Value |
Gets the original objective value at the current approximation to the extremum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Values |
Gets the function values of the current population.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Value |
Gets the SimpleConvergenceTest<T> that uses the value of the target functions.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
Methods
| Add |
Adds a constraint function g(x) that must satisfy g(x) ≤ 0.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Clear |
Clears all constraint functions.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Equals | Determines whether the specified object is equal to the current object. (Inherited from Object) |
| Evaluate |
Evaluates the objective function.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object) |
| Find |
Searches for an extremum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Find |
Searches for a maximum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Find |
Searches for a minimum.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Get |
Gets the total constraint violation for a given solution vector.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Get | Serves as the default hash function. (Inherited from Object) |
| Get | Gets the Type of the current instance. (Inherited from Object) |
| Increment |
Increments the number of evaluations by one.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Increment |
Increments the number of evaluations by the specified amount.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Initialize |
Initializes the population of candidate solutions.
(Overrides PopulationBasedOptimizer<TPopulation, TCandidate>.InitializePopulation()) |
| Iterate |
Performs one iteration of the algorithm.
(Overrides ManagedIterativeAlgorithm<T, TError, TReport>.Iterate()) |
| Iterated |
Performs tasks after the iteration is completed, but before
the status of the algorithm is finalized.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Memberwise | Creates a shallow copy of the current Object. (Inherited from Object) |
| OnConvergence |
Performs any tasks after the main algorithm has converged.
(Overrides PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>.OnConvergence()) |
| OnFailure |
Performs any tasks after the main algorithm has failed to converge.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| OnInit |
Performs initialization before the first iteration.
(Overrides MultidimensionalOptimizer<T, TReport>.OnInit()) |
| Report |
Records the results of an algorithm in case it fails.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Report |
Records the results of an algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Report |
Records the results of a algorithm that converged successfully.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Reset |
Resets the number of evaluations to zero.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Restart |
Prepares the algorithm to be run again with possibly different inputs.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Run() |
Runs the algorithm.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Run( |
Runs the algorithm using the specified parallelization options.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Set |
Sets the results of an algorithm's execution.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Set |
Sets the value of the objective function at the extremum to the supplied value.
(Inherited from MultidimensionalOptimizer<T, TReport>) |
| Test |
Checks whether the algorithm has converged.
(Inherited from PopulationBasedOptimizer<TSolution, TPopulation, TCandidate>) |
| Thread |
Increments the number of evaluations by one.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Thread |
Increments the number of evaluations by the specified amount.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| Throw |
Interprets the AlgorithmStatus and
throws the appropriate exception.
(Inherited from ManagedIterativeAlgorithm<T, TError, TReport>) |
| ToString | Returns a string that represents the current object. (Inherited from Object) |