#元启发式算法 #优化 #遗传算法 #搜索算法 #算法

无需std metaheuristics-nature

自然启发式元算法集合

72个版本 (46个稳定版)

10.1.0 2024年5月2日
10.0.1 2024年3月27日
9.2.3 2023年8月24日
9.2.2 2023年6月18日
0.8.0 2021年7月27日

#209 in 算法

Download history 79/week @ 2024-04-22 405/week @ 2024-04-29 62/week @ 2024-05-06 43/week @ 2024-05-13 41/week @ 2024-05-20 8/week @ 2024-05-27 7/week @ 2024-06-03 1/week @ 2024-06-10 1/week @ 2024-06-17 30/week @ 2024-07-01 239/week @ 2024-07-29 1/week @ 2024-08-05

240 每月下载量
2 个crate中使用 (通过 four-bar)

MIT 许可证

78KB
1.5K SLoC

metaheuristics-nature

dependency status documentation

自然启发式元算法集合。该crate提供目标函数特质、常用方法和工具函数,以实现您的搜索方法。

该crate实现了以下算法

  • 实数编码遗传算法 (RGA)
  • 差分进化 (DE)
  • 粒子群优化 (PSO)
  • 萤火虫算法 (FA)
  • 教学-学习优化 (TLBO)

辅助函数

  • 可并行种子随机数生成器 (RNG)
    • 此RNG在单线程和多线程编程中可重现。
  • 多目标优化 (MOO) 的Pareto前沿
    • 您可以在目标函数中返回多个适应度值。
    • 所有适应度值将找到历史最佳解集。

每个算法都提供相同的API和默认参数,以帮助您测试不同的实现。例如,您可以通过将 Rga 替换为 De 来测试另一个算法。

use metaheuristics_nature as mh;

let mut report = Vec::with_capacity(20);

// Build and run the solver
let s = mh::Solver::build(mh::Rga::default(), mh::tests::TestObj)
    .seed(0)
    .task(|ctx| ctx.gen == 20)
    .callback(|ctx| report.push(ctx.best.get_eval()))
    .solve();
// Get the optimized XY value of your function
let (xs, p) = s.as_best();
// If `p` is a `WithProduct` type wrapped with the fitness value
let err = p.ys();
let result = p.as_result();
// Get the history reports
let y2 = &report[2];

可以解决哪些类型的问题?

如果您的可以通过函数 f 进行模拟和评估,则优化方法可以有效地找到最佳设计!🚀

假设您的模拟可以用函数 f 进行,通过输入参数 X 和评估值 y,则优化方法将尝试调整 X={x0, x1, ...} 以获得最小的 y。它们之间的关系可以写成 f(X) = y

X 的参数数量称为 "维度"。想象一下 X 是多维坐标,而 y 是 "点" 的权重。如果维度增加,问题将更具挑战性。

“元启发式”算法使用多个点来寻找最小值,它检测了最可行解的局部梯度,并远离局部最优解,即使梯度或可行区域未知。

请参阅API文档以获取更多信息。

基于梯度的方法

对于更简单的函数,例如,如果已知一阶导数函数,建议使用基于梯度的方法以获得最快的速度。例如 OSQP

依赖项

~2–3.5MB
~66K SLoC