[SCIP] Problems in heuristics

Edward Lam ed at ed-lam.com
Mon Nov 4 11:00:16 CET 2019


Hi all,

I’m doing branch-and-cut-and-price in SCIP 6.0.2 and I’m having problems with the heuristics. I turned on aggressive heuristics:

SCIP_CALL(SCIPsetHeuristics(scip, SCIP_PARAMSETTING_AGGRESSIVE, TRUE));

I’m getting:

WARNING: pricing has been interrupted -- LP of current node is invalid

at this backtrace:

The warning seems to suggest the proximity heuristic is calling my pricer. I think I don't want that? Nevertheless, the final solution is correct.

I’m also having a problem with the twoopt heuristic, and the final solution is NOT correct. I get this error:
SCIP Status        : problem is solved [optimal solution found]
Solving Time (sec) : 14.09
Solving Nodes      : 162
Primal Bound       : +1.57000000000000e+03 (7 solutions, 3 respecting the objective limit)
Dual Bound         : +1.57000000000000e+03
Gap                : 0.00 %
violation: integrality condition of variable <> = 0.666666666666667
best solution is not feasible in original problem

Using SCIPgetBestSol(scip), I have verified that the solution twoopt finds is fractional. The integer optimal solution should be 1572. This problem occurs in the release build. In the debug build, I’m getting an assertion error:

scipoptsuite-6.0.2/scip/src/scip/lp.c:12181: updateLazyBounds: Assertion `lp->divinglazyapplied || SCIPsetIsLT(set, col->ub, col->lazyub) || (col->flushedub == SCIPlpiInfinity(lp->lpi))' failed.

with this backtrace:

#0  0x00002aaaadfb0fd7 in __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55
#1  0x00002aaaadfb23aa in __GI_abort () at abort.c:78
#2  0x00002aaaadfa9dc6 in __assert_fail_base (fmt=0x2aaaae0e8ee0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", 
    assertion=assertion at entry=0x2aaaad130530 "lp->divinglazyapplied || SCIPsetIsLT(set, col->ub, col->lazyub) || (col->flushedub == SCIPlpiInfinity(lp->lpi))", file=file at entry=0x2aaaad12ad00 "/tmp/scipoptsuite-6.0.2/scip/src/scip/lp.c", line=line at entry=12181, 
    function=function at entry=0x2aaaad133c40 <__PRETTY_FUNCTION__.22154> "updateLazyBounds") at assert.c:92
#3  0x00002aaaadfa9e72 in __GI___assert_fail (
    assertion=0x2aaaad130530 "lp->divinglazyapplied || SCIPsetIsLT(set, col->ub, col->lazyub) || (col->flushedub == SCIPlpiInfinity(lp->lpi))", 
    file=0x2aaaad12ad00 "/tmp/scipoptsuite-6.0.2/scip/src/scip/lp.c", line=12181, 
    function=0x2aaaad133c40 <__PRETTY_FUNCTION__.22154> "updateLazyBounds") at assert.c:101
#4  0x00002aaaab64afe9 in updateLazyBounds (lp=0x96ff10, set=0x743520)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/lp.c:12181
#5  0x00002aaaab64b493 in SCIPlpSolveAndEval (lp=0x96ff10, set=0x743520, messagehdlr=0x73ea20, blkmem=0x7414e0, stat=0x883290, 
    eventqueue=0x87f550, eventfilter=0x812ec0, prob=0x974c80, itlim=-1, limitresolveiters=0, aging=0, keepsol=0, lperror=0x7fffffffbb90)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/lp.c:12274
#6  0x00002aaaab803b05 in SCIPsolveDiveLP (scip=0x73b4e0, itlim=-1, lperror=0x7fffffffbb90, cutoff=0x0)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/scip_lp.c:2519
#7  0x00002aaaab3b8f51 in heurExecTwoopt (scip=0x73b4e0, heur=0x85e5c0, heurtiming=8, nodeinfeasible=0, result=0x7fffffffbd40)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/heur_twoopt.c:1709
#8  0x00002aaaab5fb9b9 in SCIPheurExec (heur=0x85e5c0, set=0x743520, primal=0x9745f0, depth=20, lpstateforkdepth=19, heurtiming=8, 
    nodeinfeasible=0, ndelayedheurs=0x7fffffffbd3c, result=0x7fffffffbd40)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/heur.c:1116
#9  0x00002aaaab8ab63d in SCIPprimalHeuristics (set=0x743520, stat=0x883290, prob=0x974c80, primal=0x9745f0, tree=0x974670, lp=0x96ff10, 
    nextnode=0xe5b1d8, heurtiming=8, nodeinfeasible=0, foundsol=0x7fffffffbe3c, unbounded=0x7fffffffbe44)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/solve.c:353
#10 0x00002aaaab8be320 in SCIPsolveCIP (blkmem=0x7414e0, set=0x743520, messagehdlr=0x73ea20, stat=0x883290, mem=0x73ac90, origprob=0x87f850, 
    transprob=0x974c80, primal=0x9745f0, tree=0x974670, reopt=0x0, lp=0x96ff10, relaxation=0x974820, pricestore=0x880e90, sepastore=0xb1a870, 
    cutpool=0xb1a8f0, delayedcutpool=0xb29150, branchcand=0x7d3210, conflict=0x974840, conflictstore=0x880bb0, eventfilter=0x812ec0, 
    eventqueue=0x87f550, cliquetable=0x974c20, restart=0x7fffffffc0a4)
    at /tmp/scipoptsuite-6.0.2/scip/src/scip/solve.c:5159
#11 0x00002aaaab84aeb7 in SCIPsolve (scip=0x73b4e0) at /tmp/scipoptsuite-6.0.2/scip/src/scip/scip_solve.c:2648

Another question while I’m here. As I understand, the pricing loop is inside the cutting loop. Is there a way to run them both in the same loop level, i.e. price, cut, price, cut? Instead of ((price, price, price), cut), ((price, price, price), cut).

Cheers
Eddie

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20191104/9ab10e8e/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: bt.png
Type: image/png
Size: 26445 bytes
Desc: not available
URL: <http://listserv.zib.de/pipermail/scip/attachments/20191104/9ab10e8e/attachment.png>


More information about the Scip mailing list