good_lp

A Linear Programming modeler that is easy to use, performant with large problems, and well-typed.

documentation MIT license

```rust use goodlp::{variables, variable, coincbc, SolverModel, Solution};

fn main() { let mut vars = variables!(); let a = vars.add(variable().max(1)); let b = vars.add(variable().min(2).max(4)); let solution = vars.maximise(10 * (a - b / 5) - b) .using(coin_cbc) .with(a + 2 << b) // or (a + 2).leq(b) .with(1 + a >> 4 - b) // or (1 + a).geq(4 - b) .solve()?; println!("a={} b={}", solution.value(a), solution.value(b)); println!("a + b = {}", solution.eval(a + b)); } ```

Features and limitations

Contributing

Pull requests are welcome ! If you need any of the features mentioned above, get in touch. Also, do not hesitate to open issues to discuss the implementation.

Usage examples

You can find a resource allocation problem example in resource_allocation_problem.rs.

Solvers

This library offers an abstraction over multiple solvers. By default, it uses cbc, but you can also activate other solvers using cargo features.

cbc

Used by default, performant, but requires to have a C compiler and the cbc C library installed.

In ubuntu, you can install it with:

sudo apt-get install coinor-cbc coinor-libcbc-dev

In MacOS, using homebrew :

brew install cbc

minilp

minilp is a pure rust solver, which means it works out of the box without installing anything else.

You can activate it with :

toml [dependencies.good_lp] version = "0.1.0" default-features = false features = ["minilp"]

Then use minilp instead of coin_cbc in your code: ```rust use good_lp::minilp;

fn optimize(vars: ProblemVariables) { vars.maximise(objective).using(minilp); } ```

License

This library is published under the MIT license.