This repository has been archived by the owner on Jun 14, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 10
Merged
Changes from all commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
2ddf536
readme first sketch
joaquimg 57e8709
Update README.md
joaquimg 6635790
Update README.md
joaquimg bd6ca68
Merge remote-tracking branch 'origin/master' into jg/readme
joaquimg 210d347
update readme
joaquimg 1fb52ea
improve name
joaquimg c407096
fixes
joaquimg 1d84e4f
CachingOptimizer
joaquimg 645f9e2
Remove ambiguous sentence
joaquimg 754fdc7
add suggestions
joaquimg 2177186
replace instance by optimizer
joaquimg 3a5a42d
add suggestions
joaquimg ad51801
try html self ref
joaquimg 17f5ac2
separate mods
joaquimg 03b1ccf
add some
joaquimg e82075a
missing link
joaquimg b0765d8
missing brace
joaquimg c948f35
supports
joaquimg 30f2fc2
fix english
joaquimg File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,34 @@ | ||
# LinQuadOptInterface.jl | ||
Intermediate wrapper for MOI of GLPK, CPLEX, Gurobi and Xpress | ||
|
||
LinQuadOptInterface.jl (LQOI) is designed to simplify [MathOptInterface.jl](https://github.com/JuliaOpt/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](https://github.com/JuliaOpt/GLPK.jl), [Gurobi.jl](https://github.com/JuliaOpt/Gurobi.jl), [Xpress.jl](https://github.com/JuliaOpt/Xpress.jl) and [CPLEX.jl](https://github.com/JuliaOpt/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. | ||
|
||
## <a name="modifications"></a> 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`](http://www.juliaopt.org/MathOptInterface.jl/latest/apireference.html#MathOptInterface.AbstractOptimizer) is specialized to [`LinQuadOptimizer`](https://github.com/JuliaOpt/LinQuadOptInterface.jl/blob/99b2a3dfe78e000330475f08766f6681ecf633ab/src/LinQuadOptInterface.jl#L131). In this implementation all the above mentioned [modifications](#modifications) are carried out by the low-level solver's own functionalities and hence the `LinQuadOptimizer` can be used without a [`CachingOptimizer`](https://github.com/JuliaOpt/MathOptInterface.jl/blob/60c5ee85addb65ada33cb1d922691f23e5a518e2/src/Utilities/cachingoptimizer.jl#L8). 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](https://github.com/JuliaOpt/MathOptInterfaceXpress.jl), [MathOptInterfaceCPLEX.jl](https://github.com/JuliaOpt/MathOptInterfaceCPLEX.jl), [MathOptInterfaceGurobi.jl](https://github.com/JuliaOpt/MathOptInterfaceGurobi.jl) and [MathOptInterfaceGLPK.jl](https://github.com/JuliaOpt/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](#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](#modifications). | ||
|
||
If a solver low-level API does not support most of the above mentioned [modifications](#modifications), then following the example of [MathOptInterfaceSCS.jl](https://github.com/JuliaOpt/MathOptInterfaceSCS.jl) and [MathOptInterfaceECOS.jl](https://github.com/JuliaOpt/MathOptInterfaceECOS.jl) might be a better idea. |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
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.