JuliaOpt/LinQuadOptInterface.jl

Name: LinQuadOptInterface.jl

Owner: JuliaOpt

Description: Intermediate wrapper for MOI of CPLEX, Gurobi, Xpress and GLPK

Created: 2017-09-08 02:06:51.0

Updated: 2018-05-23 17:53:07.0

Pushed: 2018-05-24 08:47:54.0

Homepage:

Size: 109

Language: Julia

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

LinQuadOptInterface.jl

| Build Status | Social | |:—————–:|:———-:| | Build Status Codecov branch | Gitter |

LinQuadOptInterface.jl (LQOI) is designed to simplify MathOptInterface.jl's (MOI) implementation for some solvers. The target use cases are low-level wrappers designed to bridge low-level Integer Linear and Quadratic solvers, for instance GLPK.jl, Gurobi.jl, Xpress.jl and CPLEX.jl.

The use of LQOI for MOI implementations is entirely optional. Using LQOI introduces an extra abstraction layer between a solver and MOI. Its recommended to carefully analyse if the solver's low-level API is close to what LQOI expects, otherwise a direct implementation of MOI might be a better option.

Problem Modifications

LQOI provides access to many MOI functionalities mainly related to problem modifications:

  1. add constraints/variables 1-by-1 and in batches
  2. remove constraints/variables
  3. change constraint coefficients
  4. change constraint type
  5. change constraint rhs
  6. change variable bounds and type
LinQuadOptimizer

In LinQuadOptInterface.jl the MOI AbstractOptimizer is specialized to LinQuadOptimizer. In this implementation all the above mentioned modifications are carried out by the low-level solver's own functionalities and hence the LinQuadOptimizer can be used without a CachingOptimizer. The latter will keep all problem data in the Julia level and typically push to a low-level solver the complete problem at once.

In contrast, since LinQuadOptimizer incrementally pushes data to the low-level solver, it stores a small subset of the problem data at the Julia level; typically only references to constraints and variables.

Current uses

This package is currently used to implement MathOptInterfaceXpress.jl, MathOptInterfaceCPLEX.jl, MathOptInterfaceGurobi.jl and MathOptInterfaceGLPK.jl. The last one being only a mixed integer linear solver.

All these solvers have low-level APIs which support most of the above mentioned modifications. Hence, data storage is simplified and duplications are avoided.

Other possible uses

This package is only recommended if a solver low-level API which supports most of the above mentioned modifications.

If a solver low-level API does not support most of the above mentioned modifications, then following the example of MathOptInterfaceSCS.jl and MathOptInterfaceECOS.jl might be a better idea.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.