#optimization #line-search #bindings #bayesian

rust_sls

设计优化的顺序线搜索

2 个版本

0.1.1 2020年10月26日
0.1.0 2019年6月13日

#516科学

每月 23 下载

MIT 许可证

2MB
38K SLoC

C 21K SLoC // 0.3% comments FORTRAN Legacy 7K SLoC // 0.4% comments C++ 3.5K SLoC // 0.1% comments SWIG 2.5K SLoC // 0.2% comments Python 2.5K SLoC // 0.3% comments Objective-C 603 SLoC F# 181 SLoC // 0.0% comments Rust 157 SLoC // 0.0% comments Shell 66 SLoC // 0.2% comments Scheme 33 SLoC Forge Config 9 SLoC // 0.2% comments

Rust 中的顺序线搜索

顺序线搜索 提供的 Rust 绑定。

示例

let target = vec![0.1f64, 0.2, 0.3, 0.4, 0.5];
let dims = target.len();
let mut sls = SLSFramework::new(dims);
for it in 0..10 {
    let a = sls.get_parameters_from_slider(0.);
    let b = sls.get_parameters_from_slider(1.);

    // Get closest point to `target` along slider

    // proj = <target-a, b-a>
    // pl   = <b-a, b-a> = |b-a|^2
    let proj : f64 = (b.iter().zip(&a).map(|(bi, ai)| bi-ai))
         .zip(target.iter().zip(&a).map(|(ti,ai)| ti-ai)).map(|(x, y)| x*y).sum();
    let pl : f64 = b.iter().zip(&a).map(|(bi, ai)| (bi-ai)*(bi-ai)).sum();

    let x = proj / pl;
    let x = x.max(0.).min(1.);

    sls.proceed_optimization(x);
}
println!("target: {:?}\nresult: {:?}", target, sls.get_x_max());

许可证

此项目可在 MIT 许可证下使用


lib.rs:

顺序线搜索 提供的 Rust 绑定。

顺序线搜索是一个通用的人机交互优化算法,通过反复询问用户在滑块上选择他们的喜好来优化用户的偏好。

类型持有算法的状态,有关可用方法,请参阅那里。

示例

let target = vec![0.1f64, 0.2, 0.3, 0.4, 0.5];
let dims = target.len();
let mut sls = SLSFramework::new(dims);
for it in 0..10 {
    let a = sls.get_parameters_from_slider(0.);
    let b = sls.get_parameters_from_slider(1.);

    // Get closest point to `target` along slider

    // proj = <target-a, b-a>
    // pl   = <b-a, b-a> = |b-a|^2
    let proj : f64 = (b.iter().zip(&a).map(|(bi, ai)| bi-ai))
         .zip(target.iter().zip(&a).map(|(ti,ai)| ti-ai)).map(|(x, y)| x*y).sum();
    let pl : f64 = b.iter().zip(&a).map(|(bi, ai)| (bi-ai)*(bi-ai)).sum();

    let x = proj / pl;
    let x = x.max(0.).min(1.);

    sls.proceed_optimization(x);
}
println!("target: {:?}\nresult: {:?}", target, sls.get_x_max());

依赖关系

~1–2MB
~39K SLoC