4个版本 (破坏性更新)
0.4.0 | 2024年8月3日 |
---|---|
0.3.0 | 2024年7月30日 |
0.2.0 | 2024年7月26日 |
0.1.0 | 2024年7月26日 |
#340 在 数学
每月493次下载
35KB
420 行
Rust中的CMAES
动机
这是我基于Hansen的purecma Python实现的自定义CMA-ES优化算法。
这是0.3.0版本,所以请期待沿途的更多增强和变化。
路线图
尽管目前功能正常,但路线图是将此crate转换为使用ngalgebra
,正如基准测试所示:特征值分解更快,很棒!因此,请期待短期内发生变化。
还将进行其他改进。
请保持关注。
简单使用示例
use crate::{
params::CmaesParams,
state::CmaesState,
strategy::Cmaes
fitness::square_and_sum,
};
use anyhow::Result;
fn example() -> Result<()> {
let params = CmaesParams {
popsize: 10,
xstart: vec![0.0; 10],
sigma: 0.75,
};
let cmaes = Cmaes::new(¶ms)?;
let mut state = CmaesState::init_state(¶ms)?;
for _i in 0..150 {
let mut pop = cmaes.ask(&mut state)?;
let mut fitness = square_and_sum(&pop)?;
state = cmaes.tell(state, &mut pop, &mut fitness)?;
}
println!("Best y: {:+.4?}", &state.best_y);
println!("Best y (fitness): {:+.4?}", &state.best_y_fit);
Ok(())
}
fn main() {
example();
}
(ndarray和朋友们)的要求:BLAS代数
我假设您有一个干净的全新的Linux环境,因此请按照以下说明进行操作。如果您需要,也可以参考工作的GitHub actions。
1) 安装构建工具(GCC)
build-essential
软件包包括GCC编译器和构建C程序所需的必要工具,这些工具对于封装在rust crates中的低级C代数实用程序是必需的。这可能是ndarray和朋友们使用的BLAS C绑定的要求。
sudoapt install build-essential
2) 安装pkg-config和OpenSSL开发库
如果在编译过程中遇到OpenSSL
和pkg-config
相关的问题
sudoapt install pkg-config libssl-dev
3) 设置Rust依赖项
确保在您的Cargo.toml
中指定以下依赖项
anyhow = { version = "1.0.86" }
rand = { version = "0.8.5" }
rayon = { version = "1.10.0" }
ndarray = { version = "0.15", features = ["blas", "rayon"] }
blas-src = { version = "0.10", features = ["openblas"] }
openblas-src = { version = "0.10", features = ["cblas", "system"] }
ndarray-linalg = { version = "0.16", features = ["openblas-system"] }
ndarray-rand = { version = "0.14" }
4) 安装OpenBLAS
为了使用OpenBLAS系统-wide
作为ndarray和其他的,安装libopenblas-dev
软件包
sudoapt install libopenblas-dev
对于Lapack做
sudoapt-get install liblapack-dev libblas-dev
如果您想检查安装位置,请使用dpkg-query -L libopenblas-dev
5) 其他工具
安装cargo-depgraph
和graphviz
进行依赖项可视化
sudo apt install graphviz
cargo install cargo-depgraph
6) Git(如有需要)
由于这是一个全新的 Ubuntu 系统,所以对于 git
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
然后,检查 GitHub 密钥,如果 ssh -T git@github.com
显示 git@github.com: Permission denied (publickey)
,那么可能是由于新的 Ubuntu 系统安装导致密钥对丢失,因此执行 ls -al ~/.ssh
查看你是否真的有存储密钥。如果没有,那么执行 ssh-keygen -t ed25519 -C "[email protected]"
,ssh-add
。然后将它添加到 github.com,执行 cat ~/.ssh/ided25519.pub
。然后在设置下的 SSH 和 GPG 密钥粘贴它,这样就完成了。
7) 运行简单示例
cargo test --lib
依赖项
~67MB
~866K SLoC