Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Solver wrappers tracker #70

Closed
12 of 13 tasks
joaquimg opened this issue Jul 20, 2017 · 46 comments
Closed
12 of 13 tasks

Solver wrappers tracker #70

joaquimg opened this issue Jul 20, 2017 · 46 comments

Comments

@joaquimg
Copy link
Member

joaquimg commented Jul 20, 2017

List of LP and conic solver wrappers to be implemented.
We can mark whoever is currently working on it and which ones are basically done.

@joaquimg
Copy link
Member Author

Do you agree with that?
@blegat should I mark CSDP and SDPA as done?

@joaquimg
Copy link
Member Author

I can do Gurobi also, it is pretty similar to Xpress

@mlubin
Copy link
Member

mlubin commented Jul 20, 2017

This is a good place to keep track of progress and who's working on what.

I'd also mention that this is a good time to look at the low-level wrappers themselves, don't feel like you can only touch the MOI code. A lot of these wrappers were written a long time ago and don't necessarily have good documentation or follow the latest Julia conventions. Please take some time to consider if it would be useful to reorganize the low-level wrapper before or while writing the MOI wrapper.

@mlubin
Copy link
Member

mlubin commented Jul 20, 2017

Any if any part of the implementation is unclear, open an issue here so we can document it! Hopefully the guide on "how to write a solver wrapper" can be easily compiled from the experience with these wrappers.

@odow
Copy link
Member

odow commented Jul 20, 2017

I can do CPLEX

@odow
Copy link
Member

odow commented Jul 20, 2017

A question on the low-level wrappers: should these support a full range of low-level features (i.e. adding variables with bounds at the same time), or just the MOI features (add a variable, and a function to set bounds). Consider that CPLEX has addcols and newcols for adding new variables (with an without constraint coefficents), as well as six Julia methods for adding variables depending on the type of input arguments.

I'm kind of in favour of restricting the functionality of the low-level wrappers because it will encourage people to go through MOI and make it simpler to maintain.

@joaquimg
Copy link
Member Author

I was thinking about something similar, maybe having the C api .h file converted just to eliminate tedious ccalling and then just do MOI.
I think it is similar to what is done in GLPK.

@blegat
Copy link
Member

blegat commented Jul 21, 2017

@joaquimg CSDP is passing the contconic tests but not the contlinear tests yet. SDPA has not been adapted yet but it will be very quick since all the hard work is done by SOI :)

@joaquimg
Copy link
Member Author

Have anybody tried to use any .h to .jl converter such as the one in Clang.jl

@mlubin
Copy link
Member

mlubin commented Jul 21, 2017

@odow a smart MOI wrapper might decide to call addcols for column generation after collecting the new variables and coefficients together.

@mlubin
Copy link
Member

mlubin commented Jul 21, 2017

Have anybody tried to use any .h to .jl converter such as the one in Clang.jl

We tried a long time ago for SCIP and it wasn't successful because the SCIP API was too complicated.

@blegat
Copy link
Member

blegat commented Jul 21, 2017

@joaquimg never tried it but I am planning to give it a try for DSDP

@blegat
Copy link
Member

blegat commented Jul 25, 2017

CSDP is passing all contlinear and contconic tests so I have marked it as done :)

@blegat
Copy link
Member

blegat commented Jul 25, 2017

SDPA too now :)

@joaquimg
Copy link
Member Author

joaquimg commented Jul 27, 2017

Xpress is passing linearXtest, X \in {1,2,3,4,5,6}

@joaquimg
Copy link
Member Author

My plan is finish intlinear soon and go to gurobi

@joaquimg
Copy link
Member Author

I finished Xpress intlinear, I will move to Gurobi soon.
@odow would you like to comment on what I have done in Xpress before I move to gurobi?
@mlubin would Gurobi help you with JuMP integer tests?

@mlubin
Copy link
Member

mlubin commented Jul 27, 2017

@joaquimg I'm just targeting LP this week, but if we have a MIP solver working I may have time to try it out.

@odow
Copy link
Member

odow commented Aug 1, 2017

CPLEX is now passing tests 1 to 6.
jump-dev/CPLEX.jl#139

@odow
Copy link
Member

odow commented Aug 2, 2017

CPLEX is now passing all contlinear, intlinear, and contquadratic tests in this PR #103 with the exception of linear7test and qpp2test (vector valued functions).

@rschwarz
Copy link
Contributor

rschwarz commented Aug 10, 2017

EDIT: found it at #27: I'm sure this has been discussed elsewhere but: Is the idea that the MOI wrapper is implemented in the same repo as the existing MPB wrapper, and that the latter is removed in the processed?

@ulfworsoe
Copy link
Contributor

MOSEK is now passing linear, conic and integer tests (minus SOS tests). I have not implemented quadratic objective or constraints. I have also disabled MathProgBase support.

@joaquimg
Copy link
Member Author

joaquimg commented Sep 16, 2017

CPLEX is now passing all contlinear, intlinear, and contquadratic tests in this PR #103

Same for Xpress using LinQuadOptInterface

@joaquimg
Copy link
Member Author

joaquimg commented Sep 17, 2017

I am tagging Xpress.jl v0.5.0 now and it contains the basic functions to support MathOptInterfaceXpress which depends on LinQuadOptInterface.

