Is it time for a native Julia LP(Simplex) solver?

Hello everyone,

Sorry for being one year late to this conversation, back then I did not know this even existed :slight_smile:

I share the view of the mayority of you that having a better open source linear solver option in the Julia world should be a priority.

Considering the two options mentioned above I would rather prioritize improving wrappers of existing open source solvers, than developing anything from scratch. If developing something good from scratch would be easy, the commertial solver business would have shut down long time ago.

Only after improving the wrapper to the last performance drop, and being sure a Julia native solver can offer big enough benefits against the open source c++ coded solver would I dedicate any effort in developing a new solver in Julia.

Currently I am stuck looking for solver alternatives, all options I have seen have sizeable problems either:

  1. Costs are prohibitive for large scale parallel computing

  2. Poor performance and stability

There is one truly open source solver with decent performance for which a Julia wrapper exists (Clp), however, the integration in Julia has much room for improvement. The same problem takes 8 seconds with Cbc.jl and 400 seconds with Clp.jl, as many problems need dual variables Cbc is not always an option…

I have gathered some ideas of what could be changed in the wrapper. Let me list these ideas and share them with you:

Idea 1: The performance drop may be due to the wrapper using add_row and/or add_column (see: Obtaining duals for LP on Cbc - Clp's performance lagging · Issue #301 · coin-or/Cbc · GitHub)

Idea 2: The copy_to method can also be improved (Cbc and Clp performance - #16 by Diego)

Idea 3: Part of the code of Cbc.jl could be reused to improve Clp.jl

Do you have any other idea on how to improve the performance of Clp.jl? What would the time savings of that idea be? What about the implementation effort? What about the savings and the costs of ideas 1 to 3?

Thank you!!