1个不稳定版本
0.1.0 | 2023年11月19日 |
---|
#1850 in 数学
205KB
2.5K SLoC
gkls-rs
gkls-rs
是在 《用于全局优化的具有已知局部和全局最小值的测试函数类生成软件》 中描述的算法的纯Rust实现。
尽管大部分代码都是从原始的C实现翻译而来,但在这个实现中,可以定义独立的问题,而无需修改任何全局状态。这一点使得在基准测试中尝试运行并行代码时,原始的实现相当难以使用。
原始实现位于 ACM Collected Algorithms 仓库 的第829条目。文件夹 gkls
是这些内容的副本,用于测试Rust实现。
通过功能 test_cbinding
,构建了原始的C实现和测试套件。测试套件比较了Rust和C实现的输出。输出必须等效。因此,原始论文和每个函数后续研究中的函数编号仍然有效。
以下是使用 gkls-rs
复制的原始论文中的函数:
该图是使用 examples/plot_function
中的二进制文件生成的。
cargo run --example plot_function --features examples
有关简单使用示例,请参阅 examples/single_evaluation.rs
// Generate a problem
let problem = Problem::new(9, Options::default(), 2, 10, -1.0, 1. / 3., 2. / 3.)
.expect("Problem has to be valid");
// Evaluate the proble with the appropiate function
let x = [0.23, 0.44];
let y = problem.d_func(&x);
let dy = problem.d_gradient(&x);
println!("f({x:?})={y}");
println!("f'({x:?})={dy:?}");
运行示例
cargo run --example single_evaluation --features examples
您应该得到类似以下内容
f([0.23, 0.44])=0.8938503184432863
f'([0.23, 0.44])=Some([1.8828658375478264, 0.17383184854469846])
依赖项
~0.7–3MB
~56K SLoC