Closed chistopher closed 1 month ago
Can you build and run it in debug mode, and maybe also create a backtrace?
I also tried building scip from source with sanitizers and in debug mode but the error does not occur there.
Here is the log output from my debug build. The MILP presolver seems to produce different results.
root@ae06e9300a50:/soap# ./scip-build/bin/scip -f problem.cip
SCIP version 9.1.1 [precision: 8 byte] [memory: block] [mode: debug] [LP solver: Soplex 7.1.1] [GitHash: 66f11a6724]
Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB)
External libraries:
Readline 8.2 GNU library for command line editing (gnu.org/s/readline)
Soplex 7.1.1 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: 9a11f87c]
CppAD 20180000.0 Algorithmic Differentiation of C++ algorithms developed by B. Bell (github.com/coin-or/CppAD)
ZLIB 1.3 General purpose compression library by J. Gailly and M. Adler (zlib.net)
GMP 6.3.0 GNU Multiple Precision Arithmetic Library developed by T. Granlund (gmplib.org)
ZIMPL 3.6.2 Zuse Institute Mathematical Programming Language developed by T. Koch (zimpl.zib.de)
AMPL/MP 690e9e7 AMPL .nl file reader library (github.com/ampl/mp)
PaPILO 2.3.1 parallel presolve for integer and linear optimization (github.com/scipopt/papilo) (built with TBB) [GitHash: f9a7e29d]
Nauty 2.8.8 Computing Graph Automorphism Groups by Brendan D. McKay (users.cecs.anu.edu.au/~bdm/nauty)
sassy 1.1 Symmetry preprocessor by Markus Anders (github.com/markusa4/sassy)
user parameter file <scip.set> not found - using default parameters
read problem <problem.cip>
============
original problem has 1091 variables (1091 bin, 0 int, 0 impl, 0 cont) and 99 constraints
solve problem
=============
presolving:
(round 1, fast) 27 del vars, 27 del conss, 0 add conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 0 upgd conss, 0 impls, 71 clqs
(0.6s) running MILP presolver
(10.8s) MILP presolver (8 rounds): 0 aggregations, 22 fixings, 0 bound changes
(round 2, medium) 74 del vars, 27 del conss, 0 add conss, 0 chg bounds, 25 chg sides, 25 chg coeffs, 0 upgd conss, 0 impls, 71 clqs
(round 3, fast) 80 del vars, 27 del conss, 0 add conss, 0 chg bounds, 25 chg sides, 25 chg coeffs, 0 upgd conss, 0 impls, 71 clqs
(round 4, exhaustive) 385 del vars, 32 del conss, 0 add conss, 0 chg bounds, 25 chg sides, 25 chg coeffs, 0 upgd conss, 0 impls, 66 clqs
(round 5, fast) 457 del vars, 35 del conss, 0 add conss, 0 chg bounds, 25 chg sides, 25 chg coeffs, 0 upgd conss, 0 impls, 63 clqs
(round 6, fast) 459 del vars, 35 del conss, 0 add conss, 0 chg bounds, 25 chg sides, 25 chg coeffs, 0 upgd conss, 0 impls, 63 clqs
(11.2s) running MILP presolver
(34.7s) MILP presolver (38 rounds): 3 aggregations, 248 fixings, 0 bound changes
(round 7, medium) 715 del vars, 40 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 58 clqs
(round 8, fast) 715 del vars, 41 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 58 clqs
(round 9, exhaustive) 784 del vars, 44 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 52 clqs
(round 10, fast) 814 del vars, 52 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 46 clqs
(round 11, fast) 861 del vars, 55 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 44 clqs
(round 12, fast) 865 del vars, 56 del conss, 1 add conss, 0 chg bounds, 30 chg sides, 30 chg coeffs, 0 upgd conss, 0 impls, 43 clqs
(34.8s) running MILP presolver
(39.8s) MILP presolver (28 rounds): 11 aggregations, 227 fixings, 0 bound changes
presolving (13 rounds: 13 fast, 5 medium, 3 exhaustive):
1103 deleted vars, 100 deleted constraints, 1 added constraints, 0 tightened bounds, 0 added holes, 30 changed sides, 30 changed coefficients
0 implications, 0 cliques
transformed 1/1 original solutions to the transformed problem space
Presolving Time: 39.40
SCIP Status : problem is solved [optimal solution found]
Solving Time (sec) : 39.81
Solving Nodes : 0
Primal Bound : +8.58850000000000e+04 (1 solutions)
Dual Bound : +8.58850000000000e+04
Gap : 0.00 %
primal solution (original space):
=================================
objective value: 85885
x13 1 (obj:0)
x14 1 (obj:0)
x15 1 (obj:0)
x17 1 (obj:0)
x18 1 (obj:0)
x23 1 (obj:0)
x24 1 (obj:0)
x25 1 (obj:-580)
x26 1 (obj:0)
x27 1 (obj:0)
x28 1 (obj:0)
x29 1 (obj:0)
x30 1 (obj:0)
x31 1 (obj:0)
x34 1 (obj:0)
x35 1 (obj:0)
x36 1 (obj:0)
x37 1 (obj:0)
x38 1 (obj:0)
x40 1 (obj:0)
x41 1 (obj:0)
x46 1 (obj:0)
x47 1 (obj:0)
x48 1 (obj:0)
x49 1 (obj:0)
x50 1 (obj:-140)
x113 1 (obj:1568)
x147 1 (obj:1399)
x198 1 (obj:1532)
x229 1 (obj:1495)
x246 1 (obj:1685)
x274 1 (obj:1817)
x287 1 (obj:1733)
x340 1 (obj:1675)
x403 1 (obj:1765)
x508 1 (obj:3852)
x540 1 (obj:3954)
x567 1 (obj:3655)
x573 1 (obj:3902)
x593 1 (obj:3926)
x736 1 (obj:3576)
x752 1 (obj:3841)
x787 1 (obj:3853)
x868 1 (obj:4064)
x899 1 (obj:4063)
x1002 1 (obj:3544)
x1012 1 (obj:5985)
x1051 1 (obj:5997)
x1056 1 (obj:6198)
x1073 1 (obj:6024)
x1084 1 (obj:5502)
Statistics
==========
SCIP Status : problem is solved [optimal solution found]
Total Time : 40.15
solving : 39.86
presolving : 39.40 (included in solving)
reading : 0.29
copying : 0.00 (0 times copied the problem)
Original Problem :
Problem name : mip
Variables : 1091 (1091 binary, 0 integer, 0 implicit integer, 0 continuous)
Constraints : 99 initial, 99 maximal
Objective : maximize, 1067 non-zeros (abs.min = 100, abs.max = 8232)
Presolved Problem :
Problem name : t_mip
Variables : 0 (0 binary, 0 integer, 0 implicit integer, 0 continuous)
Constraints : 0 initial, 0 maximal
Objective : minimize, 0 non-zeros (abs.min = 1e+20, abs.max = -1e+20)
Nonzeros : 0 constraint, 0 clique table
Presolvers : ExecTime SetupTime Calls FixedVars AggrVars ChgTypes ChgBounds AddHoles DelCons AddCons ChgSides ChgCoefs
boundshift : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
convertinttobin : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
domcol : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
dualagg : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualcomp : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualinfer : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualsparsify : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
gateextraction : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
implics : 0.00 0.00 5 0 0 0 0 0 0 0 0 0
inttobinary : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
milp : 38.87 0.00 3 497 14 0 0 0 44 0 0 0
qpkktref : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
redvub : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
sparsify : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
stuffing : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
trivial : 0.00 0.00 13 12 0 0 0 0 0 0 0 0
tworowbnd : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
dualfix : 0.00 0.00 13 6 0 0 0 0 0 0 0 0
genvbounds : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
probing : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
pseudoobj : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
symmetry : 0.00 0.00 1 0 0 0 0 0 0 0 0 0
vbounds : 0.04 0.00 1 0 0 0 0 0 0 0 0 0
setppc : 0.36 0.00 19 524 38 0 0 0 55 1 30 30
linear : 0.00 0.00 1 0 0 0 0 0 1 0 0 0
benders : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
components : 0.00 0.00 0 0 0 0 0 0 0 0 0 0
root node : - - - 0 - - 0 - - - - -
Constraints : Number MaxNumber #Separate #Propagate #EnfoLP #EnfoRelax #EnfoPS #Check #ResProp Cutoffs DomReds Cuts Applied Conss Children
benderslp : 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0
integral : 0 0 0 0 0 0 0 6 0 0 0 0 0 0 0
benders : 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
fixedvar : 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
countsols : 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0
components : 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Constraint Timings : TotalTime SetupTime Separate Propagate EnfoLP EnfoPS EnfoRelax Check ResProp SB-Prop
benderslp : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
integral : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
benders : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
fixedvar : 0.03 0.00 0.00 0.00 0.00 0.00 0.00 0.03 0.00 0.00
countsols : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
components : 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Propagators : #Propagate #ResProp Cutoffs DomReds
dualfix : 0 0 0 0
genvbounds : 0 0 0 0
nlobbt : 0 0 0 0
obbt : 0 0 0 0
probing : 0 0 0 0
pseudoobj : 0 0 0 0
redcost : 0 0 0 0
rootredcost : 0 0 0 0
symmetry : 0 0 0 0
vbounds : 0 0 0 0
Propagator Timings : TotalTime SetupTime Presolve Propagate ResProp SB-Prop
dualfix : 0.00 0.00 0.00 0.00 0.00 0.00
genvbounds : 0.00 0.00 0.00 0.00 0.00 0.00
nlobbt : 0.00 0.00 0.00 0.00 0.00 0.00
obbt : 0.00 0.00 0.00 0.00 0.00 0.00
probing : 0.00 0.00 0.00 0.00 0.00 0.00
pseudoobj : 0.00 0.00 0.00 0.00 0.00 0.00
redcost : 0.00 0.00 0.00 0.00 0.00 0.00
rootredcost : 0.00 0.00 0.00 0.00 0.00 0.00
symmetry : 0.00 0.00 0.00 0.00 0.00 0.00
vbounds : 0.04 0.00 0.04 0.00 0.00 0.00
Symmetry :
orbitopal red. : 0 reductions applied, 0 cutoffs
orbital reduction: 0 reductions applied, 0 cutoffs
lexicographic red: 0 reductions applied, 0 cutoffs
shadow tree time : 0.00 s
Conflict Analysis : Time Calls Success DomReds Conflicts Literals Reconvs ReconvLits Dualrays Nonzeros LP Iters (pool size: [--,--])
propagation : 0.00 0 0 - 0 0.0 0 0.0 - - -
infeasible LP : 0.00 0 0 - 0 0.0 0 0.0 0 0.0 0
bound exceed. LP : 0.00 0 0 - 0 0.0 0 0.0 0 0.0 0
strong branching : 0.00 0 0 - 0 0.0 0 0.0 - - 0
pseudo solution : 0.00 0 0 - 0 0.0 0 0.0 - - -
applied globally : 0.00 - - 0 0 0.0 - - 0 - -
applied locally : - - - 0 0 0.0 - - 0 - -
Separators : ExecTime SetupTime Calls RootCalls Cutoffs DomReds FoundCuts ViaPoolAdd DirectAdd Applied ViaPoolApp DirectApp Conss
cut pool : 0.00 - 0 0 - - 0 0 - - - - - (maximal pool size: 0)
aggregation : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
> cmir : - - - - - - - 0 0 0 0 0 -
> flowcover : - - - - - - - 0 0 0 0 0 -
> knapsackcover : - - - - - - - 0 0 0 0 0 -
cgmip : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
clique : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
closecuts : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
convexproj : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
disjunctive : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
eccuts : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
gauge : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
gomory : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
> gomorymi : - - - - - - - 0 0 0 0 0 -
> strongcg : - - - - - - - 0 0 0 0 0 -
impliedbounds : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
interminor : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
intobj : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
lagromory : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
mcf : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
minor : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
mixing : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
oddcycle : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
rapidlearning : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
rlt : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
zerohalf : 0.00 0.00 0 0 0 0 0 0 0 0 0 0 0
Cutselectors : ExecTime SetupTime Calls RootCalls Selected Forced Filtered RootSelec RootForc RootFilt
hybrid : 0.00 0.00 0 0 0 0 0 0 0 0
ensemble : 0.00 0.00 0 0 0 0 0 0 0 0
dynamic : 0.00 0.00 0 0 0 0 0 0 0 0
Pricers : ExecTime SetupTime Calls Vars
problem variables: 0.00 - 0 0
Branching Rules : ExecTime SetupTime BranchLP BranchExt BranchPS Cutoffs DomReds Cuts Conss Children
allfullstrong : 0.00 0.00 0 0 0 0 0 0 0 0
cloud : 0.00 0.00 0 0 0 0 0 0 0 0
distribution : 0.00 0.00 0 0 0 0 0 0 0 0
fullstrong : 0.00 0.00 0 0 0 0 0 0 0 0
gomory : 0.00 0.00 0 0 0 0 0 0 0 0
inference : 0.00 0.00 0 0 0 0 0 0 0 0
leastinf : 0.00 0.00 0 0 0 0 0 0 0 0
lookahead : 0.00 0.00 0 0 0 0 0 0 0 0
mostinf : 0.00 0.00 0 0 0 0 0 0 0 0
multaggr : 0.00 0.00 0 0 0 0 0 0 0 0
nodereopt : 0.00 0.00 0 0 0 0 0 0 0 0
pscost : 0.00 0.00 0 0 0 0 0 0 0 0
random : 0.00 0.00 0 0 0 0 0 0 0 0
relpscost : 0.00 0.00 0 0 0 0 0 0 0 0
vanillafullstrong: 0.00 0.00 0 0 0 0 0 0 0 0
Primal Heuristics : ExecTime SetupTime Calls Found Best
LP solutions : 0.00 - - 0 0
relax solutions : 0.00 - - 0 0
pseudo solutions : 0.00 - - 0 0
strong branching : 0.00 - - 0 0
actconsdiving : 0.00 0.00 0 0 0
adaptivediving : 0.00 0.00 0 0 0
alns : 0.00 0.00 0 0 0
bound : 0.00 0.00 0 0 0
clique : 0.00 0.00 0 0 0
coefdiving : 0.00 0.00 0 0 0
completesol : 0.00 0.00 0 0 0
conflictdiving : 0.00 0.00 0 0 0
crossover : 0.00 0.00 0 0 0
dins : 0.00 0.00 0 0 0
distributiondivin: 0.00 0.00 0 0 0
dps : 0.00 0.00 0 0 0
dualval : 0.00 0.00 0 0 0
farkasdiving : 0.00 0.00 0 0 0
feaspump : 0.00 0.00 0 0 0
fixandinfer : 0.00 0.00 0 0 0
fracdiving : 0.00 0.00 0 0 0
gins : 0.00 0.00 0 0 0
guideddiving : 0.00 0.00 0 0 0
indicator : 0.00 0.00 0 0 0
indicatordiving : 0.00 0.00 0 0 0
intdiving : 0.00 0.00 0 0 0
intshifting : 0.00 0.00 0 0 0
linesearchdiving : 0.00 0.00 0 0 0
localbranching : 0.00 0.00 0 0 0
locks : 0.00 0.00 0 0 0
lpface : 0.00 0.00 0 0 0
mpec : 0.00 0.00 0 0 0
multistart : 0.00 0.00 0 0 0
mutation : 0.00 0.00 0 0 0
nlpdiving : 0.00 0.00 0 0 0
objpscostdiving : 0.00 0.00 0 0 0
octane : 0.00 0.00 0 0 0
ofins : 0.00 0.00 0 0 0
oneopt : 0.00 0.00 0 0 0
padm : 0.00 0.00 0 0 0
proximity : 0.00 0.00 0 0 0
pscostdiving : 0.00 0.00 0 0 0
randrounding : 0.00 0.00 0 0 0
rens : 0.00 0.00 0 0 0
reoptsols : 0.00 0.00 0 0 0
repair : 0.00 0.00 0 0 0
rins : 0.00 0.00 0 0 0
rootsoldiving : 0.00 0.00 0 0 0
rounding : 0.00 0.00 0 0 0
scheduler : 0.00 0.00 0 0 0
shiftandpropagate: 0.00 0.00 0 0 0
shifting : 0.00 0.00 0 0 0
simplerounding : 0.00 0.00 0 0 0
subnlp : 0.00 0.00 0 0 0
trivial : 0.04 0.00 1 0 0
trivialnegation : 0.00 0.00 0 0 0
trustregion : 0.00 0.00 0 0 0
trysol : 0.00 0.00 0 0 0
twoopt : 0.00 0.00 0 0 0
undercover : 0.00 0.00 0 0 0
vbounds : 0.00 0.00 0 0 0
veclendiving : 0.00 0.00 0 0 0
zeroobj : 0.00 0.00 0 0 0
zirounding : 0.00 0.00 0 0 0
other solutions : - - - 0 -
LNS (Scheduler) : Calls SetupTime SolveTime SolveNodes Sols Best Exp3 Exp3-IX EpsGreedy UCB TgtFixRate Opt Inf Node Stal Sol Usr Othr Actv
rens : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
rins : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
mutation : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
localbranching : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
crossover : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
proximity : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
zeroobjective : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
dins : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
trustregion : 0 0.00 0.00 0 0 0 0.00000 0.00000 -1.00000 1.00000 0.900 0 0 0 0 0 0 0 0
LP : Time Calls Iterations Iter/call Iter/sec Time-0-It Calls-0-It ItLimit
primal LP : 0.00 0 0 0.00 - 0.00 0
dual LP : 0.00 0 0 0.00 - 0.00 0
lex dual LP : 0.00 0 0 0.00 -
barrier LP : 0.00 0 0 0.00 - 0.00 0
resolve instable : 0.00 0 0 0.00 -
diving/probing LP: 0.00 0 0 0.00 -
strong branching : 0.00 0 0 0.00 - - - 0
(at root node) : - 0 0 0.00 -
conflict analysis: 0.00 0 0 0.00 -
B&B Tree :
number of runs : 1
nodes : 0 (0 internal, 0 leaves)
feasible leaves : 0
infeas. leaves : 0
objective leaves : 0
nodes (total) : 0 (0 internal, 0 leaves)
nodes left : 0
max depth : -1
max depth (total): -1
backtracks : 0 (0.0%)
early backtracks : 0 (0.0%)
nodes exc. ref. : 0 (0.0%)
delayed cutoffs : 0
repropagations : 0 (0 domain reductions, 0 cutoffs)
avg switch length: 0.00
switching time : 0.00
Root Node :
First LP value : -
First LP Iters : 0
First LP Time : 0.00
Final Dual Bound : -
Final Root Iters : 0
Root LP Estimate : -
Solution :
Solutions found : 1 (1 improvements)
First Solution : +8.58850000000000e+04 (in run 1, after 0 nodes, 39.76 seconds, depth 0, found by <relaxation>)
Gap First Sol. : infinite
Gap Last Sol. : infinite
Primal Bound : +8.58850000000000e+04 (in run 1, after 0 nodes, 39.76 seconds, depth 0, found by <relaxation>)
Dual Bound : +8.58850000000000e+04
Gap : 0.00 %
Integrals : Total Avg%
primal-dual : 3986.48 100.00
primal-ref : - - (not evaluated)
dual-ref : - - (not evaluated)
Can you try the following patch:
diff --git a/src/scip/cons_setppc.c b/src/scip/cons_setppc.c
index 96a087bc20..629ef50fb4 100644
--- a/src/scip/cons_setppc.c
+++ b/src/scip/cons_setppc.c
@@ -6052,7 +6052,7 @@ SCIP_RETCODE removeDoubleAndSingletonsAndPerformDualpresolve(
if( !SCIPhashmapExists(vartoindex, (void*) negvar) )
{
++nhashmapentries;
- SCIP_CALL( SCIPhashmapInsertInt(vartoindex, (void*) var, nhashmapentries) );
+ SCIP_CALL( SCIPhashmapInsertInt(vartoindex, (void*) negvar, nhashmapentries) );
considxs[nhashmapentries - 1] = c;
posincons[nhashmapentries - 1] = v;
?
I originally encountered the crash with the homebrew package which contains scip 9.1.1.
As stated above, compiling scipoptsuite-9.1.1
avoids the error, because the broken branch is never reached.
The reason they behave differently is probably due to different dependency versions.
However, I managed to reproduce the problem by compiling scipoptsuite-9.0.0
in a fresh ubuntu container.
The patch does indeed fix the crash but compiling in debug mode still triggers this assert.
scip: /soap/scipoptsuite-9.0.0/scip/src/scip/cons_setppc.c:6047: removeDoubleAndSingletonsAndPerformDualpresolve: Assertion `!SCIPhashmapExists(vartoindex, (void*) var)' failed.
I read deeper into the code, please remove the patch from above again, it is incorrect.
Instead can you add some more output in optimized mode, where the original error appeared?
#define SCIP_DEBUG
to the very top of the file cons_setppc.c.@@ -6051,6 +6053,17 @@ SCIP_RETCODE removeDoubleAndSingletonsAndPerformDualpresolve(
/* if we found a new variable add it to the data */
if( !SCIPhashmapExists(vartoindex, (void*) negvar) )
{
+ if( SCIPhashmapExists(vartoindex, (void*) var) )
+ {
+ image = SCIPhashmapGetImageInt(vartoindex, (void*) var);
+ consindex = considxs[image - 1];
+ SCIPdebugMsg(scip, "Variable <%s> found in hashmap for constraint <%s> (deleted=%u, consindex=%d, c=%d)\n",
+ SCIPvarGetName(var), SCIPconsGetName(usefulconss[consindex]), SCIPconsIsDeleted(usefulconss[consindex]),
+ consindex, c);
+ }
+
++nhashmapentries;
SCIP_CALL( SCIPhashmapInsertInt(vartoindex, (void*) var, nhashmapentries) );
and then post the log. (May be a bit longer now.)
Thanks, that confirms my suspicion. Can you try with this patch:
diff --git a/src/scip/cons_setppc.c b/src/scip/cons_setppc.c
index c170719a5d..9f9437aaa9 100644
--- a/src/scip/cons_setppc.c
+++ b/src/scip/cons_setppc.c
@@ -6044,6 +6044,22 @@ SCIP_RETCODE removeDoubleAndSingletonsAndPerformDualpresolve(
int consindex;
int varindex;
+ /* this can only happen if the variable was added for a constraint that was subsequently deleted; we
+ * clean this up here before we continue */
+ if( SCIPhashmapExists(vartoindex, (void*) var) )
+ {
+ image = SCIPhashmapGetImageInt(vartoindex, (void*) var);
+ assert(image > 0 && image <= nhashmapentries);
+
+ consindex = considxs[image - 1];
+ assert(0 <= consindex && consindex < c);
+ assert(SCIPconsIsDeleted(usefulconss[consindex]));
+
+ considxs[image - 1] = -1;
+ posincons[image - 1] = -1;
+ SCIP_CALL( SCIPhashmapRemove(vartoindex, (void*) var) );
+ }
+
assert(!SCIPhashmapExists(vartoindex, (void*) var));
negvar = SCIPvarGetNegatedVar(var);
?
This seems to fix it. log.txt
Nice, I will let you know once this is available.
An alternative fix is available with f56365291834c487edba45abce4b0038d5ebe137.
Scip throws an error on this input. problem.cip (.txt because github forced me)
The model was built programmatically. When I save it as
lp
ormps
, scip solves it just fine, so I guess the issue depends on the order of variables and constraints. I also tried building scip from source with sanitizers and in debug mode but the error does not occur there.Here is the log when I run
scip -f problem.cip
.