# SoPlex from JuMP ? (available through SCIP ?)

**URL:** https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117
**Category:** Optimization (Mathematical)
**Tags:** question
**Created:** [March 26, 2024, 2:28am UTC](https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117 "2024-03-26T02:28:07Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![JonT](https://avatars.discourse-cdn.com/v4/letter/j/5daacb/32.png) [@JonT](https://discourse.julialang.org/u/JonT)
#### Post date: [March 26, 2024, 2:28am UTC](https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117/1 "2024-03-26T02:28:07Z")

</div>

I have a problem for which there is a recursive branch and bound algorithm using exact arithmetic in a simplex solver (QSopt\_ex). It is very slow even for small problems, and I was hoping to explore a heuristic to improve things but there are no obvious suitable solvers with interfaces to JuMP and Julia which might make things faster.

- there are no native simplex solvers with JuMP interface
- CDDlib uses global variables in the C code, so multiple instantiation is a problem
- GLPK/exact does not appear to have an interface to JuMP
- QSopt\_ex does not have an interface to Julia/JuMP

The iterative refinement in SoPlex is reported to improve of QSOpt\_ex, which may help. And SoPLex is being developed, whereas QSOpt\_ex appears to have stopped. So I think moving to SoPlex is the right choice…

I note there is an interface to SCIP, but it seems to hide rather than expose SoPlex.

Can I use the exact solving capability of SoPlex through SCIP from JuMP ?  
(Or would it be better to create a separate MathOptInterface to SoPlex ?)

Its not obvious how to replace CDDlib (using Rational{BigInt}) with SCIP for exact solution ?

The SoPlex documentation ([SoPlex: How to use SoPlex as an exact LP solver](https://soplex.zib.de/doc/html/EXACT.php)) requires setting the following paramters:  
# real:feastol = 0  
# real:opttol = 0  
# int:solvemode = 2  
# int:syncmode = 1

The only one of these Im reasonably sure Ive mapped to SCP options is  
set\_attribute(model, “numerics/feastol”, 0)

But trying this with SCIP.Optimiser I get the error:  
[paramset.c:166] ERROR: Invalid value \<0\> for real parameter \<numerics/feastol\>. Must be in range [1e-17,0.001].

so I suspect I missing something.

Any pointers ?  
thanks

---

<div class="post-metadata">

### Author: ![odow](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/odow/32/28685_2.png) [@odow](https://discourse.julialang.org/u/odow)
#### Post date: [March 26, 2024, 3:30am UTC](https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117/2 "2024-03-26T03:30:31Z")

</div>

You’re not missing anything, and unfortunately I have no pointers.

AFAIK, the only rational simplex solver hooked up to JuMP is cddlib.

I’m guessing you can’t just set `numerics/feastol` to `0` unless you compile SCIP differently. JuMP would also be passing the data as `Float64`, so it wouldn’t help very much.

Our SCIP expert is @mbesancon, who may have some other suggestions.

---

<div class="post-metadata">

### Author: ![mbesancon](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mbesancon/32/6528_2.png) [@mbesancon](https://discourse.julialang.org/u/mbesancon)
#### Post date: [April 9, 2024, 6:33am UTC](https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117/3 "2024-04-09T06:33:01Z")

</div>

Hi @JonT, from the error, the tolerance must be positive, with a precision being at least 1e-17, so 0 is invalid.

We started developing [SoPLEX.jl](https://github.com/scipopt/SoPLEX.jl) at ZIB but due to the lack of need from anyone working on exact solving, this hasn’t been pushed further yet. Note that this is meant to support exact soplex from the start.

SCIP.jl doesn’t support exact SCIP, which is for now a separate project entirely available here: [GitHub - scipopt/scip at exact-rational](https://github.com/scipopt/scip/tree/exact-rational)

---

<div class="post-metadata">

### Author: ![leoneifler](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/leoneifler/32/208365_2.png) [@leoneifler](https://discourse.julialang.org/u/leoneifler)
#### Post date: [April 9, 2024, 7:08am UTC](https://discourse.julialang.org/t/soplex-from-jump-available-through-scip/112117/4 "2024-04-09T07:08:09Z")

</div>

Hi @JonT, as @mbesancon pointed out, the exact version of SCIP is not yet officially released, so going through SCIP.jl will not really help you. The error that you posted comes from the SCIP side, and there are many more problems using the current release of SCIP that will make your solution inexact (tolerances are used everywhere), even if you could solve the LP exactly using SoPlex.

SoPlex.jl seems to be your best bet, and from what I can see it should work (there is also a [test that includes rational solving](https://github.com/scipopt/SoPlex.jl/blob/master/test/SoPlex.jl)). If decide to try it and experience any problems or bugs, don’t hesitate to open an issue on the SoPlex.jl GitHub repo.

Since SoPlex version 7.0, SoPlex also uses a combination of LP iterative refinement and precision boosting (the algorithm that QSopet\_ex is based on), which improves robustness while keeping the performance benefits of LP iterative refinement.
