CR-FM-NES [slide]
CR-FM-NES [1] is an efficient black-box optimization method for high-dimensional problems. In CR-FM-NES, 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.
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},
}
- (2023/09) CR-FM-NES has been integrated into EvoJax with the promising performance on EvoJax Benchmarks. Additionally there are quite interesting results when using it as part of an QD-algorithm. Thanks @dietmarwo!
- (2023/01) We released the first major version of
crfmnes
in January 2023. You can install it viapip install crfmnes
. - (2022/12) CR-FM-NES has been integrated into evosax, which provides JAX-based evolution strategies implementation. Thanks @RobertTLange and @Obliman!
- (2022/07) The paper Fast Moving Natural Evolution Strategy for High-Dimensional Problems has been accepted at IEEE CEC'22.
- (2022/05) CR-FM-NES has been integrated into fast-cma-es, which faster C++/Eigen based implementations and a coordinated parallel retry mechanism. Thanks @dietmarwo!
- (2018/10) CR-FM-NES has been integrated into CRFMNES_CS, which is CR-FM-NES C# implementation. Thanks @bakanaouji!
You need only NumPy that is the package for scientific computing.
Please run the following command.
$ pip install crfmnes
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
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.
I really appreciate that CR-FM-NES is implemented in other settings.
- C# Implementation: bakanaouji/CRFMNES_CS
- C++ Implementation: dietmarwo/fast-cma-es
- Jax(Python) Implementation: RobertTLange/evosax
- Jax(Python) Implementation: google/evojax
- [1] M. Nomura, I. Ono, Fast Moving Natural Evolution Strategy for High-Dimensional Problems, IEEE CEC, 2022.
- [2] M. Nomura, I. Ono, Natural Evolution Strategy for Unconstrained and Implicitly Constrained Problems with Ridge Structure, IEEE SSCI, 2021.
- [3] M. Nomura, N. Sakai, N. Fukushima, and I. Ono, Distance-weighted Exponential Natural Evolution Strategy for Implicitly Constrained Black-Box Function Optimization, IEEE CEC, 2021.