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 数学

Download history 6561/week @ 2024-03-14 6344/week @ 2024-03-21 5505/week @ 2024-03-28 7017/week @ 2024-04-04 7419/week @ 2024-04-11 5689/week @ 2024-04-18 5511/week @ 2024-04-25 10160/week @ 2024-05-02 4020/week @ 2024-05-09 5506/week @ 2024-05-16 5147/week @ 2024-05-23 5999/week @ 2024-05-30 4877/week @ 2024-06-06 6607/week @ 2024-06-13 7638/week @ 2024-06-20 5143/week @ 2024-06-27

25,130 每月下载量
用于 46 个 crates (5 直接)

Apache-2.0

150KB
3.5K SLoC

minilp

Crates.io Documentation

一个快速的线性规划求解器库。

线性规划 是一种技术,用于找到一组连续变量线性函数的最小值(或最大值),这些变量受线性等式和不等式约束。

功能

  • 纯 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