Skip to main content

A toolbox for efficient global optimization

Project description

egobox

tests pytests linting DOI

Rust toolbox for Efficient Global Optimization algorithms inspired from SMT.

egobox is twofold:

  1. for end-users: a Python module, the Python binding of the optimizer named Egor and the surrogate model Gpx, mixture of Gaussian processes, written in Rust.
  2. for developers: a set of Rust libraries useful to implement bayesian optimization (EGO-like) algorithms,

The Python module

Thanks to the PyO3 project, which makes Rust well suited for building Python extensions. You can install the Python package using:

$ pip install egobox

See the tutorial notebooks for usage of the optimizer and mixture of Gaussian processes surrogate model.

The Rust libraries

egobox Rust libraries consists of the following sub-packages.

Name Version Documentation Description
doe crates.io docs sampling methods; contains LHS, FullFactorial, Random methods
gp crates.io docs gaussian process regression; contains Kriging and PLS dimension reduction
moe crates.io docs mixture of experts using GP models
ego crates.io docs efficient global optimization with basic constraints and mixed integer handling

Usage

Depending on the sub-packages you want to use, you have to add following declarations to your Cargo.toml

[dependencies]
egobox-doe = { version = "0.14.0" }
egobox-gp  = { version = "0.14.0" }
egobox-moe = { version = "0.14.0" }
egobox-ego = { version = "0.14.0" }

Features

serializable-gp

The serializable-gp feature enables the serialization of GP models using the serde crate.

persistent-moe

The persistent-moe feature enables save() and load() methods for MoE model to/from a json file using the serde crate.

Examples

Examples (in examples/ sub-packages folder) are run as follows:

$ cd doe && cargo run --example samplings --release
$ cd gp && cargo run --example kriging --release
$ cd moe && cargo run --example clustering --release
$ cd ego && cargo run --example ackley --release

BLAS/LAPACK backend (optional)

egobox relies on linfa project for methods like clustering and dimension reduction, but also try to adopt as far as possible the same coding structures.

As for linfa, the linear algebra routines used in gp, moe ad ego are provided by the pure-Rust linfa-linalg crate, the default linear algebra provider.

Otherwise, you can choose an external BLAS/LAPACK backend available through the ndarray-linalg crate. In this case, you have to specify the blas feature and a linfa BLAS/LAPACK backend feature (more information in linfa features).

Thus, for instance, to use gp with the Intel MKL BLAS/LAPACK backend, you could specify in your Cargo.toml the following features:

[dependencies]
egobox-gp = { version = "0.14.0", features = ["blas", "linfa/intel-mkl-static"] }

or you could run the gp example as follows:

$ cd gp && cargo run --example kriging --release --features blas,linfa/intel-mkl-static

Citation

DOI

If you find this project useful for your research, you may cite it as follows:

@article{
  Lafage2022, 
  author = {Rémi Lafage}, 
  title = {egobox, a Rust toolbox for efficient global optimization}, 
  journal = {Journal of Open Source Software} 
  year = {2022}, 
  doi = {10.21105/joss.04737}, 
  url = {https://doi.org/10.21105/joss.04737}, 
  publisher = {The Open Journal}, 
  volume = {7}, 
  number = {78}, 
  pages = {4737}, 
} 

Additionally, you may consider adding a star to the repository. This positive feedback improves the visibility of the project.

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

egobox-0.14.0.tar.gz (731.3 kB view hashes)

Uploaded Source

Built Distributions

egobox-0.14.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

egobox-0.14.0-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

egobox-0.14.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

egobox-0.14.0-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

egobox-0.14.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

egobox-0.14.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

egobox-0.14.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

egobox-0.14.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ i686

egobox-0.14.0-cp312-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.12 Windows x86-64

egobox-0.14.0-cp312-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.12 Windows x86

egobox-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded CPython 3.12 manylinux: glibc 2.12+ i686

egobox-0.14.0-cp312-cp312-macosx_11_0_arm64.whl (3.1 MB view hashes)

Uploaded CPython 3.12 macOS 11.0+ ARM64

egobox-0.14.0-cp312-cp312-macosx_10_12_x86_64.whl (3.4 MB view hashes)

Uploaded CPython 3.12 macOS 10.12+ x86-64

egobox-0.14.0-cp311-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.11 Windows x86-64

egobox-0.14.0-cp311-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.11 Windows x86

egobox-0.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded CPython 3.11 manylinux: glibc 2.12+ i686

egobox-0.14.0-cp311-cp311-macosx_11_0_arm64.whl (3.1 MB view hashes)

Uploaded CPython 3.11 macOS 11.0+ ARM64

egobox-0.14.0-cp311-cp311-macosx_10_12_x86_64.whl (3.4 MB view hashes)

Uploaded CPython 3.11 macOS 10.12+ x86-64

egobox-0.14.0-cp310-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.10 Windows x86-64

egobox-0.14.0-cp310-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.10 Windows x86

egobox-0.14.0-cp310-cp310-manylinux_2_35_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.35+ x86-64

egobox-0.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl (4.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ i686

egobox-0.14.0-cp310-cp310-macosx_11_0_arm64.whl (3.1 MB view hashes)

Uploaded CPython 3.10 macOS 11.0+ ARM64

egobox-0.14.0-cp310-cp310-macosx_10_12_x86_64.whl (3.4 MB view hashes)

Uploaded CPython 3.10 macOS 10.12+ x86-64

egobox-0.14.0-cp39-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.9 Windows x86-64

egobox-0.14.0-cp39-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.9 Windows x86

egobox-0.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl (4.8 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

egobox-0.14.0-cp38-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.8 Windows x86-64

egobox-0.14.0-cp38-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.8 Windows x86

egobox-0.14.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

egobox-0.14.0-cp37-none-win_amd64.whl (2.8 MB view hashes)

Uploaded CPython 3.7 Windows x86-64

egobox-0.14.0-cp37-none-win32.whl (2.4 MB view hashes)

Uploaded CPython 3.7 Windows x86

egobox-0.14.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.8 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

egobox-0.14.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl (4.9 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

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