A library for solving linear programming problems.
Linear programming is a technique for finding the minimum (or maximum) of a linear function of a set of continuous variables subject to linear equality and inequality constraints.
Warning: this is an early-stage project. Although the library is already quite powerful, it will probably cycle, lose precision or panic on some harder problems. Please report bugs and contribute code!
Basic usage
```rust 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.addvar(1.0, (0.0, f64::INFINITY)); let y = problem.addvar(2.0, (0.0, 3.0));
// subject to constraints: x + y <= 4 and 2 * x + y >= 2. problem.addconstraint(&[(x, 1.0), (y, 1.0)], ComparisonOp::Le, 4.0); problem.addconstraint(&[(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(); asserteq!(solution.objective(), 7.0); asserteq!(solution[x], 1.0); assert_eq!(solution[y], 3.0); ```
For a more involved example, see examples/tsp, a solver for the travelling salesman problem.
This project is licensed under the Apache License, Version 2.0.