Skip to content

Instantly share code, notes, and snippets.

@mlubin
mlubin / high-level design.md
Last active December 14, 2015 21:59
Prototype design for linear(/mixed-integer/quadradic/+) programming interface in Julia

There are four different levels at which users may interact with LP solvers (top to bottom):

  • Algebraic modeling languages such as MathProg.jl
  • Matlab-style linprog functions, provide problem as input and retrieve solution in one function call. Maybe put this in Optim.jl.
  • Standard low-level interface. This is a state-based interface with a solver object where the user may dynamically add and remove variables and constraints, repeatedly resolve the problem with hotstarts (important for decomposition algorithms), etc. Inspired by COIN-OR's OSI project, but hopefully we can improve on some of their mistakes.
  • Solver-specific low-level interface. Typically a lightweight wrapper around the solver's C interface. Names should follow the solver's convention.

Implementers of solver interfaces (or solvers written in Julia) are responsible for providing the standard low-level interface (not linprog). The linprog interface will be built on top of the standard low-level interface.