* startcomponents;
121 intstartindicessize;
142 int* componentsstart;
145 intcomponentsstartsize;
147 int* startcomponents;
148 intstartindicessize;
151 int* gstartcomponents;
152 intgstartindicessize;
154 intgenvboundstoresize;
207assert(propdata !=
NULL);
208assert(var !=
NULL);
226assert(genvbound !=
NULL);
236 for( i = 0; i < genvbound->
ncoefs; i++ )
276assert(vars !=
NULL);
277assert(coefs !=
NULL);
282 for( i = 0; i < nvars; i++ )
297minval += coefs[i] *
bound;
317assert(vars !=
NULL);
318assert(coefs !=
NULL);
323 for( i = 0; i < nvars; i++ )
327 if( coefs[i] > 0.0 )
357minval += coefs[i] *
bound;
374assert(genvbound !=
NULL);
392#ifdef WITH_DEBUG_SOLUTION 406assert(genvbound !=
NULL);
408 if( !SCIPdebugIsMainscip(
scip) )
415 if( debugsol ==
NULL)
419 for( i = 0; i < genvbound->
ncoefs; i++ )
423activity += genvbound->
coefs[i] * solval;
425printf(
"***** debug: ignoring variable with %s value in debug solution\n",
458assert(propdata !=
NULL);
460assert(propdata->startcomponents ==
NULL);
461assert(propdata->startindices ==
NULL);
462assert(propdata->startmap ==
NULL);
463assert(propdata->nindices == -1);
465assert(propdata->gstartindices ==
NULL);
466assert(propdata->gstartcomponents ==
NULL);
467assert(propdata->ngindices == -1);
469assert(propdata->ngenvbounds >= 1);
470assert(propdata->ncomponents >= 1);
479propdata->startindicessize = propdata->ncomponents;
480propdata->gstartindicessize = propdata->ncomponents;
485propdata->nindices = 0;
486propdata->ngindices = 0;
499assert(propdata !=
NULL);
503 if( propdata->startcomponents !=
NULL)
505assert(propdata->startindices !=
NULL);
506assert(propdata->startmap !=
NULL);
507assert(propdata->nindices >= 0);
511propdata->startindicessize = 0;
513propdata->nindices = -1;
515assert(propdata->gstartindices !=
NULL);
516assert(propdata->gstartcomponents !=
NULL);
517assert(propdata->ngindices >= 0);
521propdata->gstartindicessize = 0;
522propdata->ngindices = -1;
525assert(propdata->startcomponents ==
NULL);
526assert(propdata->startindices ==
NULL);
527assert(propdata->startmap ==
NULL);
528assert(propdata->nindices == -1);
530assert(propdata->gstartindices ==
NULL);
531assert(propdata->gstartcomponents ==
NULL);
532assert(propdata->ngindices == -1);
546assert(propdata !=
NULL);
548assert(propdata->gstartindices !=
NULL);
549assert(propdata->gstartcomponents !=
NULL);
550assert(propdata->ngindices == 0);
554 for( i = 0; i < propdata->ncomponents; i++ )
558 for( j = propdata->componentsstart[i]; j < propdata->componentsstart[i+1]; j++ )
560assert(j < propdata->ngenvbounds);
562 if( !
SCIPisZero(
scip, propdata->genvboundstore[j]->cutoffcoef) )
566propdata->gstartcomponents[propdata->ngindices] = i;
567propdata->gstartindices[propdata->ngindices] = j;
570propdata->ngindices++;
577 if( propdata->gstartindicessize != propdata->ngindices )
580propdata->ngindices) );
582propdata->ngindices) );
583propdata->gstartindicessize = propdata->ngindices;
598assert(propdata !=
NULL);
599assert(propdata->startcomponents !=
NULL);
600assert(propdata->startindices !=
NULL);
601assert(propdata->startmap !=
NULL);
602assert(propdata->nindices >= 0);
605propdata->nindices = 0;
618assert(propdata !=
NULL);
622 if( propdata->componentsstart !=
NULL)
624assert(propdata->ncomponents > 0);
627propdata->componentsstartsize = 0;
628propdata->ncomponents = -1;
631assert(propdata->componentsstart ==
NULL);
632assert(propdata->ncomponents == -1);
647assert(genvbound !=
NULL);
650assert(genvbound->
var!=
NULL);
653 for( i = 0; i < genvbound->
ncoefs; ++i )
655assert(genvbound->
vars[i] !=
NULL);
678assert(propdata !=
NULL);
680 if( propdata->genvboundstore !=
NULL)
683 for( i = propdata->ngenvbounds - 1; i >= 0; i-- )
696propdata->ngenvbounds = 0;
705 if( propdata->cutoffboundvar !=
NULL)
709propdata->cutoffboundvar =
NULL;
728assert(propdata !=
NULL);
730 if( propdata->genvboundstore ==
NULL)
734freedgenvbound =
FALSE;
735 for( i = 0 ; i < propdata->ngenvbounds; )
737 if( propdata->genvboundstore[i]->relaxonly )
740propdata->genvboundstore[i]->var) );
743 if( i != propdata->ngenvbounds-1 )
745propdata->genvboundstore[i] = propdata->genvboundstore[propdata->ngenvbounds-1];
746propdata->genvboundstore[i]->index = i;
748--propdata->ngenvbounds;
750propdata->issorted =
FALSE;
751freedgenvbound =
TRUE;
757 if( freedgenvbound )
788assert(genvbound !=
NULL);
789assert(boundval !=
NULL);
790assert(success !=
NULL);
795lhsvar = genvbound->
var;
796assert(lhsvar !=
NULL);
799vars = genvbound->
vars;
800nvars = genvbound->
ncoefs;
801assert(vars !=
NULL);
822 SCIPdebugMsg(
scip,
"resolving genvbound propagation: lhs=%s<%s> >= boundval=%.15g\n",
826tmpboundval = *boundval;
828tmpboundval -= genvbound->
constant;
830 SCIPdebugMsg(
scip,
"subtracting constant terms gives boundval=%.15g\n", tmpboundval);
835 SCIPdebugMsg(
scip,
"minactivity of right-hand side is minactivity=%.15g\n", minactivity);
843 SCIPdebugMsg(
scip,
"minactivity is too small to explain propagation; was genvbound replaced?\n");
850slack =
MAX(minactivity - tmpboundval, 0.0);
855 for( i = 0; i < nvars; i++ )
857assert(vars[i] !=
NULL);
862 if( genvbound->
coefs[i] > 0.0 )
874 SCIPdebugMsg(
scip,
"lower bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
882 SCIPdebugMsg(
scip,
"skipping lower bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
890relaxedlb = lbatindex - (slack / genvbound->
coefs[i]);
891assert(relaxedlb <= lbatindex);
904slack -= genvbound->
coefs[i] * (lbatindex - relaxedlb);
905slack =
MAX(slack, 0.0);
907 SCIPdebugMsg(
scip,
"added lower bound of variable <%s> (genvbound->vars[%d]); new slack=%.15g\n",
924 SCIPdebugMsg(
scip,
"upper bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
932 SCIPdebugMsg(
scip,
"skipping upper bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
940relaxedub = ubatindex - (slack / genvbound->
coefs[i]);
941assert(relaxedub >= ubatindex);
954slack -= genvbound->
coefs[i] * (ubatindex - relaxedub);
955slack =
MAX(slack, 0.0);
957 SCIPdebugMsg(
scip,
"added upper bound of variable <%s> (genvbound->vars[%d]); new slack=%.15g\n",
965tmpboundval += slack;
969tmpboundval += genvbound->
constant;
976 SCIPdebugMsg(
scip,
"boundval was reduced from %.15g to %.15g; propagation not resolved\n", *boundval, tmpboundval);
981*boundval = tmpboundval;
997assert(genvbound !=
NULL);
1035 bound-= infeasthreshold;
1041 SCIPdebugMsg(
scip,
"strange: could not create initial reason to start conflict analysis\n");
1048 SCIPdebugMsg(
scip,
"skipping upper bound of left-hand side variable <%s> already enforced in conflict set\n",
1093 SCIPdebugMsg(
scip,
"strange: could not create initial reason to start conflict analysis\n");
1100 SCIPdebugMsg(
scip,
"skipping lower bound of left-hand side variable <%s> already enforced in conflict set\n",
1135assert(genvbound !=
NULL);
1136assert(genvbound->
var!=
NULL);
1138assert(result !=
NULL);
1162printGenVBound(
scip, genvbound);
1163 SCIPdebugMsg(
scip,
" [%.15g,%.15g] -> [%.15g,%.15g]\n", lb, ub, new_lb, new_ub);
1168 if( global || genvbound->
ncoefs<= 0 )
1191 SCIPdebugMsg(
scip,
" -> lower bound tightening on variable <%s> led to infeasibility\n",
1204 SCIPdebugMsg(
scip,
" -> upper bound tightening on variable <%s> led to infeasibility\n",
1218 else if( tightened )
1221 if( nchgbds !=
NULL)
1239 SCIPdebugMessage(
"event data: %s bound of <%s> tightened ==> start propagating at ",
1243assert(eventdata->nstarts > 0);
1245 for( i = 0; i < eventdata->nstarts; i++ )
1247 SCIPdebugPrintf(
"(component %d, index %d) ", eventdata->startcomponents[i], eventdata->startindices[i]);
1261assert(eventdata !=
NULL);
1262assert(*eventdata !=
NULL);
1267(*eventdata)->startindicessize = 0;
1268(*eventdata)->nstarts = -1;
1269(*eventdata)->var =
NULL;
1270(*eventdata)->prop =
NULL;
1287assert(propdata !=
NULL);
1289 if( propdata->lbevents !=
NULL)
1291assert(propdata->ubevents !=
NULL);
1292assert(propdata->lbeventsmap !=
NULL);
1293assert(propdata->ubeventsmap !=
NULL);
1298 for( i = propdata->nlbevents - 1; i >= 0; i-- )
1303 for( i = propdata->nubevents - 1; i >= 0; i-- )
1310propdata->nlbevents = -1;
1311propdata->nubevents = -1;
1314assert(propdata->lbevents ==
NULL);
1315assert(propdata->ubevents ==
NULL);
1316assert(propdata->lbeventsmap ==
NULL);
1317assert(propdata->ubeventsmap ==
NULL);
1318assert(propdata->nlbevents == -1);
1319assert(propdata->nubevents == -1);
1336assert(propdata !=
NULL);
1337assert(propdata->eventhdlr !=
NULL);
1339 if( propdata->lbevents !=
NULL)
1341assert(propdata->ubevents !=
NULL);
1342assert(propdata->nlbevents >= 0);
1343assert(propdata->nubevents >= 0);
1345 for( i = propdata->nlbevents - 1; i >= 0; i-- )
1349propdata->lbevents[i], -1) );
1352 for( i = propdata->nubevents - 1; i >= 0; i-- )
1356propdata->ubevents[i], -1) );
1363assert(propdata->lbevents ==
NULL);
1364assert(propdata->ubevents ==
NULL);
1365assert(propdata->nlbevents == -1);
1366assert(propdata->nubevents == -1);
1386assert(propdata !=
NULL);
1387assert(var !=
NULL);
1399(*eventdata)->startindicessize = propdata->ncomponents;
1400(*eventdata)->nstarts = 0;
1401(*eventdata)->var = var;
1402(*eventdata)->prop = propdata->prop;
1407propdata->lbevents[propdata->nlbevents] = *eventdata;
1408propdata->nlbevents++;
1412propdata->ubevents[propdata->nubevents] = *eventdata;
1413propdata->nubevents++;
1439assert(propdata !=
NULL);
1440assert(var !=
NULL);
1441assert(startindex >= 0);
1442assert(startcomponent >= 0);
1446assert(eventdata !=
NULL);
1448 if( eventdata->nstarts > 0 && eventdata->startcomponents[eventdata->nstarts - 1] == startcomponent )
1454assert(eventdata->startindices[eventdata->nstarts - 1] < startindex);
1459eventdata->startcomponents[eventdata->nstarts] = startcomponent;
1460eventdata->startindices[eventdata->nstarts] = startindex;
1463eventdata->nstarts++;
1479assert(propdata !=
NULL);
1480assert(propdata->eventhdlr !=
NULL);
1481assert(propdata->lbevents ==
NULL);
1482assert(propdata->ubevents ==
NULL);
1483assert(propdata->issorted);
1484assert(propdata->nlbevents == -1);
1485assert(propdata->nubevents == -1);
1495propdata->nlbevents = 0;
1496propdata->nubevents = 0;
1499 for( i = 0; i < propdata->ncomponents; i++ )
1504 for( j = propdata->componentsstart[i]; j < propdata->componentsstart[i+1]; j++ )
1509assert(j < propdata->ngenvbounds);
1511genvbound = propdata->genvboundstore[j];
1512assert(genvbound !=
NULL);
1515 for( k = 0; k < genvbound->
ncoefs; k++ )
1530assert(propdata->nlbevents <= nprobvars);
1531assert(propdata->nubevents <= nprobvars);
1532 if( propdata->nlbevents < nprobvars )
1536 if( propdata->nubevents < nprobvars )
1542 for( i = 0; i < propdata->nlbevents; i++ )
1546assert(eventdata !=
NULL);
1547assert(eventdata->nstarts > 0);
1548assert(eventdata->startcomponents !=
NULL);
1549assert(eventdata->startindices !=
NULL);
1552 if( eventdata->startindicessize != eventdata->nstarts )
1555eventdata->nstarts) );
1557eventdata->nstarts) );
1558eventdata->startindicessize = eventdata->nstarts;
1567 for( i = 0; i < propdata->nubevents; i++ )
1571assert(eventdata !=
NULL);
1572assert(eventdata->nstarts > 0);
1573assert(eventdata->startcomponents !=
NULL);
1574assert(eventdata->startindices !=
NULL);
1577 if( eventdata->startindicessize != eventdata->nstarts )
1580eventdata->nstarts) );
1582eventdata->nstarts) );
1583eventdata->startindicessize = eventdata->nstarts;
1618 int* strongcomponents;
1619 int* strongcompstartidx;
1624assert(propdata !=
NULL);
1625assert(propdata->componentsstart ==
NULL);
1633 for( i = 0; i < propdata->ngenvbounds; i++ )
1638assert(i < propdata->ngenvbounds);
1640genvbound = propdata->genvboundstore[i];
1642 for( j = 0; j < genvbound->
ncoefs; j++ )
1667propdata->componentsstartsize = propdata->ncomponents + 1;
1675propdata->componentsstart[propdata->ncomponents] = propdata->ngenvbounds;
1676 for( i = 0; i < propdata->ncomponents; i++ )
1681 intnstrongcomponents;
1684propdata->componentsstart[i] = sortedindex;
1690&nstrongcomponents) );
1692 for( j = 0; j <
nnodes; ++j )
1699node = strongcomponents[
nnodes- j - 1];
1701assert(node < propdata->ngenvbounds);
1702genvboundssorted[sortedindex] = propdata->genvboundstore[node];
1708 for( j = 0; j <
nnodes; j++ )
1710assert(nodes[j] < propdata->ngenvbounds);
1711genvboundssorted[sortedindex] = propdata->genvboundstore[nodes[j]];
1716assert(sortedindex == propdata->ngenvbounds);
1719 for( i = 0; i < propdata->ngenvbounds; i++ )
1721assert(genvboundssorted[i] !=
NULL);
1723propdata->genvboundstore[i] = genvboundssorted[i];
1724propdata->genvboundstore[i]->
index= i;
1737propdata->issorted =
TRUE;
1741 for( i = 0; i < propdata->ncomponents; i++ )
1747 for( j = propdata->componentsstart[i]; j < propdata->componentsstart[i+1]; j++ )
1750printGenVBound(
scip, propdata->genvboundstore[j]);
1771 int* startingcomponents;
1772 int* startingindices;
1776 SCIPdebugMsg(
scip,
"applying %s genvbound propagation in depth %d\n", global ?
1780assert(prop !=
NULL);
1781assert(result !=
NULL);
1784assert(propdata !=
NULL);
1785assert(propdata->genvboundstore !=
NULL);
1793 if( !propdata->issorted )
1799 for( j = 0; j < propdata->ngenvbounds && *result !=
SCIP_CUTOFF; j++ )
1807 SCIPdebugMsg(
scip,
"applying genvbound with index %d (unsorted mode)\n", j);
1816startingcomponents = global ? propdata->gstartcomponents : propdata->startcomponents;
1817startingindices = global ? propdata->gstartindices : propdata->startindices;
1818nindices = global ? propdata->ngindices : propdata->nindices;
1820 for( i = 0; i < nindices && *result !=
SCIP_CUTOFF; i++ )
1824 SCIPdebugMsg(
scip,
"starting in component %d at index %d\n", startingcomponents[i], startingindices[i]);
1825 for( j = startingindices[i]; j < propdata->componentsstart[startingcomponents[i] + 1] &&
1828assert(j < propdata->ngenvbounds);
1836 SCIPdebugMsg(
scip,
"applying genvbound with index %d, component %d\n", j, startingcomponents[i]);
1861assert(propdata !=
NULL);
1862assert(propdata->eventhdlr !=
NULL);
1869propdata->genvboundstoresize = 2 * nprobvars;
1872propdata->ngenvbounds = 0;
1892assert(propdata !=
NULL);
1893assert(genvbound !=
NULL);
1902assert(propdata->ngenvbounds <= propdata->genvboundstoresize);
1903 if( propdata->ngenvbounds == propdata->genvboundstoresize )
1905 intoldsize = propdata->genvboundstoresize;
1906propdata->genvboundstoresize = 2*propdata->genvboundstoresize + 1;
1912propdata->genvboundstore[propdata->ngenvbounds] = genvbound;
1913genvbound->
index= propdata->ngenvbounds;
1914propdata->ngenvbounds++;
1916assert(propdata->ngenvbounds <= propdata->genvboundstoresize);
1932assert(propdata !=
NULL);
1933assert(propdata->prop !=
NULL);
1934assert(result !=
NULL);
1941 if( !propdata->issorted )
1967 if( propdata->lbevents ==
NULL)
1976 if( propdata->ngindices > 0 )
1995 if( !propdata->issorted
2017assert(propdata !=
NULL);
2018assert(propdata->propasconss);
2021 if( propdata->cutoffboundvar ==
NULL)
2044assert(propdata->cutoffboundvar !=
NULL);
2047 for( i = 0; i < propdata->ngenvbounds; ++i )
2057genvbound = propdata->genvboundstore[i];
2058assert(genvbound !=
NULL);
2060nvars = genvbound->
ncoefs+ 2;
2067 for( j = 0; j < genvbound->
ncoefs; j++ )
2069vars[j] = genvbound->
vars[j];
2070vals[j] = genvbound->
coefs[j];
2075vars[genvbound->
ncoefs] = genvbound->
var;
2081vars[genvbound->
ncoefs+ 1] = propdata->cutoffboundvar;
2101 if( propdata->ngenvbounds > 0 )
2103assert(propdata->genvboundstore !=
NULL);
2105 for( i = propdata->ngenvbounds - 1; i >= 0; i-- )
2124propdata->genvboundstore =
NULL;
2125propdata->genvboundstoresize = 0;
2126propdata->ngenvbounds = 0;
2161assert(genvboundprop !=
NULL);
2163assert(vars !=
NULL);
2164assert(var !=
NULL);
2165assert(coefs !=
NULL);
2166assert(ncoefs >= 0);
2167assert(coefcutoffbound <= 0.0);
2172 SCIPerrorMessage(
"cannot create generalized variable bound from invalid data\n");
2177assert(propdata !=
NULL);
2180 if( propdata->genvboundstore ==
NULL)
2186newgenvbound = (genvbound ==
NULL);
2189 if( !newgenvbound )
2191 for( i = 0; i < genvbound->
ncoefs; ++i )
2193assert(genvbound->
vars[i] !=
NULL);
2199 if( !newgenvbound && genvbound->
ncoefs< ncoefs )
2210 else if( !newgenvbound && genvbound->
ncoefs== ncoefs )
2213 for( i = 0; i < ncoefs; i++ )
2215genvbound->
coefs[i] = coefs[i];
2216genvbound->
vars[i] = vars[i];
2219 else if( !newgenvbound && genvbound->
ncoefs> ncoefs )
2230 for( i = 0; i < ncoefs; i++ )
2232genvbound->
coefs[i] = coefs[i];
2233genvbound->
vars[i] = vars[i];
2236 else if( newgenvbound )
2249genvbound->
var= var;
2250genvbound->
ncoefs= ncoefs;
2255 for( i = 0; i < genvbound->
ncoefs; ++i )
2257assert(genvbound->
vars[i] !=
NULL);
2264assert(genvbound->
var!=
NULL);
2299propdata->issorted =
FALSE;
2304#ifdef WITH_DEBUG_SOLUTION 2305 SCIP_CALL( checkDebugSolutionGenVBound(
scip, genvbound) );
2324assert(prop !=
NULL);
2340assert(prop !=
NULL);
2345assert(propdata !=
NULL);
2347propdata->genvboundstore =
NULL;
2348propdata->genvboundstoresize = 0;
2349propdata->lbevents =
NULL;
2350propdata->ubevents =
NULL;
2351propdata->lbgenvbounds =
NULL;
2352propdata->ubgenvbounds =
NULL;
2353propdata->lbeventsmap =
NULL;
2354propdata->ubeventsmap =
NULL;
2355propdata->startmap =
NULL;
2356propdata->componentsstart =
NULL;
2357propdata->startindices =
NULL;
2358propdata->startcomponents =
NULL;
2359propdata->gstartindices =
NULL;
2360propdata->gstartcomponents =
NULL;
2362propdata->lastnodenumber = -1;
2363propdata->cutoffboundvar =
NULL;
2364propdata->ngenvbounds = -1;
2365propdata->ncomponents = -1;
2366propdata->nindices = -1;
2367propdata->ngindices = -1;
2368propdata->nlbevents = -1;
2369propdata->nubevents = -1;
2370propdata->issorted =
FALSE;
2372propdata->prop = prop;
2385assert(prop !=
NULL);
2395assert(propdata !=
NULL);
2400 if( propdata->ngenvbounds < 1 )
2420assert(prop !=
NULL);
2425assert(propdata !=
NULL);
2428 if( propdata->cutoffboundvar !=
NULL)
2430 SCIPdebugMsg(
scip,
"propinitpre in problem <%s>: locking cutoffboundvar (current downlocks=%d, uplocks=%d)\n",
2450assert(prop !=
NULL);
2453 SCIPdebugMsg(
scip,
"propexitpre in problem <%s>: removing fixed, aggregated, negated, and multi-aggregated variables from right-hand side\n",
2458assert(propdata !=
NULL);
2461assert(propdata->lbevents ==
NULL);
2462assert(propdata->ubevents ==
NULL);
2467 for( i = 0; i < propdata->ngenvbounds; )
2474genvbound = propdata->genvboundstore[i];
2475assert(genvbound !=
NULL);
2480nvars = genvbound->
ncoefs;
2488 if( requiredsize > genvbound->
ncoefs)
2491 if( genvbound->
coefssize< requiredsize )
2499assert(requiredsize <= genvbound->ncoefs);
2503 for( j = 0; j < genvbound->
ncoefs; ++j )
2505assert(genvbound->
vars[j] !=
NULL);
2508 for( j = 0; j < nvars; ++j )
2510assert(vars[j] !=
NULL);
2534--(propdata->ngenvbounds);
2537 if( i < propdata->ngenvbounds )
2539propdata->genvboundstore[i] = propdata->genvboundstore[propdata->ngenvbounds];
2540propdata->genvboundstore[i]->index = i;
2543propdata->issorted =
FALSE;
2562assert(prop !=
NULL);
2567assert(propdata !=
NULL);
2582assert(prop !=
NULL);
2593assert(propdata !=
NULL);
2596 if( propdata->cutoffboundvar !=
NULL)
2603assert(propdata->propasconss);
2615 SCIPdebugMsg(
scip,
"tightened UB of cutoffboundvar to %e (old: %e, infeas: %u, tightened: %u)\n",
2616newub, oldub, infeasible, tightened);
2619assert(infeasible ==
FALSE);
2627 if( propdata->ngenvbounds < 1 )
2635 if( propdata->propasconss )
2669assert(propdata !=
NULL);
2670assert(propdata->genvboundstore !=
NULL);
2675assert(inferinfo >= 0);
2676assert(inferinfo < propdata->ngenvbounds);
2681 if( inferinfo >= propdata->ngenvbounds)
2683 SCIPerrorMessage(
"generalized variable bounds propagator received inferinfo out of range; propagation not resolved, safe to continue\n");
2688genvbound = propdata->genvboundstore[inferinfo];
2689assert(genvbound !=
NULL);
2690assert(genvbound->
var== infervar);
2693 if( genvbound->
var!= infervar )
2695 SCIPerrorMessage(
"generalized variable bounds propagator received incorrect inferinfo; propagation not resolved, but it's safe to continue\n");
2712boundval =
MIN(boundval, roundedboundval);
2731assert(prop !=
NULL);
2738assert(propdata !=
NULL);
2767assert(propdata !=
NULL);
2790assert(eventdata !=
NULL);
2791assert(eventdata->startcomponents !=
NULL);
2792assert(eventdata->startindices !=
NULL);
2793assert(eventdata->nstarts > 0);
2794assert(eventdata->prop !=
NULL);
2801assert(propdata !=
NULL);
2803assert(propdata->startcomponents !=
NULL);
2804assert(propdata->startmap !=
NULL);
2805assert(propdata->startindices !=
NULL);
2821 for( i = 0; i < eventdata->nstarts; i++ )
2826component = eventdata->startcomponents[i];
2827assert(component >= 0);
2828startidx = eventdata->startindices[i];
2831 if(
SCIPhashmapExists(propdata->startmap, (
void*)(
size_t) (component + 1)) )
2837assert(componentidx >= 0);
2838assert(propdata->startcomponents[componentidx] == component);
2840 if( propdata->startindices[componentidx] > startidx )
2841propdata->startindices[componentidx] = startidx;
2847componentidx = propdata->nindices;
2850propdata->startcomponents[componentidx] = component;
2851propdata->startindices[componentidx] = startidx;
2857propdata->nindices++;
2881propExecGenvbounds, propdata) );
2895 "apply global propagation?",
2899 "apply genvbounds in root node if no new incumbent was found?",
2903 "sort genvbounds and wait for bound change events?",
2907 "should genvbounds be transformed to (linear) constraints?",
Constraint handler for linear constraints in their most general form, .
#define SCIPdebugCheckLbGlobal(scip, var, lb)
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugCheckUbGlobal(scip, var, ub)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPdigraphComputeUndirectedComponents(SCIP_DIGRAPH *digraph, int minsize, int *components, int *ncomponents)
int SCIPdigraphGetNNodes(SCIP_DIGRAPH *digraph)
void SCIPdigraphGetComponent(SCIP_DIGRAPH *digraph, int compidx, int **nodes, int *nnodes)
SCIP_RETCODE SCIPdigraphAddArc(SCIP_DIGRAPH *digraph, int startnode, int endnode, void *data)
SCIP_RETCODE SCIPdigraphTopoSortComponents(SCIP_DIGRAPH *digraph)
SCIP_RETCODE SCIPdigraphComputeDirectedComponents(SCIP_DIGRAPH *digraph, int compidx, int *strongcomponents, int *strongcompstartidx, int *nstrongcomponents)
void SCIPdigraphFree(SCIP_DIGRAPH **digraph)
int SCIPdigraphGetNComponents(SCIP_DIGRAPH *digraph)
SCIP_RETCODE SCIPcreateDigraph(SCIP *scip, SCIP_DIGRAPH **digraph, int nnodes)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
const char * SCIPgetProbName(SCIP *scip)
SCIP_Real SCIPgetTransObjoffset(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNFixedVars(SCIP *scip)
int SCIPgetNTotalVars(SCIP *scip)
SCIP_Real SCIPgetTransObjscale(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
SCIP_RETCODE SCIPhashmapRemoveAll(SCIP_HASHMAP *hashmap)
SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin)
#define SCIPdebugMsgPrint
SCIP_RETCODE SCIPgenVBoundAdd(SCIP *scip, SCIP_PROP *genvboundprop, SCIP_VAR **vars, SCIP_VAR *var, SCIP_Real *coefs, int ncoefs, SCIP_Real coefcutoffbound, SCIP_Real constant, SCIP_BOUNDTYPE boundtype)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPincludePropGenvbounds(SCIP *scip)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb)
SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success)
SCIP_RETCODE SCIPaddConflictRelaxedUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedub)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_Real SCIPgetConflictVarUb(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPgetConflictVarLb(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_Bool SCIPinProbing(SCIP *scip)
void SCIPpropSetData(SCIP_PROP *prop, SCIP_PROPDATA *propdata)
SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop)))
SCIP_PROPDATA * SCIPpropGetData(SCIP_PROP *prop)
SCIP_RETCODE SCIPsetPropPresol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPPRESOL((*proppresol)), int presolpriority, int presolmaxrounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetPropExitpre(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITPRE((*propexitpre)))
const char * SCIPpropGetName(SCIP_PROP *prop)
SCIP_RETCODE SCIPsetPropExit(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXIT((*propexit)))
SCIP_RETCODE SCIPsetPropInit(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINIT((*propinit)))
SCIP_RETCODE SCIPsetPropInitpre(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINITPRE((*propinitpre)))
SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree)))
SCIP_RETCODE SCIPsetPropCopy(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPCOPY((*propcopy)))
SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol)))
SCIP_RETCODE SCIPincludePropBasic(SCIP *scip, SCIP_PROP **propptr, const char *name, const char *desc, int priority, int freq, SCIP_Bool delay, SCIP_PROPTIMING timingmask, SCIP_DECL_PROPEXEC((*propexec)), SCIP_PROPDATA *propdata)
SCIP_Real SCIPgetSolTransObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Bool SCIPisInRestart(SCIP *scip)
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPgetDepth(SCIP *scip)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_RETCODE SCIPinferVarUbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsRelaxationOnly(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPallowWeakDualReds(SCIP *scip)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPinferVarLbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
int SCIPsnprintf(char *t, int len, const char *s,...)
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define PROP_PRESOL_MAXROUNDS
#define PROP_PRESOLTIMING
static SCIP_RETCODE addEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, int startindex, int startcomponent, SCIP_BOUNDTYPE boundtype)
static SCIP_RETCODE freeComponentsData(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_DECL_PROPRESPROP(propRespropGenvbounds)
#define DEFAULT_PROPAGATE_IN_ROOT_NODE
static SCIP_RETCODE analyzeGenVBoundConflict(SCIP *scip, GENVBOUND *genvbound)
static SCIP_DECL_PROPCOPY(propCopyGenvbounds)
static SCIP_RETCODE execGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_RESULT *result, SCIP_Bool local, int *nchgbds)
static SCIP_Real getGenVBoundsMinActivityConflict(SCIP *scip, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_BDCHGIDX *bdchgidx)
static SCIP_DECL_PROPINITPRE(propInitpreGenvbounds)
static SCIP_Real getGenVBoundsMinActivity(SCIP *scip, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_Bool global)
static SCIP_Real getGenVBoundsBound(SCIP *scip, GENVBOUND *genvbound, SCIP_Bool global)
static SCIP_RETCODE freeEventData(SCIP *scip, SCIP_EVENTDATA **eventdata)
static SCIP_RETCODE dropAndFreeEvents(SCIP *scip, SCIP_PROPDATA *propdata)
#define DEFAULT_PROPASCONSS
static SCIP_RETCODE setUpEvents(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_RETCODE sortGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_DECL_PROPEXEC(propExecGenvbounds)
static SCIP_DECL_PROPFREE(propFreeGenvbounds)
static SCIP_RETCODE fillGlobalStartingData(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_RETCODE resetLocalStartingData(SCIP *scip, SCIP_PROPDATA *propdata)
static GENVBOUND * getGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype)
static SCIP_RETCODE freeGenVBoundsRelaxOnly(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_RETCODE freeGenVBound(SCIP *scip, GENVBOUND *genvbound)
static SCIP_Real getCutoffboundGenVBound(SCIP *scip)
static SCIP_RETCODE applyGenVBounds(SCIP *scip, SCIP_PROP *prop, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds)
#define DEFAULT_GLOBAL_PROPAGATION
static SCIP_RETCODE freeStartingData(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_DECL_PROPEXITSOL(propExitsolGenvbounds)
static SCIP_RETCODE addNewGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, GENVBOUND *genvbound)
static SCIP_RETCODE getEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_EVENTDATA **eventdata)
static SCIP_DECL_EVENTEXEC(eventExecGenvbounds)
static SCIP_DECL_PROPPRESOL(propPresolGenvbounds)
static SCIP_RETCODE createStartingData(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_DECL_PROPEXITPRE(propExitpreGenvbounds)
static SCIP_DECL_PROPEXIT(propExitGenvbounds)
static SCIP_RETCODE applyGenVBound(SCIP *scip, SCIP_PROP *prop, GENVBOUND *genvbound, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds)
static SCIP_RETCODE freeAllEventData(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_DECL_PROPINIT(propInitGenvbounds)
static SCIP_RETCODE createConstraints(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_RETCODE resolveGenVBoundPropagation(SCIP *scip, GENVBOUND *genvbound, SCIP_BDCHGIDX *bdchgidx, SCIP_Real *boundval, SCIP_Bool *success)
static SCIP_RETCODE freeGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata)
static SCIP_RETCODE initPropdata(SCIP *scip, SCIP_PROPDATA *propdata)
#define PROP_PRESOL_PRIORITY
generalized variable bounds propagator
public methods for managing events
public methods for message output
public data structures and miscellaneous methods
public methods for propagators
public methods for branch and bound tree
public methods for problem variables
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for data structures
public methods for event handler plugins and event handlers
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for the probing mode
public methods for propagator plugins
public methods for solutions
public methods for querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
@ SCIP_CONFTYPE_PROPAGATION
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_UBTIGHTENED
#define SCIP_EVENTTYPE_LBTIGHTENED
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_PropData SCIP_PROPDATA
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4