1 个不稳定版本
0.1.0 | 2022年5月1日 |
---|
#1657 在 算法 中
24KB
603 行
swop
纯 Rust 的简单、轻量级优化算法
动机
这个包旨在在纯 Rust 中模仿 scipy.optimize 模块。
示例
这个包有一个异步 API,所有示例都使用 Tokio。要开始,你的 Cargo.toml 至少应该包括
[dependencies]
swoop = { "git" = "https://github.com/benjaminjellis/swoop" }
tokio = { version = "1", features = ["full"] }
为了最小化函数 f(x) = 3x^2 + 4x + 50
在有界 -10 <= x <= 10
中,你可以使用 bounded
优化器
use swoop::minimise_scalar::{bounded, ScalarObjectiveFunction};
use swoop::SwoopErrors;
struct MyObjectiveFunction {
a: f64,
b: f64,
c: f64,
}
impl MyObjectiveFunction {
fn new(a: f64, b: f64, c: f64) -> Self {
Self { a, b, c }
}
}
impl ScalarObjectiveFunction for MyObjectiveFunction {
fn evaluate(&self, x: f64) -> f64 {
self.a * x.powf(2f64) + self.b * x + self.c
}
}
#[tokio::main]
async fn main() -> Result<(), SwoopErrors> {
let objective_function = MyObjectiveFunction::new(3f64, 4f64, 50f64);
let result = bounded(objective_function, (-10f64, 10f64), 500usize).await?;
println!("{:?}", result);
Ok(())
}
依赖
~0.4–0.9MB
~20K SLoC