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.