2 个版本
0.1.1 | 2020年10月26日 |
---|---|
0.1.0 | 2019年6月13日 |
#516 在 科学
每月 23 下载
2MB
38K SLoC
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