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 在 机器学习 中
每月 199 次下载
2.5MB
13K SLoC
egobox
Rust 工具箱,受 SMT 启发,用于高效全局优化算法。
egobox
有两个用途:
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 | 抽样方法;包含 LHS、FullFactorial、Random 方法 | ||
gp | 高斯过程回归;包含 Kriging、PLS 线性降维和稀疏方法 | ||
moe | 使用 GP 模型的混合专家 | ||
ego | 具有约束和混合整数处理的效率全局优化 |
用法
根据您想使用的子包,您需要在您的 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
,在 gp
、moe
和 ego
中使用的线性代数例程由纯 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
引用
如果您认为这个项目对您的研究有用,您可能可以这样引用它
@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