scip icon indicating copy to clipboard operation
scip copied to clipboard

Exact Fractional Solver SegFaults

Open Andful opened this issue 1 year ago • 10 comments

Version:

SCIP version 10.0.0 [precision: 8 byte] [memory: block] [mode: optimized] [LP solver: Soplex 7.1.0] [GitHash: 820c627c95]
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.0         Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: 595bfac9]
  CppAD 20180000.0     Algorithmic Differentiation of C++ algorithms developed by B. Bell (github.com/coin-or/CppAD)
  SoPlex 7.1.0         exact Linear Programming Solver developed at Zuse Institute Berlin (soplex.zib.de) [GitHash: 595bfac9]
  ZLIB 1.2.11          General purpose compression library by J. Gailly and M. Adler (zlib.net)
  MPFR 4.1.0           GNU Multiple Precision Floating-Point Reliable Library (mpfr.org)
  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.2.1         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)

user parameter file <scip.set> not found - using default parameters


The formulation in question

formulation.lp (Uploaded as TXT because GitHub complains)

The formulation solves fine when not using exact fractional, but seg-faults when using the exact fractional solver.

Andful avatar Sep 16 '24 15:09 Andful

Can you build in debug mode to see if an assert comes up? (And post the log file.)

ambros-gleixner avatar Sep 16 '24 16:09 ambros-gleixner

I assume by log you mean the stdout and stderr

I got the logs with the commands:

bin/scip -c "read formulation.lp" -c "optimize" -c "quit" &> out_standard.log
bin/scip -c "set exact enabled TRUE" -c "read formulation.lp" -c "optimize" -c "quit" &> out_exact.log

out_standard.log out_exact.log

The assertion error is:

