7 个版本 (2 个稳定版)
1.0.1 | 2024年2月24日 |
---|---|
1.0.0 | 2023年8月19日 |
0.0.5 | 2023年8月14日 |
0.0.4 | 2021年4月1日 |
0.0.3 | 2021年3月29日 |
在 算法 分类中排名 478
每月下载量 408
在 good_lp 中使用
54KB
1.5K SLoC
lp-solvers
实现与各种线性规划求解器交互的库。
它使用 .lp 文件格式 与外部求解器二进制文件交互。
支持的求解器
为了使该库正常工作,您需要在您的机器上预先安装您想要使用的求解器。
示例
use lp_solvers::lp_format::{Constraint, LpObjective};
use lp_solvers::problem::{Problem, StrExpression, Variable};
use lp_solvers::solvers::{CbcSolver, SolverTrait};
use lp_solvers::solvers::Status::Optimal;
fn solve_integer_problem_with_solver<S: SolverTrait>(solver: S) {
let pb = Problem { // Alternatively, you can implement the LpProblem trait on your own structure
name: "int_problem".to_string(),
sense: LpObjective::Maximize,
objective: StrExpression("x - y".to_string()), // You can use other expression representations
variables: vec![
Variable {
name: "x".to_string(),
is_integer: true,
lower_bound: -10.,
upper_bound: -1.,
},
Variable {
name: "y".to_string(),
is_integer: true,
lower_bound: 4.,
upper_bound: 7.,
},
],
constraints: vec![Constraint {
lhs: StrExpression("x - y".to_string()),
operator: Ordering::Less,
rhs: -4.5,
}],
};
let solution = solver.run(&pb).expect("Failed to run solver");
assert_eq!(solution.status, Optimal);
// solution.results is now {"x":-1, "y":4}
}
fn main() {
solve_integer_problem_with_solver(CbcSolver::default())
}
依赖项
~1.6–9.5MB
~102K SLoC