#优化 #退火 #模拟 #全局 #接口 #调度 #状态

simulated_annealing

使用模拟退火进行全局函数优化的接口

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提供了一种模拟退火算法的实现,用于逼近给定函数的全局最小值。

明智地选择温度和退火调度:这是您控制搜索质量和等待时间的唯一方式。注意,最低温度必须是可达到的。

参考文献

示例

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