6.2.3. Optimizers

For Task Optimization, you can specify one or more Optimizer blocks, with the Optimizer%Type key specifying the type of optimizer, and settings for the optimizer specified in the corresponding block:

Optimizer
   Type [AdaptiveRateMonteCarlo | CMAES | Nevergrad | Scipy | RandomSampling | GridSampling]
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

Type
Type:

Multiple Choice

Default value:

CMAES

Options:

[AdaptiveRateMonteCarlo, CMAES, Nevergrad, Scipy, RandomSampling, GridSampling]

Description:

Name of the optimization algorithm or interface. Available options: • Adaptive Rate Monte Carlo • CMAES (Covariance Matrix Adaptation Evolutionary Strategy) • Nevergrad (Interface to many other algorithms) • Scipy (Interface to classic optimization algorithms) • Random Sampling (Uniform random sampling of the space for later analysis. NOT an actual optimizer) • Grid Sampling (Gridwise sampling of the parameter space for later analysis. NOT and actual optimizer)

We generally recommend using CMA-ES.

Note

Some optimizers have a special Settings sub-block. This is a free block in which users may write any special and infrequently needed settings that are not available as their own keys. The pattern is to write space-separated argument/value pairs within the block, one per line. For example:

Settings
    sample_rate 30
    sub_method "Gaussian"
    ignore_inf True
End

Each setting value is evaluated in Python. Strings may, but need not, be enclosed in quotation marks. Consult the Python API documentation for the optimizers to see what arguments are accepted.

6.2.3.1. Adaptive Rate Monte-Carlo

If Optimizer%Type is set to AdaptiveRateMonteCarlo, this block configures the settings for the optimizer.

Optimizer
   AdaptiveRateMonteCarlo
      AcceptanceTarget float
      Gamma float
      MoveRange float_list
      Phi float
      SubIterations integer
      SuperIterations integer
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

AdaptiveRateMonteCarlo
Type:

Block

GUI name:

Adaptive Rate Monte-Carlo

Description:

Settings for the Adaptive Rate Monte-Carlo optimizer

AcceptanceTarget
Type:

Float

Default value:

0.25

GUI name:

Target acceptance (αₜ)

Description:

The target acceptance rate αₜ

Gamma
Type:

Float

Default value:

2.0

GUI name:

γ:

Description:

γ parameter.

MoveRange
Type:

Float List

Default value:

[0.9, 0.905, 0.91, 0.915, 0.92, 0.925, 0.93, 0.935, 0.94, 0.945, 0.95, 0.955, 0.96, 0.965, 0.97, 0.975, 0.98, 0.985, 0.99, 0.995, 1.005, 1.01, 1.015, 1.02, 1.025, 1.03, 1.035, 1.04, 1.045, 1.05, 1.055, 1.06, 1.065, 1.07, 1.075, 1.08, 1.085, 1.09, 1.095, 1.1]

GUI name:

List of allowed move sizes:

Description:

List of allowed move sizes.

Phi
Type:

Float

Default value:

1.0

GUI name:

ϕ:

Description:

ϕ parameter.

SubIterations
Type:

Integer

Default value:

100

GUI name:

Number of sub-iterations (ω):

Description:

Number of sub-iterations (ω)

SuperIterations
Type:

Integer

Default value:

1000

GUI name:

Number of super-iterations (κ):

Description:

Number of super-iterations (κ)

6.2.3.2. CMA-ES

If Optimizer%Type is set to CMAES, this block configures the settings for the optimizer.

CMA-ES stands for Covariance Matrix Adaptation Evolutionary Strategy. This is the recommended optimizer for most problems. The most important parameter to set is Optimizer%CMAES%Sigma0, which specifies how broadly to sample in the beginning of the optimization, and Optimizer%CMAES%Popsize, which specifies how many parameter sets to sample around the current central point.

Optimizer
   CMAES
      ForceInjections Yes/No
      InjectionInterval integer
      KeepFiles Yes/No
      MinSigma float
      Popsize integer
      Sampler [full | vd | vkd]
      Settings # Non-standard block. See details.
         ...
      End
      Sigma0 float
      Verbose Yes/No
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

