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;
1487 SCIPdebugMsg(
scip,
"propagating variable bound constraint <%s>: %.15g <= <%s>[%.9g, %.9g] + %.15g<%s>[%.9g, %.9g] <= %.15g\n",
1525 tightenedround =
FALSE;
1537 if( consdata->vbdcoef > 0.0 )
1587 tightenedround =
TRUE;
1601 if( consdata->vbdcoef > 0.0 )
1609 if( newlb > ylb + 0.5 )
1626 tightenedround =
TRUE;
1641 if( newub < yub - 0.5 )
1660 tightenedround =
TRUE;
1680 if( consdata->vbdcoef > 0.0 )
1730 tightenedround =
TRUE;
1744 if( consdata->vbdcoef > 0.0 )
1752 if( newub < yub - 0.5 )
1771 tightenedround =
TRUE;
1786 if( newlb > ylb + 0.5 )
1805 tightenedround =
TRUE;
1816 while( tightenedround );
1821 islhsredundant =
TRUE;
1822 isrhsredundant =
TRUE;
1829 vars[0] = consdata->var;
1830 vars[1] = consdata->vbdvar;
1832 scalars[1] = consdata->vbdcoef;
1835 if( requiredsize >
nvars )
1857 islhsredundant =
FALSE;
1867 islhsredundant =
FALSE;
1876 islhsredundant =
FALSE;
1892 isrhsredundant =
FALSE;
1902 isrhsredundant =
FALSE;
1911 isrhsredundant =
FALSE;
1918 if( islhsredundant && isrhsredundant )
1920 SCIPdebugMsg(
scip,
"variable bound constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
1930#ifdef SCIP_DISABLED_CODE
1975 if( ndelconss !=
NULL )
1981 if( islhsredundant )
1991 if( nchgsides !=
NULL )
1996 else if( isrhsredundant )
2006 if( nchgsides !=
NULL )
2066 assert(coef0 * coef1 > 0.0);
2074 redundant0 = cons1sidered;
2075 redundant1 = cons0sidered;
2079 redundant0 = cons0sidered;
2080 redundant1 = cons1sidered;
2093 if( !*redundant0 && !*redundant1 )
2111 boundxlb1 = side0 - lbvbdvar * coef0;
2112 boundxlb2 = side1 - lbvbdvar * coef1;
2129 boundylb1 = (side0 - lbvar) / coef0;
2130 boundylb2 = (side1 - lbvar) / coef1;
2147 boundxub1 = side0 - ubvbdvar * coef0;
2148 boundxub2 = side1 - ubvbdvar * coef1;
2165 boundyub1 = (side0 - ubvar) / coef0;
2166 boundyub2 = (side1 - ubvar) / coef1;
2171 boundvaluex1 =
MAX(boundxlb1, boundxlb2);
2172 boundvaluex2 =
MAX(boundxub1, boundxub2);
2176 boundvaluex1 =
MIN(boundxlb1, boundxlb2);
2177 boundvaluex2 =
MIN(boundxub1, boundxub2);
2183 valuex1 =
MIN(boundvaluex1, ubvar);
2184 valuex1 =
MAX(valuex1, lbvar);
2185 valuex2 =
MAX(boundvaluex2, lbvar);
2186 valuex2 =
MIN(valuex2, ubvar);
2197 valuex1 =
MAX(boundvaluex1, lbvar);
2198 valuex1 =
MIN(valuex1, ubvar);
2199 valuex2 =
MIN(boundvaluex2, ubvar);
2200 valuex2 =
MAX(valuex2, lbvar);
2216 valuey1 = side0 / coef0;
2217 valuey2 = side1 / coef1;
2220 else if( valuex1 > 0.0 )
2234 valuey1 = (side0 - valuex1) / coef0;
2235 valuey2 = (side1 - valuex1) / coef1;
2241 else if( coef0 > 0.0 )
2243 if( valuey1 < valuey2 )
2250 if( valuey1 < valuey2 )
2262 valuey1 = side0 / coef0;
2263 valuey2 = side1 / coef1;
2266 else if( valuex2 > 0.0 )
2280 valuey1 = (side0 - valuex2) / coef0;
2281 valuey2 = (side1 - valuex2) / coef1;
2305 else if( ( *redundant1 &&
SCIPisGT(
scip, valuey1, valuey2) )
2306 || ( *redundant0 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2308 *redundant0 =
FALSE;
2309 *redundant1 =
FALSE;
2333 else if( ( *redundant0 &&
SCIPisGT(
scip, valuey1, valuey2) )
2334 || ( *redundant1 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2336 *redundant0 =
FALSE;
2337 *redundant1 =
FALSE;
2341 assert(*sideequal || *redundant0 || *redundant1);
2348 boundvaluey1 =
MAX(boundylb1, boundylb2);
2349 boundvaluey2 =
MAX(boundyub1, boundyub2);
2353 boundvaluey1 =
MIN(boundylb1, boundylb2);
2354 boundvaluey2 =
MIN(boundyub1, boundyub2);
2357 valuey1 =
MIN(boundvaluey1, ubvbdvar);
2358 valuey1 =
MAX(valuey1, lbvbdvar);
2359 valuey2 =
MAX(boundvaluey2, lbvbdvar);
2360 valuey2 =
MIN(valuey2, ubvbdvar);
2369 boundvaluey1 =
MIN(boundylb1, boundylb2);
2370 boundvaluey2 =
MIN(boundyub1, boundyub2);
2374 boundvaluey1 =
MAX(boundylb1, boundylb2);
2375 boundvaluey2 =
MAX(boundyub1, boundyub2);
2378 valuey1 =
MAX(boundvaluey1, lbvbdvar);
2379 valuey1 =
MIN(valuey1, ubvbdvar);
2380 valuey2 =
MIN(boundvaluey2, ubvbdvar);
2381 valuey2 =
MAX(valuey2, lbvbdvar);
2397 else if( valuey1 > 0.0 )
2411 valuex1 = side0 - valuey1 * coef0;
2412 valuex2 = side1 - valuey1 * coef1;
2432 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2433 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2435 *redundant0 =
FALSE;
2436 *redundant1 =
FALSE;
2450 else if( valuey2 > 0.0 )
2464 valuex1 = side0 - valuey2 * coef0;
2465 valuex2 = side1 - valuey2 * coef1;
2485 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2486 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2488 *redundant0 =
FALSE;
2489 *redundant1 =
FALSE;
2492 assert(*redundant0 || *redundant1 || *sideequal);
2565 SCIPsortPtr((
void**)sortedconss, consVarboundComp, nconss);
2568 for(
c = nconss - 1;
c > 0 && !(*cutoff); --
c )
2573 cons0 = sortedconss[
c];
2587 if( !consdata0->changed )
2590 consdata0->changed =
FALSE;
2592 for( s =
c - 1; s >= 0; --s )
2601 cons1 = sortedconss[s];
2615 lhs = consdata0->lhs;
2616 rhs = consdata0->rhs;
2617 coef = consdata0->vbdcoef;
2620 if ( consdata0->var == consdata1->vbdvar && consdata0->vbdvar == consdata1->var &&
2628 scalar = (1.0 - coef * consdata1->vbdcoef);
2640 bnd = (lhs - coef * consdata1->rhs)/scalar;
2646 bnd = (lhs - coef * consdata1->lhs)/scalar;
2695 bnd = (rhs - coef * consdata1->lhs)/scalar;
2701 bnd = (rhs - coef * consdata1->rhs)/scalar;
2750 bnd = (consdata1->lhs - consdata1->vbdcoef * rhs)/scalar;
2756 bnd = (consdata1->lhs - consdata1->vbdcoef * lhs)/scalar;
2805 bnd = (consdata1->rhs - consdata1->vbdcoef * lhs)/scalar;
2811 bnd = (consdata1->rhs - consdata1->vbdcoef * rhs)/scalar;
2855 if( consdata0->var != consdata1->var || consdata0->vbdvar != consdata1->vbdvar )
2864 lhs =
MAX(consdata1->lhs, lhs);
2865 rhs =
MIN(consdata1->rhs, rhs);
2878 lhs =
MAX(consdata1->lhs, lhs);
2879 coef = lhs -
MAX(consdata1->lhs - consdata1->vbdcoef, consdata0->lhs - coef);
2884 rhs =
MIN(consdata1->rhs, rhs);
2885 coef = rhs -
MIN(consdata1->rhs - consdata1->vbdcoef, consdata0->rhs - coef);
2907 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, lhs, consdata1->lhs, &lhsequal, &cons0lhsred, &cons1lhsred,
TRUE);
2910 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, rhs, consdata1->rhs, &rhsequal, &cons0rhsred, &cons1rhsred,
FALSE);
2913 if( (lhsequal || cons0lhsred) && (rhsequal || cons0rhsred) )
2930 else if( cons1lhsred && cons1rhsred )
2970 deletecons1 =
FALSE;
2996 deletecons1 =
FALSE;
3049 rhs = (lhs + rhs)/2;
3106 if( consdata0->vbdcoef * coef < 0.0 )
3113 if( consdata0->vbdcoef > 0.0 )
3135 consdata0->varboundsadded =
FALSE;
3136 consdata0->tightened =
FALSE;
3137 consdata0->presolved =
FALSE;
3138 consdata0->changed =
FALSE;
3140 consdata0->vbdcoef = coef;
3203 for(
c = nconss - 1;
c >= 0; --
c )
3234 success =
SCIPrealToRational(consdata->vbdcoef, -epsilon, epsilon , maxmult, &numerator, &denominator);
3241 denominator /= numerator;
3245 success = success && (denominator <= maxmult);
3248 if( success &&
ABS(denominator) > 1 && numerator == 1 )
3258 if( consdata->vbdcoef < 0 )
3267 consdata->lhs = consdata->rhs * denominator;
3275 consdata->rhs = consdata->lhs * denominator;
3285 tmp = consdata->lhs;
3286 consdata->lhs = consdata->rhs * denominator;
3287 consdata->rhs = tmp * denominator;
3288 consdata->tightened =
FALSE;
3303 consdata->lhs *= denominator;
3311 consdata->rhs *= denominator;
3320 swapvar = consdata->var;
3321 consdata->var = consdata->vbdvar;
3322 consdata->vbdvar = swapvar;
3325 consdata->vbdcoef = (
SCIP_Real)denominator;
3329 consdata->varboundsadded =
FALSE;
3330 consdata->tightened =
FALSE;
3379 var = consdata->var;
3383 vbdvar = consdata->vbdvar;
3385 vbdvarconstant = 0.0;
3387 varschanged = (
var != consdata->var || vbdvar != consdata->vbdvar);
3395 SCIPdebugMsg(
scip,
"variable bound constraint <%s> has equal variable and vbd variable <%s>\n",
3401 scalar = varscalar + consdata->vbdcoef * vbdvarscalar;
3402 constant = varconstant + consdata->vbdcoef * vbdvarconstant;
3412 else if( scalar > 0.0 )
3418 newbnd = (consdata->lhs - constant) / scalar;
3435 newbnd = (consdata->rhs - constant) / scalar;
3455 newbnd = (consdata->lhs - constant) / scalar;
3472 newbnd = (consdata->rhs - constant) / scalar;
3502 SCIP_Real activity = varconstant + consdata->vbdcoef * vbdvarconstant;
3504 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: variable <%s> is fixed to %.15g\n",
3521 assert( consdata->vbdcoef != 0.0 );
3522 assert( vbdvarscalar != 0.0 );
3527 if( consdata->vbdcoef > 0.0 )
3531 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3537 else if( tightened )
3547 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3553 else if( tightened )
3562 if( consdata->vbdcoef > 0.0 )
3566 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3572 else if( tightened )
3582 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3588 else if( tightened )
3598 else if(
var != consdata->var )
3606 if( consdata->vbdcoef > 0.0 )
3618 if( varscalar > 0.0 )
3625 consdata->lhs = (consdata->lhs - varconstant)/varscalar;
3627 consdata->rhs = (consdata->rhs - varconstant)/varscalar;
3628 consdata->vbdcoef /= varscalar;
3634 consdata->tightened =
FALSE;
3640 assert(varscalar != 0.0);
3646 lhs = consdata->lhs;
3647 consdata->lhs = -consdata->rhs;
3648 consdata->rhs = -lhs;
3650 consdata->lhs = (consdata->lhs + varconstant)/(-varscalar);
3652 consdata->rhs = (consdata->rhs + varconstant)/(-varscalar);
3653 consdata->vbdcoef /= varscalar;
3659 consdata->tightened =
FALSE;
3662 consdata->var =
var;
3670 if( consdata->vbdcoef > 0.0 )
3685 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: vbd variable <%s> is fixed to %.15g\n",
3699 newbnd = consdata->lhs - consdata->vbdcoef * vbdvarconstant;
3705 else if( tightened )
3715 newbnd = consdata->rhs - consdata->vbdcoef * vbdvarconstant;
3721 else if( tightened )
3730 else if( !(*
cutoff) && vbdvar != consdata->vbdvar )
3733 if( consdata->vbdcoef > 0.0 )
3755 consdata->lhs -= consdata->vbdcoef * vbdvarconstant;
3757 consdata->rhs -= consdata->vbdcoef * vbdvarconstant;
3759 consdata->tightened =
FALSE;
3760 consdata->vbdcoef *= vbdvarscalar;
3761 consdata->vbdvar = vbdvar;
3765 if( consdata->vbdcoef > 0.0 )
3793 consdata->changed =
TRUE;
3803 lhs = consdata->lhs;
3804 rhs = consdata->rhs;
3814 if(
var != consdata->var )
3840 if( vbdvar != consdata->vbdvar )
3860 assert(vbdvar == consdata->vbdvar);
3915 if( consdata->tightened )
3920 consdata->tightened =
TRUE;
3930 consdata->changed =
TRUE;
3936 consdata->changed =
TRUE;
3944 oldnchgcoefs = *nchgcoefs;
3945 oldnchgsides = *nchgsides;
3946 oldcoef = consdata->vbdcoef;
4031 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))) )
4052 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))) )
4152 consdata->vbdcoef = oldcoef;
4180 oldrhs = consdata->rhs;
4186 newcoef =
MAX(consdata->vbdcoef - consdata->rhs + xub, consdata->lhs - xlb);
4200 newrhs = consdata->rhs - consdata->vbdcoef + newcoef;
4203 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4204 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4210 assert(consdata->vbdcoef * newcoef > 0);
4212 consdata->vbdcoef = newcoef;
4213 consdata->rhs =
MAX(newrhs, consdata->lhs);
4223 consdata->tightened =
FALSE;
4225 assert(consdata->tightened);
4238 oldlhs = consdata->lhs;
4244 newcoef =
MIN(consdata->vbdcoef - consdata->lhs + xlb, consdata->rhs - xub);
4258 newlhs = consdata->lhs - consdata->vbdcoef + newcoef;
4261 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4262 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4268 assert(consdata->vbdcoef * newcoef > 0);
4270 consdata->vbdcoef = newcoef;
4271 consdata->lhs =
MIN(newlhs, consdata->rhs);
4281 consdata->tightened =
FALSE;
4283 assert(consdata->tightened);
4294 if( consdata->vbdcoef > 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs - consdata->vbdcoef) )
4302 newcoef = consdata->lhs - xlb;
4315 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4322 assert(consdata->vbdcoef * newcoef > 0);
4324 consdata->vbdcoef = newcoef;
4328 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs) )
4336 newcoef = consdata->vbdcoef - consdata->lhs + xlb;
4349 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4352 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->lhs + xlb,
4356 assert(consdata->vbdcoef * newcoef > 0);
4358 consdata->vbdcoef = newcoef;
4359 consdata->lhs = xlb;
4376 newcoef = consdata->vbdcoef - consdata->rhs + xub;
4389 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4392 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->rhs + xub,
4396 assert(consdata->vbdcoef * newcoef > 0);
4398 consdata->vbdcoef = newcoef;
4399 consdata->rhs = xub;
4404 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasLT(
scip, xub, consdata->rhs - consdata->vbdcoef) )
4412 newcoef = consdata->rhs - xub;
4425 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4430 assert(consdata->vbdcoef * newcoef > 0);
4432 consdata->vbdcoef = newcoef;
4441 if( *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
4443 consdata->varboundsadded =
FALSE;
4444 consdata->changed =
TRUE;
4494 for(
c = nconss - 1;
c >= 0; --
c )
4506 if( !consdata->presolved )
4528 if( !consdata->tightened )
4551 if( consdata->vbdcoef > 0.0 )
4562 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> + <%s> == 1\n",
4575 assert(consdata->lhs < 0.5);
4577 vars[0] = consdata->var;
4578 vars[1] = consdata->vbdvar;
4601 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> - <%s> == 0\n",
4614 assert(consdata->lhs < -0.5);
4616 vars[0] = consdata->var;
4625 vars[1] = consdata->vbdvar;
4670 upgrade = (
nvars == 2) && (nposbin + nnegbin <= 1) && (nposcont + nnegcont <= 1);
4684 if( zerotype < onetype )
4686 else if( zerotype > onetype )
4704 vbdvar =
vars[vbdind];
4707 vbdcoef = vals[vbdind]/vals[1-vbdind];
4709 if( vals[1-vbdind] > 0.0 )
4772 cons, lhs, rhs, success) );
4833 for(
c = 0;
c < nconss; ++
c )
4850 for(
c = 0;
c < nconss; ++
c )
4855 if( consdata->row !=
NULL )
4860 if( consdata->nlrow !=
NULL )
4909 sourcedata->var, sourcedata->vbdvar, sourcedata->vbdcoef, sourcedata->lhs, sourcedata->rhs) );
4931 *infeasible =
FALSE;
4933 for(
i = 0;
i < nconss && !(*infeasible);
i++ )
4958 for(
i = 0;
i < nusefulconss; ++
i )
4988 for(
i = 0;
i < nusefulconss; ++
i )
5017 for(
i = 0;
i < nconss;
i++ )
5057 for(
i = 0;
i < nconss;
i++ )
5089 for(
i = 0;
i < nconss;
i++ )
5170 SCIPdebugMsg(
scip,
"propagating %d variable bound constraints\n", nmarkedconss);
5173 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
5180 else if( nchgbds > 0 )
5215 oldnchgbds = *nchgbds;
5216 oldndelconss = *ndelconss;
5217 oldnaddconss = *naddconss;
5218 oldnchgcoefs = *nchgcoefs;
5219 oldnchgsides = *nchgsides;
5220 oldnaggrvars = *naggrvars;
5222 for(
i = 0;
i < nconss;
i++ )
5237 consdata->presolved =
FALSE;
5239 if( consdata->presolved )
5241 consdata->presolved =
TRUE;
5267 if( !consdata->varboundsadded )
5271 int localoldnchgbds;
5273 localoldnchgbds = *nchgbds;
5278 SCIPdebugMsg(
scip,
"adding variable lower bound <%s> >= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5280 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
">=" :
"<="), 1.0/-consdata->vbdcoef,
5284 &infeasible, &nlocalchgbds) );
5287 *nchgbds += nlocalchgbds;
5293 SCIPdebugMsg(
scip,
"adding variable upper bound <%s> <= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5295 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
"<=" :
">="), 1.0/-consdata->vbdcoef,
5299 &infeasible, &nlocalchgbds) );
5302 *nchgbds += nlocalchgbds;
5304 consdata->varboundsadded =
TRUE;
5306 if( *nchgbds > localoldnchgbds )
5322 SCIP_CALL(
upgradeConss(
scip, conshdlrdata, conss, nconss, &
cutoff, naggrvars, nchgbds, nchgcoefs, nchgsides, ndelconss, naddconss) );
5334 else if( *nchgbds > oldnchgbds || *ndelconss > oldndelconss || *naddconss > oldnaddconss
5335 || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides || *naggrvars > oldnaggrvars )
5375 if( consdata->vbdcoef > 0.0 )
5388 if( consdata->vbdcoef > 0.0 )
5478 const char* consname;
5497 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
5536 if( isdigit((
unsigned char)str[0]) || ((str[0] ==
'-' || str[0] ==
'+') && isdigit((
unsigned char)str[1])) )
5547 if( endstr[0] !=
'<' || endstr[1] !=
'=' )
5549 SCIPerrorMessage(
"missing \"<=\" after left hand side(, found %c%c)\n", endstr[0], endstr[1]);
5566 if( requiredsize == 2 && *success )
5580 if( *str !=
'\0' && *(str+1) !=
'\0' &&
SCIPparseReal(
scip, str+2, &value, &endstr) )
5605 else if( strncmp(str,
"[free]", 6) != 0 )
5612 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5639 vars[0] = consdata->var;
5640 vars[1] = consdata->vbdvar;
5694 consdata->presolved =
FALSE;
5700 consdata->presolved =
FALSE;
5701 consdata->tightened =
FALSE;
5723 eventExecVarbound,
NULL) );
5731 consEnfolpVarbound, consEnfopsVarbound, consCheckVarbound, consLockVarbound,
5768 "should pairwise constraint comparison be performed in presolving?",
5772 "maximum coefficient in varbound constraint to be added as a row into LP",
5775 "constraints/" CONSHDLR_NAME "/usebdwidening",
"should bound widening be used in conflict analysis?",
5830 if( conshdlr ==
NULL )
5843 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
5844 local, modifiable, dynamic, removable, stickingatnode) );
5897 return consdata->lhs;
5920 return consdata->rhs;
5943 return consdata->var;
5966 return consdata->vbdvar;
5989 return consdata->vbdcoef;
6012 if( consdata->row !=
NULL )
6038 if( consdata->row !=
NULL )
6066 return consdata->row;
6116 if( conshdlr ==
NULL )
6120 *infeasible =
FALSE;
6129 eventhdlr = conshdlrdata->eventhdlr;
6134 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)
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 SCIPcreateRowVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeConshdlrVarbound(SCIP *scip)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
int SCIPgetNIntVars(SCIP *scip)
SCIP_RETCODE SCIPaddConsUpgrade(SCIP *scip, SCIP_CONS *oldcons, SCIP_CONS **newcons)
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)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
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 SCIPreallocBufferArray(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_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
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_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize)
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)
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
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
static const SCIP_Real scalars[]
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
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
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
#define SCIP_DEPRECATED_VARTYPE_IMPLINT
@ SCIP_VARSTATUS_MULTAGGR
enum SCIP_Vartype SCIP_VARTYPE