lp-solvers
Library implementing interaction with various linear programming solvers.
It uses the [.lp file format] to interact with external solver binaries.
Supported solvers
You need to have the solver you want to use installed on your machine already for this library to work.
Example
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 { name: "int_problem".to_string(),
sense: LpObjective::Maximize,
objective: StrExpression("x - y".to_string()), 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);
}
fn main() {
solve_integer_problem_with_solver(CbcSolver::default())
}