CMAES
Type:

Block

GUI name:

CMA-ES

Description:

Settings for the Covariance Matrix Adaptation Evolutionary Strategy

ForceInjections
Type:

Bool

Default value:

No

Description:

If Yes, injections of parameter vectors into the solver will be exact, guaranteeing that that solution will be in the next iteration’s population. If No, the injection will result in a direction relative nudge towards the vector. Forcing the injecting can limit global exploration but non-forced injections may have little effect. See also glompo.optimizer.cmaes.injectioninterval

InjectionInterval
Type:

Integer

Default value:

0

Description:

Number of iterations between injections of the incumbent solution into the sampled population. Defaults to 0, i.e., no injections are performed. Injections can be helpful in increasing the convergence speed and nudging optimizers toward a solution. This is a form of elitism and will limit exploration. Of particular interest is pairing this key with glompo.ShareBestEvaluationBetweenOptimizers. In this case the incumbent that is injected comes from other optimizers run in parallel. This can help nudge optimizers towards better solutions while dramatically improving convergence speed. See also glompo.optimizer.cmaes.forceinjections

KeepFiles
Type:

Bool

Default value:

No

GUI name:

Store covariance history:

Description:

Keep CMA specific history files about the state of the covariance matrix and other algorithm variables.

MinSigma
Type:

Float

Description:

Convergence condition to terminate the optimization when the standard deviation of the sampling distribution falls below this value.

Popsize
Type:

Integer

Description:

Number of function evaluations per CMA-ES iteration. If not specified or -1, then the population size will equal the number of workers available to the optimizer. This is computationally efficient but not algorithmically efficient. A value of zero or one will set the population size to the value suggested by CMA based on the dimensionality of the problem. This produces the best algorithm performance but may be computationally inefficient if resources are left idling while waiting for other evaluations to complete. Note: a population of one is not allowed by CMA, therefore, it is changed to the algorithm default. This also means that giving CMA only one worker will also change the popsize to the algorithm default.

Sampler
Type:

Multiple Choice

Default value:

full

Options:

[full, vd, vkd]

Description:

Choice of full or restricted Gaussian sampling procedures. Options: • full: Full sampling procedure • vd: Restricted sampler for VD-CMA (Linear time/space comparison-based natural gradient optimization) • vkd: Restricted sampler for VkD-CMA (Time/space variant of CMA-ES)

Settings
Type:

Non-standard block

GUI name:

Extra settings:

Description:

‘argument value’ pairs for extra CMA specific configuration arguments. See CMAOptimizer API documentation for more details on which options are possible.

Sigma0
Type:

Float

Default value:

0.05

GUI name:

σ₀:

Description:

Initial standard deviation of the multivariate normal distribution from which trials are drawn. The recommended range of values for is between 0.01 and 0.5. Lower values sample very locally and converge quickly, higher values sample broadly but will take a long time to converge.

Verbose
Type:

Bool

Default value:

No

Description:

Produce a printstream of results from within the optimizer itself.

6.2.3.3. Scipy

If Optimizer%Type is set to Scipy, this block configures the settings for the optimizer.

This ‘optimizer’ is in fact a wrapper to several classic minimization algorithms provided by the Python Scipy package.

Warning

Due to Scipy internals, the Scipy optimizers are not compatible with checkpointing.

Optimizer
   Scipy
      Algorithm [Nelder-Mead | Powell | CG | BFGS | Newton-CG | L-BFGS-B | TNC | COBYLA | 
                 SLSQP | trust-constr | dogleg | trust-ncg | trust-exact | trust-krylov]
      Hessian [2-point | 3-point | cs]
      Jacobian [2-point | 3-point | cs]
      Settings # Non-standard block. See details.
         ...
      End
      Tolerance float
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

Scipy
Type:

Block

GUI name:

Scipy (Minimize)

Description:

Settings for the Scipy wrapper which gives access to many optimization algorithms. For parallel optimizations, Nevergrad is preferred as it provides better control options.

Algorithm
Type:

Multiple Choice

Default value:

Nelder-Mead

Options:

