Skip to main content

DX-NES-ICI for numerical optimization in Python

Project description

DX-NES-ICI

DX-NES-ICI [1] is a Natural Evolution Strategy (NES) for Mixed-Integer Black-Box Optimization (MI-BBO). DX-NES-ICI reportedly improves the performance of DX-NES-IC [2], one of the most promising continuous BBO methods, on MI-BBO problems. Simultaneously, DX-NES-ICI outperforms CMA-ES w. Margin [3], one of the most leading MI-BBO methods.

Getting Started

Prerequisites

You need NumPy and SciPy that are the packages for scientific computing.

Installing

Please install via pip.

$ pip install dxnesici

Usage

Problem setting

Set the number of dimensions (dim), dimensions of continuous variables (dim_co), and dimensions of integer variables (dim_int). Then, set objective function and the domains of integer variables, where the decision variables must be arranged in such a way as to concatenate a (dim_co)-dimensional continuous vector and a (dim_int)-dimensional integer vector. Note that the number of elements of the domain in an integer variable must be greater than or equal to 2.

dim = 20
dim_co = dim // 2
dim_int = dim // 2
domain_int = [list(range(-10, 11)) for _ in range(dim_int)]
def n_int_tablet(x):
    xbar = np.array(x)
    xbar[dim_co:] = np.round(xbar[dim_co:])
    xbar[:dim_co] *= 100
    return np.sum(xbar**2)

The hyperparameters of DX-NES-ICI

Set initial mean vector (m), initial step size (sigma), and population size (lamb). Note that population size should be an even number. Set the minimum marginal probability (margin). 1.0 / (dim * lamb) [3] is the recommended value of minimum marginal probability.

m = np.ones([dim, 1]) * 2.
sigma = 1.0
lamb = 6
margin = 1.0 / (dim * lamb)

Running DX-NES-ICI

Pass variables to construct DXNESICI. You must pass the maximal number of evaluations and a target evaluation value to run the optimizer. Return values are a success flag, the best solution in the last generation, and the best evaluation value in the last generation.

dxnesici = DXNESICI(dim_co, domain_int, n_int_tablet, m, sigma, lamb, margin)
success, x_best, f_best = dxnesici.optimize(dim * 1e4, 1e-10)

Version History

  • Version 1.0.4 (2024-6-22)
    • Fixed bugs in the DX-NES-ICI implementation. This fix improves the search performance on high-dimensional ReversedEllipsoidInt and EllipsoidInt functions [1].
    • Please note that the corrected implementation has been verified to be identical to the implementation used to obtain the experimental results reported in [1].
  • Version 1.0.3 (2023-12-09)
    • Update README.
  • Version 1.0.2 (2023-12-09)
    • Fixed a bug in the return value of the best solution.
    • Fixed misleading implementations of functions in sample programs. Note that in these sample programs, benchmark functions return exactly the same values before and after this fix.
    • Add stdout of #Eval when DX-NES-ICI finish.
  • Version 1.0.1 (2023-4-20)
    • First implementation.

Reference

  1. Koki Ikeda and Isao Ono. 2023. Natural Evolution Strategy for Mixed-Integer Black-Box Optimization. In Proceedings of the Genetic and Evolutionary Computation Conference (GECCO ’23). 8 pages. https://doi.org/10.1145/3583131.3590518

  2. Masahiro Nomura, Nobuyuki Sakai, Nobusumi Fukushima, and Isao Ono. 2021. Distance-weighted Exponential Natural Evolution Strategy for Implicitly Constrained Black-Box Function Optimization. In IEEE Congress on Evolutionary Computation (CEC ’21). 1099–1106. https://doi.org/10.1109/CEC45853.2021.9504865

  3. Ryoki Hamano, Shota Saito, Masahiro Nomura, and Shinichi Shirakawa. 2022. CMA-ES with Margin: Lower-Bounding Marginal Probability for Mixed-Integer Black-Box Optimization. In Proceedings of the Genetic and Evolutionary Computation Conference (GECCO ’22). 639–647. https://doi.org/10.1145/3512290.3528827

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dxnesici-1.0.4.tar.gz (6.7 kB view details)

Uploaded Source

Built Distribution

dxnesici-1.0.4-py3-none-any.whl (6.8 kB view details)

Uploaded Python 3

File details

Details for the file dxnesici-1.0.4.tar.gz.

File metadata

  • Download URL: dxnesici-1.0.4.tar.gz
  • Upload date:
  • Size: 6.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.0

File hashes

Hashes for dxnesici-1.0.4.tar.gz
Algorithm Hash digest
SHA256 ad0380b37071bb666bdaa0e1f46a59b6a8a05f8b7b8698ff4e15522c40be05b7
MD5 a54a23d1dde1563ed6e0279ec6b45370
BLAKE2b-256 67e0c0f391883fedb9b7489f26710a5c4a1355df94d59ef27d7860662427164d

See more details on using hashes here.

File details

Details for the file dxnesici-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: dxnesici-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 6.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.0 CPython/3.11.0

File hashes

Hashes for dxnesici-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 283f37d7d345cf2b0281498750464bcb4a80d858ad2ccfa4c742a9c3a5695470
MD5 40eb43caadf5bebfb9c39c2d0570fa8e
BLAKE2b-256 fd7467230c25fbba5e905d4a02266a561fc2fc36ce30805561dc2fabe75623d3

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page