Skip to content
This repository has been archived by the owner on Jun 14, 2020. It is now read-only.

readme first sketch #2

Merged
merged 19 commits into from
Mar 11, 2018
28 changes: 27 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,28 @@
# LinQuadOptInterface.jl
Intermediate wrapper for MOI of GLPK, CPLEX, Gurobi and Xpress

LinQuadOptInterface (LQOI) is designed to make it easier for low-level wrapper designed to bridge low-level Integer Linear and Quadratic solvers to implement the MOI interface. It provides access to many MathOptInterface 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
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe add a sentence making it explicit that using LQOI is entirely optional and comes with a trade-off of introducing an extra abstraction layer between the solver and MOI.


## LinQuadOptInterface Instance

In LinQuadOptInterface.jl the MOI `AbstractOptimizer` is specified to `LinQuadOptimizer`. In this implementation all the above metioned modifications are caried out by the low-level solver own functionalities and hence it differs from MathOptInterface.Utilities' `AbstractModel`'s generated by the `@model` macro. The latter will keep all problem data in the julia level and typically push to a low-level solver the complete problem at once.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

metioned -> mentioned

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You mention @model but the discussion is closen ti CachingOptimizer

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you have any suggestion about what to say there or should I just remove this part?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You added it when SDOI was keeping a copy but now no optimizer keeps a copy, CachingOptimizer should be used for that. You can say "In this implementation all the above mentioned modifications are carried out by the low-level solver own functionalities and hence the optimizer can be used without a CachingOptimizer"


Here the data in the julia level is minimal, basically only references to constraints and variables.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Instead of this sentence maybe something along the lines of "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 integer linear solver.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be nice to ahh hyperlinks


All these solver have in common a low-level API which supports most of these 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 these modifications.

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