[Nelder-Mead, Powell, CG, BFGS, Newton-CG, L-BFGS-B, TNC, COBYLA, SLSQP, trust-constr, dogleg, trust-ncg, trust-exact, trust-krylov]

Description:

Optimization strategy to use. See Scipy documentation for details of the available methods.

Hessian
Type:

Multiple Choice

Default value:

2-point

Options:

[2-point, 3-point, cs]

Description:

Choice of the Hessian estimation method. Only for Newton-CG, dogleg, trust-ncg, trust-krylov, trust-exact and trust-constr.

Jacobian
Type:

Multiple Choice

Default value:

2-point

Options:

[2-point, 3-point, cs]

Description:

Choice of gradient estimation method. Only for CG, BFGS, Newton-CG, L-BFGS-B, TNC, SLSQP, dogleg, trust-ncg, trust-krylov, trust-exact and trust-constr.

Settings
Type:

Non-standard block

GUI name:

Extra settings:

Description:

‘argument value’ pairs for extra algorithm-specific configuration arguments. See Scipy API documentation for more details on which options are possible.

Tolerance
Type:

Float

Default value:

1e-06

Description:

Tolerance for termination. Interpretation linked to chosen method. See Scipy docs.

6.2.3.4. Nevergrad

If the above optimizers are insufficient for your requirements, ParAMS also provides an interface to Nevergrad which is, itself, an interface to more than 85 optimization algorithms.

Note

Nevergrad is not included with AMS. You need to install it manually to use this feature: $AMSBIN/amspython -m pip install nevergrad.

The Nevergrad integration with ParAMS (particularly with regards to checkpointing) is not well-tested due to the very large number of algorithms available.

If Optimizer%Type is set to Nevergrad, this block configures the settings for the optimizer.

Optimizer
   Nevergrad
      Algorithm [ASCMA2PDEthird | ASCMADEQRthird | ASCMADEthird | AlmostRotationInvariantDE | 
                 AvgMetaLogRecentering | AvgMetaRecentering | BO | CM | CMA | CMandAS | 
                 CMandAS2 | CMandAS3 | CauchyLHSSearch | CauchyOnePlusOne | CauchyScrHammersleySearch | 
                 Cobyla | DE | DiagonalCMA | DiscreteOnePlusOne | DoubleFastGADiscreteOnePlusOne | 
                 EDA | ES | FCMA | HaltonSearch | HaltonSearchPlusMiddlePoint | HammersleySearch | 
                 HammersleySearchPlusMiddlePoint | LHSSearch | LargeHaltonSearch | LhsDE | 
                 MEDA | MPCEDA | MetaLogRecentering | MetaRecentering | MixES | MultiCMA | 
                 MultiScaleCMA | MutDE | NGO | NaiveIsoEMNA | NaiveTBPSA | NelderMead | 
                 NoisyBandit | NoisyDE | NoisyDiscreteOnePlusOne | NoisyOnePlusOne | OAvgMetaLogRecentering | 
                 ORandomSearch | OScrHammersleySearch | OnePlusOne | OptimisticDiscreteOnePlusOne | 
                 OptimisticNoisyOnePlusOne | PBIL | PCEDA | PSO | ParaPortfolio | Portfolio | 
                 Powell | QORandomSearch | QOScrHammersleySearch | QrDE | RCobyla | RPowell | 
                 RSQP | RandomSearch | RandomSearchPlusMiddlePoint | RealSpacePSO | RecES | 
                 RecMixES | RecMutDE | RecombiningPortfolioOptimisticNoisyDiscreteOnePlusOne | 
                 RotationInvariantDE | SPSA | SQP | SQPCMA | ScrHaltonSearch | ScrHaltonSearchPlusMiddlePoint | 
                 ScrHammersleySearch | ScrHammersleySearchPlusMiddlePoint | Shiva | SplitOptimizer | 
                 TBPSA | TripleCMA | TwoPointsDE | cGA | chainCMAPowel]
      Settings # Non-standard block. See details.
         ...
      End
      Zero float
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

Nevergrad
Type:

Block

GUI name:

Nevergrad

Description:

