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 算法
240 每月下载量
在 2 个crate中使用 (通过 four-bar)
78KB
1.5K SLoC
metaheuristics-nature
自然启发式元算法集合。该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