crfmnes

CR-FM-NES for numerical optimization in Python


Keywords
optimization, CR-FM-NES, cma-es, evolution-strategies, evolution-strategy, natural-evolution-strategies, natural-gradients
License
MIT
Install
pip install crfmnes==1.0.0

Documentation

CR-FM-NES [slide]

CR-FM-NES [1] implementation. The main feature of CR-FM-NES is that both time and space complexity are linear, with partially considering variable dependencies. Therefore, it is especially suitable for high-dimensional problems (about hundreds to thousands of dimensions). On the other hand, it often achieves high performance even on low-dimensional problems. This is an extension of FM-NES (Fast Moving Natural Evolution Strategy) [2] to be applicable in high-dimensional problems. Please e-mail at masahironomura5325@gmail.com if you have any issue.

188303830-aa7b11d0-c6ff-4d1a-9bd8-2ccbf4d7e2dd

If you find this code useful in your research then please cite:

@INPROCEEDINGS{nomura2022fast,
  title={Fast Moving Natural Evolution Strategy for High-Dimensional Problems},
  author={Nomura, Masahiro and Ono, Isao},
  booktitle={2022 IEEE Congress on Evolutionary Computation (CEC)}, 
  pages={1-8},
  year={2022},
}

News

Getting Started

Prerequisites

You need only NumPy that is the package for scientific computing.

Installing

Please run the following command.

$ pip install crfmnes

Example

This is a simple example that objective function is sphere function. Note that the optimization problem is formulated as minimization problem.

import numpy as np
from crfmnes import CRFMNES

dim = 3
f = lambda x: np.sum(x**2)
mean = np.ones([dim, 1]) * 0.5
sigma = 0.2
lamb = 6
crfmnes = CRFMNES(dim, f, mean, sigma, lamb)

x_best, f_best = crfmnes.optimize(100)
print("x_best:{}, f_best:{}".format(x_best, f_best))
# x_best:[1.64023896e-05 2.41682149e-05 3.40657594e-05], f_best:2.0136169613476005e-09

For Constrained Problems

CR-FM-NES can be applied to (implicitly) constrained black-box optimization problems. Please set the objective function value of the infeasible solution to np.inf. CR-FM-NES reflects the information and performs an efficient search. Please refer to [3] for the details of the constraint handling methods implemented in this repository.

Other Versions of CR-FM-NES

I really appreciate that CR-FM-NES is implemented in other settings.

References