CMA-ES¶
-
class
CMAOptimizer(_opt_id=None, _signal_pipe=None, _results_queue=None, _pause_flag=None, _is_log_detailed=False, _workers=1, _backend='threads', sigma0=0.05, sampler='full', verbose=True, keep_files=None, force_injects=None, injection_interval=None, **cmasettings)[source]¶ Bases:
scm.glompo.optimizers.baseoptimizer.BaseOptimizerWrapper around a CMA-ES python implementation. Note that this class is also stand-alone, this means it can be used independently of the GloMPO framework. It is also built in such a way that it
minimize()can be called multiple times on different functions.- Parameters
- _opt_id, _signal_pipe, _results_queue, _pause_flag, _is_log_detailed, _workers, _backend
See
BaseOptimizer.- sigma0
Initial standard deviation of the multivariate normal distribution from which trials are drawn. One value for all parameters which means that all parameters must be scaled accordingly.
- sampler
Allows the use of
'GaussVDSampler'and'GaussVkDSampler'settings.- verbose
If
True, print status messages during the optimization, else no output will be printed.- keep_files
Directory in which to save files containing extra optimizer convergence information.
- force_injects
If
True, injections of parameter vectors into the solver will be exact, guaranteeing that the solution will be in the next iteration’s population. IfFalse, 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.- injection_interval
If
None, injections are ignored by the optimizer. If anintis provided then injection are only accepted if at leastinjection_intervaliterations have passed since the last injection.**cmasettingsCMA-ES package-specific settings. See
cma.s.pprint(cma.CMAOptions())for a list of available options. Most useful keys are:'timeout','tolstagnation','popsize'. Additionally, the following options are supported through this class:'minsigma': Termination ifsigma < minsigma'maxsigma': Limit sigma tomin(sigma,maxsigma)'storeC': IfTrue, creates a file calledcma_C.npyinkeep_fileswith the covariance matrix at every iteration.keep_filesmust also be provided andsamplermust be the default ('full').
- Notes
Although not the default, by adjusting the injection settings above, the optimizer will inject the saved incumbent solution into the solver influencing the points sampled by the following iteration. The incumbent begins at
x0and is updated by the inject method called by the GloMPO manager.If
'popsize'is not provided during optimizer initialisation, it will be set to the number ofBaseOptimizer.workersif this is larger than 1, else it will be set to the default:4 + int(3 * log(d)).
- References
Hansen, N. (2021). CMA-ES, Covariance Matrix Adaptation Evolution Strategy for non-linear numerical optimization in Python. PyPI. https://pypi.org/project/cma/
-
classmethod
checkpoint_load(path, **kwargs)[source]¶ Recreates an optimizer from a saved snapshot.
- Parameters
- path
Path to checkpoint file from which to build from. It must be a file produced by the corresponding
checkpoint_save()method.**kwargsSee
__init__.
- Notes
This is a basic implementation which should suit most optimizers; may need to be overwritten.
-
checkpoint_save(path, force=None, block=None)[source]¶ Save current state, suitable for restarting.
- Parameters
- path
Path to file into which the object will be dumped. Typically supplied by the manager.
- force
Set of variable names which will be forced into the dumped file. Convenient shortcut for overwriting if fails for a particular optimizer because a certain variable is filtered out of the data dump.
- block
Set of variable names which are typically caught in the construction of the checkpoint but should be excluded. Useful for excluding some properties.
- Notes
Only the absolutely critical aspects of the state of the optimizer need to be saved. The manager will resupply multiprocessing parameters when the optimizer is reconstructed.
This method will almost never be called directly by the user. Rather it will be called (via signals) by the manager.
This is a basic implementation which should suit most optimizers; may need to be overwritten. Typically it is sufficient to call the super method and use the
forceandblockparameters to get a working implementation.
-
minimize(function, x0, bounds)[source]¶ Begin CMA-ES minimization loop.
- Parameters
- function bounds callbacks
- x0
See
BaseOptimizer.minimize(). Force injected into the solver to guarantee it is evaluated.
- Returns
- MinimizeResult
Location, function value and other optimization information about the lowest value found by the optimizer.