23 个版本 (破坏性更新)

0.21.1 2024 年 7 月 30 日
0.20.0 2024 年 6 月 25 日
0.16.0 2024 年 3 月 7 日
0.14.0 2023 年 12 月 13 日
0.4.0 2022 年 7 月 9 日

#87机器学习

Download history 129/week @ 2024-05-11 22/week @ 2024-05-18 1/week @ 2024-05-25 2/week @ 2024-06-01 1/week @ 2024-06-08 138/week @ 2024-06-22 6/week @ 2024-06-29 118/week @ 2024-07-06 7/week @ 2024-07-13 192/week @ 2024-07-27 7/week @ 2024-08-03

每月 199 次下载

Apache-2.0

2.5MB
13K SLoC

egobox

tests pytests linting DOI

Rust 工具箱,受 SMT 启发,用于高效全局优化算法。

egobox 有两个用途:

  1. 对于最终用户:一个 Python 模块,名为 Egor 的优化器及其代理模型 Gpx,混合高斯过程,均用 Rust 编写。
  2. 对于开发者:一组 Rust 库,可用于实现类似 EGO 的贝叶斯优化算法。

Python 模块

感谢 PyO3 项目,它使 Rust 成为构建 Python 扩展的理想选择。

安装

pip install egobox

Egor 优化器

import numpy as np
import egobox as egx

# Objective function
def f_obj(x: np.ndarray) -> np.ndarray:
    return (x - 3.5) * np.sin((x - 3.5) / (np.pi))

# Minimize f_opt in [0, 25]
res = egx.Egor(egx.to_specs([[0.0, 25.0]]), seed=42).minimize(f_obj, max_iters=20)
print(f"Optimization f={res.y_opt} at {res.x_opt}")  # Optimization f=[-15.12510323] at [18.93525454]

Gpx 代理模型

import numpy as np
import egobox as egx

# Training
xtrain = np.array([[0.0, 1.0, 2.0, 3.0, 4.0]]).T
ytrain = np.array([[0.0, 1.0, 1.5, 0.9, 1.0]]).T
gpx = egx.Gpx.builder().fit(xtrain, ytrain)

# Prediction
xtest = np.linspace(0, 4, 20).reshape((-1, 1))
ytest = gpx.predict(xtest)

有关优化器和混合高斯过程代理模型的使用信息,请参阅 教程笔记本示例文件夹

Rust 库

egobox Rust 库包括以下子包。

名称 版本 文档 描述
doe crates.io docs 抽样方法;包含 LHS、FullFactorial、Random 方法
gp crates.io docs 高斯过程回归;包含 Kriging、PLS 线性降维和稀疏方法
moe crates.io docs 使用 GP 模型的混合专家
ego crates.io docs 具有约束和混合整数处理的效率全局优化

用法

根据您想使用的子包,您需要在您的 Cargo.toml 文件中添加以下声明。

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

功能

下表展示了根据子crate 可用的各种功能。

名称 doe gp moe ego
可序列化 ✔️ ✔️ ✔️
持久化 ✔️ ✔️(*)
BLAS ✔️ ✔️ ✔️
nlopt ✔️ ✔️

(*) 必须用于混合变量高斯过程

可序列化

当选中时,启用与 serde crate 的序列化。

持久化

当选中时,将启用使用 serde_json crate 保存和加载为 JSON 文件。

BLAS

当选中时,可以启用使用 BLAS/LAPACK 后端,更多详细信息请参阅 以下内容

nlopt

当选中时,使用 nlopt crate 提供优化器实现(例如 Cobyla,Slsqp)。

示例

示例(在 examples/ 子包文件夹中)的运行方式如下

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 后端(可选)

egobox 依赖于 linfa 项目中的聚类和降维等方法,但尽可能采用相同的 编码结构

至于 linfa,在 gpmoeego 中使用的线性代数例程由纯 Rust 的 linfa-linalg crate 提供,这是默认的线性代数提供程序。

否则,您可以通过 ndarray-linalg crate 选择外部 BLAS/LAPACK 后端。在这种情况下,您必须指定 blas 功能和一个 linfa BLAS/LAPACK 后端功能(更多详细信息请参阅 linfa 功能)。

例如,要使用 Intel MKL BLAS/LAPACK 后端使用 gp,您可以在您的 Cargo.toml 中指定以下功能

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

或者您可以按照以下方式运行 gp 示例

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

引用

DOI

如果您认为这个项目对您的研究有用,您可能可以这样引用它

@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}, 
} 

此外,您可以考虑给存储库添加星标。这种积极的反馈可以提高项目的可见性。

参考文献

Bartoli, N.,Lefebvre, T.,Dubreuil, S.,Olivanti, R.,Priem, R.,Bons, N.,Martins, J. R. R. A.,& Morlier, J. (2019). 基于气动机翼设计的约束全局优化的自适应建模策略。航天科学和技术,90,85–102。 https://doi.org/10.1016/j.ast.2019.03.041

Bouhlel, M. A.,Bartoli, N.,Otsmane, A.,& Morlier, J. (2016). 通过偏最小二乘降维改进高维设计模型的克里金代理。结构优化和多学科优化,53(5),935–952。 https://doi.org/10.1007/s00158-015-1395-9

Bouhlel, M. A.,Hwang, J. T.,Bartoli, N.,Lafage, R.,Morlier, J.,& Martins, J. R. R. A. (2019). 带导数的 Python 代理建模框架。工程软件进展,102662。 https://doi.org/10.1016/j.advengsoft.2019.03.005

Dubreuil, S.,Bartoli, N.,Gogu, C.,& Lefebvre, T. (2020)。向高效的全球多学科设计优化算法迈进。结构优化和多学科优化,62(4),1739–1765。 https://doi.org/10.1007/s00158-020-02514-6

Jones, D. R.,Schonlau, M.,& Welch, W. J. (1998)。昂贵的黑盒函数的高效全局优化。全局优化杂志,13(4),455–492。

Diouane, Youssef,等人。"TREGO:一个高效的全球优化信任区域框架。"全局优化杂志 86.1 (2023):1-23。

smtorg. (2018)。代理建模工具箱。在 GitHub 存储库中。GitHub。 https://github.com/SMTOrg/smt

许可

根据 Apache 许可协议版本 2.0 许可。 http://www.apache.org/licenses/LICENSE-2.0

依赖项

~23–43MB
~660K SLoC