Noisy Simulated Annealing (NSA)
- class pypop7.optimizers.sa.nsa.NSA(problem, options)[source]
Noisy Simulated Annealing (NSA).
Note
This is a slightly modified version of discrete NSA for continuous optimization.
- Parameters:
problem (dict) –
- problem arguments with the following common settings (keys):
’fitness_function’ - objective function to be minimized (func),
’ndim_problem’ - number of dimensionality (int),
’upper_boundary’ - upper boundary of search range (array_like),
’lower_boundary’ - lower boundary of search range (array_like).
options (dict) –
- optimizer options with the following common settings (keys):
’max_function_evaluations’ - maximum of function evaluations (int, default: np.inf),
’max_runtime’ - maximal runtime to be allowed (float, default: np.inf),
’seed_rng’ - seed for random number generation needed to be explicitly set (int);
- and with the following particular settings (keys):
’x’ - initial (starting) point (array_like),
’sigma’ - initial global step-size (float),
’is_noisy’ - whether or not to minimize a noisy cost function (bool, default: False),
’schedule’ - schedule for sampling intensity (str, default: linear),
currently only two (linear or quadratic) schedules are supported for sampling intensity,
’n_samples’ - number of samples (int),
’rt’ - reducing factor of annealing temperature (float, default: 0.99).
Examples
Use the black-box optimizer NSA to minimize the well-known test function Rosenbrock:
1>>> import numpy # engine for numerical computing 2>>> from pypop7.benchmarks.base_functions import rosenbrock # function to be minimized 3>>> from pypop7.optimizers.sa.nsa import NSA 4>>> problem = {'fitness_function': rosenbrock, # define problem arguments 5... 'ndim_problem': 2, 6... 'lower_boundary': -5*numpy.ones((2,)), 7... 'upper_boundary': 5*numpy.ones((2,))} 8>>> options = {'max_function_evaluations': 5000, # set optimizer options 9... 'seed_rng': 2022, 10... 'x': 3*numpy.ones((2,)), 11... 'sigma': 1.0, 12... 'temperature': 100.0} 13>>> nsa = NSA(problem, options) # initialize the optimizer class 14>>> results = nsa.optimize() # run the optimization process 15>>> # return the number of function evaluations and best-so-far fitness 16>>> print(f"NSA: {results['n_function_evaluations']}, {results['best_so_far_y']}") 17NSA: 5000, 0.006086567926462302
For its correctness checking of coding, the code-based repeatability report cannot be provided owing to the lack of some details of its experiments in the original paper.
For its pytest based testing, please refer to this Python code.
- is_noisy
whether or not to minimize a noisy cost function.
- Type:
bool
- n_samples
number of samples for each iteration.
- Type:
int
- rt
reducing factor of annealing temperature.
- Type:
float
- schedule
schedule for sampling intensity.
- Type:
str
- sigma
global step-size (fixed during optimization).
- Type:
float
- x
initial (starting) point.
- Type:
array_like
References
Bouttier, C. and Gavra, I., 2019. Convergence rate of a simulated annealing algorithm with noisy observations. Journal of Machine Learning Research, 20(1), pp.127-171.