#优化 #Python #代数 #cma-es #purecma #Hansen #cmaes

bin+lib haru_cmaes

基于Hansen的purecma Python实现的简单CMA-ES优化算法实现

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数学

Download history 230/week @ 2024-07-22 243/week @ 2024-07-29 20/week @ 2024-08-05

每月493次下载

MIT/Apache

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(&params)?;
    let mut state = CmaesState::init_state(&params)?;
    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开发库

如果在编译过程中遇到OpenSSLpkg-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-depgraphgraphviz进行依赖项可视化

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