Open gasse opened 3 years ago
I cannot not reproduce on MacOS, but I can reproduce on Linux (rossoblu).
Running with SCIP in Debug, I could get a failing assertion:
scipoptsuite-7.0.1/scip/src/scip/var.c:937 boundchgReleaseData: Assertion `boundchg != ((void *)0)' failed.
Program received signal SIGABRT, Aborted.
#0 0x00007f3d3490d387 in raise () from /lib64/libc.so.6
#1 0x00007f3d3490ea78 in abort () from /lib64/libc.so.6
#2 0x00007f3d349061a6 in __assert_fail_base () from /lib64/libc.so.6
#3 0x00007f3d34906252 in __assert_fail () from /lib64/libc.so.6
#4 0x00007f3d2da0862d in boundchgReleaseData (lp=0x7f3d37a71db0, eventqueue=0x7f3d37a55610, set=0x0, blkmem=0x7f3d37674ad0, boundchg=0x0) at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/var.c:1013
#5 SCIPdomchgFree (lp=<optimized out>, eventqueue=<optimized out>, set=<optimized out>, blkmem=<optimized out>, domchg=<optimized out>) at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/var.c:1004
#6 SCIPdomchgFree (domchg=0x7f3d37b93f98, blkmem=blkmem@entry=0x7f3d37674ad0, set=set@entry=0x7f3d3780c8f0, eventqueue=eventqueue@entry=0x7f3d37a55610, lp=lp@entry=0x7f3d37a71db0)
at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/var.c:986
#7 0x00007f3d2d9f2401 in SCIPnodeFree (node=node@entry=0x7ffe44b2c0d0, blkmem=blkmem@entry=0x7f3d37674ad0, set=set@entry=0x7f3d3780c8f0, stat=stat@entry=0x7f3d37a3d250, eventfilter=eventfilter@entry=0x7f3d378e1d20,
eventqueue=eventqueue@entry=0x7f3d37a55610, tree=0x7f3d37a88a80, lp=0x7f3d37a71db0) at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/tree.c:1156
#8 0x00007f3d2da014e5 in SCIPnodeFocus (node=node@entry=0x7ffe44b2c340, blkmem=blkmem@entry=0x7f3d37674ad0, set=set@entry=0x7f3d3780c8f0, messagehdlr=messagehdlr@entry=0x7f3d377f5780, stat=stat@entry=0x7f3d37a3d250,
transprob=transprob@entry=0x7f3d37a88fb0, origprob=<optimized out>, primal=<optimized out>, tree=<optimized out>, reopt=<optimized out>, lp=<optimized out>, branchcand=<optimized out>, conflict=<optimized out>,
conflictstore=<optimized out>, eventfilter=<optimized out>, eventqueue=<optimized out>, cliquetable=<optimized out>, cutoff=<optimized out>, postponed=<optimized out>, exitsolve=<optimized out>)
at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/tree.c:4719
#9 0x00007f3d2d9e128b in SCIPsolveCIP (blkmem=0x7f3d37674ad0, set=0x7f3d3780c8f0, messagehdlr=<optimized out>, stat=0x7f3d37a3d250, mem=<optimized out>, origprob=0x7f3d37a3dc80, transprob=0x7f3d37a88fb0,
primal=0x7f3d37a78500, tree=0x7f3d37a88a80, reopt=0x0, lp=0x7f3d37a71db0, relaxation=0x7f3d37a88c40, pricestore=0x7f3d37ac76b0, sepastore=0x7f3d37aa58f0, cutpool=0x7f3d37a5cca0, delayedcutpool=0x7f3d37ac5530,
branchcand=0x7f3d37a5ce50, conflict=0x7f3d37a88320, conflictstore=0x7f3d37a47100, eventfilter=0x7f3d378e1d20, eventqueue=0x7f3d37a55610, cliquetable=0x7f3d37a78580, restart=0x7ffe44b2c480)
at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/solve.c:4949
#10 0x00007f3d2d986a32 in SCIPsolve (scip=scip@entry=0x7f3d3780f110) at /local_workspace/proant/workspace/scipoptsuite-7.0.1/scip/src/scip/scip_solve.c:2650
The configuring environment is dead simple, there is no observation function so I'm wondering if it could be:
@gasse did you notice the bug on any other instance generator ?
My guess at this point is a SCIP bug. But you are right, it could come from our generator, or pyscipopt as well, since now the instance generator directly sets up a SCIP model instead of a plain LP file. Could be that we or PySCIPOpt do something stupid with variable bounds.
I have not experienced that with another generator, but I have not played a lot with them, besides the combinatorial auction one.
In order to clear PySCIPOpt / our generator, we could write the instance to an LP file, and then reset the environment by using that file instead of a pre-filled SCIP model. Does env.reset()
still accept a file path ? If the segfault disappears, then probably the issue is due to PySCIPOpt / our generator. Otherwise if the segfault is still present, I would blame SCIP.
Ok, it looks like it really is SCIP. I can reproduce by using a regular LP file (obtained from our generator, but still I believe SCIP should be able to handle any valid LP instance).
(ecole) [maxime@maxime-laptop ecole]$ python test3.py
env seed: 79
action: {'branching/scorefac': 0.02761677187370471}
Segmentation fault (core dumped)
Next step is to reproduce with just SCIP, without Ecole, and we can send a bug report to our friends at ZIB :P
Ok so the bad news is I didn't manage to reproduce with only SCIP :( Could it be that the scip
executable is compiled differently from the libscip.so
library ? Otherwise it must come from us, or at least from the interaction with Ecole.
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
(ecole) [maxime@maxime-laptop ecole]$ python test4.py
Segmentation fault (core dumped)
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
(ecole) [maxime@maxime-laptop ecole]$ scip -s test4.set -f test4.lp -q
I've managed to reproduce it with pyscipopt
only, taking Ecole out of the equation
import pyscipopt
model = pyscipopt.Model()
model.readProblem("test4.lp")
model.setParams({
"branching/scorefunc" : "s",
"branching/scorefac" : 0.027616771873704711037778025684019667096436023712158203125,
"randomization/randomseedshift" : 2010334282,
"randomization/permutationseed" : 1715508413,
"randomization/permuteconss" : True,
"randomization/permutevars" : True,
"randomization/lpseed" : 1982403395,
"presolving/maxrounds" : 0,
"branching/vanillafullstrong/priority" : 666666,
})
model.optimize()
Have you submitted a bug report yet ? If not maybe let's try to reproduce with SCIP 7.0.2, and submit then. I had a look at the release note, it looks like they fixed a bunch of stuff, so maybe it has been fixed already. https://www.scipopt.org/doc/html/RN70.php
I have not reported. I'll wait for the conda-forge PR for SCIP to be merged before building 7.0.2.
Describe the bug
A segfault happens randomly when using the Configuring environment as in the tutorial.
Setting
To Reproduce
run
python test2.py
and cross your fingersExpected behavior
Either the program terminates successfully, or a segfault happens.
Additional context
gdb bt
Python code and coredump test2.zip