88#define CONSHDLR_NAME "varbound"
89#define CONSHDLR_DESC "variable bounds lhs <= x + c*y <= rhs, x non-binary, y non-continuous"
90#define CONSHDLR_SEPAPRIORITY +900000
91#define CONSHDLR_ENFOPRIORITY -500000
92#define CONSHDLR_CHECKPRIORITY -500000
93#define CONSHDLR_SEPAFREQ 0
94#define CONSHDLR_PROPFREQ 1
95#define CONSHDLR_EAGERFREQ 100
97#define CONSHDLR_MAXPREROUNDS -1
98#define CONSHDLR_DELAYSEPA FALSE
99#define CONSHDLR_DELAYPROP FALSE
100#define CONSHDLR_NEEDSCONS TRUE
102#define CONSHDLR_PRESOLTIMING (SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_MEDIUM)
103#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
105#define EVENTHDLR_NAME "varbound"
106#define EVENTHDLR_DESC "bound change event handler for variable bound constraints"
108#define LINCONSUPGD_PRIORITY +50000
117#define DEFAULT_PRESOLPAIRWISE TRUE
118#define DEFAULT_MAXLPCOEF 1e+09
119#define DEFAULT_USEBDWIDENING TRUE
122#define MAXSCALEDCOEF 1000LL
136 unsigned int presolved:1;
137 unsigned int varboundsadded:1;
138 unsigned int changed:1;
139 unsigned int tightened:1;
143struct SCIP_ConshdlrData
204 && !consdata1->changed && consdata2->changed) )
208 && (consdata1->changed == consdata2->changed) )
228 (*conshdlrdata)->eventhdlr = eventhdlr;
319 SCIPerrorMessage(
"left hand side of varbound constraint greater than right hand side\n");
335 (*consdata)->var =
var;
336 (*consdata)->vbdvar = vbdvar;
337 (*consdata)->vbdcoef = vbdcoef;
338 (*consdata)->lhs = lhs;
339 (*consdata)->rhs = rhs;
340 (*consdata)->row =
NULL;
341 (*consdata)->nlrow =
NULL;
342 (*consdata)->presolved =
FALSE;
343 (*consdata)->varboundsadded =
FALSE;
344 (*consdata)->changed =
TRUE;
345 (*consdata)->tightened =
FALSE;
377 if( (*consdata)->row !=
NULL )
383 if( (*consdata)->nlrow !=
NULL )
435 if( conshdlr ==
NULL )
450 if( consdata->row ==
NULL )
484 if( consdata->nlrow ==
NULL )
489 assert(consdata->lhs <= consdata->rhs);
491 vars[0] = consdata->var;
492 vars[1] = consdata->vbdvar;
495 coefs[1] = consdata->vbdcoef;
527 SCIPdebugMsg(
scip,
"checking variable bound constraint <%s> for feasibility of solution %p (lprows=%u)\n",
539 absviol =
MAX(consdata->lhs - sum, sum - consdata->rhs);
542 relviol =
MAX(lhsrelviol, rhsrelviol);
585 vbdvar = consdata->vbdvar;
588 vbdcoef = consdata->vbdcoef;
674 assert(infervar == vbdvar);
861 assert(infervar == vbdvar);
1010 relaxedub = inferbd - 1.0;
1020 assert(infervar == consdata->var);
1022 abscoef =
REALABS(consdata->vbdcoef);
1042 inferbd = inferbd + 1.0;
1052 assert(infervar == consdata->var);
1054 abscoef =
REALABS(consdata->vbdcoef);
1080 relaxedlb = inferbd + 1.0;
1090 assert(infervar == consdata->var);
1092 abscoef =
REALABS(consdata->vbdcoef);
1112 inferbd = inferbd - 1.0;
1122 assert(infervar == consdata->var);
1124 abscoef =
REALABS(consdata->vbdcoef);
1172 if( conshdlr ==
NULL )
1180 var = consdata->var;
1181 vbdvar = consdata->vbdvar;
1182 vbdcoef = consdata->vbdcoef;
1215 else if( tightened )
1246 else if( tightened )
1261 if( consdata->row ==
NULL )
1318 consdata->rhs = lhs;
1327 if( consdata->vbdcoef > 0.0 )
1341 if( consdata->vbdcoef > 0.0 )
1354 consdata->varboundsadded =
FALSE;
1355 consdata->tightened =
FALSE;
1360 consdata->presolved =
FALSE;
1361 consdata->lhs = lhs;
1362 consdata->changed =
TRUE;
1398 consdata->lhs = rhs;
1408 if( consdata->vbdcoef > 0.0 )
1422 if( consdata->vbdcoef > 0.0 )
1435 consdata->varboundsadded =
FALSE;
1436 consdata->tightened =
FALSE;
1441 consdata->presolved =
FALSE;
1442 consdata->rhs = rhs;
1443 consdata->changed =
TRUE;
1476 SCIPdebugMsg(
scip,
"propagating variable bound constraint <%s>: %.15g <= <%s>[%.9g, %.9g] + %.15g<%s>[%.9g, %.9g] <= %.15g\n",
1514 tightenedround =
FALSE;
1526 if( consdata->vbdcoef > 0.0 )
1576 tightenedround =
TRUE;
1590 if( consdata->vbdcoef > 0.0 )
1598 if( newlb > ylb + 0.5 )
1615 tightenedround =
TRUE;
1630 if( newub < yub - 0.5 )
1649 tightenedround =
TRUE;
1669 if( consdata->vbdcoef > 0.0 )
1719 tightenedround =
TRUE;
1733 if( consdata->vbdcoef > 0.0 )
1741 if( newub < yub - 0.5 )
1760 tightenedround =
TRUE;
1775 if( newlb > ylb + 0.5 )
1794 tightenedround =
TRUE;
1805 while( tightenedround );
1812 ((consdata->vbdcoef > 0.0 &&
SCIPisGE(
scip, xlb + consdata->vbdcoef * ylb, consdata->lhs))
1813 || (consdata->vbdcoef < 0.0 &&
SCIPisGE(
scip, xlb + consdata->vbdcoef * yub, consdata->lhs))) )
1823 ((consdata->vbdcoef > 0.0 &&
SCIPisLE(
scip, xub + consdata->vbdcoef * yub, consdata->rhs))
1824 || (consdata->vbdcoef < 0.0 &&
SCIPisLE(
scip, xub + consdata->vbdcoef * ylb, consdata->rhs))) )
1834 || (consdata->vbdcoef > 0.0 &&
SCIPisGE(
scip, xlb + consdata->vbdcoef * ylb, consdata->lhs))
1835 || (consdata->vbdcoef < 0.0 &&
SCIPisGE(
scip, xlb + consdata->vbdcoef * yub, consdata->lhs)))
1837 || (consdata->vbdcoef > 0.0 &&
SCIPisLE(
scip, xub + consdata->vbdcoef * yub, consdata->rhs))
1838 || (consdata->vbdcoef < 0.0 &&
SCIPisLE(
scip, xub + consdata->vbdcoef * ylb, consdata->rhs))) )
1840 SCIPdebugMsg(
scip,
"variable bound constraint <%s> is redundant: <%s>[%.15g,%.15g], <%s>[%.15g,%.15g]\n",
1847#ifdef SCIP_DISABLED_CODE
1892 if( ndelconss !=
NULL )
1949 assert(coef0 * coef1 > 0.0);
1957 redundant0 = cons1sidered;
1958 redundant1 = cons0sidered;
1962 redundant0 = cons0sidered;
1963 redundant1 = cons1sidered;
1976 if( !*redundant0 && !*redundant1 )
1994 boundxlb1 = side0 - lbvbdvar * coef0;
1995 boundxlb2 = side1 - lbvbdvar * coef1;
2012 boundylb1 = (side0 - lbvar) / coef0;
2013 boundylb2 = (side1 - lbvar) / coef1;
2030 boundxub1 = side0 - ubvbdvar * coef0;
2031 boundxub2 = side1 - ubvbdvar * coef1;
2048 boundyub1 = (side0 - ubvar) / coef0;
2049 boundyub2 = (side1 - ubvar) / coef1;
2054 boundvaluex1 =
MAX(boundxlb1, boundxlb2);
2055 boundvaluex2 =
MAX(boundxub1, boundxub2);
2059 boundvaluex1 =
MIN(boundxlb1, boundxlb2);
2060 boundvaluex2 =
MIN(boundxub1, boundxub2);
2066 valuex1 =
MIN(boundvaluex1, ubvar);
2067 valuex1 =
MAX(valuex1, lbvar);
2068 valuex2 =
MAX(boundvaluex2, lbvar);
2069 valuex2 =
MIN(valuex2, ubvar);
2080 valuex1 =
MAX(boundvaluex1, lbvar);
2081 valuex1 =
MIN(valuex1, ubvar);
2082 valuex2 =
MIN(boundvaluex2, ubvar);
2083 valuex2 =
MAX(valuex2, lbvar);
2099 valuey1 = side0 / coef0;
2100 valuey2 = side1 / coef1;
2103 else if( valuex1 > 0.0 )
2117 valuey1 = (side0 - valuex1) / coef0;
2118 valuey2 = (side1 - valuex1) / coef1;
2124 else if( coef0 > 0.0 )
2126 if( valuey1 < valuey2 )
2133 if( valuey1 < valuey2 )
2145 valuey1 = side0 / coef0;
2146 valuey2 = side1 / coef1;
2149 else if( valuex2 > 0.0 )
2163 valuey1 = (side0 - valuex2) / coef0;
2164 valuey2 = (side1 - valuex2) / coef1;
2188 else if( ( *redundant1 &&
SCIPisGT(
scip, valuey1, valuey2) )
2189 || ( *redundant0 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2191 *redundant0 =
FALSE;
2192 *redundant1 =
FALSE;
2216 else if( ( *redundant0 &&
SCIPisGT(
scip, valuey1, valuey2) )
2217 || ( *redundant1 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2219 *redundant0 =
FALSE;
2220 *redundant1 =
FALSE;
2224 assert(*sideequal || *redundant0 || *redundant1);
2231 boundvaluey1 =
MAX(boundylb1, boundylb2);
2232 boundvaluey2 =
MAX(boundyub1, boundyub2);
2236 boundvaluey1 =
MIN(boundylb1, boundylb2);
2237 boundvaluey2 =
MIN(boundyub1, boundyub2);
2240 valuey1 =
MIN(boundvaluey1, ubvbdvar);
2241 valuey1 =
MAX(valuey1, lbvbdvar);
2242 valuey2 =
MAX(boundvaluey2, lbvbdvar);
2243 valuey2 =
MIN(valuey2, ubvbdvar);
2252 boundvaluey1 =
MIN(boundylb1, boundylb2);
2253 boundvaluey2 =
MIN(boundyub1, boundyub2);
2257 boundvaluey1 =
MAX(boundylb1, boundylb2);
2258 boundvaluey2 =
MAX(boundyub1, boundyub2);
2261 valuey1 =
MAX(boundvaluey1, lbvbdvar);
2262 valuey1 =
MIN(valuey1, ubvbdvar);
2263 valuey2 =
MIN(boundvaluey2, ubvbdvar);
2264 valuey2 =
MAX(valuey2, lbvbdvar);
2280 else if( valuey1 > 0.0 )
2294 valuex1 = side0 - valuey1 * coef0;
2295 valuex2 = side1 - valuey1 * coef1;
2315 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2316 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2318 *redundant0 =
FALSE;
2319 *redundant1 =
FALSE;
2333 else if( valuey2 > 0.0 )
2347 valuex1 = side0 - valuey2 * coef0;
2348 valuex2 = side1 - valuey2 * coef1;
2368 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2369 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2371 *redundant0 =
FALSE;
2372 *redundant1 =
FALSE;
2375 assert(*redundant0 || *redundant1 || *sideequal);
2448 SCIPsortPtr((
void**)sortedconss, consVarboundComp, nconss);
2451 for(
c = nconss - 1;
c > 0 && !(*cutoff); --
c )
2456 cons0 = sortedconss[
c];
2470 if( !consdata0->changed )
2473 consdata0->changed =
FALSE;
2475 for( s =
c - 1; s >= 0; --s )
2484 cons1 = sortedconss[s];
2498 lhs = consdata0->lhs;
2499 rhs = consdata0->rhs;
2500 coef = consdata0->vbdcoef;
2503 if ( consdata0->var == consdata1->vbdvar && consdata0->vbdvar == consdata1->var &&
2511 scalar = (1.0 - coef * consdata1->vbdcoef);
2523 bnd = (lhs - coef * consdata1->rhs)/scalar;
2529 bnd = (lhs - coef * consdata1->lhs)/scalar;
2578 bnd = (rhs - coef * consdata1->lhs)/scalar;
2584 bnd = (rhs - coef * consdata1->rhs)/scalar;
2633 bnd = (consdata1->lhs - consdata1->vbdcoef * rhs)/scalar;
2639 bnd = (consdata1->lhs - consdata1->vbdcoef * lhs)/scalar;
2688 bnd = (consdata1->rhs - consdata1->vbdcoef * lhs)/scalar;
2694 bnd = (consdata1->rhs - consdata1->vbdcoef * rhs)/scalar;
2738 if( consdata0->var != consdata1->var || consdata0->vbdvar != consdata1->vbdvar )
2747 lhs =
MAX(consdata1->lhs, lhs);
2748 rhs =
MIN(consdata1->rhs, rhs);
2761 lhs =
MAX(consdata1->lhs, lhs);
2762 coef = lhs -
MAX(consdata1->lhs - consdata1->vbdcoef, consdata0->lhs - coef);
2767 rhs =
MIN(consdata1->rhs, rhs);
2768 coef = rhs -
MIN(consdata1->rhs - consdata1->vbdcoef, consdata0->rhs - coef);
2790 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, lhs, consdata1->lhs, &lhsequal, &cons0lhsred, &cons1lhsred,
TRUE);
2793 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, rhs, consdata1->rhs, &rhsequal, &cons0rhsred, &cons1rhsred,
FALSE);
2796 if( (lhsequal || cons0lhsred) && (rhsequal || cons0rhsred) )
2813 else if( cons1lhsred && cons1rhsred )
2853 deletecons1 =
FALSE;
2879 deletecons1 =
FALSE;
2932 rhs = (lhs + rhs)/2;
2989 if( consdata0->vbdcoef * coef < 0.0 )
2996 if( consdata0->vbdcoef > 0.0 )
3018 consdata0->varboundsadded =
FALSE;
3019 consdata0->tightened =
FALSE;
3020 consdata0->presolved =
FALSE;
3021 consdata0->changed =
FALSE;
3023 consdata0->vbdcoef = coef;
3086 for(
c = nconss - 1;
c >= 0; --
c )
3118 success =
SCIPrealToRational(consdata->vbdcoef, -epsilon, epsilon , maxmult, &numerator, &denominator);
3125 denominator /= numerator;
3129 success = success && (denominator <= maxmult);
3132 if( success &&
ABS(denominator) > 1 && numerator == 1 )
3142 if( consdata->vbdcoef < 0 )
3151 consdata->lhs = consdata->rhs * denominator;
3159 consdata->rhs = consdata->lhs * denominator;
3169 tmp = consdata->lhs;
3170 consdata->lhs = consdata->rhs * denominator;
3171 consdata->rhs = tmp * denominator;
3172 consdata->tightened =
FALSE;
3187 consdata->lhs *= denominator;
3195 consdata->rhs *= denominator;
3204 swapvar = consdata->var;
3205 consdata->var = consdata->vbdvar;
3206 consdata->vbdvar = swapvar;
3209 consdata->vbdcoef = (
SCIP_Real)denominator;
3213 consdata->varboundsadded =
FALSE;
3214 consdata->tightened =
FALSE;
3263 var = consdata->var;
3267 vbdvar = consdata->vbdvar;
3269 vbdvarconstant = 0.0;
3271 varschanged = (
var != consdata->var || vbdvar != consdata->vbdvar);
3279 SCIPdebugMsg(
scip,
"variable bound constraint <%s> has equal variable and vbd variable <%s>\n",
3285 scalar = varscalar + consdata->vbdcoef * vbdvarscalar;
3286 constant = varconstant + consdata->vbdcoef * vbdvarconstant;
3296 else if( scalar > 0.0 )
3302 newbnd = (consdata->lhs - constant) / scalar;
3319 newbnd = (consdata->rhs - constant) / scalar;
3339 newbnd = (consdata->lhs - constant) / scalar;
3356 newbnd = (consdata->rhs - constant) / scalar;
3390 SCIP_Real activity = varconstant + consdata->vbdcoef * vbdvarconstant;
3392 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: variable <%s> is fixed to %.15g\n",
3404 assert( consdata->vbdcoef != 0.0 );
3405 assert( vbdvarscalar != 0.0 );
3410 if( consdata->vbdcoef > 0.0 )
3414 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3420 else if( tightened )
3430 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3436 else if( tightened )
3445 if( consdata->vbdcoef > 0.0 )
3449 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3455 else if( tightened )
3465 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3471 else if( tightened )
3481 else if(
var != consdata->var )
3489 if( consdata->vbdcoef > 0.0 )
3501 if( varscalar > 0.0 )
3508 consdata->lhs = (consdata->lhs - varconstant)/varscalar;
3510 consdata->rhs = (consdata->rhs - varconstant)/varscalar;
3511 consdata->vbdcoef /= varscalar;
3517 consdata->tightened =
FALSE;
3523 assert(varscalar != 0.0);
3529 lhs = consdata->lhs;
3530 consdata->lhs = -consdata->rhs;
3531 consdata->rhs = -lhs;
3533 consdata->lhs = (consdata->lhs + varconstant)/(-varscalar);
3535 consdata->rhs = (consdata->rhs + varconstant)/(-varscalar);
3536 consdata->vbdcoef /= varscalar;
3542 consdata->tightened =
FALSE;
3545 consdata->var =
var;
3553 if( consdata->vbdcoef > 0.0 )
3568 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: vbd variable <%s> is fixed to %.15g\n",
3582 newbnd = consdata->lhs - consdata->vbdcoef * vbdvarconstant;
3588 else if( tightened )
3598 newbnd = consdata->rhs - consdata->vbdcoef * vbdvarconstant;
3604 else if( tightened )
3613 else if( !(*
cutoff) && vbdvar != consdata->vbdvar )
3616 if( consdata->vbdcoef > 0.0 )
3638 consdata->lhs -= consdata->vbdcoef * vbdvarconstant;
3640 consdata->rhs -= consdata->vbdcoef * vbdvarconstant;
3642 consdata->tightened =
FALSE;
3643 consdata->vbdcoef *= vbdvarscalar;
3644 consdata->vbdvar = vbdvar;
3648 if( consdata->vbdcoef > 0.0 )
3676 consdata->changed =
TRUE;
3686 lhs = consdata->lhs;
3687 rhs = consdata->rhs;
3697 if(
var != consdata->var )
3723 if( vbdvar != consdata->vbdvar )
3743 assert(vbdvar == consdata->vbdvar);
3799 if( consdata->tightened )
3804 consdata->tightened =
TRUE;
3815 consdata->changed =
TRUE;
3821 consdata->changed =
TRUE;
3829 oldnchgcoefs = *nchgcoefs;
3830 oldnchgsides = *nchgsides;
3831 oldcoef = consdata->vbdcoef;
3917 else if( (
SCIPisInfinity(
scip, -consdata->lhs) ||
SCIPisFeasGE(
scip, consdata->vbdcoef -
SCIPfeasFloor(
scip, consdata->vbdcoef), consdata->lhs -
SCIPfeasFloor(
scip, consdata->lhs))) && (
SCIPisInfinity(
scip, consdata->rhs) ||
SCIPisFeasGT(
scip, consdata->vbdcoef -
SCIPfeasFloor(
scip, consdata->vbdcoef), consdata->rhs -
SCIPfeasFloor(
scip, consdata->rhs))) )
3938 else if( (
SCIPisInfinity(
scip, -consdata->lhs) ||
SCIPisFeasLT(
scip, consdata->vbdcoef -
SCIPfeasFloor(
scip, consdata->vbdcoef), consdata->lhs -
SCIPfeasFloor(
scip, consdata->lhs))) && (
SCIPisInfinity(
scip, consdata->rhs) ||
SCIPisFeasLE(
scip, consdata->vbdcoef -
SCIPfeasFloor(
scip, consdata->vbdcoef), consdata->rhs -
SCIPfeasFloor(
scip, consdata->rhs))) )
4038 consdata->vbdcoef = oldcoef;
4066 oldrhs = consdata->rhs;
4072 newcoef =
MAX(consdata->vbdcoef - consdata->rhs + xub, consdata->lhs - xlb);
4086 newrhs = consdata->rhs - consdata->vbdcoef + newcoef;
4089 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4090 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4096 assert(consdata->vbdcoef * newcoef > 0);
4098 consdata->vbdcoef = newcoef;
4099 consdata->rhs =
MAX(newrhs, consdata->lhs);
4109 consdata->tightened =
FALSE;
4111 assert(consdata->tightened);
4124 oldlhs = consdata->lhs;
4130 newcoef =
MIN(consdata->vbdcoef - consdata->lhs + xlb, consdata->rhs - xub);
4144 newlhs = consdata->lhs - consdata->vbdcoef + newcoef;
4147 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4148 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4154 assert(consdata->vbdcoef * newcoef > 0);
4156 consdata->vbdcoef = newcoef;
4157 consdata->lhs =
MIN(newlhs, consdata->rhs);
4167 consdata->tightened =
FALSE;
4169 assert(consdata->tightened);
4180 if( consdata->vbdcoef > 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs - consdata->vbdcoef) )
4188 newcoef = consdata->lhs - xlb;
4201 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4208 assert(consdata->vbdcoef * newcoef > 0);
4210 consdata->vbdcoef = newcoef;
4214 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs) )
4222 newcoef = consdata->vbdcoef - consdata->lhs + xlb;
4235 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4238 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->lhs + xlb,
4242 assert(consdata->vbdcoef * newcoef > 0);
4244 consdata->vbdcoef = newcoef;
4245 consdata->lhs = xlb;
4262 newcoef = consdata->vbdcoef - consdata->rhs + xub;
4275 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4278 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->rhs + xub,
4282 assert(consdata->vbdcoef * newcoef > 0);
4284 consdata->vbdcoef = newcoef;
4285 consdata->rhs = xub;
4290 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasLT(
scip, xub, consdata->rhs - consdata->vbdcoef) )
4298 newcoef = consdata->rhs - xub;
4311 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4316 assert(consdata->vbdcoef * newcoef > 0);
4318 consdata->vbdcoef = newcoef;
4327 if( *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
4329 consdata->varboundsadded =
FALSE;
4330 consdata->changed =
TRUE;
4380 for(
c = nconss - 1;
c >= 0; --
c )
4392 if( !consdata->presolved )
4414 if( !consdata->tightened )
4437 if( consdata->vbdcoef > 0.0 )
4448 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> + <%s> == 1\n",
4461 assert(consdata->lhs < 0.5);
4463 vars[0] = consdata->var;
4464 vars[1] = consdata->vbdvar;
4487 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> - <%s> == 0\n",
4500 assert(consdata->lhs < -0.5);
4502 vars[0] = consdata->var;
4511 vars[1] = consdata->vbdvar;
4557 upgrade = (
nvars == 2) && (nposbin + nnegbin <= 1) && (nposcont + nnegcont <= 1);
4589 vbdvar =
vars[vbdind];
4592 vbdcoef = vals[vbdind]/vals[1-vbdind];
4594 if( vals[1-vbdind] > 0.0 )
4657 cons, lhs, rhs, success) );
4718 for(
c = 0;
c < nconss; ++
c )
4735 for(
c = 0;
c < nconss; ++
c )
4740 if( consdata->row !=
NULL )
4745 if( consdata->nlrow !=
NULL )
4794 sourcedata->var, sourcedata->vbdvar, sourcedata->vbdcoef, sourcedata->lhs, sourcedata->rhs) );
4816 *infeasible =
FALSE;
4818 for(
i = 0;
i < nconss && !(*infeasible);
i++ )
4843 for(
i = 0;
i < nusefulconss; ++
i )
4873 for(
i = 0;
i < nusefulconss; ++
i )
4902 for(
i = 0;
i < nconss;
i++ )
4942 for(
i = 0;
i < nconss;
i++ )
4974 for(
i = 0;
i < nconss;
i++ )
5055 SCIPdebugMsg(
scip,
"propagating %d variable bound constraints\n", nmarkedconss);
5058 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
5065 else if( nchgbds > 0 )
5100 oldnchgbds = *nchgbds;
5101 oldndelconss = *ndelconss;
5102 oldnaddconss = *naddconss;
5103 oldnchgcoefs = *nchgcoefs;
5104 oldnchgsides = *nchgsides;
5105 oldnaggrvars = *naggrvars;
5107 for(
i = 0;
i < nconss;
i++ )
5122 consdata->presolved =
FALSE;
5124 if( consdata->presolved )
5126 consdata->presolved =
TRUE;
5152 if( !consdata->varboundsadded )
5156 int localoldnchgbds;
5158 localoldnchgbds = *nchgbds;
5163 SCIPdebugMsg(
scip,
"adding variable lower bound <%s> >= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5165 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
">=" :
"<="), 1.0/-consdata->vbdcoef,
5169 &infeasible, &nlocalchgbds) );
5172 *nchgbds += nlocalchgbds;
5178 SCIPdebugMsg(
scip,
"adding variable upper bound <%s> <= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5180 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
"<=" :
">="), 1.0/-consdata->vbdcoef,
5184 &infeasible, &nlocalchgbds) );
5187 *nchgbds += nlocalchgbds;
5189 consdata->varboundsadded =
TRUE;
5191 if( *nchgbds > localoldnchgbds )
5207 SCIP_CALL(
upgradeConss(
scip, conshdlrdata, conss, nconss, &
cutoff, naggrvars, nchgbds, nchgcoefs, nchgsides, ndelconss, naddconss) );
5219 else if( *nchgbds > oldnchgbds || *ndelconss > oldndelconss || *naddconss > oldnaddconss
5220 || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides || *naggrvars > oldnaggrvars )
5260 if( consdata->vbdcoef > 0.0 )
5273 if( consdata->vbdcoef > 0.0 )
5368 const char* consname;
5387 initial, separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
5426 if( isdigit(str[0]) || ((str[0] ==
'-' || str[0] ==
'+') && isdigit(str[1])) )
5437 if( endstr[0] !=
'<' || endstr[1] !=
'=' )
5439 SCIPerrorMessage(
"missing \"<=\" after left hand side(, found %c%c)\n", endstr[0], endstr[1]);
5456 if( requiredsize == 2 && *success )
5470 if( *str !=
'\0' && *(str+1) !=
'\0' &&
SCIPparseReal(
scip, str+2, &value, &endstr) )
5495 else if( strncmp(str,
"[free]", 6) != 0 )
5502 initial, separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5529 vars[0] = consdata->var;
5530 vars[1] = consdata->vbdvar;
5584 consdata->presolved =
FALSE;
5590 consdata->presolved =
FALSE;
5591 consdata->tightened =
FALSE;
5613 eventExecVarbound,
NULL) );
5621 consEnfolpVarbound, consEnfopsVarbound, consCheckVarbound, consLockVarbound,
5658 "should pairwise constraint comparison be performed in presolving?",
5662 "maximum coefficient in varbound constraint to be added as a row into LP",
5665 "constraints/" CONSHDLR_NAME "/usebdwidening",
"should bound widening be used in conflict analysis?",
5715 if( conshdlr ==
NULL )
5728 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial, separate, enforce, check,
propagate,
5729 local, modifiable, dynamic, removable, stickingatnode) );
5782 return consdata->lhs;
5805 return consdata->rhs;
5828 return consdata->var;
5851 return consdata->vbdvar;
5874 return consdata->vbdcoef;
5897 if( consdata->row !=
NULL )
5923 if( consdata->row !=
NULL )
5951 return consdata->row;
5972 if( conshdlr ==
NULL )
5976 *infeasible =
FALSE;
5985 eventhdlr = conshdlrdata->eventhdlr;
5990 for(
i = nconss - 1;
i >= 0; --
i )
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define DEFAULT_PRESOLPAIRWISE
#define CONSHDLR_SEPAPRIORITY
#define CONSHDLR_PROPFREQ
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
#define DEFAULT_USEBDWIDENING
#define LINCONSUPGD_PRIORITY
Constraint handler for linear constraints in their most general form, .
Constraint handler for the set partitioning / packing / covering constraints .
static SCIP_RETCODE addRelaxation(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
static SCIP_RETCODE dropEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE upgradeConss(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS **conss, int nconss, SCIP_Bool *cutoff, int *naggrvars, int *nchgbds, int *nchgcoefs, int *nchgsides, int *ndelconss, int *naddconss)
static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *cutoff, int *nchgbds, int *ndelconss, int *naddconss)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_RETCODE tightenCoefs(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides, int *ndelconss, SCIP_Bool *cutoff, int *nchgbds)
static SCIP_RETCODE createRelaxation(SCIP *scip, SCIP_CONS *cons)
static void checkRedundancySide(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real coef0, SCIP_Real coef1, SCIP_Real side0, SCIP_Real side1, SCIP_Bool *sideequal, SCIP_Bool *cons0sidered, SCIP_Bool *cons1sidered, SCIP_Bool islhs)
static void conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
static SCIP_Bool checkCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checklprows)
#define DEFAULT_MAXLPCOEF
static void prettifyConss(SCIP *scip, SCIP_CONS **conss, int nconss, int *nchgcoefs, int *nchgsides)
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
static SCIP_RETCODE preprocessConstraintPairs(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool *cutoff, int *nchgbds, int *ndelconss, int *nchgcoefs, int *nchgsides)
static SCIP_RETCODE chgLhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
static SCIP_RETCODE analyzeConflict(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, SCIP_Real inferbd, PROPRULE proprule, SCIP_BOUNDTYPE boundtype, SCIP_Bool usebdwidening)
static SCIP_RETCODE chgRhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real inferbd, SCIP_Bool usebdwidening)
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool usebdwidening, SCIP_Bool *cutoff, int *nchgbds, int *nchgsides, int *ndelconss)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
static SCIP_RETCODE addNlrow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE catchEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool usebdwidening, SCIP_SOL *sol, SCIP_RESULT *result)
Constraint handler for variable bound constraints .
defines macros for basic operations in double-double arithmetic giving roughly twice the precision of...
#define SCIPquadprecDivQD(r, a, b)
#define SCIPquadprecProdDD(r, a, b)
#define SCIPquadprecProdQD(r, a, b)
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define SCIPquadprecSumDD(r, a, b)
#define SCIPquadprecSumQQ(r, a, b)
#define SCIP_VARTYPE_INTEGER_CHAR
#define SCIP_VARTYPE_IMPLINT_CHAR
#define SCIP_VARTYPE_BINARY_CHAR
#define SCIP_VARTYPE_CONTINUOUS_CHAR
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
SCIP_Real SCIPgetVbdcoefVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPchgRhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
SCIP_Real SCIPgetDualfarkasVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicVarbound(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, SCIP_Real lhs, SCIP_Real rhs)
SCIP_ROW * SCIPgetRowVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetVbdvarVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsSetpack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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 SCIPcleanupConssVarbound(SCIP *scip, SCIP_Bool onlychecked, SCIP_Bool *infeasible, int *naddconss, int *ndelconss, int *nchgbds)
SCIP_VAR * SCIPgetVarVarbound(SCIP *scip, SCIP_CONS *cons)
#define SCIP_DECL_LINCONSUPGD(x)
SCIP_RETCODE SCIPcopyConsLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_Real *sourcecoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, 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_Bool global, SCIP_Bool *valid)
SCIP_Real SCIPgetLhsVarbound(SCIP *scip, SCIP_CONS *cons)
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_Real SCIPgetRhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetDualsolVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsVarbound(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, 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 SCIPchgLhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
SCIP_RETCODE SCIPincludeConshdlrVarbound(SCIP *scip)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
int SCIPgetNIntVars(SCIP *scip)
int SCIPgetNImplVars(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNBinVars(SCIP *scip)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *numerator, SCIP_Longint *denominator)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
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 SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb)
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 SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetCheckConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_Bool SCIPconsIsMarkedPropagate(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_RETCODE SCIPunmarkConsPropagate(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, 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_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPmarkConsPropagate(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPupdateConsFlags(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPincConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
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 SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPdelNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_Bool SCIPnlrowIsInNLP(SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetDualfarkas(SCIP_ROW *row)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
void SCIPupdateSolLPConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
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 SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
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 SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPround(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Real SCIPgetHugeValue(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_Real SCIPepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPparseReal(SCIP *scip, const char *str, SCIP_Real *value, char **endptr)
SCIP_Bool SCIPinRepropagation(SCIP *scip)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPchgVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated)
SCIP_RETCODE SCIPinferVarUbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetProbvar(SCIP_VAR *var)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarVub(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vubvar, SCIP_Real vubcoef, SCIP_Real vubconstant, SCIP_Bool *infeasible, int *nbdchgs)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPaddVarVlb(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vlbvar, SCIP_Real vlbcoef, SCIP_Real vlbconstant, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_RETCODE SCIPparseVarsLinearsum(SCIP *scip, const char *str, SCIP_VAR **vars, SCIP_Real *vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success)
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_RETCODE SCIPinferVarLbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
SCIP_RETCODE SCIPskipSpace(char **s)
SCIP_RETCODE SCIPgetSymActiveVariables(SCIP *scip, SYM_SYMTYPE symtype, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
SCIP_RETCODE SCIPextendPermsymDetectionGraphLinear(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_CONS *cons, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *success)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
memory allocation routines
public methods for managing constraints
public methods for managing events
public methods for LP management
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
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 cuts and aggregation rows
public methods for event handler plugins and event handlers
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for nonlinear relaxation
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 solutions
public methods for the branch-and-bound tree
public methods for SCIP variables
structs for symmetry computations
methods for dealing with symmetry detection graphs
@ SCIP_CONFTYPE_PROPAGATION
#define SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(x)
#define SCIP_DECL_CONSGETPERMSYMGRAPH(x)
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSINITSOL(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
struct SYM_Graph SYM_GRAPH
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
#define SCIP_DECL_CONSACTIVE(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSINITLP(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_VARFIXED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
enum SCIP_BoundType SCIP_BOUNDTYPE
#define SCIP_DECL_SORTPTRCOMP(x)
struct SCIP_NlRow SCIP_NLROW
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
enum SYM_Symtype SYM_SYMTYPE
#define SCIP_PRESOLTIMING_MEDIUM
struct SCIP_BdChgIdx SCIP_BDCHGIDX
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_MULTAGGR