package lp-glpk

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

Install

Dune Dependency

Authors

Maintainers

Sources

0.1.0.tar.gz
md5=21fef42d51a8194aaf6106df84a246c3
sha512=959cf32616fbce350c4a2ccb4deb562165d5a943de215595a78e2d897f475f7c01ea0c32221a0d71cfca62acd54c8714c12ece246e31b346a3b1b4435a7257c5

Description

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 an interface to GLPK (GNU Linear Programming Kit).

Published: 11 May 2020

README

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 an interface to GLPK (GNU Linear Programming Kit).

Install

# optional but recommended to pin dev-repo as it's on quite early stage of development
opam pin lp --dev-repo
opam install lp

Example

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

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

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

let solve () =
    match Lp.Glpk.Simplex.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

Notes on GLPK interface

  • Tested only on GLPK version 4.65, something may fail on other versions.

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

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

Dependencies (5)

  1. ctypes-foreign
  2. ctypes
  3. lp = version
  4. dune >= "2.2.0"
  5. ocaml >= "4.08.0"

Dev Dependencies (2)

  1. conf-glpk with-test
  2. alcotest with-test

Used by

None

Conflicts

None