DEA (Differential Evolution Algorithm)
This is an implementation of the Differential Evolution Algorithm algorithm, as published in Storn1997.
DEA optimizes a problem by updating a population of candidate solutions through mutation and recombination. The update rules are simple and the objective function must not be differentiable. Our implementation includes various adaption and updating strategies Brest2006.
Usage
e["Solver"]["Type"] = "Optimizer/DEA"
Results
These are the results produced by this solver:
- Best F(x)
Usage: e[“Results”][“Best F(x)”] = real number
Description: Optimal value of F(x) found so far.
- Best Parameters
Usage: e[“Results”][“Best Parameters”] = List of real number
Description: Value for the x parameters that produced the best F(x).
Variable-Specific Settings
These are settings required by this module that are added to each of the experiment’s variables when this module is selected.
- Lower Bound
Usage: e[“Variables”][index][“Lower Bound”] = real number
Description: [Hint] Lower bound for the variable’s value.
- Upper Bound
Usage: e[“Variables”][index][“Upper Bound”] = real number
Description: [Hint] Upper bound for the variable’s value.
- Initial Value
Usage: e[“Variables”][index][“Initial Value”] = real number
Description: [Hint] Initial value at or around which the algorithm shall start looking for an optimum.
- Initial Mean
Usage: e[“Variables”][index][“Initial Mean”] = real number
Description: [Hint] Initial mean for the proposal distribution. This value must be defined between the variable’s Mininum and Maximum settings (by default, this value is given by the center of the variable domain).
- Initial Standard Deviation
Usage: e[“Variables”][index][“Initial Standard Deviation”] = real number
Description: [Hint] Initial standard deviation of the proposal distribution for a variable (by default, this value is given by 30% of the variable domain width).
- Minimum Standard Deviation Update
Usage: e[“Variables”][index][“Minimum Standard Deviation Update”] = real number
Description: [Hint] Lower bound for the standard deviation updates of the proposal distribution for a variable. Korali increases the scaling factor sigma if this value is undershot.
- Values
Usage: e[“Variables”][index][“Values”] = List of real number
Description: [Hint] Locations to evaluate the Objective Function.
Configuration
These are settings required by this module.
- Population Size
Usage: e[“Solver”][“Population Size”] = unsigned integer
Description: Specifies the number of samples to evaluate per generation (preferably 5-10x the number of variables).
- Crossover Rate
Usage: e[“Solver”][“Crossover Rate”] = real number
Description: Controls the rate at which dimensions of the samples are mixed (must be in [0,1]).
- Mutation Rate
Usage: e[“Solver”][“Mutation Rate”] = real number
Description: Controls the scaling of the vector differentials (must be in [0,2], preferably < 1).
- Mutation Rule
Usage: e[“Solver”][“Mutation Rule”] = string
Description: Controls the Mutation Rate.
Options:
“Fixed”: Fixed mutation rate.
“Self Adaptive”: Varying Crossover Rate and Mutation Rate, according to [Brest2006].
- Parent Selection Rule
Usage: e[“Solver”][“Parent Selection Rule”] = string
Description: Defines the selection rule of the parent vector.
Options:
“Random”: Select parent randomly.
“Best”: Mutate only best variables.
- Accept Rule
Usage: e[“Solver”][“Accept Rule”] = string
Description: Sets the accept rule after sample mutation and evaluation.
Options:
“Best”: Update best sample if better than Best Ever Sample.
“Greedy”: Accept all candiates better than parent.
“Iterative”: Iterate through candidates and accept if Best Ever Value improved.
“Improved”: Accept all candidates better than Best Ever Sample.
- Fix Infeasible
Usage: e[“Solver”][“Fix Infeasible”] = True/False
Description: If set true, Korali samples a random sample between Parent and the voiolated boundary. If set false, infeasible samples are mutated again until feasible.
Termination Criteria
These are the customizable criteria that indicates whether the solver should continue or finish execution. Korali will stop when at least one of these conditions are met. The criteria is expressed in C++ since it is compiled and evaluated as seen here in the engine.
- Max Infeasible Resamplings
Usage: e[“Solver”][“Max Infeasible Resamplings”] = unsigned integer
Description: Max number of mutations per sample per generation if infeasible (only relevant if Fix Infeasible is set False).
Criteria:
_infeasibleSampleCount > _maxInfeasibleResamplings
- Min Value
Usage: e[“Solver”][“Min Value”] = real number
Description: Specifies the target fitness to stop minimization.
Criteria:
(_k->_currentGeneration > 1) && (-_bestEverValue < _minValue)
- Min Step Size
Usage: e[“Solver”][“Min Step Size”] = real number
Description: Specifies the minimal step size of the population mean from one gneration to another.
Criteria:
_currentMinimumStepSize < _minStepSize
- Max Value
Usage: e[“Solver”][“Max Value”] = real number
Description: Specifies the maximum target fitness to stop maximization.
Criteria:
_k->_currentGeneration > 1 && (+_bestEverValue > _maxValue)
- Min Value Difference Threshold
Usage: e[“Solver”][“Min Value Difference Threshold”] = real number
Description: Specifies the minimum fitness differential between two consecutive generations before stopping execution.
Criteria:
_k->_currentGeneration > 1 && (fabs(_currentBestValue - _previousBestValue) < _minValueDifferenceThreshold)
- Max Model Evaluations
Usage: e[“Solver”][“Max Model Evaluations”] = unsigned integer
Description: Specifies the maximum allowed evaluations of the computational model.
Criteria:
_maxModelEvaluations <= _modelEvaluationCount
- Max Generations
Usage: e[“Solver”][“Max Generations”] = unsigned integer
Description: Determines how many solver generations to run before stopping execution. Execution can be resumed at a later moment.
Criteria:
_k->_currentGeneration > _maxGenerations
Default Configuration
These following configuration will be assigned by default. Any settings defined by the user will override the given settings specified in these defaults.
{ "Accept Rule": "Greedy", "Best Ever Value": -Infinity, "Best Sample Index": 0, "Candidate Population": [ [] ], "Crossover Rate": 0.9, "Current Best Variables": [], "Current Mean": [], "Current Minimum Step Size": 0.0, "Fix Infeasible": true, "Infeasible Sample Count": 0, "Max Distances": [], "Model Evaluation Count": 0, "Mutation Rate": 0.5, "Mutation Rule": "Fixed", "Normal Generator": { "Mean": 0.0, "Standard Deviation": 1.0, "Type": "Univariate/Normal" }, "Parent Selection Rule": "Random", "Population Size": 200, "Previous Best Ever Value": -Infinity, "Previous Mean": [], "Previous Value Vector": [], "Sample Population": [ [] ], "Termination Criteria": { "Max Generations": 10000000000, "Max Infeasible Resamplings": 10000000, "Max Model Evaluations": 1000000000, "Max Value": Infinity, "Min Step Size": -Infinity, "Min Value": -Infinity, "Min Value Difference Threshold": -Infinity }, "Uniform Generator": { "Maximum": 1.0, "Minimum": 0.0, "Type": "Univariate/Uniform" }, "Value Vector": [], "Variable Count": 0 }
Variable Defaults
These following configuration will be assigned to each of the experiment variables by default. Any settings defined by the user will override the given settings specified in these defaults.
{ "Initial Mean": NaN, "Initial Standard Deviation": NaN, "Initial Value": NaN, "Lower Bound": -Infinity, "Minimum Standard Deviation Update": 0.0, "Upper Bound": Infinity, "Values": [] }