63 #define MAXNLPERRORS 10 64 #define MAXNCLOCKSKIPS 64 65 #define NINITCALLS 1000L 66 #define SAFETYFACTOR 1e-2 90 if( set->limitchanged )
93 set->limitchanged =
FALSE;
102 if( set->misc_catchctrlc )
108 else if( set->istimelimitfinite )
124 if( (
SAFETYFACTOR * (set->limit_time - currtime) / (avgisstoppedfreq + 1e-6)) < nclockskips )
133 if( currtime >= set->limit_time )
160 else if( checknodelimits && set->limit_nodes >= 0 && stat->
nnodes >= set->limit_nodes )
162 else if( checknodelimits && set->limit_totalnodes >= 0 && stat->
ntotalnodes >= set->limit_totalnodes )
164 else if( checknodelimits && set->limit_stallnodes >= 0 && stat->
nnodes >= stat->
bestsolnode + set->limit_stallnodes )
170 if( !checknodelimits )
198 int lpstateforkdepth;
206 assert(primal !=
NULL);
216 assert(foundsol !=
NULL);
238 heurtiming &= ~SCIP_HEURTIMING_AFTERNODE;
241 assert(nextnode ==
NULL 267 lpstateforkdepth = -1;
274 assert(tree !=
NULL);
278 SCIPsetDebugMsg(
set,
"calling primal heuristics in depth %d (timing: %u)\n", depth, heurtiming);
300 else if( lp !=
NULL )
305 for( h = 0; h <
set->nheurs; ++h )
321 SCIPsetDebugMsg(
set,
" -> executing heuristic <%s> with priority %d\n",
327 SCIP_CALL(
SCIPheurExec(set->heurs[h],
set, primal, depth, lpstateforkdepth, heurtiming, nodeinfeasible,
328 &ndelayedheurs, &result) );
355 assert(0 <= ndelayedheurs && ndelayedheurs <= set->nheurs);
385 assert(delayed !=
NULL);
386 assert(propagain !=
NULL);
387 assert(cutoff !=
NULL);
388 assert(postpone !=
NULL);
402 for( i = 0; i <
set->nprops && !(*postpone) && (!(*cutoff) || !abortoncutoff); ++i )
453 for( i = 0; i <
set->nconshdlrs && !(*postpone) && (!(*cutoff) || !abortoncutoff); ++i )
478 SCIPsetDebugMsg(
set,
" -> constraint handler <%s> detected cutoff in propagation\n",
491 for( i = 0; i <
set->nprops && !(*postpone) && (!(*cutoff) || !abortoncutoff); ++i )
554 assert(tree !=
NULL);
556 assert(cutoff !=
NULL);
565 if( maxproprounds == 0 )
566 maxproprounds = (depth == 0 ?
set->prop_maxroundsroot :
set->prop_maxrounds);
567 if( maxproprounds == -1 )
568 maxproprounds = INT_MAX;
570 SCIPsetDebugMsg(
set,
"domain propagation of node %p in depth %d (using depth %d, maxrounds %d, proptiming %u)\n",
578 while( propagain && !(*cutoff) && !(*postpone) && propround < maxproprounds && !
SCIPsolveIsStopped(
set, stat,
FALSE) )
583 SCIP_CALL(
propagationRound(blkmem,
set, stat, primal, tree, depth, fullpropagation,
FALSE, &delayed, &propagain, timingmask, cutoff, postpone) );
586 while( delayed && (!propagain || propround >= maxproprounds) && !(*cutoff) )
589 SCIP_CALL(
propagationRound(blkmem,
set, stat, primal, tree, depth, fullpropagation,
TRUE, &delayed, &propagain, timingmask, cutoff, postpone) );
595 fullpropagation =
TRUE;
603 SCIPsetDebugMsg(
set,
" --> domain propagation of node %p finished: cutoff!\n", (
void*)node);
633 SCIP_CALL(
propagateDomains(blkmem,
set, stat, primal, tree, depth, maxproprounds,
TRUE, timingmask, cutoff, &postpone) );
636 SCIP_CALL(
SCIPconflictFlushConss(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) );
724 assert(tree !=
NULL);
731 assert(tree->
path[actdepth] == focusnode);
762 node = tree->
path[d];
771 for( i = 0; i < nboundchgs; ++i )
773 var = boundchgs[i].
var;
789 updates[nupdates] = &boundchgs[i];
812 weight = (nvalidupdates > 0 ? 1.0 / (
SCIP_Real)nvalidupdates : 1.0);
814 lpgain =
MAX(lpgain, 0.0);
816 for( i = 0; i < nupdates; ++i )
820 var = updates[i]->
var;
828 SCIPsetDebugMsg(
set,
"updating pseudocosts of <%s>: sol: %g -> %g, LP: %e -> %e => solvaldelta = %g, gain=%g, weight: %g\n",
863 assert(set->branch_lpgainnorm ==
'd' || set->branch_lpgainnorm ==
's');
867 if( set->branch_lpgainnorm ==
'd' )
869 assert(!updates[i]->redundant);
877 for( j = nbdchginfos-1; j >= 0; --j )
894 assert(updates[i]->redundant);
901 assert(j >= 0 || updates[i]->redundant);
911 delta = updates[i]->
newbound - oldbound;
924 for( j = nbdchginfos-1; j >= 0; --j )
941 assert(updates[i]->redundant);
948 assert(j >= 0 || updates[i]->redundant);
958 delta = updates[i]->
newbound - oldbound;
1000 SCIPsetDebugMsg(
set,
"updating pseudocosts of <%s> with strategy %c: domain: [%g,%g] -> [%g,%g], LP: %e -> %e => " 1001 "delta = %g, gain=%g, weight: %g\n",
1008 delta, lpgain, weight);
1046 assert(focusnode !=
NULL);
1061 for( i = 0; i < nlpcands; ++i )
1068 estimate +=
MIN(pscdown, pscup);
1098 assert(
set !=
NULL);
1100 assert(cutoff !=
NULL);
1109 for( h = 0; h <
set->nconshdlrs && !(*cutoff); ++h )
1114 if( set->reopt_enable && set->reopt_usecuts && firstsubtreeinit && !(*cutoff) )
1118 eventfilter, lp, root) );
1124 SCIP_CALL(
SCIPsepastoreApplyCuts(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
1165 assert(
set !=
NULL);
1166 assert(transprob !=
NULL);
1168 assert(cutoff !=
NULL);
1185 for( v = 0; v < transprob->
nvars && !(*cutoff); ++v )
1187 var = transprob->
vars[v];
1211 SCIP_CALL(
SCIPinitConssLP(blkmem,
set, sepastore, cutpool, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
1212 eventfilter, cliquetable, root,
TRUE, cutoff) );
1240 assert(tree !=
NULL);
1241 assert(cutoff !=
NULL);
1254 SCIP_CALL(
initLP(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, pricestore, sepastore, cutpool, branchcand,
1255 eventqueue, eventfilter, cliquetable, initroot, cutoff) );
1257 else if( newinitconss )
1260 origprob, tree, reopt, lp, branchcand, eventqueue, eventfilter, cliquetable,
FALSE,
FALSE,
1283 assert(blkmem !=
NULL);
1284 assert(
set !=
NULL);
1285 assert(stat !=
NULL);
1286 assert(prob !=
NULL);
1287 assert(primal !=
NULL);
1288 assert(tree !=
NULL);
1311 nvars = prob->
nvars;
1323 for( i = 0; i < nvars; i++ )
1367 assert(stat !=
NULL);
1368 assert(tree !=
NULL);
1370 assert(cutoff !=
NULL);
1371 assert(lperror !=
NULL);
1379 SCIP_CALL(
SCIPconstructCurrentLP(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, pricestore, sepastore, cutpool,
1380 branchcand, eventqueue, eventfilter, cliquetable, newinitconss, cutoff) );
1391 if( focusnode->
depth == 0 )
1402 assert(lp->
solved || *lperror);
1445 if( set->misc_exactsolve )
1479 assert(lperror !=
NULL);
1480 assert(mustsepa !=
NULL);
1481 assert(mustprice !=
NULL);
1488 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, prob, set->lp_iterlim,
FALSE,
TRUE,
FALSE, lperror) );
1490 assert(lp->
solved || *lperror);
1531 assert(
set !=
NULL);
1533 assert(set->conshdlrs_sepa !=
NULL);
1534 assert(delayed !=
NULL);
1535 assert(enoughcuts !=
NULL);
1536 assert(cutoff !=
NULL);
1537 assert(lperror !=
NULL);
1539 root = (actdepth == 0);
1545 SCIPsetDebugMsg(
set,
"calling separators on LP solution in depth %d (onlydelayed: %u)\n", actdepth, onlydelayed);
1551 for( i = 0; i <
set->nsepas && !(*cutoff) && !(*lperror) && !(*enoughcuts) && lp->
flushed && lp->
solved 1565 SCIPsetDebugMsg(
set,
" -> executing separator <%s> with priority %d\n",
1583 SCIP_CALL(
separationRoundResolveLP(blkmem,
set, messagehdlr, stat, eventqueue, eventfilter, prob, primal, tree, lp, lperror, mustsepa, mustprice) );
1600 for( i = 0; i <
set->nconshdlrs && !(*cutoff) && !(*lperror) && !(*enoughcuts) && lp->
flushed && lp->
solved 1607 SCIPsetDebugMsg(
set,
" -> executing separation of constraint handler <%s> with priority %d\n",
1620 SCIP_CALL(
separationRoundResolveLP(blkmem,
set, messagehdlr, stat, eventqueue, eventfilter, prob, primal, tree, lp, lperror, mustsepa, mustprice) );
1630 SCIPsetDebugMsg(
set,
" -> delayed constraint handler <%s> found a cut\n",
1638 for( i = 0; i <
set->nsepas && !(*cutoff) && !(*lperror) && !(*enoughcuts) && lp->
flushed && lp->
solved 1648 SCIPsetDebugMsg(
set,
" -> executing separator <%s> with priority %d\n",
1660 SCIP_CALL(
separationRoundResolveLP(blkmem,
set, messagehdlr, stat, eventqueue, eventfilter, prob, primal, tree, lp, lperror, mustsepa, mustprice) );
1679 assert(!onlydelayed);
1682 for( i = 0; i <
set->nconshdlrs && !(*cutoff) && !(*lperror) && !(*enoughcuts) && lp->
flushed && lp->
solved 1686 SCIPsetDebugMsg(
set,
" -> executing separation of constraint handler <%s> with priority %d\n",
1699 SCIP_CALL(
separationRoundResolveLP(blkmem,
set, messagehdlr, stat, eventqueue, eventfilter, prob, primal, tree, lp, lperror, mustsepa, mustprice) );
1708 SCIPsetDebugMsg(
set,
" -> separation round finished: delayed=%u, enoughcuts=%u, lpflushed=%u, cutoff=%u\n",
1709 *delayed, *enoughcuts, lp->
flushed, *cutoff);
1734 assert(
set !=
NULL);
1735 assert(set->conshdlrs_sepa !=
NULL);
1736 assert(delayed !=
NULL);
1737 assert(enoughcuts !=
NULL);
1738 assert(cutoff !=
NULL);
1741 *enoughcuts =
FALSE;
1743 root = (actdepth == 0);
1745 SCIPsetDebugMsg(
set,
"calling separators on primal solution in depth %d (onlydelayed: %u)\n", actdepth, onlydelayed);
1778 for( i = 0; i <
set->nconshdlrs && !(*cutoff) && !(*enoughcuts) && !
SCIPsolveIsStopped(
set, stat,
FALSE); ++i )
1791 SCIPsetDebugMsg(
set,
" -> constraint handler <%s> detected cutoff in separation\n",
1833 assert(!onlydelayed);
1836 for( i = 0; i <
set->nconshdlrs && !(*cutoff) && !(*enoughcuts) && !
SCIPsolveIsStopped(
set, stat,
FALSE); ++i )
1845 SCIPsetDebugMsg(
set,
" -> constraint handler <%s> detected cutoff in separation\n",
1851 SCIPsetDebugMsg(
set,
" -> separation round finished: delayed=%u, enoughcuts=%u, cutoff=%u\n",
1852 *delayed, *enoughcuts, *cutoff);
1879 assert(delayed !=
NULL);
1880 assert(cutoff !=
NULL);
1896 SCIP_CALL(
separationRoundLP(blkmem,
set, messagehdlr, stat, eventqueue, eventfilter, prob, primal, tree, lp, sepastore, actdepth, 0.0, onlydelayed, delayed, &enoughcuts,
1897 cutoff, &lperror, &mustsepa, &mustprice) );
1931 int* npricedcolvars,
1944 assert(transprob !=
NULL);
1948 assert(npricedcolvars !=
NULL);
1949 assert(mustsepa !=
NULL);
1950 assert(lperror !=
NULL);
1951 assert(aborted !=
NULL);
1955 *npricedcolvars = transprob->
ncolvars;
1968 if( maxpricerounds == -1 )
1969 maxpricerounds = INT_MAX;
1973 while( !(*lperror) && mustprice && npricerounds < maxpricerounds )
2000 FALSE, &foundsol, &unbounded) );
2007 *npricedcolvars = transprob->
ncolvars;
2018 stoppricing =
FALSE;
2019 for( p = 0; p <
set->nactivepricers && !enoughvars; ++p )
2023 SCIPsetDebugMsg(
set,
"pricing: pricer %s returned result = %s, lowerbound = %f\n",
2030 if( p == 0 && stopearly )
2034 if( stoppricing && !stopearly )
2035 stoppricing =
FALSE;
2047 *mustsepa = *mustsepa || !lp->
flushed;
2053 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, transprob, -1LL,
FALSE,
TRUE,
FALSE, lperror) );
2055 assert(lp->
solved || *lperror);
2065 SCIP_CALL(
SCIPinitConssLP(blkmem,
set, sepastore, cutpool, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
2066 eventfilter, cliquetable,
FALSE,
FALSE, &cutoff) );
2067 assert(cutoff ==
FALSE);
2069 mustprice = mustprice || !lp->
flushed || (transprob->
ncolvars != *npricedcolvars);
2070 *mustsepa = *mustsepa || !lp->
flushed;
2075 SCIPsetDebugMsg(
set,
"pricing: stop pricing and perform early branching\n");
2081 SCIPsetDebugMsg(
set,
"pricing: solve LP after resetting bounds and adding new initial constraints\n");
2082 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, transprob, -1LL,
FALSE,
FALSE,
FALSE, lperror) );
2084 assert(lp->
solved || *lperror);
2094 if( displayinfo && mustprice )
2104 mustprice = mustprice &&
2113 assert(lp->
solved || *lperror);
2142 if( (set->sepa_poolfreq == 0 && actdepth == 0)
2143 || (set->sepa_poolfreq > 0 && actdepth % set->sepa_poolfreq == 0) )
2153 SCIP_CALL(
SCIPcutpoolSeparate(cutpool, blkmem,
set, stat, eventqueue, eventfilter, lp, sepastore,
NULL, cutpoolisdelayed, root, &result) );
2208 int nsepastallrounds;
2209 int maxnsepastallrounds;
2214 assert(
set !=
NULL);
2215 assert(blkmem !=
NULL);
2216 assert(stat !=
NULL);
2217 assert(transprob !=
NULL);
2218 assert(tree !=
NULL);
2220 assert(pricestore !=
NULL);
2221 assert(sepastore !=
NULL);
2222 assert(cutpool !=
NULL);
2223 assert(delayedcutpool !=
NULL);
2224 assert(primal !=
NULL);
2225 assert(cutoff !=
NULL);
2226 assert(unbounded !=
NULL);
2227 assert(lperror !=
NULL);
2230 assert(focusnode !=
NULL);
2233 root = (actdepth == 0);
2239 bounddist = (loclowerbound - glblowerbound)/(primal->
cutoffbound - glblowerbound);
2240 separate =
SCIPsetIsLE(
set, bounddist, set->sepa_maxbounddist);
2241 separate = separate && (
set->sepa_maxruns == -1 || stat->
nruns <=
set->sepa_maxruns);
2244 maxseparounds = (root ?
set->sepa_maxroundsroot :
set->sepa_maxrounds);
2245 if( maxseparounds == -1 )
2246 maxseparounds = INT_MAX;
2247 if( stat->
nruns > 1 && root && set->sepa_maxroundsrootsubrun >= 0 )
2248 maxseparounds =
MIN(maxseparounds, set->sepa_maxroundsrootsubrun);
2249 if( !fullseparation && set->sepa_maxaddrounds >= 0 )
2250 maxseparounds =
MIN(maxseparounds, stat->
nseparounds + set->sepa_maxaddrounds);
2251 maxnsepastallrounds =
set->sepa_maxstallrounds;
2252 if( maxnsepastallrounds == -1 )
2253 maxnsepastallrounds = INT_MAX;
2261 assert(lp->
solved || *lperror);
2267 npricedcolvars = transprob->
ncolvars;
2269 mustsepa = separate;
2270 delayedsepa =
FALSE;
2273 nsepastallrounds = 0;
2276 stallnfracs = INT_MAX;
2278 while( !(*cutoff) && !(*unbounded) && !(*lperror) && (mustprice || mustsepa || delayedsepa) )
2285 while( mustprice && !(*lperror) )
2287 SCIP_CALL(
SCIPpriceLoop(blkmem,
set, messagehdlr, stat, transprob, origprob, primal, tree, reopt, lp,
2288 pricestore, sepastore, cutpool, branchcand, eventqueue, eventfilter, cliquetable, root, root, -1, &npricedcolvars,
2289 &mustsepa, lperror, pricingaborted) );
2294 assert(lp->
solved || *lperror);
2297 if( !(*lperror) && !(*pricingaborted) &&
SCIPlpIsRelax(lp) )
2300 SCIPsetDebugMsg(
set,
" -> new lower bound: %g (LP status: %d, LP obj: %g)\n",
2332 SCIPsetDebugMsg(
set,
" -> LP solved: call propagators that are applicable during LP solving loop\n");
2341 SCIPsetDebugMsg(
set,
"new initial constraints added during propagation: old=%" SCIP_LONGINT_FORMAT
", new=%" SCIP_LONGINT_FORMAT
"\n", oldninitconssadded, stat->
ninitconssadded);
2343 SCIP_CALL(
SCIPinitConssLP(blkmem,
set, sepastore, cutpool, stat, transprob, origprob, tree, reopt, lp,
2344 branchcand, eventqueue, eventfilter, cliquetable,
FALSE,
FALSE, cutoff) );
2347 if( !(*cutoff) && !(*unbounded) )
2365 assert(lp->
solved || *lperror);
2371 *propagateagain =
TRUE;
2379 *propagateagain =
TRUE;
2387 SCIPsetDebugMsg(
set,
" -> new lower bound: %g (LP status: %d, LP obj: %g)\n",
2407 FALSE, &foundsol, unbounded) );
2413 assert(lp->
flushed || *cutoff || *unbounded);
2414 assert(lp->
solved || *lperror || *cutoff || *unbounded);
2419 && nsepastallrounds < maxnsepastallrounds
2423 delayedsepa = delayedsepa && !mustsepa && !(*cutoff);
2424 mustsepa = mustsepa || delayedsepa;
2432 if( !separate || (*cutoff) || (*unbounded)
2438 delayedsepa =
FALSE;
2441 assert(!(*lperror));
2462 if( !enoughcuts && !delayedsepa )
2464 SCIP_CALL(
cutpoolSeparate(cutpool, blkmem,
set, stat, eventqueue, eventfilter, lp, sepastore,
FALSE, root,
2465 actdepth, &enoughcuts, cutoff) );
2480 if( !(*cutoff) && !(*lperror) && !enoughcuts && lp->
solved )
2484 lp, sepastore, actdepth, bounddist, delayedsepa,
2485 &delayedsepa, &enoughcuts, cutoff, lperror, &mustsepa, &mustprice) );
2489 if( !(*cutoff) && !(*lperror) && !enoughcuts && lp->
solved 2491 && nsepastallrounds >= maxnsepastallrounds-1 && delayedsepa )
2494 tree, lp, sepastore, actdepth, bounddist, delayedsepa,
2495 &delayedsepa, &enoughcuts, cutoff, lperror, &mustsepa, &mustprice) );
2503 assert( !(*lperror) );
2506 root, actdepth, &enoughcuts, cutoff) );
2510 SCIPsetDebugMsg(
set,
" -> delayed global cut pool detected cutoff\n");
2526 if( *cutoff || *lperror
2541 mustprice = mustprice || !lp->
flushed || (transprob->
ncolvars != npricedcolvars);
2542 mustsepa = mustsepa || !lp->
flushed;
2547 SCIPsetDebugMsg(
set,
" -> separation changed bound: propagate again\n");
2549 *propagateagain =
TRUE;
2561 SCIPsetDebugMsg(
set,
"new initial constraints added during propagation: old=%" SCIP_LONGINT_FORMAT
", new=%" SCIP_LONGINT_FORMAT
"\n",
2564 SCIP_CALL(
SCIPinitConssLP(blkmem,
set, sepastore, cutpool, stat, transprob, origprob, tree, reopt, lp,
2565 branchcand, eventqueue, eventfilter, cliquetable,
FALSE,
FALSE, cutoff) );
2577 assert(lp->
solved || *lperror);
2590 if( stat->
domchgcount != olddomchgcount && (!mustprice || mustsepa) && !(*cutoff)
2594 SCIPsetDebugMsg(
set,
" -> new lower bound: %g (LP status: %d, LP obj: %g)\n",
2620 objreldiff =
SCIPrelDiff(lpobjval, stalllpobjval);
2621 SCIPsetDebugMsg(
set,
" -> LP bound moved from %g to %g (reldiff: %g)\n",
2622 stalllpobjval, lpobjval, objreldiff);
2625 objreldiff <= 1e-04 &&
2626 nfracs >= (0.9 - 0.1 * nsepastallrounds) * stallnfracs);
2628 stalllpobjval = lpobjval;
2629 stallnfracs = nfracs;
2638 nsepastallrounds = 0;
2648 if( nsepastallrounds >= maxnsepastallrounds-2 )
2650 SCIPsetDebugMsg(
set,
" -> nsepastallrounds=%d/%d\n", nsepastallrounds, maxnsepastallrounds);
2657 SCIPsetDebugMsg(
set,
"separation round %d/%d finished (%d/%d stall rounds): mustprice=%u, mustsepa=%u, delayedsepa=%u, propagateagain=%u\n",
2658 stat->
nseparounds, maxseparounds, nsepastallrounds, maxnsepastallrounds, mustprice, mustsepa, delayedsepa, *propagateagain);
2665 if ( nsepastallrounds >= maxnsepastallrounds )
2668 "Truncate separation round because of stalling (%d stall rounds).\n", maxnsepastallrounds);
2682 else if( !(*lperror) )
2710 lp, branchcand, eventqueue, cliquetable,
NULL) );
2723 SCIPsetDebugMsg(
set,
" -> final lower bound: %g (LP status: %d, LP obj: %g)\n",
2751 assert(transprob !=
NULL);
2752 assert(origprob !=
NULL);
2753 assert(primal !=
NULL);
2754 assert(cutoff !=
NULL);
2767 SCIPsetDebugMsg(
set,
" -> lower bound: %g [%g] (pseudoobj: %g [%g]), cutoff bound: %g [%g]\n",
2776 SCIPsetDebugMsg(
set,
"node is cut off by bounding (lower=%g, upper=%g)\n",
2784 SCIP_CALL(
SCIPconflictAnalyzePseudo(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable,
NULL) );
2801 assert(
set !=
NULL);
2802 assert(relaxation !=
NULL);
2806 for( r = 0; r <
set->nrelaxs; ++r )
2850 assert(stat !=
NULL);
2851 assert(tree !=
NULL);
2853 assert(cutoff !=
NULL);
2854 assert(unbounded !=
NULL);
2855 assert(lperror !=
NULL);
2856 assert(*cutoff ==
FALSE);
2857 assert(*unbounded ==
FALSE);
2858 assert(*lperror ==
FALSE);
2863 if( !initiallpsolved )
2866 SCIP_CALL(
solveNodeInitialLP(blkmem,
set, messagehdlr, stat, transprob, origprob, primal, tree, reopt, lp,
2867 pricestore, sepastore, cutpool, branchcand, eventfilter, eventqueue, cliquetable, newinitconss, cutoff, lperror) );
2870 SCIPsetDebugMsg(
set,
"price-and-cut-loop: initial LP status: %d, LP obj: %g\n",
2894 checklprows =
FALSE;
2900 SCIP_CALL(
SCIPprimalTrySol(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
2907 SCIP_CALL(
SCIPsolCheck(sol,
set, messagehdlr, blkmem, stat, transprob,
FALSE,
FALSE,
TRUE,
TRUE,
2908 checklprows, &feasible) );
2914 SCIP_CALL(
SCIPprimalTrySolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
2927 if( set->reopt_enable )
2929 assert(reopt !=
NULL);
2943 origprob, tree, reopt, lp, branchcand, eventqueue, eventfilter, cliquetable,
FALSE,
FALSE,
2949 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, cutoff) );
2955 SCIPsetDebugMsg(
set,
"solution cuts off root node, stop solution process\n");
2964 if( !(*cutoff) && !(*lperror) )
2970 int oldncutsapplied;
2972 oldnpricedvars = transprob->
ncolvars;
2979 SCIP_CALL(
priceAndCutLoop(blkmem,
set, messagehdlr, stat, mem, transprob, origprob, primal, tree, reopt, lp,
2980 pricestore, sepastore, cutpool, delayedcutpool, branchcand, conflict, conflictstore, eventfilter,
2981 eventqueue, cliquetable, fullseparation, propagateagain, cutoff, unbounded, lperror, pricingaborted) );
2988 *solverelaxagain =
TRUE;
3013 SCIP_CALL(
SCIPlpSolveAndEval(lp,
set, messagehdlr, blkmem, stat, eventqueue, eventfilter, transprob, -1LL,
FALSE,
FALSE,
FALSE, lperror) );
3018 SCIPsetDebugMsg(
set,
"re-optimized LP without cutoff bound: LP status: %d, LP obj: %g\n",
3076 assert(
set !=
NULL);
3077 assert(relaxation !=
NULL);
3078 assert(cutoff !=
NULL);
3079 assert(solvelpagain !=
NULL);
3080 assert(propagateagain !=
NULL);
3081 assert(solverelaxagain !=
NULL);
3082 assert(relaxcalled !=
NULL);
3088 for( r = 0; r <
set->nrelaxs && !(*cutoff); ++r )
3093 *relaxcalled =
TRUE;
3111 *solvelpagain =
TRUE;
3112 *propagateagain =
TRUE;
3116 *solvelpagain =
TRUE;
3117 *propagateagain =
TRUE;
3121 *solvelpagain =
TRUE;
3125 *solverelaxagain =
TRUE;
3142 assert(focusnode !=
NULL);
3147 SCIPsetDebugMsg(
set,
" -> new lower bound given by relaxator %s: %g\n",
3162 for( i = 0; i < transprob->
nvars; ++i )
3164 assert(transprob->
vars[i] !=
NULL);
3205 assert(
set !=
NULL);
3206 assert(stat !=
NULL);
3207 assert(tree !=
NULL);
3209 assert(branched !=
NULL);
3210 assert(cutoff !=
NULL);
3211 assert(infeasible !=
NULL);
3212 assert(propagateagain !=
NULL);
3213 assert(solvelpagain !=
NULL);
3214 assert(solverelaxagain !=
NULL);
3216 assert(!(*propagateagain));
3217 assert(!(*solvelpagain));
3218 assert(!(*solverelaxagain));
3229 for( h = 0; h <
set->nconshdlrs && enforcerelaxsol; ++h )
3231 if( set->conshdlrs_enfo[h]->consenforelax ==
NULL && ((! set->conshdlrs_enfo[h]->needscons) ||
3232 (set->conshdlrs_enfo[h]->nconss > 0)) )
3236 enforcerelaxsol =
FALSE;
3249 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, verblevel,
"Disable enforcement of relaxation solutions" 3250 " since constraint handler %s does not implement enforelax-callback\n",
3262 SCIPsetDebugMsg(
set,
"enforcing constraints on relaxation solution\n");
3272 objinfeasible =
FALSE;
3291 for( h = 0; h <
set->nconshdlrs && !resolved; ++h )
3296 if( enforcerelaxsol )
3317 objinfeasible, forced, &result) );
3320 SCIPerrorMessage(
"pseudo enforcing method of constraint handler <%s> separated cuts\n",
3334 SCIPsetDebugMsg(
set,
" -> constraint handler <%s> detected cutoff in enforcement\n",
3341 *propagateagain =
TRUE;
3342 *solvelpagain =
TRUE;
3343 *solverelaxagain =
TRUE;
3351 *propagateagain =
TRUE;
3352 *solvelpagain =
TRUE;
3353 *solverelaxagain =
TRUE;
3362 *solvelpagain =
TRUE;
3363 *solverelaxagain =
TRUE;
3386 *solvelpagain =
TRUE;
3408 assert(objinfeasible);
3413 SCIPerrorMessage(
"invalid result code <%d> from enforcing method of constraint handler <%s>\n",
3432 *propagateagain =
FALSE;
3433 *solvelpagain =
FALSE;
3436 assert(!(*branched) || (resolved && !(*cutoff) && *infeasible && !(*propagateagain) && !(*solvelpagain)));
3437 assert(!(*cutoff) || (resolved && !(*branched) && *infeasible && !(*propagateagain) && !(*solvelpagain)));
3438 assert(*infeasible || (!resolved && !(*branched) && !(*cutoff) && !(*propagateagain) && !(*solvelpagain)));
3439 assert(!(*propagateagain) || (resolved && !(*branched) && !(*cutoff) && *infeasible));
3440 assert(!(*solvelpagain) || (resolved && !(*branched) && !(*cutoff) && *infeasible));
3442 assert(!objinfeasible || *infeasible);
3443 assert(resolved == (*branched || *cutoff || *propagateagain || *solvelpagain));
3449 SCIPsetDebugMsg(
set,
" -> enforcing result: branched=%u, cutoff=%u, infeasible=%u, propagateagain=%u, solvelpagain=%u, resolved=%u\n",
3450 *branched, *cutoff, *infeasible, *propagateagain, *solvelpagain, resolved);
3480 assert(stat !=
NULL);
3481 assert(cutoff !=
NULL);
3482 assert(propagateagain !=
NULL);
3483 assert(solvelpagain !=
NULL);
3493 int oldncutsapplied;
3497 SCIP_CALL(
SCIPsepastoreApplyCuts(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
3498 eventqueue, eventfilter, cliquetable, root, efficiacychoice, cutoff) );
3499 *propagateagain = *propagateagain || (stat->
domchgcount != olddomchgcount);
3500 *solvelpagain =
TRUE;
3503 *solverelaxagain =
TRUE;
3526 assert(
set !=
NULL);
3527 assert(stat !=
NULL);
3528 assert(cutoff !=
NULL);
3529 assert(propagateagain !=
NULL);
3530 assert(solverelaxagain !=
NULL);
3533 *cutoff = *cutoff || (tree->
cutoffdepth <= depth);
3543 for( r = 0; r <
set->nrelaxs && !(*solverelaxagain); ++r )
3544 *solverelaxagain = *solverelaxagain || ( !
SCIPrelaxIsSolved(set->relaxs[r], stat) );
3549 *propagateagain =
FALSE;
3550 *solverelaxagain =
FALSE;
3607 assert(
set !=
NULL);
3608 assert(stat !=
NULL);
3609 assert(origprob !=
NULL);
3610 assert(transprob !=
NULL);
3611 assert(tree !=
NULL);
3613 assert(primal !=
NULL);
3614 assert(pricestore !=
NULL);
3615 assert(sepastore !=
NULL);
3617 assert(branchcand !=
NULL);
3618 assert(cutpool !=
NULL);
3619 assert(delayedcutpool !=
NULL);
3620 assert(conflict !=
NULL);
3622 assert(eventfilter !=
NULL);
3623 assert(eventqueue !=
NULL);
3624 assert(focusnode !=
NULL);
3625 assert(heurtiming !=
NULL);
3626 assert(nlperrors !=
NULL);
3627 assert(fullpropagation !=
NULL);
3628 assert(propagateagain !=
NULL);
3629 assert(afterlpproplps !=
NULL);
3630 assert(lpsolved !=
NULL);
3631 assert(solvelpagain !=
NULL);
3632 assert(solverelaxagain !=
NULL);
3633 assert(cutoff !=
NULL);
3634 assert(postpone !=
NULL);
3635 assert(unbounded !=
NULL);
3636 assert(lperror !=
NULL);
3637 assert(pricingaborted !=
NULL);
3638 assert(forcedenforcement !=
NULL);
3640 newinitconss =
FALSE;
3642 if( !(*cutoff) && !(*postpone) )
3653 if( ((*afterlpproplps) < stat->
nnodelps && (*lpsolved)) || (*relaxcalled) )
3660 *cutoff = *cutoff || (tree->
cutoffdepth <= actdepth);
3662 propagate = propagate || (stat->
nboundchgs > oldnboundchgs);
3666 if( propagate && !(*cutoff) )
3674 *fullpropagation =
FALSE;
3677 *cutoff = *cutoff || (tree->
cutoffdepth <= actdepth);
3682 solvelp = solvelp || (lpwasflushed && (!lp->
flushed || newinitconss));
3683 solverelax = solverelax || newinitconss;
3695 SCIPsetDebugMsg(
set,
" -> new lower bound: %g (LP status: %d, LP obj: %g)\n",
3713 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue,
3714 conflict, cliquetable, cutoff) );
3728 FALSE, propagateagain, unbounded) );
3757 if( *propagateagain )
3759 *solvelpagain = solvelp;
3760 *solverelaxagain = solverelax;
3767 *relaxcalled =
FALSE;
3768 if( solverelax && !(*cutoff) )
3777 cutoff, propagateagain, solvelpagain, solverelaxagain, relaxcalled) );
3781 *cutoff = *cutoff || (tree->
cutoffdepth <= actdepth);
3784 SCIP_CALL(
applyCuts(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, relaxation, sepastore, branchcand,
3786 solvelpagain, solverelaxagain) );
3789 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, cutoff) );
3800 SCIP_CALL(
solveNodeLP(blkmem,
set, messagehdlr, stat, mem, origprob, transprob, primal, tree, reopt, lp, relaxation, pricestore,
3801 sepastore, cutpool, delayedcutpool, branchcand, conflict, conflictstore, eventfilter, eventqueue, cliquetable,
3802 initiallpsolved, fullseparation, newinitconss, propagateagain, solverelaxagain, cutoff, unbounded, lperror, pricingaborted) );
3805 *solvelpagain =
FALSE;
3806 SCIPsetDebugMsg(
set,
" -> LP status: %d, LP obj: %g, iter: %" SCIP_LONGINT_FORMAT
", count: %" SCIP_LONGINT_FORMAT
"\n",
3812 *cutoff = *cutoff || (tree->
cutoffdepth <= actdepth);
3819 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" cannot be dealt with\n",
3826 "(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" -- using pseudo solution instead (loop %d)\n",
3833 *forcedenforcement =
TRUE;
3836 "(node %" SCIP_LONGINT_FORMAT
") LP solver hit %s limit in LP %" SCIP_LONGINT_FORMAT
" -- using pseudo solution instead\n",
3843 "(node %" SCIP_LONGINT_FORMAT
") LP relaxation is unbounded (LP %" SCIP_LONGINT_FORMAT
")\n", stat->
nnodes, stat->
nlps);
3854 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") could not prove infeasibility of LP %" SCIP_LONGINT_FORMAT
" (exactsolve=%u, pricingaborted=%u), all variables are fixed, %d continuous vars\n",
3856 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") -> have to call PerPlex() (feature not yet implemented)\n", stat->
nnodes);
3863 *forcedenforcement =
TRUE;
3866 "(node %" SCIP_LONGINT_FORMAT
") could not prove infeasibility of LP %" SCIP_LONGINT_FORMAT
" (exactsolve=%u, pricingaborted=%u) -- using pseudo solution (%d unfixed vars) instead\n",
3872 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict,
3873 cliquetable, cutoff) );
3881 *solverelaxagain = *solverelaxagain && *relaxcalled;
3884 if( solverelax && !(*cutoff) )
3887 propagateagain, solvelpagain, solverelaxagain, relaxcalled) );
3891 *cutoff = *cutoff || (tree->
cutoffdepth <= actdepth);
3894 SCIP_CALL(
applyCuts(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, relaxation, sepastore, branchcand,
3896 solvelpagain, solverelaxagain) );
3899 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict,
3900 cliquetable, cutoff) );
3915 assert(
set !=
NULL);
3916 assert(stat !=
NULL);
3918 return (set->nactivepricers == 0 && !set->reopt_enable
3919 && (set->presol_maxrestarts == -1 || stat->
nruns <= set->presol_maxrestarts)
3920 && (set->limit_restarts == -1 || stat->
nruns <= set->limit_restarts));
3923 #define restartAllowed(set,stat) ((set)->nactivepricers == 0 && !set->reopt_enable && ((set)->presol_maxrestarts == -1 || (stat)->nruns <= (set)->presol_maxrestarts) \ 3924 && (set->limit_restarts == -1 || stat->nruns <= set->limit_restarts)) 3984 assert(
set !=
NULL);
3985 assert(stat !=
NULL);
3986 assert(origprob !=
NULL);
3987 assert(transprob !=
NULL);
3988 assert(tree !=
NULL);
3989 assert(primal !=
NULL);
3992 assert(cutoff !=
NULL);
3993 assert(postpone !=
NULL);
3994 assert(unbounded !=
NULL);
3995 assert(infeasible !=
NULL);
3996 assert(restart !=
NULL);
3997 assert(afternodeheur !=
NULL);
4002 *infeasible =
FALSE;
4004 *afternodeheur =
FALSE;
4006 pricingaborted =
FALSE;
4009 assert(focusnode !=
NULL);
4019 SCIPsetDebugMsg(
set,
"Processing node %" SCIP_LONGINT_FORMAT
" in depth %d, %d siblings\n",
4030 focusnodehaslp = (
set->lp_solvedepth == -1 || actdepth <=
set->lp_solvedepth);
4031 focusnodehaslp = focusnodehaslp && (
set->lp_solvefreq >= 1 && actdepth %
set->lp_solvefreq == 0);
4032 focusnodehaslp = focusnodehaslp || (actdepth == 0 &&
set->lp_solvefreq == 0);
4034 focusnodehaslp =
set->reopt_enable ? focusnodehaslp &&
SCIPreoptGetSolveLP(reopt,
set, focusnode) : focusnodehaslp;
4048 initiallpsolved =
FALSE;
4049 fullseparation =
TRUE;
4054 solverelaxagain =
TRUE;
4055 solvelpagain =
TRUE;
4056 propagateagain =
TRUE;
4057 fullpropagation =
TRUE;
4058 forcedlpsolve =
FALSE;
4065 while( !(*cutoff) && !(*postpone) && (solverelaxagain || solvelpagain || propagateagain) && nlperrors <
MAXNLPERRORS && !(*restart) )
4077 *infeasible =
FALSE;
4083 relaxcalled =
FALSE;
4084 forcedenforcement =
FALSE;
4085 afterlpproplps = -1L;
4087 while( !lperror && !(*cutoff) && (propagateagain || solvelpagain || solverelaxagain
4088 || (afterlpproplps < stat->nnodelps && lpsolved) || relaxcalled) )
4090 solverelax = solverelaxagain;
4091 solverelaxagain =
FALSE;
4092 solvelp = solvelpagain;
4093 solvelpagain =
FALSE;
4094 propagate = propagateagain;
4095 propagateagain =
FALSE;
4098 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue,
4099 conflict, cliquetable, cutoff) );
4102 SCIPsetDebugMsg(
set,
" -> node solving loop: call propagators that are applicable before%s LP is solved\n",
4103 lpsolved ?
" and after" :
"");
4104 SCIP_CALL(
propAndSolve(blkmem,
set, messagehdlr, stat, mem, origprob, transprob, primal, tree, reopt, lp,
4105 relaxation, pricestore, sepastore, branchcand, cutpool, delayedcutpool, conflict, conflictstore, eventfilter,
4106 eventqueue, cliquetable, focusnode, actdepth, propagate, solvelp, solverelax, forcedlpsolve, initiallpsolved,
4107 fullseparation, &afterlpproplps, &heurtiming, &nlperrors, &fullpropagation, &propagateagain, &lpsolved, &relaxcalled,
4108 &solvelpagain, &solverelaxagain, cutoff, postpone, unbounded, stopped, &lperror, &pricingaborted, &forcedenforcement) );
4109 initiallpsolved |= lpsolved;
4116 fullseparation =
FALSE;
4124 for( i = 0; i < transprob->
nvars; ++i )
4126 assert(transprob->
vars[i] !=
NULL);
4137 updateLoopStatus(
set, stat, tree, actdepth, cutoff, &propagateagain, &solverelaxagain);
4146 if( actdepth == 0 && !(*afternodeheur) )
4150 *afternodeheur =
TRUE;
4155 *cutoff, &foundsol, unbounded) );
4160 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, cutoff) );
4168 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" cannot be dealt with\n",
4176 "(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" -- using pseudo solution instead (loop %d)\n",
4192 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" cannot be dealt with\n",
4198 "(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" -- using pseudo solution instead (loop %d)\n",
4206 propagateagain =
TRUE;
4207 solvelpagain =
TRUE;
4208 solverelaxagain =
TRUE;
4214 if( !(*postpone) && !(*cutoff) && !solverelaxagain && !solvelpagain && !propagateagain )
4225 *infeasible =
FALSE;
4230 branchcand, &branched, cutoff, infeasible, &propagateagain, &solvelpagain, &solverelaxagain,
4231 forcedenforcement) );
4232 assert(branched == (tree->
nchildren > 0));
4233 assert(!branched || (!(*cutoff) && *infeasible && !propagateagain && !solvelpagain));
4234 assert(!(*cutoff) || (!branched && *infeasible && !propagateagain && !solvelpagain));
4235 assert(*infeasible || (!branched && !(*cutoff) && !propagateagain && !solvelpagain));
4236 assert(!propagateagain || (!branched && !(*cutoff) && *infeasible));
4237 assert(!solvelpagain || (!branched && !(*cutoff) && *infeasible));
4242 SCIP_CALL(
applyCuts(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, relaxation, sepastore, branchcand,
4244 &solvelpagain, &solverelaxagain) );
4247 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, cutoff) );
4250 updateLoopStatus(
set, stat, tree, actdepth, cutoff, &propagateagain, &solverelaxagain);
4259 if( pricingaborted && !(*infeasible) && !(*cutoff) && !(*postpone) )
4269 SCIP_CALL(
SCIPprimalTrySol(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4287 SCIP_CALL(
SCIPprimalTrySolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4315 wasforcedlpsolve = forcedlpsolve;
4316 forcedlpsolve =
FALSE;
4317 if( (*infeasible) && !(*cutoff) && !(*postpone)
4319 && !solverelaxagain && !solvelpagain && !propagateagain && !branched )
4336 SCIPsetDebugMsg(
set,
"infeasibility in depth %d was not resolved: branch on LP solution with %d fractionals\n",
4338 SCIP_CALL(
SCIPbranchExecLP(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, sepastore, branchcand,
4348 SCIPsetDebugMsg(
set,
"infeasibility in depth %d was not resolved: branch on %d external branching candidates.\n",
4350 SCIP_CALL(
SCIPbranchExecExtern(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, sepastore, branchcand,
4358 SCIPsetDebugMsg(
set,
"infeasibility in depth %d was not resolved: branch on pseudo solution with %d unfixed integers\n",
4360 SCIP_CALL(
SCIPbranchExecPseudo(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
4374 "Starting spatial branch-and-bound on unbounded variable <%s> ([%g,%g]) - cannot guarantee finite termination.\n",
4392 SCIPerrorMessage(
"LP branching rule added constraint, which was not allowed this time\n");
4395 propagateagain =
TRUE;
4396 solvelpagain =
TRUE;
4397 solverelaxagain =
TRUE;
4402 propagateagain =
TRUE;
4403 solvelpagain =
TRUE;
4404 solverelaxagain =
TRUE;
4410 solvelpagain =
TRUE;
4411 solverelaxagain =
TRUE;
4435 if( transprob->
ncontvars == 0 && set->nactivepricers == 0 )
4438 SCIPsetDebugMsg(
set,
" -> cutoff because all variables are fixed in current node\n");
4464 if( pricingaborted )
4466 SCIPerrorMessage(
"pricing was aborted, but no branching could be created!\n");
4470 if( wasforcedlpsolve )
4473 SCIPerrorMessage(
"LP was solved, all integers fixed, some constraint still infeasible, but no branching could be created!\n");
4490 "(node %" SCIP_LONGINT_FORMAT
") forcing the solution of an LP (last LP %" SCIP_LONGINT_FORMAT
")...\n", stat->
nnodes, stat->
nlps);
4494 solvelpagain =
TRUE;
4495 forcedlpsolve =
TRUE;
4500 SCIPerrorMessage(
"invalid result code <%d> from SCIPbranchLP(), SCIPbranchExt() or SCIPbranchPseudo()\n", result);
4503 assert(*cutoff || solvelpagain || propagateagain || branched);
4504 assert(!(*cutoff) || (!solvelpagain && !propagateagain && !branched));
4505 assert(!solvelpagain || (!(*cutoff) && !branched));
4506 assert(!propagateagain || (!(*cutoff) && !branched));
4507 assert(!branched || (!solvelpagain && !propagateagain));
4508 assert(branched == (tree->
nchildren > 0));
4511 SCIP_CALL(
applyCuts(blkmem,
set, stat, transprob, origprob, tree, reopt, lp, relaxation, sepastore, branchcand,
4513 &solvelpagain, &solverelaxagain) );
4516 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, cutoff) );
4519 updateLoopStatus(
set, stat, tree, actdepth, cutoff, &propagateagain, &solverelaxagain);
4527 SCIPsetDebugMsg(
set,
"node solving iteration %d finished: cutoff=%u, postpone=%u, propagateagain=%u, solverelaxagain=%u, solvelpagain=%u, nlperrors=%d, restart=%u\n",
4528 nloops, *cutoff, *postpone, propagateagain, solverelaxagain, solvelpagain, nlperrors, *restart);
4534 SCIP_CALL(
SCIPconflictFlushConss(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) );
4539 SCIPerrorMessage(
"(node %" SCIP_LONGINT_FORMAT
") unresolved numerical troubles in LP %" SCIP_LONGINT_FORMAT
" -- aborting\n", stat->
nnodes, stat->
nlps);
4544 restartfac =
set->presol_subrestartfac;
4546 restartfac =
MIN(restartfac, set->presol_restartfac);
4552 if( actdepth == 0 && !(*cutoff) && !(*unbounded) && !(*postpone) )
4619 if( checksol || set->misc_exactsolve )
4622 SCIP_CALL(
SCIPprimalTrySol(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4628 SCIP_CALL(
SCIPprimalAddSol(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4656 if( checksol || set->misc_exactsolve )
4659 SCIP_CALL(
SCIPprimalTrySolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4664 SCIP_CALL(
SCIPprimalAddSolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4665 eventqueue, eventfilter, &sol, &foundsol) );
4689 if( checksol || set->misc_exactsolve )
4692 SCIP_CALL(
SCIPprimalTrySolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4697 SCIP_CALL(
SCIPprimalAddSolFree(primal, blkmem,
set, messagehdlr, stat, origprob, transprob, tree, reopt, lp,
4698 eventqueue, eventfilter, &sol, &foundsol) );
4760 assert(
set !=
NULL);
4761 assert(blkmem !=
NULL);
4762 assert(stat !=
NULL);
4763 assert(transprob !=
NULL);
4764 assert(tree !=
NULL);
4766 assert(pricestore !=
NULL);
4767 assert(sepastore !=
NULL);
4768 assert(branchcand !=
NULL);
4769 assert(cutpool !=
NULL);
4770 assert(delayedcutpool !=
NULL);
4771 assert(primal !=
NULL);
4772 assert(eventfilter !=
NULL);
4773 assert(eventqueue !=
NULL);
4774 assert(restart !=
NULL);
4777 restartfac =
set->presol_subrestartfac;
4779 restartfac =
MIN(restartfac, set->presol_restartfac);
4785 if( set->conf_restartnum > 0 )
4789 restartconfnum = (
SCIP_Real)set->conf_restartnum;
4790 for( i = 0; i < stat->nconfrestarts; ++i )
4791 restartconfnum *=
set->conf_restartfac;
4795 assert(restartconfnum >= 0.0);
4833 if( nextnode ==
NULL )
4838 focusnode = nextnode;
4846 SCIP_CALL(
SCIPnodeFocus(&focusnode, blkmem,
set, messagehdlr, stat, transprob, origprob, primal, tree, reopt,
4847 lp, branchcand, conflict, conflictstore, eventfilter, eventqueue, cliquetable, &cutoff,
FALSE,
FALSE) );
4862 if( focusnode ==
NULL )
4885 SCIP_CALL(
solveNode(blkmem,
set, messagehdlr, stat, mem, origprob, transprob, primal, tree, reopt, lp, relaxation,
4886 pricestore, sepastore, branchcand, cutpool, delayedcutpool, conflict, conflictstore, eventfilter, eventqueue,
4887 cliquetable, &cutoff, &postpone, &unbounded, &infeasible, restart, &afternodeheur, &stopped) );
4888 assert(!cutoff || infeasible);
4899 if( !(*restart) && !postpone )
4942 SCIP_CALL(
addCurrentSolution(blkmem,
set, messagehdlr, stat, origprob, transprob, primal, relaxation, tree, reopt,
4943 lp, eventqueue, eventfilter,
FALSE) );
4946 SCIP_CALL(
applyBounding(blkmem,
set, stat, transprob, origprob, primal, tree, reopt, lp, branchcand, eventqueue, conflict, cliquetable, &cutoff) );
4957 if( set->reopt_enable )
4959 assert(reopt !=
NULL);
4966 else if( !unbounded )
4987 if( set->reopt_enable )
4989 assert(reopt !=
NULL);
5009 if( set->reopt_enable )
5011 assert(reopt !=
NULL);
5036 assert(set->misc_exactsolve);
5046 SCIPerrorMessage(
"cannot branch on all-fixed LP -- have to call PerPlex instead\n");
5069 if( !afternodeheur && (!cutoff || nnodes > 0) && !stopped )
5072 cutoff, &foundsol, &unbounded) );
5086 else if( !infeasible && !postpone )
5092 SCIP_CALL(
addCurrentSolution(blkmem,
set, messagehdlr, stat, origprob, transprob, primal, relaxation, tree, reopt, lp,
5093 eventqueue, eventfilter,
TRUE) );
5095 if( set->reopt_enable )
5097 assert(reopt !=
NULL);
5109 SCIP_CALL(
SCIPnodeFocus(&newfocusnode, blkmem,
set, messagehdlr, stat, transprob, origprob, primal, tree, reopt, lp,
5110 branchcand, conflict, conflictstore, eventfilter, eventqueue, cliquetable, &cutoff,
TRUE,
FALSE) );
5118 if( nsuccessconflicts >= restartconfnum &&
restartAllowed(
set, stat) )
5121 "(run %d, node %" SCIP_LONGINT_FORMAT
") restarting after %" SCIP_LONGINT_FORMAT
" successful conflict analysis calls\n",
5135 "(run %d, node %" SCIP_LONGINT_FORMAT
") restarting: triggering parameter controlled restart)\n",
5151 SCIPsetDebugMsg(
set,
"Processing of node %" SCIP_LONGINT_FORMAT
" in depth %d finished. %d siblings, %d children, %d leaves left\n",
5153 SCIPsetDebugMsg(
set,
"**********************************************************************\n");
5179 if( set->reopt_enable )
5181 assert(reopt !=
NULL);
5188 SCIP_CALL(
SCIPnodeFocus(&focusnode, blkmem,
set, messagehdlr, stat, transprob, origprob, primal, tree, reopt, lp,
5189 branchcand, conflict, conflictstore, eventfilter, eventqueue, cliquetable, &cutoff,
FALSE,
FALSE) );
5201 if( primal->
nsols > 0 )
enum SCIP_Result SCIP_RESULT
internal methods for separators
SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
enum SCIP_BoundType SCIP_BOUNDTYPE
#define SCIP_HEURTIMING_DURINGLPLOOP
SCIP_RETCODE SCIPlpGetProvedLowerbound(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *bound)
void SCIPpricestoreEndInitialLP(SCIP_PRICESTORE *pricestore)
SCIP_Bool SCIPsolveIsStopped(SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool checknodelimits)
SCIP_RETCODE SCIPconshdlrEnforcePseudoSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_BRANCHCAND *branchcand, SCIP_Bool solinfeasible, SCIP_Bool objinfeasible, SCIP_Bool forced, SCIP_RESULT *result)
static SCIP_RETCODE solveNodeInitialLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool newinitconss, SCIP_Bool *cutoff, SCIP_Bool *lperror)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Longint ninfeasleaves
SCIP_RETCODE SCIPconflictAnalyzeLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *success)
#define SCIP_EVENTTYPE_LPSOLVED
SCIP_Real firstlpdualbound
SCIP_Bool SCIPrelaxIncludesLp(SCIP_RELAX *relax)
static SCIP_RETCODE applyBounding(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CONFLICT *conflict, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff)
internal methods for managing events
static SCIP_RETCODE solveNodeLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_MEM *mem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_CUTPOOL *delayedcutpool, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool initiallpsolved, SCIP_Bool fullseparation, SCIP_Bool newinitconss, SCIP_Bool *propagateagain, SCIP_Bool *solverelaxagain, SCIP_Bool *cutoff, SCIP_Bool *unbounded, SCIP_Bool *lperror, SCIP_Bool *pricingaborted)
SCIP_Longint nnodelpiterations
static void markRelaxsUnsolved(SCIP_SET *set, SCIP_RELAXATION *relaxation)
int SCIPheurGetPriority(SCIP_HEUR *heur)
static SCIP_RETCODE separationRoundLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, int actdepth, SCIP_Real bounddist, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *enoughcuts, SCIP_Bool *cutoff, SCIP_Bool *lperror, SCIP_Bool *mustsepa, SCIP_Bool *mustprice)
SCIP_BRANCHINGDATA branchingdata
SCIP_RETCODE SCIPnodeCreateChild(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_Real nodeselprio, SCIP_Real estimate)
SCIP_RETCODE SCIPconshdlrEnforceLPSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_SEPASTORE *sepastore, SCIP_Bool solinfeasible, SCIP_RESULT *result)
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Longint nlpsolsfound
internal methods for storing primal CIP solutions
SCIP_Bool SCIPtreeHasFocusNodeLP(SCIP_TREE *tree)
SCIP_Longint nlpiterations
const char * SCIPpricerGetName(SCIP_PRICER *pricer)
SCIP_Bool SCIPlpDiving(SCIP_LP *lp)
SCIP_BDCHGINFO * SCIPvarGetBdchgInfoLb(SCIP_VAR *var, int pos)
#define SCIPdebugRemoveNode(blkmem, set, node)
SCIP_RETCODE SCIPreoptApplyCuts(SCIP_REOPT *reopt, SCIP_NODE *node, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Bool root)
void SCIPlpSetIsRelax(SCIP_LP *lp, SCIP_Bool relax)
SCIP_Longint externmemestim
internal methods for branch and bound tree
void SCIPtreeSetFocusNodeLP(SCIP_TREE *tree, SCIP_Bool solvelp)
SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
static SCIP_RETCODE updatePrimalRay(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_Bool lperror)
enum SCIP_Efficiacychoice SCIP_EFFICIACYCHOICE
int SCIPgetNConcurrentSolvers(SCIP *scip)
unsigned int boundchgtype
int SCIPpricestoreGetNVars(SCIP_PRICESTORE *pricestore)
SCIP_RETCODE SCIPlpFlush(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue)
void SCIPprobUpdateBestRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE updateEstimate(SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand)
SCIP_Real SCIPnodeGetLowerbound(SCIP_NODE *node)
SCIP_RETCODE SCIPdispPrintLine(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, FILE *file, SCIP_Bool forcedisplay, SCIP_Bool endline)
SCIP_Longint ninitconssadded
static SCIP_Bool isPseudocostUpdateValid(SCIP_VAR *var, SCIP_SET *set, SCIP_Real oldlpsolval, SCIP_Bool updateintegers, SCIP_Bool updatecontinuous)
SCIP_RETCODE SCIPtreeSetNodesel(SCIP_TREE *tree, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_NODESEL *nodesel)
SCIP_RETCODE SCIPeventChgType(SCIP_EVENT *event, SCIP_EVENTTYPE eventtype)
SCIP_Bool SCIPvarIsInitial(SCIP_VAR *var)
SCIP_RETCODE SCIPprimalTrySol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
internal methods for clocks and timing issues
void SCIPstatUpdateMemsaveMode(SCIP_STAT *stat, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_MEM *mem)
int SCIPbranchcandGetNPseudoCands(SCIP_BRANCHCAND *branchcand)
unsigned int SCIP_HEURTIMING
SCIP_BOUNDCHG * boundchgs
SCIP_Real lastbranchvalue
SCIP_Longint nrootfirstlpiterations
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
int SCIPpropGetPriority(SCIP_PROP *prop)
SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
#define SCIP_HEURTIMING_BEFORENODE
void SCIPrelaxationSetSolValid(SCIP_RELAXATION *relaxation, SCIP_Bool isvalid)
SCIP_BRANCHDIR lastbranchdir
void SCIPsepastoreStartForceCuts(SCIP_SEPASTORE *sepastore)
SCIP_RETCODE SCIPconstructCurrentLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool newinitconss, SCIP_Bool *cutoff)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_Real SCIPrelaxationGetBestRelaxSolObj(SCIP_RELAXATION *relaxation)
SCIP_Real SCIPlpGetGlobalPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
int SCIPsepastoreGetNCutsApplied(SCIP_SEPASTORE *sepastore)
#define SCIP_PROPTIMING_DURINGLPLOOP
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPsetSortHeurs(SCIP_SET *set)
SCIP_RETCODE SCIPeventProcess(SCIP_EVENT *event, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
int SCIPvarGetNBdchgInfosLb(SCIP_VAR *var)
SCIP_NODESEL * SCIPsetGetNodesel(SCIP_SET *set, SCIP_STAT *stat)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPbranchExecPseudo(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real cutoffbound, SCIP_Bool allowaddcons, SCIP_RESULT *result)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPresetInterrupted(void)
SCIP_Bool SCIPreoptGetSolveLP(SCIP_REOPT *reopt, SCIP_SET *set, SCIP_NODE *node)
SCIP_RETCODE SCIPconshdlrInitLP(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_Bool initkeptconss, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPheurExec(SCIP_HEUR *heur, SCIP_SET *set, SCIP_PRIMAL *primal, int depth, int lpstateforkdepth, SCIP_HEURTIMING heurtiming, SCIP_Bool nodeinfeasible, int *ndelayedheurs, SCIP_RESULT *result)
const char * SCIPsepaGetName(SCIP_SEPA *sepa)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPtreeLoadLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
#define SCIP_HEURTIMING_AFTERNODE
#define SCIP_EVENTTYPE_NODEFOCUSED
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
#define SCIPsetAllocBufferArray(set, ptr, num)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
SCIP_RETCODE SCIPsolSetUnknown(SCIP_SOL *sol, SCIP_STAT *stat, SCIP_TREE *tree)
int SCIPvarGetProbindex(SCIP_VAR *var)
enum SCIP_VerbLevel SCIP_VERBLEVEL
internal methods for branching rules and branching candidate storage
void SCIPbranchcandClearExternCands(SCIP_BRANCHCAND *branchcand)
#define SCIP_HEURTIMING_AFTERLPLOOP
SCIP_NODE * SCIPtreeGetFocusNode(SCIP_TREE *tree)
void SCIPregressionAddObservation(SCIP_REGRESSION *regression, SCIP_Real x, SCIP_Real y)
SCIP_RETCODE SCIPeventChgNode(SCIP_EVENT *event, SCIP_NODE *node)
SCIP_RETCODE SCIPlpSolveAndEval(SCIP_LP *lp, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_Longint itlim, SCIP_Bool limitresolveiters, SCIP_Bool aging, SCIP_Bool keepsol, SCIP_Bool *lperror)
SCIP_Real SCIPlpGetPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
#define SCIP_HEURTIMING_DURINGPRICINGLOOP
SCIP_RETCODE SCIPconshdlrSeparateLP(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
void SCIPvisualSolvedNode(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_NODE *node)
SCIP_Longint nnodesaboverefbound
SCIP_SOL * SCIPrelaxationGetBestRelaxSol(SCIP_RELAXATION *relaxation)
SCIP_Bool SCIPrelaxationIsSolValid(SCIP_RELAXATION *relaxation)
int SCIPnodeGetDepth(SCIP_NODE *node)
methods for creating output for visualization tools (VBC, BAK)
SCIP_RETCODE SCIPvarUpdatePseudocost(SCIP_VAR *var, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real solvaldelta, SCIP_Real objdelta, SCIP_Real weight)
#define SCIPsetFreeBufferArray(set, ptr)
enum SCIP_LPSolStat SCIP_LPSOLSTAT
static void updateLoopStatus(SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, int depth, SCIP_Bool *cutoff, SCIP_Bool *propagateagain, SCIP_Bool *solverelaxagain)
SCIP_LPSOLSTAT SCIPlpGetSolstat(SCIP_LP *lp)
SCIP_Longint nlpbestsolsfound
static SCIP_RETCODE priceAndCutLoop(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_MEM *mem, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_CUTPOOL *delayedcutpool, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool fullseparation, SCIP_Bool *propagateagain, SCIP_Bool *cutoff, SCIP_Bool *unbounded, SCIP_Bool *lperror, SCIP_Bool *pricingaborted)
#define SCIPstatIncrement(stat, set, field)
internal methods for LP management
SCIP_Bool SCIPtreeIsFocusNodeLPConstructed(SCIP_TREE *tree)
void SCIPpricestoreStartInitialLP(SCIP_PRICESTORE *pricestore)
int SCIPconshdlrGetSepaPriority(SCIP_CONSHDLR *conshdlr)
static SCIP_RETCODE enforceConstraints(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_Bool *branched, SCIP_Bool *cutoff, SCIP_Bool *infeasible, SCIP_Bool *propagateagain, SCIP_Bool *solvelpagain, SCIP_Bool *solverelaxagain, SCIP_Bool forced)
SCIP_PROPTIMING SCIPconshdlrGetPropTiming(SCIP_CONSHDLR *conshdlr)
int SCIPpricestoreGetNBoundResets(SCIP_PRICESTORE *pricestore)
internal methods for collecting primal CIP solutions and primal informations
#define SCIP_HEURTIMING_AFTERPSEUDOPLUNGE
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
int SCIPsetGetSepaMaxcuts(SCIP_SET *set, SCIP_Bool root)
SCIP_RETCODE SCIPnodeselSelect(SCIP_NODESEL *nodesel, SCIP_SET *set, SCIP_NODE **selnode)
int SCIPlpGetNCols(SCIP_LP *lp)
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
internal methods for propagators
void SCIPrelaxationSetBestRelaxSolObj(SCIP_RELAXATION *relaxation, SCIP_Real obj)
#define SCIP_EVENTTYPE_NODEFEASIBLE
SCIP_Longint SCIPgetConcurrentMemTotal(SCIP *scip)
int SCIPtreeGetFocusDepth(SCIP_TREE *tree)
SCIP_RETCODE SCIPsepaExecSol(SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
#define SCIP_EVENTTYPE_NODEBRANCHED
SCIP_RETCODE SCIPbranchExecLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real cutoffbound, SCIP_Bool allowaddcons, SCIP_RESULT *result)
int SCIPvarGetNBdchgInfosUb(SCIP_VAR *var)
SCIP_Real SCIPprobGetObjlim(SCIP_PROB *prob, SCIP_SET *set)
int SCIPbranchcandGetNExternCands(SCIP_BRANCHCAND *branchcand)
SCIP_RETCODE SCIPconflictAnalyzePseudo(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *success)
SCIP_RETCODE SCIPsolveCIP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_MEM *mem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_CUTPOOL *delayedcutpool, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *restart)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPclockGetLastTime(SCIP_CLOCK *clck)
SCIP_Bool forcinglpmessage
SCIP_Bool SCIPtreeProbing(SCIP_TREE *tree)
BMS_BUFMEM * SCIPbuffer(SCIP *scip)
void SCIPnodeUpdateLowerbound(SCIP_NODE *node, SCIP_STAT *stat, SCIP_SET *set, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real newbound)
SCIP_Real SCIPvarGetPseudocost(SCIP_VAR *var, SCIP_STAT *stat, SCIP_Real solvaldelta)
SCIP_Real SCIPsolGetObj(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
SCIP_Longint npssolsfound
const char * SCIPheurGetName(SCIP_HEUR *heur)
SCIP_RETCODE SCIPprimalTrySolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL **sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
internal methods for storing and manipulating the main problem
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...)
void SCIPstoreSolutionGap(SCIP *scip)
SCIP_Longint nbestsolsfound
methods for block memory pools and memory buffers
#define SCIP_HEURTIMING_AFTERLPNODE
SCIP_RETCODE SCIPnodeFocus(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff, SCIP_Bool postponed, SCIP_Bool exitsolve)
SCIP_RETCODE SCIPsolCreateCurrentSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
SCIP_CLOCK * pseudosoltime
void SCIPnodeMarkPropagated(SCIP_NODE *node, SCIP_TREE *tree)
SCIP_Longint nrelaxbestsolsfound
SCIP_NODE * focuslpstatefork
SCIP_RETCODE SCIPsolSetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_Real val)
int SCIPrelaxGetPriority(SCIP_RELAX *relax)
SCIP_Longint ninitlpiterations
int SCIPsepastoreGetNCuts(SCIP_SEPASTORE *sepastore)
SCIP_RETCODE SCIPcheckSolOrig(SCIP *scip, SCIP_SOL *sol, SCIP_Bool *feasible, SCIP_Bool printreason, SCIP_Bool completely)
static SCIP_RETCODE propagationRound(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, int depth, SCIP_Bool fullpropagation, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *propagain, SCIP_PROPTIMING timingmask, SCIP_Bool *cutoff, SCIP_Bool *postpone)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
static SCIP_RETCODE addCurrentSolution(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_PRIMAL *primal, SCIP_RELAXATION *relaxation, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_Bool checksol)
SCIP_Bool SCIPnodeIsPropagatedAgain(SCIP_NODE *node)
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
#define SCIPsetReallocBufferArray(set, ptr, num)
SCIP_RETCODE SCIPbranchcandGetLPCands(SCIP_BRANCHCAND *branchcand, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars)
SCIP_REGRESSION * regressioncandsobjval
SCIP_RETCODE SCIPtreeLoadLP(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Bool *initroot)
SCIP_RETCODE SCIPvarSetRelaxSol(SCIP_VAR *var, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_Real solval, SCIP_Bool updateobj)
SCIP_Real SCIPvarGetLPSol(SCIP_VAR *var)
internal methods for node selectors and node priority queues
internal methods for variable pricers
const char * SCIPrelaxGetName(SCIP_RELAX *relax)
#define SCIP_PROPTIMING_AFTERLPLOOP
void SCIPsetSortProps(SCIP_SET *set)
internal methods for global SCIP settings
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_RETCODE SCIPconshdlrEnforceRelaxSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_SEPASTORE *sepastore, SCIP_SOL *relaxsol, SCIP_Bool solinfeasible, SCIP_RESULT *result)
#define SCIP_HEURTIMING_DURINGPRESOLLOOP
int SCIPlpGetNRows(SCIP_LP *lp)
void SCIPrelaxMarkUnsolved(SCIP_RELAX *relax)
static SCIP_RETCODE updatePseudocost(SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_Bool updateintegers, SCIP_Bool updatecontinuous)
enum PseudocostFlag PSEUDOCOSTFLAG
SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
#define SCIP_HEURTIMING_BEFOREPRESOL
internal methods for storing priced variables
internal methods for relaxators
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_LPI * SCIPlpGetLPI(SCIP_LP *lp)
SCIP_Real SCIPlpGetObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
internal methods for storing separated cuts
void SCIPsetSortRelaxs(SCIP_SET *set)
methods for catching the user CTRL-C interrupt
data structures and methods for collecting reoptimization information
internal methods for problem variables
the function declarations for the synchronization store
void SCIPnodeSetEstimate(SCIP_NODE *node, SCIP_SET *set, SCIP_Real newestimate)
SCIP_Bool SCIPsepaWasLPDelayed(SCIP_SEPA *sepa)
SCIP_Longint nisstoppedcalls
static SCIP_RETCODE solveNodeRelax(SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob, SCIP_PROB *origprob, int depth, SCIP_Bool beforelp, SCIP_Bool *cutoff, SCIP_Bool *propagateagain, SCIP_Bool *solvelpagain, SCIP_Bool *solverelaxagain, SCIP_Bool *relaxcalled)
public data structures and miscellaneous methods
SCIP_RETCODE SCIPvarIncCutoffSum(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
SCIP_RETCODE SCIPpricestoreApplyVars(SCIP_PRICESTORE *pricestore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
SCIP_Bool SCIPinterrupted(void)
SCIP_RETCODE SCIPreoptCheckCutoff(SCIP_REOPT *reopt, SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_NODE *node, SCIP_EVENTTYPE eventtype, SCIP_LP *lp, SCIP_LPSOLSTAT lpsolstat, SCIP_Bool isrootnode, SCIP_Bool isfocusnode, SCIP_Real lowerbound, int effectiverootdepth)
SCIP_Bool SCIPrelaxIsSolved(SCIP_RELAX *relax, SCIP_STAT *stat)
SCIP_Bool SCIPconshdlrWasPropagationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPprintRay(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
SCIP_SYNCSTORE * SCIPgetSyncstore(SCIP *scip)
SCIP_Bool branchedunbdvar
SCIP_RETCODE SCIPsolCreate(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
SCIP_Real SCIPgetGap(SCIP *scip)
SCIP_Bool SCIPheurShouldBeExecuted(SCIP_HEUR *heur, int depth, int lpstateforkdepth, SCIP_HEURTIMING heurtiming, SCIP_Bool *delayed)
SCIP_RETCODE SCIPpricestoreAddProbVars(SCIP_PRICESTORE *pricestore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue)
static SCIP_Bool restartAllowed(SCIP_SET *set, SCIP_STAT *stat)
#define SCIP_EVENTTYPE_NODEINFEASIBLE
SCIP_Bool SCIPconshdlrWasLPSeparationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp)
SCIP_RETCODE SCIPconshdlrPropagate(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool fullpropagation, SCIP_Bool execdelayed, SCIP_Bool instrongbranching, SCIP_PROPTIMING proptiming, SCIP_RESULT *result)
static SCIP_RETCODE propagateDomains(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, int depth, int maxproprounds, SCIP_Bool fullpropagation, SCIP_PROPTIMING timingmask, SCIP_Bool *cutoff, SCIP_Bool *postpone)
SCIP_RETCODE SCIPpricestoreAddVar(SCIP_PRICESTORE *pricestore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_VAR *var, SCIP_Real score, SCIP_Bool root)
SCIP_RETCODE SCIPpropagateDomains(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CONFLICT *conflict, SCIP_CLIQUETABLE *cliquetable, int depth, int maxproprounds, SCIP_PROPTIMING timingmask, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPsepaExecLP(SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, int depth, SCIP_Real bounddist, SCIP_Bool execdelayed, SCIP_RESULT *result)
SCIP_Bool SCIPtreeHasCurrentNodeLP(SCIP_TREE *tree)
int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
#define SCIP_PROPTIMING_BEFORELP
SCIP_RETCODE SCIPseparationRound(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int actdepth, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *cutoff)
internal methods for storing cuts in a cut pool
SCIP_Real SCIPvarGetRelaxSol(SCIP_VAR *var, SCIP_SET *set)
void SCIPsepastoreEndInitialLP(SCIP_SEPASTORE *sepastore)
SCIP_RETCODE SCIPlpRemoveRedundantRows(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
#define SCIP_EVENTTYPE_FIRSTLPSOLVED
SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_CLOCK * relaxsoltime
void SCIPsepastoreStartInitialLP(SCIP_SEPASTORE *sepastore)
void SCIPprobStoreRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool roothaslp)
helper functions for concurrent scip solvers
static SCIP_RETCODE solveNode(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_MEM *mem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_CUTPOOL *cutpool, SCIP_CUTPOOL *delayedcutpool, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff, SCIP_Bool *postpone, SCIP_Bool *unbounded, SCIP_Bool *infeasible, SCIP_Bool *restart, SCIP_Bool *afternodeheur, SCIP_Bool *stopped)
const char * SCIPpropGetName(SCIP_PROP *prop)
SCIP_BDCHGINFO * SCIPvarGetBdchgInfoUb(SCIP_VAR *var, int pos)
SCIP_Longint nrootlpiterations
SCIP_RETCODE SCIPpricestoreResetBounds(SCIP_PRICESTORE *pricestore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue)
SCIP_DOMCHGBOUND domchgbound
SCIP_RETCODE SCIPprimalHeuristics(SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_NODE *nextnode, SCIP_HEURTIMING heurtiming, SCIP_Bool nodeinfeasible, SCIP_Bool *foundsol, SCIP_Bool *unbounded)
SCIP_RETCODE SCIPprimalAddSolFree(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL **sol, SCIP_Bool *stored)
SCIP_Bool SCIPsepaWasSolDelayed(SCIP_SEPA *sepa)
SCIP_Bool SCIPpropWasDelayed(SCIP_PROP *prop)
SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
unsigned int SCIP_PROPTIMING
internal methods for conflict analysis
SCIP_RETCODE SCIPpriceLoop(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool pretendroot, SCIP_Bool displayinfo, int maxpricerounds, int *npricedcolvars, SCIP_Bool *mustsepa, SCIP_Bool *lperror, SCIP_Bool *aborted)
internal methods for main solving loop and node processing
size_t BMSgetNUsedBufferMemory(BMS_BUFMEM *buffer)
SCIP_RETCODE SCIPsolCreateLPSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
SCIP_PROPTIMING SCIPpropGetTimingmask(SCIP_PROP *prop)
unsigned int pseudocostflag
SCIP_Longint npsbestsolsfound
SCIP_RETCODE SCIPsepastoreApplyCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPpropExec(SCIP_PROP *prop, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool execdelayed, SCIP_Bool instrongbranching, SCIP_PROPTIMING proptiming, SCIP_RESULT *result)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPprimalAddSol(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_SOL *sol, SCIP_Bool *stored)
#define SCIP_HEURTIMING_AFTERPSEUDONODE
SCIP_NODETYPE SCIPnodeGetType(SCIP_NODE *node)
SCIP_Longint SCIPgetNBestSolsFound(SCIP *scip)
void SCIPvisualCutoffNode(SCIP_VISUAL *visual, SCIP_SET *set, SCIP_STAT *stat, SCIP_NODE *node, SCIP_Bool infeasible)
internal methods for problem statistics
void SCIPstatUpdatePrimalDualIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real upperbound, SCIP_Real lowerbound)
static SCIP_RETCODE cutpoolSeparate(SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_Bool cutpoolisdelayed, SCIP_Bool root, int actdepth, SCIP_Bool *enoughcuts, SCIP_Bool *cutoff)
SCIP_Bool SCIPlpIsSolved(SCIP_LP *lp)
static SCIP_RETCODE initLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_Bool *cutoff)
void SCIPsetSortPricers(SCIP_SET *set)
SCIP_RETCODE SCIPconflictFlushConss(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable)
SCIP_Longint ntotalinternalnodes
internal methods for constraints and constraint handlers
SCIP_Bool SCIPlpIsRelax(SCIP_LP *lp)
static SCIP_RETCODE propAndSolve(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_MEM *mem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PRICESTORE *pricestore, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_CUTPOOL *cutpool, SCIP_CUTPOOL *delayedcutpool, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_NODE *focusnode, int actdepth, SCIP_Bool propagate, SCIP_Bool solvelp, SCIP_Bool solverelax, SCIP_Bool forcedlpsolve, SCIP_Bool initiallpsolved, SCIP_Bool fullseparation, SCIP_Longint *afterlpproplps, SCIP_HEURTIMING *heurtiming, int *nlperrors, SCIP_Bool *fullpropagation, SCIP_Bool *propagateagain, SCIP_Bool *lpsolved, SCIP_Bool *relaxcalled, SCIP_Bool *solvelpagain, SCIP_Bool *solverelaxagain, SCIP_Bool *cutoff, SCIP_Bool *postpone, SCIP_Bool *unbounded, SCIP_Bool *stopped, SCIP_Bool *lperror, SCIP_Bool *pricingaborted, SCIP_Bool *forcedenforcement)
SCIP_RETCODE SCIPcutpoolSeparate(SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, SCIP_Bool cutpoolisdelayed, SCIP_Bool root, SCIP_RESULT *result)
SCIP_Bool SCIPsyncstoreSolveIsStopped(SCIP_SYNCSTORE *syncstore)
SCIP_Real SCIPgetOrigObjoffset(SCIP *scip)
SCIP_Bool SCIPnodeIsActive(SCIP_NODE *node)
SCIP_RETCODE SCIPlpGetPrimalRay(SCIP_LP *lp, SCIP_SET *set, SCIP_Real *ray)
SCIP_RETCODE SCIPnodeUpdateLowerboundLP(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Bool disableenforelaxmsg
SCIP_CLOCK * nodeactivationtime
#define SCIP_HEURTIMING_AFTERLPPLUNGE
SCIP_Longint SCIPgetNLimSolsFound(SCIP *scip)
SCIP_RETCODE SCIPconshdlrSeparateSol(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
SCIP_Longint ninternalnodes
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPtreeGetLowerbound(SCIP_TREE *tree, SCIP_SET *set)
SCIP_RETCODE SCIPtreeCutoff(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real cutoffbound)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_RETCODE SCIPsolCreatePseudoSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
#define BMSclearMemoryArray(ptr, num)
common defines and data types used in all packages of SCIP
SCIP_RETCODE SCIPpricerExec(SCIP_PRICER *pricer, SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_PRICESTORE *pricestore, SCIP_Real *lowerbound, SCIP_Bool *stopearly, SCIP_RESULT *result)
struct BMS_BlkMem BMS_BLKMEM
int SCIPtreeGetNLeaves(SCIP_TREE *tree)
internal methods for primal heuristics
enum SCIP_BoundchgType SCIP_BOUNDCHGTYPE
SCIP_Bool SCIPconshdlrWasSolSeparationDelayed(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsepastoreClearCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
SCIP_Longint nrelaxsolsfound
static SCIP_RETCODE applyCuts(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice, SCIP_Bool *cutoff, SCIP_Bool *propagateagain, SCIP_Bool *solvelpagain, SCIP_Bool *solverelaxagain)
SCIP_RETCODE SCIPbranchExecExtern(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real cutoffbound, SCIP_Bool allowaddcons, SCIP_RESULT *result)
int SCIPtreeGetNNodes(SCIP_TREE *tree)
SCIP_RETCODE SCIPinitConssLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_SEPASTORE *sepastore, SCIP_CUTPOOL *cutpool, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_Bool firstsubtreeinit, SCIP_Bool *cutoff)
SCIP_Longint nlimsolsfound
void SCIPsetSortSepas(SCIP_SET *set)
static SCIP_RETCODE separationRoundSol(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int actdepth, SCIP_Bool onlydelayed, SCIP_Bool *delayed, SCIP_Bool *enoughcuts, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPsolCheck(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *feasible)
void SCIPsepastoreEndForceCuts(SCIP_SEPASTORE *sepastore)
SCIP_RETCODE SCIPrelaxExec(SCIP_RELAX *relax, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Real *lowerbound, SCIP_RESULT *result)
int SCIPsepaGetPriority(SCIP_SEPA *sepa)
#define SCIP_HEURTIMING_AFTERPROPLOOP
static SCIP_RETCODE separationRoundResolveLP(BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_Bool *lperror, SCIP_Bool *mustsepa, SCIP_Bool *mustprice)
SCIP_Longint ndelayedcutoffs
SCIP_RETCODE SCIPsolFree(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_PRIMAL *primal)
int SCIPsetGetPriceMaxvars(SCIP_SET *set, SCIP_Bool root)
internal methods for displaying runtime statistics