[SCIP] [GCG] Uninitialised value pricerdata->nartificialvars

Lukas Eveborn lukas.eveborn at liu.se
Tue Aug 8 14:02:20 CEST 2023


Hello,

I'm working on solving a EVRPTW with GCG, but for some instances I sometimes get a segmentation fault.
Running it with valgrind: valgrind --tool=memcheck --leak-check=full --track-origins=yes bin/gcg -f model.cip leads to the following

A Dantzig-Wolfe reformulation is applied to solve the original problem.
Chosen structure has 2 blocks and 11 linking constraints.
This decomposition has a maxwhite score of 0.486146.
Warning: Discretization with continuous variables is only an experimental feature.
Matrix has 2 blocks, using 1 aggregated pricing problem.

  time | node  | left  |SLP iter|MLP iter|LP it/n| mem |mdpt |ovars|mvars|ocons|mcons|mcuts|  dualbound   | primalbound  |  deg   |  gap
  17.0s|     1 |     0 |      0 |      0 |     - |4600k|   0 | 262 |   0 | 397 |   0 |   0 | 1.804966e+02 |      --      |   --   |    Inf
==55482== Conditional jump or move depends on uninitialised value(s)
==55482==    at 0xB77BD9: GCGmasterIsSolValid (pricer_gcg.cpp:5196)
==55482==    by 0xAEDAF2: GCGtransformMastersolToOrigsol (misc.c:164)
==55482==    by 0x85C625: consCheckIntegralOrig (cons_integralorig.c:296)
==55482==    by 0x505467D: SCIPconshdlrCheck (cons.c:3781)
==55482==    by 0x5360741: checkSolOrig (scip_sol.c:173)
==55482==    by 0x5369AD9: SCIPtrySol (scip_sol.c:3181)
==55482==    by 0x4D8E9A7: heurExecTrivial (heur_trivial.c:184)
==55482==    by 0x50C9D6B: SCIPheurExec (heur.c:1312)
==55482==    by 0x53E7A55: SCIPprimalHeuristics (solve.c:363)
==55482==    by 0x537081C: presolve (scip_solve.c:1318)
==55482==    by 0x5377171: SCIPpresolve (scip_solve.c:2493)
==55482==    by 0x5377FD1: SCIPsolve (scip_solve.c:2731)
==55482==  Uninitialised value was created by a heap allocation
==55482==    at 0x4848899: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==55482==    by 0x491893A: BMSallocMemory_call (memory.c:411)
==55482==    by 0xB6C36E: SCIPincludePricerGcg (pricer_gcg.cpp:4120)
==55482==    by 0xBD3CEF: SCIPincludeRelaxGcg (relax_gcg.c:3234)
==55482==    by 0x963D9B: SCIPincludeGcgPlugins (gcgplugins.c:448)
==55482==    by 0x639A10: SCIPrunGCGShell (main.c:416)
==55482==    by 0x639BB0: main (main.c:445)
==55482==

This is seen even the times when a segmentation fault isn't thrown but then it just continues as normal.

Looking at GCGmasterIsSolValid (pricer_gcg.cpp:5196):
for( i = 0; i < pricerdata->nartificialvars; ++i )
it seems probable that nartificialvars is the uninitialized value.

One workaround to this problem I've used is to initialize nartificialvars in SCIPincludePricerGcg() by adding pricerdata->nartificialvars = 0; to row 4132 in pricer_gcg.cpp

However, this do not feel exactly right, so I wonder if there is something else that can be done to avoid this? I have GCG 3.5.3 and SCIP 8.03  installed on ubuntu WSL. The model that caused the above fault is attached.

Thanks in advance,

Best Regards
Lukas Eveborn
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20230808/9074700a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: model.cip
Type: application/octet-stream
Size: 85043 bytes
Desc: model.cip
URL: <http://listserv.zib.de/pipermail/scip/attachments/20230808/9074700a/attachment.obj>


More information about the Scip mailing list