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
Merged

readme first sketch #2

merged 19 commits into from
Mar 11, 2018

Conversation

joaquimg
Copy link
Member

@joaquimg joaquimg commented Dec 7, 2017

Begin fixing #1

cc @mlubin

README.md Outdated
@@ -1,2 +1,26 @@
# LinQuadOptInterface.jl
Intermediate wrapper for MOI of CPLEX, Gurobi and Xpress

LinQuadOptInterface is a intermediate wrapper designed to bridge low-level Integer Linear and Quadratic solvers. I provides access to many MathOptInterface functionalities mainly related to problem modifications:
Copy link
Member

Choose a reason for hiding this comment

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

I provides -> It provides.
Maybe also "LinQuadOptInterface" -> "LinQuadOptInterface (LQOI)"

README.md Outdated

All these modification are caried out by the low-level solver own functionalities and hence it differs from MathOptInterfaceUtilities' `Instance`. The latter will keep all problem data in the julia level and typically push to a low-level solver the complete problem at once.

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

Choose a reason for hiding this comment

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

"varibles" -> "variables"

README.md Outdated
5. change constraint rhs
6. change variable bounds and type

All these modification are caried out by the low-level solver own functionalities and hence it differs from MathOptInterfaceUtilities' `Instance`. 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.

Instance is not an implementation of a solver wrapper, so this is confusing.

README.md Outdated
@@ -1,2 +1,26 @@
# LinQuadOptInterface.jl
Intermediate wrapper for MOI of CPLEX, Gurobi and Xpress

LinQuadOptInterface (LQOI) is a intermediate wrapper designed to bridge low-level Integer Linear and Quadratic solvers. It provides access to many MathOptInterface functionalities mainly related to problem modifications:
Copy link
Member

Choose a reason for hiding this comment

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

Designed to make it easier for low-level [...] solvers to implement the MOI interface.

@joaquimg joaquimg modified the milestone: 11kim Dec 15, 2017
README.md Outdated
@@ -1,2 +1,28 @@
# LinQuadOptInterface.jl
Intermediate wrapper for MOI of 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:
Copy link
Member

Choose a reason for hiding this comment

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

The first sentence seems jumbled.

Copy link
Member Author

Choose a reason for hiding this comment

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

yep, copy and paste mistake

README.md Outdated

## LinQuadOptInterface Instance

In the MOI `Instance` made available by LinQuadOptInterface.jl all these modification are caried out by the low-level solver own functionalities and hence it differs from MathOptInterfaceUtilities' `Instance`. 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.

Instance does not directly connect to solvers. The comparison here is with solver wrappers that use Instance internally.

Copy link
Member Author

Choose a reason for hiding this comment

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

What about:
The MOI Instance made available by LinQuadOptInterface.jl is used as a standardized interface to a solver which has a low-level wrapper that allows most of (or all) these modification to be made in the solver's internal structures. The data kept in the julia level is minimal.

Copy link
Member

Choose a reason for hiding this comment

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

Solver instance, not instance, right? It differs from other wrappers that store a standalone instance in Julia.

Copy link
Member Author

Choose a reason for hiding this comment

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

Now I understand what you mean, I will re-do it more clearly

@mlubin
Copy link
Member

mlubin commented Mar 9, 2018

Bump. The readme on master still does not explain what this package does!

@joaquimg
Copy link
Member Author

Yep, Some time ago I started that, but then I waited for the big renaming. I will make it a priority.

@joaquimg
Copy link
Member Author

@mlubin @blegat @odow comments welcome :)

README.md Outdated

## 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"

README.md Outdated

## 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

README.md Outdated
@@ -1,2 +1,30 @@
# LinQuadOptInterface.jl
Intermediate wrapper for MOI of GLPK, CPLEX, Gurobi and Xpress

**Attention**: This is an intermediary layer used by some implementations of the MathOptInterface.
Copy link
Member

Choose a reason for hiding this comment

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

Attention seems unnecessary

README.md Outdated

**Attention**: This is an intermediary layer used by some implementations of the MathOptInterface.

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 [MathOptInterface](https://github.com/JuliaOpt/MathOptInterface.jl) (MOI) interface. It provides access to many MOI functionalities mainly related to problem modifications:
Copy link
Member

Choose a reason for hiding this comment

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

MOI interface is redundant, just say "to implement MathOptInterface (MOI)"

README.md Outdated

## LinQuadOptInterface Instance

In LinQuadOptInterface.jl the MOI `AbstractOptimizer` is specialized to `LinQuadOptimizer`. In this implementation all the above mentioned modifications are caried out by the low-level solver own functionalities and hence it differs from MathOptInterface.Utilities' `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.
Copy link
Member

Choose a reason for hiding this comment

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

low-level solver's own

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.

README.md Outdated

## LinQuadOptInterface Optimizer

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.
Copy link
Member

Choose a reason for hiding this comment

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

Can we get links to CachingOptimizer etc?

Copy link
Member

Choose a reason for hiding this comment

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

s/julia/Julia

README.md Outdated

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.

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."

README.md Outdated

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 integer linear solver.

All these solvers have low-level APIs which supports most of these modifications. Hence, data storage is simplified and duplications are avoided.
Copy link
Member

Choose a reason for hiding this comment

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

What are "these modifications"?

@joaquimg
Copy link
Member Author

Is the CachingOptimizer in MOI manual?

README.md Outdated

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 integer linear solver.

All these solvers have low-level APIs which supports most of the above metioned [modifications](#modifications). Hence, data storage is simplified and duplications are avoided.
Copy link
Member

Choose a reason for hiding this comment

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

s/supports/support
s/metioned/mentioned

README.md Outdated

## 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 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.

s/a integer/an integer or s/a integer/a mixed integer

@joaquimg
Copy link
Member Author

I am merging this because people will start looking. Open for suggestions and PRs :)

@joaquimg joaquimg merged commit afe07e7 into master Mar 11, 2018
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants