package lp

  1. Overview
  2. Docs
LP and MIP modeling in OCaml

Install

Dune Dependency

Authors

Maintainers

Sources

0.2.0.tar.gz
md5=a2a388ad1bb4d1aa2e6238628488336a
sha512=3d8e892d2e068f6574588cf80aaab53169bf1fc3b258721674bd28819d2f05f5f759ce89a5baab3336b0ff81c5e0508d010e70d2134d878b90f57ad9151a2ea3

README.md.html

ocaml-lp : LP and MIP modeling in OCaml

This library helps the modeling of Linear Programming (LP) and Mixed Integer Programming (MIP) in OCaml. It supports the model with not only linear terms, but also quadratic terms. The model can be imported-from / exported-to CPLEX LP file format, which can be loaded by various solvers. It also has direct interfaces to some solvers. Currently supported are GLPK (GNU Linear Programming Kit) and Gurobi.

Install

# optional but recommended to pin dev-repo as it's on quite early stage of development
opam pin lp --dev-repo
opam pin lp-glpk --dev-repo
opam pin lp-gurobi --dev-repo # if you have an access to Gurobi
opam install lp lp-glpk lp-gurobi

Example

let x = Lp.var "x"
let y = Lp.var "y"

let problem =
  let open Lp in
  let obj = maximize (x ++ y) in
  let c0 = x ++ (c 1.2 *~ y) <~ c 5.0 in
  let c1 = (c 2.0 *~ x) ++ y <~ c 1.2 in
  let cnstrs = [c0; c1] in
  (obj, cnstrs)

let write () = Lp.write "my_problem.lp" problem

let solve () =
  (* For Gurobi, use Lp_gurobi.solve instead *)
  match Lp_glpk.solve problem with
  | Ok (obj, tbl) ->
      Printf.printf "Objective: %.2f\n" obj ;
      Printf.printf "x: %.2f y: %.2f\n"
        (Hashtbl.find tbl x) (Hashtbl.find tbl y)
  | Error msg ->
      print_endline msg

let () =
  if Lp.validate problem then (write () ; solve ())
  else print_endline "Oops, my problem is broken."

Notes on GLPK interface

  • To use this, compile your application with -cclib -lglpk flags.

  • Since this is tested only on GLPK version 4.65, something may fail on other versions.

Conformity to LP file format

Currently only basic features of LP file format are supported. Yet to be supported are advanced features, which are typically available on commercial solvers. (There is no standard of LP file, though.)

supported

  • Single objective (linear and quadratic)

  • Constraints (linear and quadratic)

  • Bounds

  • Variable types (General Integers and Binary Integers)

not-supported

  • Semi-continuous variables

  • Multi-objective

  • Lazy constraint

  • Special ordered set (SOS)

  • Piecewise-linear (PWL) objective and constraint

  • General Constraint

  • Scenario

References

Some references to LP file format.

License

MIT

OCaml

Innovation. Community. Security.