4 个版本
0.2.1 | 2022年5月18日 |
---|---|
0.2.0 | 2022年4月21日 |
0.1.1 | 2022年3月4日 |
0.1.0 | 2022年2月16日 |
#803 在 算法 中
每月 21 次下载
用于 haru_cmaes
405KB
4.5K SLoC
cmaes
CMA-ES优化算法的Rust实现。它用于最小化或最大化目标函数的值,在处理高维、非线性、非凸、病态和/或噪声问题时表现良好。有关算法本身的详细信息,请参阅这篇论文。
依赖项
cmaes
使用一些外部库,因此需要以下依赖项
- Rust(已测试与 rustc 1.57 一起使用,早期版本可能也适用)
- FreeType(对于
plotters
功能所需,默认启用) - 根据所选的 LAPACK 实现(可以通过功能启用,但默认情况下不启用),您需要该特定选择的库,这至少是
- 构建
- CMake
- C 编译器
- Fortran 编译器(GCC 的 gfortran 可以工作)
快速入门
将此添加到您的 Cargo.toml 中
[dependencies]
cmaes = "0.2"
所使用的 LAPACK 实现可以通过 Cargo 功能进行选择(请参阅 Cargo.toml
)。默认情况下,使用来自 nalgebra 的纯 Rust 实现。
然后,要优化一个函数
use cmaes::DVector;
let sphere = |x: &DVector<f64>| x.iter().map(|xi| xi.powi(2)).sum();
let dim = 10;
let solution = cmaes::fmin(sphere, vec![5.0; dim], 1.0);
可以通过 CMAESOptions
类型访问更多选项,包括数据绘图(需要 plotters
功能)
use cmaes::{CMAESOptions, DVector, PlotOptions};
let sphere = |x: &DVector<f64>| x.iter().map(|xi| xi.powi(2)).sum();
let dim = 10;
let mut cmaes_state = CMAESOptions::new(vec![1.0; dim], 1.0)
.fun_target(1e-8)
.max_generations(20000)
.enable_printing(200)
.enable_plot(PlotOptions::new(0, false))
.build(sphere)
.unwrap();
let results = cmaes_state.run();
cmaes_state.get_plot().unwrap().save_to_file("plot.png", true).unwrap();
生成的图表将类似于以下内容
对于更复杂的问题,还提供了自动重启功能
use cmaes::restart::{RestartOptions, RestartStrategy};
use cmaes::DVector;
let sphere = |x: &DVector<f64>| x.iter().map(|xi| xi.powi(2)).sum();
let strategy = RestartStrategy::BIPOP(Default::default());
let dim = 10;
let search_range = -5.0..=5.0;
let restarter = RestartOptions::new(dim, search_range, strategy)
.fun_target(1e-10)
.enable_printing(true)
.build()
.unwrap();
let results = restarter.run(|| sphere);
测试
可以使用 cargo test --release
运行库的测试。请注意,由于算法的随机性,某些测试可能会偶尔失败,但只要没有测试持续失败,则可以认为它们已经通过。
可以使用 cargo bench
运行基准测试。
贡献
欢迎贡献!您可以通过报告库中存在的任何错误或问题、添加文档或打开拉取请求来贡献。
除非您明确声明,否则您根据Apache-2.0许可证定义的,有意提交以包含在本作品中的任何贡献,将按以下方式双许可,不附加任何额外条款或条件。
许可证
许可方式任选其一。
Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
任选。
引用
以下内容包含有关此库实现或引用的算法的更详细信息。
Auger, Anne 和 Hansen, Nikolaus. “A Restart CMA Evolution Strategy with Increasing Population Size.” 2005 IEEE Congress on Evolutionary Computation, 第2卷,2005年,第1769-1776页,第2卷,https://doi.org/10.1109/CEC.2005.1554902.
Hansen, Nikolaus. “Benchmarking a BI-Population CMA-ES on the BBOB-2009 Function Testbed.” GECCO (Companion),2009年7月,https://doi.org/10.1145/1570256.1570333.
Auger, Anne 和 Hansen, Nikolaus. 教程 CMA-ES。2013年,https://doi.org/10.1145/2464576.2483910.
Hansen, Nikolaus,Akimoto, Youhei 和 Baudis, Petr. CMA-ES/Pycma on Github。2019年2月,https://doi.org/10.5281/zenodo.2559634.
依赖项
~6–25MB
~367K SLoC