storm icon indicating copy to clipboard operation
storm copied to clipboard

added the soplex LP solver

Open sjunges opened this issue 2 years ago • 7 comments

The Soplex LP solver allows exact and numeric LP solving and has an academic license.

This commit also shows what to to do if you want to add a new LP solver. The procedure should be similar for SMT solvers.

sjunges avatar Sep 04 '22 09:09 sjunges

BTW: I tested the use of Soplex on some benchmarks. I did not yet include options to configure Soplex from command line. We can delay merging until a point where I added those.

sjunges avatar Sep 04 '22 15:09 sjunges

I changed the include_soplex.cmake to fix linking on a linux system I tested this on. If you agree with my changes, this can be merged!

tquatmann avatar Sep 15 '22 06:09 tquatmann

There currently seems to be a bug in Soplex which leads to an error and a confusing message in storm.

For the record, the bug report is here:

https://github.com/scipopt/soplex/issues/7

sjunges avatar Sep 18 '22 09:09 sjunges

Using consensus.6.prism from QVBS and the command line

./storm --prism consensus.6.prism --prop 'R{"steps"}min=? [ F "finished"]' --constants K=2 --topological:minmax lp --lpsolver soplex

(i.e. no --exact) I get

Model checking property "steps_min": R[exp]{"steps"}min=? [F "finished"] ...
ERROR (LpMinMaxLinearEquationSolver.cpp:132): Unable to find optimal solution for MinMax equation system.
 WARN (model-handling.h:982): Cannot handle property: UnexpectedException: Unable to find optimal solution for MinMax equation system.

Given that consensus is known to be challenging, I assume that soplex is trying to tell us that it detected numerical problems. Can / should we convert this into a warning instead?

tquatmann avatar Sep 19 '22 07:09 tquatmann

So far, our wrapper for soplex behaves as the wrapper for gurobi and expects that the solver converges. However, it may very well be that SoPlex is more precise in notifying us that no precise solution is found.

We can change that behavior for both wrappers, of course. I think that at least a more precise error (or warning) should be emitted.

sjunges avatar Sep 19 '22 07:09 sjunges

iirc, we check for some return code. Maybe STORM_LOG_ERROR that code? (or convert it into a human readable string if soplex can do that?)

tquatmann avatar Sep 20 '22 04:09 tquatmann

I have added this in another branch. I guess that we can close this merge?

sjunges avatar Oct 07 '22 14:10 sjunges