4 个版本
0.2.2 | 2020年5月25日 |
---|---|
0.2.1 | 2020年5月6日 |
0.2.0 | 2020年5月3日 |
0.1.0 | 2020年4月11日 |
#1829 in 数学
25,130 每月下载量
用于 46 个 crates (5 直接)
150KB
3.5K SLoC
minilp
一个快速的线性规划求解器库。
线性规划 是一种技术,用于找到一组连续变量线性函数的最小值(或最大值),这些变量受线性等式和不等式约束。
功能
- 纯 Rust 实现。
- 能够解决具有数十万个变量和约束的问题。
- 增量:在不从头开始求解的情况下向现有解添加约束。
- 问题可以通过 API 定义或从 MPS 文件解析。
警告:这是一个早期阶段的项目。尽管库已经非常强大且快速,但它可能会在某些更难的问题上循环、丢失精度或崩溃。请报告错误并贡献代码!
示例
基本用法
use minilp::{Problem, OptimizationDirection, ComparisonOp};
// Maximize an objective function x + 2 * y of two variables x >= 0 and 0 <= y <= 3
let mut problem = Problem::new(OptimizationDirection::Maximize);
let x = problem.add_var(1.0, (0.0, f64::INFINITY));
let y = problem.add_var(2.0, (0.0, 3.0));
// subject to constraints: x + y <= 4 and 2 * x + y >= 2.
problem.add_constraint(&[(x, 1.0), (y, 1.0)], ComparisonOp::Le, 4.0);
problem.add_constraint(&[(x, 2.0), (y, 1.0)], ComparisonOp::Ge, 2.0);
// Optimal value is 7, achieved at x = 1 and y = 3.
let solution = problem.solve().unwrap();
assert_eq!(solution.objective(), 7.0);
assert_eq!(solution[x], 1.0);
assert_eq!(solution[y], 3.0);
对于更复杂的示例,请参阅 examples/tsp,这是一个旅行商问题的求解器。
许可
此项目受 Apache License, Version 2.0 许可。
依赖
~2MB
~40K SLoC