Natural Evolution Strategies (NES)

class pypop7.optimizers.nes.nes.NES(problem, options)[source]

Natural Evolution Strategies (NES).

This is the abstract class for all NES classes. Please use any of its instantiated subclasses to optimize the black-box problem at hand.

Note

NES is a family of well-principled population-based randomized search methods with a relatively clean derivation from first principles, which maximize the expected fitness along with (estimated) natural gradients. In this library, we have converted it to the minimization problem, in accordance with other modules.

For some interesting applications of NES, please refer to [Xu et al., 2024, ICLR], [Liu et al., 2024, TC (Columbia University, NVIDIA Research, Nokia Bell Labs, etc.)], [Xuan Zhang et al., 2024, IEEE-LRA], [Conti et al., 2018, NeurIPS], to name a few.

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):
    • ’n_individuals’ - number of offspring/descendants, aka offspring population size (int),

    • ’n_parents’ - number of parents/ancestors, aka parental population size (int),

    • ’mean’ - initial (starting) point (array_like),

      • If not given, it will draw a random sample from the uniform distribution whose search range is bounded by problem[‘lower_boundary’] and problem[‘upper_boundary’].

    • ’sigma’ - initial global step-size, aka mutation strength (float).

mean

initial (starting) point, aka mean of Gaussian search/sampling/mutation distribution. If not given, it will draw a random sample from the uniform distribution whose search range is bounded by problem[‘lower_boundary’] and problem[‘upper_boundary’], by default.

Type:

array_like

n_individuals

number of offspring/descendants, aka offspring population size (should > 0).

Type:

int

n_parents

number of parents/ancestors, aka parental population size (should > 0).

Type:

int

sigma

final global step-size, aka mutation strength or overall std of Gaussian search distribution (should > 0.0).

Type:

float

References

Hüttenrauch, M. and Neumann, G., 2024. Robust black-box optimization for stochastic search and episodic reinforcement learning. Journal of Machine Learning Research, 25(153), pp.1-44.

Wierstra, D., Schaul, T., Glasmachers, T., Sun, Y., Peters, J. and Schmidhuber, J., 2014. Natural evolution strategies. Journal of Machine Learning Research, 15(1), pp.949-980.

Schaul, T., 2011. Studies in continuous black-box optimization. Doctoral Dissertation, Technische Universität München.

Yi, S., Wierstra, D., Schaul, T. and Schmidhuber, J., 2009, June. Stochastic search using the natural gradient. In Proceedings of International Conference on Machine Learning (pp. 1161-1168).

Wierstra, D., Schaul, T., Peters, J. and Schmidhuber, J., 2008, June. Natural evolution strategies. In IEEE Congress on Evolutionary Computation (pp. 3381-3387). IEEE.

Please refer to the official Python source code from PyBrain (now not actively maintained): https://github.com/pybrain/pybrain

https://visitor-badge.laobi.icu/badge?page_id=Evolutionary-Intelligence.pypop