1 个不稳定版本

0.1.0 2022年5月1日

#1657算法

MIT 许可证

24KB
603

CircleCI MSRV version

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