scip
scip copied to clipboard
[Bug] SCIPnodeFree() triggers a segmentation fault for certain problems.
scip version
SCIP version 9.1.0 [precision: 8 byte] [memory: block] [mode: optimized] [LP solver: Soplex 7.0.1] [GitHash: 8cab0278ba]
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.0.1 Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: 1cc71921]
CppAD 20180000.0 Algorithmic Differentiation of C++ algorithms developed by B. Bell (github.com/coin-or/CppAD)
ZLIB 1.2.12 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)
AMPL/MP 690e9e7 AMPL .nl file reader library (github.com/ampl/mp)
PaPILO 2.3.0 parallel presolve for integer and linear optimization (github.com/scipopt/papilo) (built with TBB)
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)
Ipopt 3.14.16 Interior Point Optimizer developed by A. Waechter et.al. (github.com/coin-or/Ipopt)
solving this problem triggers a segmentation fault v1.zip
run in the unzipped folder
scip -b run.sh
output
time | node | left |LP iter|LP it/n|mem/heur|mdpt |vars |cons |rows |cuts |sepa|confs|strbr| dualbound | primalbound | gap | compl.
16.2s| 63300 | 63287 | 77429 | 1.2 | 61M | 61k| 107 | 257 | 61 | 53 | 1 | 443 | 110 | 7.170997e+03 | -- | Inf | unknown
16.2s| 63400 | 63387 | 77529 | 1.2 | 61M | 61k| 107 | 257 | 61 | 53 | 1 | 443 | 110 | 7.170997e+03 | -- | Inf | unknown
L16.2s| 63450 | 63437 | 77579 | 1.2 | alns| 61k| 107 | 257 | 61 | 53 | 1 | 443 | 110 | 7.170997e+03 | 7.261000e+03 | 1.26%| unknown
L16.3s| 63450 | 0 | 77579 | 1.2 | alns| 61k| 107 | 257 | 61 | 53 | 1 | 443 | 110 | 7.171000e+03 | 7.171000e+03 | 0.00%| 100.00%
zsh: segmentation fault /usr/local/Cellar/scip/9.1.0/bin/scip
gdb backtrace
#0 0x000000010016de7b in eventExecEstim ()
#1 0x0000000100428fff in SCIPeventhdlrExec ()
#2 0x000000010042b17d in SCIPeventfilterProcess ()
#3 0x000000010042ac30 in SCIPeventProcess ()
#4 0x000000010058108d in SCIPnodeFree ()
#5 0x0000000100581883 in SCIPnodeFree ()
#6 0x0000000100581883 in SCIPnodeFree ()
...
#52396 0x0000000100581883 in SCIPnodeFree ()
#52397 0x000000010058547c in SCIPnodeFocus ()
#52398 0x0000000100567522 in SCIPsolveCIP ()
#52399 0x000000010052edee in SCIPsolve ()
#52400 0x000000010015ccaf in SCIPdialogExecOptimize ()
#52401 0x0000000100426744 in SCIPdialogExec ()
#52402 0x00000001004266c1 in SCIPdialoghdlrExec ()
#52403 0x000000010050ed11 in SCIPstartInteraction ()
#52404 0x000000010054bce3 in SCIPprocessShellArguments ()
#52405 0x000000010054c4df in SCIPrunShell ()
#52406 0x0000000100003bc0 in main ()
It might be something like a stack overflow due to the immensely big call stack. It seems that SCIP tries to free the tree by recursive function calls, which is a bad idea when you have a very deep tree.
This is fixed with ccc765e726af01e774c4cd857e95f68f9c589665.