Crates.io | lp-solvers |
lib.rs | lp-solvers |
version | 1.0.1 |
source | src |
created_at | 2021-03-28 20:36:32.310941 |
updated_at | 2024-02-24 18:29:36.46258 |
description | .lp file format implementation and external solver invocation for Cbc, Gurobi, cplex, and GLPK |
homepage | |
repository | https://github.com/rust-or/lp-solvers |
max_upload_size | |
id | 374809 |
size | 68,790 |
Library implementing interaction with various linear programming solvers.
It uses the .lp file format to interact with external solver binaries.
cplex
feature)You need to have the solver you want to use installed on your machine already for this library to work.
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())
}