#优化 #问题 #求解器 #算法 #启发式算法 #VRP #路由

rosomaxa

A rosomaxa算法和构建优化问题求解器的其他构建块

17次发布

0.8.0 2024年7月13日
0.7.2 2023年12月22日
0.7.1 2023年8月26日
0.6.0 2023年6月9日
0.1.1 2022年3月10日

#1238 in 算法

Download history 7/week @ 2024-04-27 4/week @ 2024-05-04 21/week @ 2024-05-11 29/week @ 2024-05-18 44/week @ 2024-05-25 46/week @ 2024-06-01 19/week @ 2024-06-08 32/week @ 2024-06-15 17/week @ 2024-06-22 5/week @ 2024-06-29 58/week @ 2024-07-06 187/week @ 2024-07-13 9/week @ 2024-07-20 42/week @ 2024-07-27 23/week @ 2024-08-03 11/week @ 2024-08-10

91 每月下载量
用于 5 个crate (通过 vrp-core)

Apache-2.0

215KB
5K SLoC

描述

此crate公开了通用超启发式和一些辅助功能,可用于构建各种优化问题的求解器。

更多详情即将到来。


lib.rs:

此crate公开了通用超启发式和一些辅助功能,可用于构建优化问题的求解器。

示例

此示例演示了使用示例模型和启发式算法来最小化Rosenbrock函数。为了简约,提供了一个预构建的求解器和启发式操作模型。查看示例模块以了解如何使用crate的任意域的功能。

use rosomaxa::prelude::*;
use rosomaxa::example::*;

let random = Arc::new(DefaultRandom::default());
// examples of heuristic operator, they are domain specific. Essentially, heuristic operator
// is responsible to produce a new, potentially better solution from the given one.
let noise_op = VectorHeuristicOperatorMode::JustNoise(Noise::new_with_ratio(1., (-0.1, 0.1), random));
let delta_op = VectorHeuristicOperatorMode::JustDelta(-0.1..0.1);
let delta_power_op = VectorHeuristicOperatorMode::JustDelta(-0.5..0.5);

// add some configuration and run the solver
let (solutions, _) = Solver::default()
    .with_fitness_fn(create_rosenbrock_function())
    .with_init_solutions(vec![vec![2., 2.]])
    .with_search_operator(noise_op, "noise", 1.)
    .with_search_operator(delta_op, "delta", 0.2)
    .with_diversify_operator(delta_power_op)
    .with_termination(Some(5), Some(1000), None, None)
    .solve()
    .expect("cannot build and use solver");

// expecting at least one solution with fitness close to 0
assert_eq!(solutions.len(), 1);
let (_, fitness) = solutions.first().unwrap();
assert!(*fitness < 0.001);

依赖项

~2.1–2.9MB
~54K SLoC