@mlubin I'd like to transfer these two to JuliaOpt.

I will start working on MathOptInterfaceGurobi

@odow should I also create CPLEXMathOptInterface?

@mlubin
Copy link
Member

mlubin commented Sep 17, 2017

@joaquimg, you have permission to transfer those two repos.

Does the Xpress v0.5 release have any changes visible to current JuMP users on Julia 0.6? We should be careful not to break existing setups.

@joaquimg
Copy link
Member Author

It passes all the current JuMP (and MathProgBase) tests on 0.5 and 0.6 smoothly. The only change is that the user needs to use Xpress.XpressSolver instead of XpressSolver, which is not exported anymore.

@mlubin
Copy link
Member

mlubin commented Sep 17, 2017

@joaquimg, could you make sure all solver tables are updated for the un-exported name?

@odow
Copy link
Member

odow commented Sep 17, 2017

Yes to CPLEX

@joaquimg
Copy link
Member Author

joaquimg commented Sep 30, 2017

GurobiMathOptInterface is passing almost all linear and integer tests - just needs status and ranged constraints.
I will submit a PR to Gurobi.jl due to some extra useful functions I needed.

Since Gurobi.jl exports GurobiSolver I needed to define MOIGurobiSolver, I would like suggestions in this point since Gurobi.jl e more beyond my control than Xpress.jl. I vote for stopping exporting GurobiSolver.

Suggestions?

@mlubin
Copy link
Member

mlubin commented Sep 30, 2017

We can't release a 0.6-compatible version of Gurobi.jl without GurobiSolver exported, it's too breaking. At that point, if we're going to declare Gurobi.jl master to be 0.7 only, might as well completely remove the MPB code.

@joaquimg
Copy link
Member Author

Now we have GurobiMathOptInterface.jl in JuliaOpt. It should be working as soon as jump-dev/Gurobi.jl#106 gets merged and we tag a new version. Currently we have MOIGurobiSolver but in 0.7 we can stop exporting GurobiSolver in Gurobi.jl.

It passes most tests, does not passes ranged constraints because gurobi creates extra variables and some QCP tests fails due to problems with quadratic duals, which are not well posed in MOI anyway.

@joaquimg
Copy link
Member Author

joaquimg commented Oct 1, 2017

MathOptInterfaceCPLEX is passing all tests, but it needs: jump-dev/CPLEX.jl#146.
There might be some work on that PR.

@joaquimg
Copy link
Member Author

@IssamT any news on Clp? Have you considered using LinQuadOptInterface?

@IssamT
Copy link
Contributor

IssamT commented Nov 1, 2017

@joaquimg, sorry for not replying quickly to your message. For some reason I stopped getting emails on comments of issues and pull requests despite I don't remember modifying my notification settings. I have enabled all the notifications on my settings and I hope this will fix it.

About your question. I was a bit busy and only got some advance in the past week. Still a couple of tests and all will be passing. However It seems I also missed LinQuadOptInterface. I wasn't aware of its existence. So no, I haven't used it.

@joaquimg
Copy link
Member Author

MathOptInterfaceGLPK is alive: https://github.com/JuliaOpt/MathOptInterfaceGLPK.jl

It is passing most tests (the ones in MOI), there is still some important work to do: improving solution status mappings.

@blegat
Copy link
Member

blegat commented Nov 26, 2017

I will take care of updating CDD. Still no one working on MathOptInterfaceSCS.jl ?

@blegat
Copy link
Member

blegat commented Nov 26, 2017

I will start the SCS wrapper then :)

@joaquimg
Copy link
Member Author

How can we proceed with CBC and SCIP?

I noticed SCIP's MPB interface is pretty simple, porting that to LQOI would be easy - once I have SCIP installed ;) - I just don't know if there is plan to do something special.

Should we extend CBC the same as CLP?
@IssamT have you put thoughts into that?

@mlubin
Copy link
Member

mlubin commented Nov 27, 2017

CC @leethargo and @fserra for SCIP. There was talk at some point of writing a direct SCIP wrapper instead of using CSIP (which was written to provide a Gurobi-like C interface for SCIP). It would be easier to continue to use CSIP for now, but that may not be the long-term solution.

@rschwarz
Copy link
Contributor

True, a direct wrapper of the SCIP C-API would be more general. But I won't have time to attempt a rewrite in the next couple of months...

@blegat
Copy link
Member

blegat commented Nov 27, 2017

SCS is passing all the tests it can pass without bridge ! :)

@IssamT
Copy link
Contributor

IssamT commented Nov 27, 2017

@joaquimg it would be nice to have CBC in the same style as CLP , but I haven't tried to use LQOI yet.

@blegat
Copy link
Member

blegat commented Nov 28, 2017

I can take care of ECOS, the interface is very similar to SCS so it should be quick :)

@blegat
Copy link
Member

blegat commented Dec 6, 2017

ECOS is now working :)

@odow
Copy link
Member

odow commented Nov 10, 2018

Closing as I believe this issue has served its purpose.

@blegat
Copy link
Member

blegat commented Apr 7, 2019

CDD is done in JuliaPolyhedra/CDDLib.jl#37

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

No branches or pull requests

7 participants