Settings for the Nevergrad wrapper which gives access to many optimization algorithms.

Algorithm
Type:

Multiple Choice

Default value:

TBPSA

Options:

[ASCMA2PDEthird, ASCMADEQRthird, ASCMADEthird, AlmostRotationInvariantDE, AvgMetaLogRecentering, AvgMetaRecentering, BO, CM, CMA, CMandAS, CMandAS2, CMandAS3, CauchyLHSSearch, CauchyOnePlusOne, CauchyScrHammersleySearch, Cobyla, DE, DiagonalCMA, DiscreteOnePlusOne, DoubleFastGADiscreteOnePlusOne, EDA, ES, FCMA, HaltonSearch, HaltonSearchPlusMiddlePoint, HammersleySearch, HammersleySearchPlusMiddlePoint, LHSSearch, LargeHaltonSearch, LhsDE, MEDA, MPCEDA, MetaLogRecentering, MetaRecentering, MixES, MultiCMA, MultiScaleCMA, MutDE, NGO, NaiveIsoEMNA, NaiveTBPSA, NelderMead, NoisyBandit, NoisyDE, NoisyDiscreteOnePlusOne, NoisyOnePlusOne, OAvgMetaLogRecentering, ORandomSearch, OScrHammersleySearch, OnePlusOne, OptimisticDiscreteOnePlusOne, OptimisticNoisyOnePlusOne, PBIL, PCEDA, PSO, ParaPortfolio, Portfolio, Powell, QORandomSearch, QOScrHammersleySearch, QrDE, RCobyla, RPowell, RSQP, RandomSearch, RandomSearchPlusMiddlePoint, RealSpacePSO, RecES, RecMixES, RecMutDE, RecombiningPortfolioOptimisticNoisyDiscreteOnePlusOne, RotationInvariantDE, SPSA, SQP, SQPCMA, ScrHaltonSearch, ScrHaltonSearchPlusMiddlePoint, ScrHammersleySearch, ScrHammersleySearchPlusMiddlePoint, Shiva, SplitOptimizer, TBPSA, TripleCMA, TwoPointsDE, cGA, chainCMAPowel]

Description:

Optimization strategy to use. See Nevergrad documentation for details of the available methods.

Settings
Type:

Non-standard block

GUI name:

Extra settings:

Description:

‘argument value’ pairs for extra algorithm-specific configuration arguments. See Nevergrad API documentation for more details on which options are possible.

Zero
Type:

Float

Default value:

0.0

GUI name:

Termination function value:

Description:

Function value below which the algorithm will terminate.

6.2.3.5. Random sampling

If Optimizer%Type is set to RandomSampling, this block configures the settings for the optimizer.

RandomSampling is not really an optimizer, but simply randomly samples parameters in the allowed ranges. The output from a random sampling can be used for sensitivity analysis.

Optimizer
   RandomSampling
      NumberOfSamples integer
      RandomSeed integer
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

RandomSampling
Type:

Block

GUI name:

Random Sampler

Description:

Settings for a totally random sampler of the parameter space.

NumberOfSamples
Type:

Integer

Default value:

100

Description:

Number of samples to generate.

RandomSeed
Type:

Integer

Description:

Random seed to use for the generator. Useful for reproducibility.

6.2.3.6. Grid sampling

If Optimizer%Type is set to GridSampling, this block configures the settings for the optimizer.

GridSampling is not really an optimizer, but simply samples the available parameter space in a regular grid pattern. This can be useful in rapidly (and coarsely) exploring the parameter space and investigating the appropriateness of bounds for example.

Optimizer
   GridSampling
      NumberOfDivisions integer
   End
End
Optimizer
Type:

Block

Recurring:

True

GUI name:

Optimization algorithm:

Description:

An optimizer which may be used during the optimization.

GridSampling
Type:

Block

GUI name:

Grid-wise Sampler

Description:

Settings for grid-wise sampling of the parameter space.

NumberOfDivisions
Type:

Integer

Default value:

10

GUI name:

Step in each dimension:

Description:

Number of equal sub-divisions to take for each parameter. Total calls is n_steps^n_parameters.