Package: egobox
egoboxRust toolbox for Efficient Global Optimization algorithms inspired fromSMT.egoboxis twofold:for end-users:a Python module, the Python binding of the optimizer namedEgorand the surrogate modelGpx, mixture of Gaussian processes, written in Rust.for developers:a set of Rust librariesuseful to implement bayesian optimization (EGO-like) algorithms,The Python moduleThanks to thePyO3 project, which makes Rust well suited for building Python extensions.
You can install the Python package using:pipinstallegoboxSee thetutorial notebooksfor usage of the optimizer
and mixture of Gaussian processes surrogate model.The Rust librariesegoboxRust libraries consists of the following sub-packages.NameVersionDocumentationDescriptiondoesampling methods; contains LHS, FullFactorial, Random methodsgpgaussian process regression; contains Kriging, PLS dimension reduction and sparse methodsmoemixture of experts using GP modelsegoefficient global optimization with constraints and mixed integer handlingUsageDepending on the sub-packages you want to use, you have to add following declarations to yourCargo.toml[dependencies]
egobox-doe = { version = "0.15" }
egobox-gp  = { version = "0.15" }
egobox-moe = { version = "0.15" }
egobox-ego = { version = "0.15" }FeaturesThe table below presents the various features available depending on the subcrateNamedoegpmoeegoserializable✔️✔️✔️persistent✔️✔️(*)blas✔️✔️✔️nlopt✔️✔️(*) required for mixed-variable gaussian processserializableWhen selected, the serialization withserde crateis enabled.persistentWhen selected, the save and load as a json file withserde_json crateis enabled.blasWhen selected, the usage of BLAS/LAPACK backend is possible, seebelowfor more information.nloptWhen selected, thenlopt crateis used to provide optimizer implementations (ie Cobyla, Slsqp)ExamplesExamples (inexamples/sub-packages folder) are run as follows:cddoe&&cargorun--examplesamplings--releasecdgp&&cargorun--examplekriging--releasecdmoe&&cargorun--exampleclustering--releasecdego&&cargorun--exampleackley--releaseBLAS/LAPACK backend (optional)egoboxrelies onlinfaproject for methods like clustering and dimension reduction, but also try to adopt as far as possible the samecoding structures.As forlinfa, the linear algebra routines used ingp,moeadegoare provided by the pure-Rustlinfa-linalgcrate, the default linear algebra provider.Otherwise, you can choose an external BLAS/LAPACK backend available through thendarray-linalgcrate. In this case, you have to specify theblasfeature and alinfaBLAS/LAPACK backend feature(more information inlinfa features).Thus, for instance, to usegpwith the Intel MKL BLAS/LAPACK backend, you could specify in yourCargo.tomlthe following features:[dependencies]
egobox-gp = { version = "0.15", features = ["blas", "linfa/intel-mkl-static"] }or you could run thegpexample as follows:cdgp&&cargorun--examplekriging--release--featuresblas,linfa/intel-mkl-staticCitationIf 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.