scip: /home/andful/projects/scip/src/scip/tree.c:1953: SCIPnodeAddBoundinfer: Assertion `(boundtype == SCIP_BOUNDTYPE_LOWER && SCIPsetIsGT(set, newbound, oldlb)) || (boundtype == SCIP_BOUNDTYPE_LOWER && newbound > oldlb && newbound * oldlb <= 0.0) || (boundtype == SCIP_BOUNDTYPE_UPPER && SCIPsetIsLT(set, newbound, oldub)) || (boundtype == SCIP_BOUNDTYPE_UPPER && newbound < oldub && newbound * oldub <= 0.0)' failed.

Andful avatar Sep 17 '24 08:09 Andful

Great, do you have experience to run this in a debugger and print the backtrace and the values in the assert (boundtype, newbound, oldlb)?

ambros-gleixner avatar Sep 25 '24 06:09 ambros-gleixner

I get the following backtrace:

#0  __pthread_kill_implementation (no_tid=0, signo=6, threadid=<optimized out>)
    at ./nptl/pthread_kill.c:44
#1  __pthread_kill_internal (signo=6, threadid=<optimized out>) at ./nptl/pthread_kill.c:78
#2  __GI___pthread_kill (threadid=<optimized out>, signo=signo@entry=6)
    at ./nptl/pthread_kill.c:89
#3  0x00007ffff764526e in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26
#4  0x00007ffff76288ff in __GI_abort () at ./stdlib/abort.c:79
#5  0x00007ffff762881b in __assert_fail_base (
    fmt=0x7ffff77d01e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=assertion@entry=0x5555567de140 "(boundtype == SCIP_BOUNDTYPE_LOWER && SCIPsetIsGT(set, newbound, oldlb)) || (boundtype == SCIP_BOUNDTYPE_LOWER && newbound > oldlb && newbound * oldlb <= 0.0) || (boundtype == SCIP_BOUNDTYPE_UPPER && "..., 
    file=file@entry=0x5555567dc660 "/home/andful/projects/scip/src/scip/tree.c", 
    line=line@entry=1917, 
    function=function@entry=0x5555567e31f0 <__PRETTY_FUNCTION__.113> "SCIPnodeAddBoundinfer")
    at ./assert/assert.c:94
#6  0x00007ffff763b507 in __assert_fail (
    assertion=0x5555567de140 "(boundtype == SCIP_BOUNDTYPE_LOWER && SCIPsetIsGT(set, newbound, oldlb)) || (boundtype == SCIP_BOUNDTYPE_LOWER && newbound > oldlb && newbound * oldlb <= 0.0) || (boundtype == SCIP_BOUNDTYPE_UPPER && "..., 
    file=0x5555567dc660 "/home/andful/projects/scip/src/scip/tree.c", line=1917, 
    function=0x5555567e31f0 <__PRETTY_FUNCTION__.113> "SCIPnodeAddBoundinfer")
    at ./assert/assert.c:103
#7  0x00005555561cd108 in SCIPnodeAddBoundinfer (node=0x55555a0a8078, blkmem=0x555556f5d7f0, 
    set=0x555556f5f8d0, stat=0x5555571c2c70, transprob=0x55555724ef10, 
    origprob=0x555556f6df30, tree=0x55555724ead0, reopt=0x0, lp=0x5555571cd500, 
    branchcand=0x5555571eb880, eventqueue=0x5555572ab0c0, cliquetable=0x0, 
    var=0x5555572be0d8, newbound=0, boundtype=SCIP_BOUNDTYPE_UPPER, infercons=0x0, 
    inferprop=0x0, inferinfo=0, probingchange=0)
    at /home/andful/projects/scip/src/scip/tree.c:1917
#8  0x00005555561cfc79 in SCIPnodeAddBoundchg (node=0x55555a0a8078, blkmem=0x555556f5d7f0, 
    set=0x555556f5f8d0, stat=0x5555571c2c70, transprob=0x55555724ef10, 
    origprob=0x555556f6df30, tree=0x55555724ead0, reopt=0x0, lp=0x5555571cd500, 
    branchcand=0x5555571eb880, eventqueue=0x5555572ab0c0, cliquetable=0x0, 
    var=0x5555572be0d8, newbound=0, boundtype=SCIP_BOUNDTYPE_UPPER, probingchange=0)
    at /home/andful/projects/scip/src/scip/tree.c:2488
#9  0x00005555561e0159 in SCIPtreeBranchVar (tree=0x55555724ead0, reopt=0x0, 
    blkmem=0x555556f5d7f0, set=0x555556f5f8d0, stat=0x5555571c2c70, 
    transprob=0x55555724ef10, origprob=0x555556f6df30, lp=0x5555571cd500, 
    branchcand=0x5555571eb880, eventqueue=0x5555572ab0c0, var=0x5555572be0d8, val=0, 
    downchild=0x0, eqchild=0x0, upchild=0x0)
    at /home/andful/projects/scip/src/scip/tree.c:6266
#10 0x0000555555d29201 in SCIPbranchExecPseudo (blkmem=0x555556f5d7f0, set=0x555556f5f8d0, 
    stat=0x5555571c2c70, transprob=0x55555724ef10, origprob=0x555556f6df30, 
    tree=0x55555724ead0, reopt=0x0, lp=0x5555571cd500, branchcand=0x5555571eb880, 
--Type <RET> for more, q to quit, c to continue without paging--c
    eventqueue=0x5555572ab0c0, cutoffbound=0, allowaddcons=1, result=0x7fffffffcc60)
    at /home/andful/projects/scip/src/scip/branch.c:2854
#11 0x000055555618e232 in solveNode (blkmem=0x555556f5d7f0, set=0x555556f5f8d0, 
    messagehdlr=0x555556f5aae0, stat=0x5555571c2c70, mem=0x555556f5b780, 
    origprob=0x555556f6df30, transprob=0x55555724ef10, primal=0x5555571ce630, 
    tree=0x55555724ead0, reopt=0x0, lp=0x5555571cd500, relaxation=0x55555723e9a0, 
    pricestore=0x55555726b1e0, sepastore=0x55555725b310, branchcand=0x5555571eb880, 
    cutpool=0x5555572770d0, delayedcutpool=0x555557277160, conflict=0x555556f6e7f0, 
    conflictstore=0x5555571cd2b0, eventfilter=0x555556fca780, eventqueue=0x5555572ab0c0, 
    cliquetable=0x55555724eeb0, cutoff=0x7fffffffcef4, postpone=0x7fffffffcef8, 
    unbounded=0x7fffffffcefc, infeasible=0x7fffffffcf00, restart=0x7fffffffd144, 
    afternodeheur=0x7fffffffcf08, stopped=0x7fffffffcf0c)
    at /home/andful/projects/scip/src/scip/solve.c:4748
#12 0x0000555556191122 in SCIPsolveCIP (blkmem=0x555556f5d7f0, set=0x555556f5f8d0, 
    messagehdlr=0x555556f5aae0, stat=0x5555571c2c70, mem=0x555556f5b780, 
    origprob=0x555556f6df30, transprob=0x55555724ef10, primal=0x5555571ce630, 
    tree=0x55555724ead0, reopt=0x0, lp=0x5555571cd500, relaxation=0x55555723e9a0, 
    pricestore=0x55555726b1e0, sepastore=0x55555725b310, cutpool=0x5555572770d0, 
    delayedcutpool=0x555557277160, branchcand=0x5555571eb880, conflict=0x555556f6e7f0, 
    conflictstore=0x5555571cd2b0, eventfilter=0x555556fca780, eventqueue=0x5555572ab0c0, 
    cliquetable=0x55555724eeb0, restart=0x7fffffffd144)
    at /home/andful/projects/scip/src/scip/solve.c:5316
#13 0x00005555560f5859 in SCIPsolve (scip=0x555556f5a9d0)
    at /home/andful/projects/scip/src/scip/scip_solve.c:2714
#14 0x00005555558bca7a in SCIPdialogExecOptimize (scip=0x555556f5a9d0, 
    dialog=0x555556f81ee0, dialoghdlr=0x555556f7ef90, nextdialog=0x7fffffffd300)
    at /home/andful/projects/scip/src/scip/dialog_default.c:2194
#15 0x0000555555dd1da7 in SCIPdialogExec (dialog=0x555556f81ee0, set=0x555556f5f8d0, 
    dialoghdlr=0x555556f7ef90, nextdialog=0x7fffffffd300)
    at /home/andful/projects/scip/src/scip/dialog.c:951
#16 0x0000555555dcff35 in SCIPdialoghdlrExec (dialoghdlr=0x555556f7ef90, set=0x555556f5f8d0)
    at /home/andful/projects/scip/src/scip/dialog.c:402
#17 0x0000555556099d55 in SCIPstartInteraction (scip=0x555556f5a9d0)
    at /home/andful/projects/scip/src/scip/scip_dialog.c:252
#18 0x0000555556141f6a in SCIPprocessShellArguments (scip=0x555556f5a9d0, argc=9, 
    argv=0x7fffffffd9d8, defaultsetname=0x55555664e004 "scip.set")
    at /home/andful/projects/scip/src/scip/scipshell.c:577
#19 0x0000555556142101 in SCIPrunShell (argc=9, argv=0x7fffffffd9d8, 
    defaultsetname=0x55555664e004 "scip.set")
    at /home/andful/projects/scip/src/scip/scipshell.c:633
#20 0x00005555555793cf in main (argc=9, argv=0x7fffffffd9d8)
    at /home/andful/projects/scip/src/main.c:71

and when using select-frame 7 and then info locals I get:

infervar = 0x5555ffffffff
inferboundtype = (SCIP_BOUNDTYPE_UPPER | unknown: 0x5554)
oldlb = -1e+20
oldub = 0
oldbound = 4.6355720136372173e-310
useglobal = 0
__PRETTY_FUNCTION__ = "SCIPnodeAddBoundinfer"
_restat_ = <optimized out>
_restat_ = <optimized out>
_restat_ = <optimized out>
_restat_ = <optimized out>
_restat_ = <optimized out>
_restat_ = <optimized out>
_restat_ = <optimized out>

I assume the values are:

  • boundtype = SCIP_BOUNDTYPE_UPPER
  • newbound = 0
  • oldlb = -1e+20

Andful avatar Sep 25 '24 09:09 Andful

I guess it is failing because oldub is 0 and newbound is 0

And it is asserted that newbound < oldub

Andful avatar Sep 25 '24 09:09 Andful

Suspicious that the backtrace does not show any exact function, especially I wonder why SCIPbranchExecPseudo() does not call SCIPtreeBranchVarExact().

DominikKamp avatar Apr 24 '25 09:04 DominikKamp

Unfortunately, I think the commit (820c627c95) of the version of SCIP that I used back then has been squashed. I updated the version of SCIP to the master ever since and could not reproduce the error. Though, the formulation seems to be particularly problematic. The not exact version solves the formulation in few milliseconds, the exact version does not seem to want to finish. Not sure if this is normal and warrants an issue.

Andful avatar Apr 24 '25 15:04 Andful

Nvm, the commit is there...

Andful avatar Apr 24 '25 15:04 Andful

The assertion fail is still reproducible on latest master and might contribute to weak performance.

DominikKamp avatar Apr 24 '25 15:04 DominikKamp

Oh, yeah, I tested in release... Ops

Andful avatar Apr 24 '25 16:04 Andful

This also causes a SegFault. I could not check if it is the same cause, but it occurs in the same conditions.

formulation3.lp

Andful avatar Sep 10 '25 14:09 Andful

Yes, the segmentation fault is probably implied by the branching performance issue and caused by #99 because the tree grows deep before the optimal solution is found, so these are unrelated issues currently ending up in a catastrophe.

DominikKamp avatar Sep 10 '25 14:09 DominikKamp