# DX-NES-ICI
[DX-NES-ICI](https://doi.org/10.1145/3583131.3590518) [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](https://numpy.org/) and [SciPy](https://scipy.org/) that are the packages for scientific computing.
### Installing
Please install via pip.
```bash
$ 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.
```python
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.
```python
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.
```python
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.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
Raw data
{
"_id": null,
"home_page": "https://github.com/ono-lab/dxnesici",
"name": "dxnesici",
"maintainer": "Koki Ikeda",
"docs_url": null,
"requires_python": "",
"maintainer_email": "ikeda.k@ic.c.titech.ac.jp",
"keywords": "optimization,DX-NES-ICI,mixed-integer,black-box",
"author": "Koki Ikeda",
"author_email": "ikeda.k@ic.c.titech.ac.jp",
"download_url": "https://files.pythonhosted.org/packages/2b/99/dec0a91972c0f5fbac6035b0dbc332650c54498e08f53c0dcbb91e6196e4/dxnesici-1.0.3.tar.gz",
"platform": null,
"description": "# DX-NES-ICI\n[DX-NES-ICI](https://doi.org/10.1145/3583131.3590518) [1] is a Natural Evolution Strategy (NES) for Mixed-Integer Black-Box Optimization (MI-BBO).\nDX-NES-ICI reportedly improves the performance of DX-NES-IC [2], one of the most promising continuous BBO methods, on MI-BBO problems.\nSimultaneously, DX-NES-ICI outperforms CMA-ES w. Margin [3], one of the most leading MI-BBO methods.\n\n\n## Getting Started\n### Prerequisites\nYou need [NumPy](https://numpy.org/) and [SciPy](https://scipy.org/) that are the packages for scientific computing.\n\n### Installing\nPlease install via pip.\n```bash\n$ pip install dxnesici\n```\n\n\n## Usage\n### Problem setting\nSet the number of dimensions (dim), dimensions of continuous variables (dim_co), and dimensions of integer variables (dim_int).\nThen, set objective function and the domains of integer variables, where\nthe 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.\nNote that the number of elements of the domain in an integer variable must be greater than or equal to 2.\n```python\ndim = 20\ndim_co = dim // 2\ndim_int = dim // 2\ndomain_int = [list(range(-10, 11)) for _ in range(dim_int)]\ndef n_int_tablet(x):\n xbar = np.array(x)\n xbar[dim_co:] = np.round(xbar[dim_co:])\n xbar[:dim_co] *= 100\n return np.sum(xbar**2)\n```\n\n### The hyperparameters of DX-NES-ICI\nSet initial mean vector (m), initial step size (sigma), and population size (lamb).\nNote that population size should be an even number.\nSet the minimum marginal probability (margin).\n 1.0 / (dim * lamb) [3] is the recommended value of minimum marginal probability.\n```python\nm = np.ones([dim, 1]) * 2.\nsigma = 1.0\nlamb = 6\nmargin = 1.0 / (dim * lamb)\n```\n\n### Running DX-NES-ICI\nPass variables to construct DXNESICI.\nYou must pass the maximal number of evaluations and a target evaluation value to run the optimizer.\nReturn values are a success flag, the best solution in the last generation, and the best evaluation value in the last generation.\n```python\ndxnesici = DXNESICI(dim_co, domain_int, n_int_tablet, m, sigma, lamb, margin)\nsuccess, x_best, f_best = dxnesici.optimize(dim * 1e4, 1e-10)\n```\n\n\n## Version History\n* Version 1.0.3 (2023-12-09)\n - Update README.\n* Version 1.0.2 (2023-12-09)\n - Fixed a bug in the return value of the best solution.\n - 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.\n - Add stdout of #Eval when DX-NES-ICI finish.\n* Version 1.0.1 (2023-4-20)\n - First implementation.\n\n\n## Reference\n1. 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 \u201923). 8 pages. https://doi.org/10.1145/3583131.3590518\n\n2. 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 \u201921). 1099\u20131106. https://doi.org/10.1109/CEC45853.2021.9504865\n\n3. 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 \u201922). 639\u2013647. https://doi.org/10.1145/3512290.3528827\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "DX-NES-ICI for numerical optimization in Python",
"version": "1.0.3",
"project_urls": {
"Homepage": "https://github.com/ono-lab/dxnesici"
},
"split_keywords": [
"optimization",
"dx-nes-ici",
"mixed-integer",
"black-box"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c8b4f1f2d2311c2009664d5c3cd590e32aa9f5da584fa375568b84e2a464cfbb",
"md5": "8d4a2993ee482bd9a72ef9d186ab5af2",
"sha256": "f0879a93233f119d136a2fb6a908cec858a322b890dd4867b7b519f01b9d4372"
},
"downloads": -1,
"filename": "dxnesici-1.0.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "8d4a2993ee482bd9a72ef9d186ab5af2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 6596,
"upload_time": "2023-12-09T03:28:07",
"upload_time_iso_8601": "2023-12-09T03:28:07.504502Z",
"url": "https://files.pythonhosted.org/packages/c8/b4/f1f2d2311c2009664d5c3cd590e32aa9f5da584fa375568b84e2a464cfbb/dxnesici-1.0.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "2b99dec0a91972c0f5fbac6035b0dbc332650c54498e08f53c0dcbb91e6196e4",
"md5": "9fee1ecefc5bddfd04417ee5f23d3879",
"sha256": "dc190f9e037d64e9e707cad410ba34b0059bcb6724a6c11c81e0675b597c9163"
},
"downloads": -1,
"filename": "dxnesici-1.0.3.tar.gz",
"has_sig": false,
"md5_digest": "9fee1ecefc5bddfd04417ee5f23d3879",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 6469,
"upload_time": "2023-12-09T03:28:09",
"upload_time_iso_8601": "2023-12-09T03:28:09.427762Z",
"url": "https://files.pythonhosted.org/packages/2b/99/dec0a91972c0f5fbac6035b0dbc332650c54498e08f53c0dcbb91e6196e4/dxnesici-1.0.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-12-09 03:28:09",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ono-lab",
"github_project": "dxnesici",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "dxnesici"
}