4 个版本
0.2.1 | 2023年4月13日 |
---|---|
0.2.0 | 2022年9月17日 |
0.1.1 | 2022年9月13日 |
0.1.0 | 2022年9月13日 |
#1466 in 数学
21KB
276 代码行
描述
此crate提供了一种模拟退火算法的实现,用于逼近给定函数的全局最小值。
阅读文档获取更多信息。
要使用KaTeX支持构建文档,请运行
cargo doc
RUSTDOCFLAGS="--html-in-header assets/katex-header.html" cargo doc --no-deps --open
Git 镜像
lib.rs
:
此crate提供了一种模拟退火算法的实现,用于逼近给定函数的全局最小值。
明智地选择温度和退火调度:这是您控制搜索质量和等待时间的唯一方式。注意,最低温度必须是可达到的。
参考文献
- Jason Brownlee, 2021,“使用 Python 从头实现模拟退火”
- Mykel J. Kochenderfer, Tim A. Wheeler, 2019,“优化算法”
- Jonathan Woollett-Light,
simple_optimization
crate
示例
use anyhow::{Context, Result};
use rand_xoshiro::rand_core::SeedableRng;
use simulated_annealing::{Bounds, NeighbourMethod, Point, Schedule, Status, APF, SA};
// Define the objective function
fn f(p: &Point<f64, 1>) -> Result<f64> {
let x = p[0];
Ok(x.ln() * (x.sin() + x.cos()))
}
// Get the minimum (and the corresponding point)
let (m, p) = SA {
// Objective function
f,
// Initial point
p_0: &[2.],
// Initial temperature
t_0: 100_000.0,
// Minimum temperature
t_min: 1.0,
// Bounds of the parameter space
bounds: &[1.0..27.8],
// Acceptance probability function
apf: &APF::Metropolis,
// Method of getting a random neighbour
neighbour: &NeighbourMethod::Normal { sd: 5. },
// Annealing schedule
schedule: &Schedule::Fast,
// Status function
status: &mut Status::Periodic { nk: 1000 },
// Random number generator
rng: &mut rand_xoshiro::Xoshiro256PlusPlus::seed_from_u64(1),
}
.findmin().with_context(|| "Couldn't find the global minimum")?;
依赖项
~2MB
~39K SLoC