Closed lkastner closed 9 months ago
My colleague @benlorenz tested this with full verbosity and the output is here: https://gist.github.com/benlorenz/82df8d561a5d9a62fd9c0ad94f80cac7
Yes, so SoPlex just starts cycling between primal and dual pivots (called looping in SoPlex) and cannot obtain a sufficiently precise floating-point solution in order to refine the rational solution.
The first constrait " C0 : >= -1" looks suspicious. Maybe SoPlex interprets that strangely?
The same happens when removing this extra constraint, I also managed to trigger the same error with soplex from the command line by running (with the C0 line removed):
soplex --solvemode=2 --readmode=1 debug.lp
This solvemode (SOLVEMODE_RATIONAL
) corresponds to the flags that are set in the polymake code, originally written by @pfetsch.
With soplex 4.0.1 this does not happen and it returns infeasible
:
$ ~/software/prefixes/scip-6.0.1/bin/soplex --solvemode=2 --readmode=1 debug.lp
SoPlex version 4.0.1 [mode: optimized] [precision: 8 byte] [rational: GMP 6.2.1] [githash: e89d7d5]
Copyright (c) 1996-2019 Konrad-Zuse-Zentrum fuer Informationstechnik Berlin (ZIB)
int:readmode = 1
int:solvemode = 2
Reading (rational) LP file <debug.lp> . . .
Reading took 0.00 seconds.
LP has 44 rows 19 columns and 97 nonzeros.
Initial floating-point solve . . .
Simplifier result: INFEASIBLE
Floating-point infeasible.
Setting up LP to test for feasibility.
Initial floating-point solve . . .
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 76 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.e0
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
type | time | iters | facts | shift | violation | obj value
L | 0.0 | 0 | 8 | 9.38e+15 | 7.20e+01 | -2.22044605e-16
E | 0.0 | 1 | 9 | 0.00e+00 | 9.38e+15 | 0.00000000e+00
L | 0.0 | 20 | 10 | 2.78e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 10 | 0.00e+00 | 2.78e-01 | 0.00000000e+00
L | 0.0 | 21 | 11 | 9.17e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 11 | 0.00e+00 | 9.17e-01 | 0.00000000e+00
L | 0.0 | 24 | 12 | 2.78e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 24 | 12 | 0.00e+00 | 2.78e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 9.38e+15 | 7.20e+01 | -2.22044605e-16
E | 0.0 | 1 | 2 | 0.00e+00 | 9.38e+15 | 0.00000000e+00
L | 0.0 | 20 | 3 | 2.78e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 3 | 0.00e+00 | 2.78e-01 | 0.00000000e+00
L | 0.0 | 21 | 4 | 9.17e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 4 | 0.00e+00 | 9.17e-01 | 0.00000000e+00
L | 0.0 | 24 | 5 | 2.78e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 24 | 5 | 0.00e+00 | 2.78e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 102 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 1.88e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 10 | 0.00e+00 | 1.88e+16 | 0.00000000e+00
L | 0.0 | 20 | 11 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 11 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 12 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 12 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 22 | 13 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 13 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 1.88e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 2 | 0.00e+00 | 1.88e+16 | 0.00000000e+00
L | 0.0 | 20 | 3 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 3 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 4 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 4 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 22 | 5 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 5 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 110 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 2.81e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 10 | 0.00e+00 | 2.81e+16 | 0.00000000e+00
L | 0.0 | 18 | 11 | 4.67e+00 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 18 | 11 | 0.00e+00 | 4.67e+00 | 0.00000000e+00
L | 0.0 | 20 | 12 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 12 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 13 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 13 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
E | 0.0 | 23 | 13 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 2.81e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 2 | 0.00e+00 | 2.81e+16 | 0.00000000e+00
L | 0.0 | 18 | 3 | 4.67e+00 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 18 | 3 | 0.00e+00 | 4.67e+00 | 0.00000000e+00
L | 0.0 | 20 | 4 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 4 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 5 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 5 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 110 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 3.75e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 10 | 0.00e+00 | 3.75e+16 | 0.00000000e+00
L | 0.0 | 20 | 11 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 11 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 12 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 12 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 22 | 13 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 13 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 3.75e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 2 | 0.00e+00 | 3.75e+16 | 0.00000000e+00
L | 0.0 | 20 | 3 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 3 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 4 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 4 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 22 | 5 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 5 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 110 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 4.69e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 10 | 0.00e+00 | 4.69e+16 | 0.00000000e+00
L | 0.0 | 19 | 11 | 9.44e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 19 | 11 | 0.00e+00 | 9.44e-01 | 0.00000000e+00
L | 0.0 | 20 | 12 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 12 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 13 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 13 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 4.69e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 2 | 0.00e+00 | 4.69e+16 | 0.00000000e+00
L | 0.0 | 19 | 3 | 9.44e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 19 | 3 | 0.00e+00 | 9.44e-01 | 0.00000000e+00
L | 0.0 | 20 | 4 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 4 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
L | 0.0 | 21 | 5 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 21 | 5 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 110 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (3).
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 5.63e+16 | 7.20e+01 | -1.23259516e-32
L | 0.0 | 1 | 9 | 5.63e+16 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 1 | 10 | 0.00e+00 | 5.63e+16 | 0.00000000e+00
L | 0.0 | 18 | 11 | 9.44e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 18 | 11 | 0.00e+00 | 9.44e-01 | 0.00000000e+00
L | 0.0 | 20 | 12 | 5.00e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 12 | 0.00e+00 | 5.00e-01 | 0.00000000e+00
L | 0.0 | 22 | 13 | 4.17e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 13 | 0.00e+00 | 4.17e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Numerical troubles during floating-point solve.
Turning off preprocessing.
L | 0.0 | 0 | 1 | 5.63e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 2 | 0.00e+00 | 5.63e+16 | 0.00000000e+00
L | 0.0 | 18 | 3 | 9.44e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 18 | 3 | 0.00e+00 | 9.44e-01 | 0.00000000e+00
L | 0.0 | 20 | 4 | 5.00e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 20 | 4 | 0.00e+00 | 5.00e-01 | 0.00000000e+00
L | 0.0 | 22 | 5 | 4.17e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 22 | 5 | 0.00e+00 | 4.17e-01 | 0.00000000e+00
Caught exception <XSOLVE14 Abort solving due to looping> while solving real LP.
Increasing Markowitz threshold.
Simplifier removed 44 rows, 20 columns, 98 nonzeros, 1 col bounds, 110 row bounds
Reduced LP has 0 rows 0 columns 0 nonzeros
Simplifier removed all rows and columns
--- unsimplifying solution and basis
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.1875e1
Max. dual violation = 0.61679056923619804377437413761071e-17
Refined floating-point solve . . .
L | 0.0 | 0 | 9 | 6.57e+16 | 7.20e+01 | -1.23259516e-32
E | 0.0 | 1 | 10 | 0.00e+00 | 6.57e+16 | 0.00000000e+00
L | 0.0 | 18 | 11 | 2.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 18 | 11 | 0.00e+00 | 2.50e-01 | 0.00000000e+00
L | 0.0 | 19 | 12 | 7.50e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 19 | 12 | 0.00e+00 | 7.50e-01 | 0.00000000e+00
E | 0.0 | 21 | 13 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.32838747282909859875e17
Max. dual violation = 0.32838747282909863e17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (4).
Refined floating-point solve . . .
L | 0.0 | 0 | 0 | 8.89e-01 | 0.00e+00 | 0.00000000e+00
E | 0.0 | 0 | 0 | 0.00e+00 | 8.89e-01 | 0.00000000e+00
E | 0.0 | 2 | 1 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.32838747282909863875e17
Max. dual violation = 0.32838747282909863e17
Refined floating-point solve . . .
L | 0.0 | 0 | 0 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
L | 0.0 | 0 | 0 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.32838747282909863875e17
Max. dual violation = 0.32838747282909863e17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (4).
Refined floating-point solve . . .
L | 0.0 | 0 | 0 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
L | 0.0 | 0 | 0 | 0.00e+00 | 0.00e+00 | 0.00000000e+00
Floating-point optimal.
Max. bound violation = 0.e0
Max. row violation = 0.e0
Max. reduced cost violation = 0.32838747282909863875e17
Max. dual violation = 0.32838747282909863e17
Performing rational reconstruction . . .
Reconstructed solution dual infeasible (4).
Performing rational factorization . . .
Tolerances reached.
Primal infeasible. Dual Farkas ray available.
SoPlex status : problem is solved [infeasible]
Solving time (sec) : 0.01
Iterations : 305
Objective value : 1.00000000e+100
PS: $0 \ge -1$ should always be valid and appears here because polymake uses a homogeneous encoding, i.e. there is one extra homogenization coordinate with the inequality $x_h \ge 0$. The polyhedron lives at height one, so setting $x_h = 1$ gives the extra constraint.
I can confirm and reproduce this. It looks to me like a bug in postsolving of the presolver/simplifier. I have not had time to look into it, but a workaround is to turn off presolving, -s0
on the command line or setIntParam(SIMPLIFIER, SIMPLIFIER_OFF)
in the api. Does this work for you?
@ambros-gleixner This works for me, thank you. Feel free to close this issue, I'll leave it open for now since you said there might be a bug, so I am unsure whether I should close.
Thanks!
Some good news here: We are developing an improvement to SoPlex exact solving mode that involves precision boosting. With that update, we can solve the lp that is broken here. While it will still take some time until that feature arrives in the master branch, we will soon provide a mirror of that branch here on GitHub (I will post and update when here, as well)
A late update: The precision boosting feature has been merged to master and will be part of the upcoming SoPlex 7 release.
I am running a large computation and encounter LPs for which soplex will have the status
ERROR
at the following point: https://github.com/polymake/polymake/blob/Releases/bundled/soplex/apps/polytope/src/soplex_interface.cc#L217I am using polymake 4.7 with soplex 6.0.1. I configured soplex with
-DCMAKE_BUILD_TYPE=Debug
for more debug output. The commands I ran in polymake were:For this to work I had to augment the first inequality of the attached file to say
0 x0 >= -1
instead of just>= -1
, I think this might just be an issue with polymakeslp2poly
parser. The working LP instances have the same inequality.The file
debug.lp
is attached. debug.lp.txtThe output is as follows:
Is there something wrong with my LP?