#求解器 #线性规划 #优化 #文件格式 #线性模型 #公式

lp-solvers

实现 .lp 文件格式和外部求解器调用(Cbc、Gurobi、cplex 和 GLPK)

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

Download history 13/week @ 2024-04-15 9/week @ 2024-04-22 12/week @ 2024-04-29 1/week @ 2024-05-06 49/week @ 2024-05-13 84/week @ 2024-05-20 28/week @ 2024-05-27 24/week @ 2024-06-03 23/week @ 2024-06-10 64/week @ 2024-06-17 48/week @ 2024-06-24 73/week @ 2024-07-01 82/week @ 2024-07-08 61/week @ 2024-07-15 91/week @ 2024-07-22 172/week @ 2024-07-29

每月下载量 408
good_lp 中使用

MIT 许可证

54KB
1.5K SLoC

lp-solvers

实现与各种线性规划求解器交互的库。

它使用 .lp 文件格式 与外部求解器二进制文件交互。

支持的求解器

  • gurobi
  • cplex (需要启用 cplex 功能)
  • cbc
  • glpk
  • auto:在运行时自动查找已安装的上述求解器之一,并使用它。

为了使该库正常工作,您需要在您的机器上预先安装您想要使用的求解器。

示例


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