87#define CONSHDLR_NAME "varbound"
88#define CONSHDLR_DESC "variable bounds lhs <= x + c*y <= rhs, x non-binary, y non-continuous"
89#define CONSHDLR_SEPAPRIORITY +900000
90#define CONSHDLR_ENFOPRIORITY -500000
91#define CONSHDLR_CHECKPRIORITY -500000
92#define CONSHDLR_SEPAFREQ 0
93#define CONSHDLR_PROPFREQ 1
94#define CONSHDLR_EAGERFREQ 100
96#define CONSHDLR_MAXPREROUNDS -1
97#define CONSHDLR_DELAYSEPA FALSE
98#define CONSHDLR_DELAYPROP FALSE
99#define CONSHDLR_NEEDSCONS TRUE
101#define CONSHDLR_PRESOLTIMING (SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_MEDIUM)
102#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
104#define EVENTHDLR_NAME "varbound"
105#define EVENTHDLR_DESC "bound change event handler for variable bound constraints"
107#define LINCONSUPGD_PRIORITY +50000
116#define DEFAULT_PRESOLPAIRWISE TRUE
117#define DEFAULT_MAXLPCOEF 1e+09
118#define DEFAULT_USEBDWIDENING TRUE
119#define DEFAULT_COPYTYPEDCONS FALSE
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
205 && !consdata1->changed && consdata2->changed) )
209 && (consdata1->changed == consdata2->changed) )
229 (*conshdlrdata)->eventhdlr = eventhdlr;
320 SCIPerrorMessage(
"left hand side of varbound constraint greater than right hand side\n");
336 (*consdata)->var =
var;
337 (*consdata)->vbdvar = vbdvar;
338 (*consdata)->vbdcoef = vbdcoef;
339 (*consdata)->lhs = lhs;
340 (*consdata)->rhs = rhs;
341 (*consdata)->row =
NULL;
342 (*consdata)->nlrow =
NULL;
343 (*consdata)->presolved =
FALSE;
344 (*consdata)->varboundsadded =
FALSE;
345 (*consdata)->changed =
TRUE;
346 (*consdata)->tightened =
FALSE;
378 if( (*consdata)->row !=
NULL )
384 if( (*consdata)->nlrow !=
NULL )
436 if( conshdlr ==
NULL )
451 if( consdata->row ==
NULL )
485 if( consdata->nlrow ==
NULL )
490 assert(consdata->lhs <= consdata->rhs);
492 vars[0] = consdata->var;
493 vars[1] = consdata->vbdvar;
496 coefs[1] = consdata->vbdcoef;
528 SCIPdebugMsg(
scip,
"checking variable bound constraint <%s> for feasibility of solution %p (lprows=%u)\n",
540 absviol =
MAX(consdata->lhs - sum, sum - consdata->rhs);
543 relviol =
MAX(lhsrelviol, rhsrelviol);
586 vbdvar = consdata->vbdvar;
589 vbdcoef = consdata->vbdcoef;
675 assert(infervar == vbdvar);
862 assert(infervar == vbdvar);
1011 relaxedub = inferbd - 1.0;
1021 assert(infervar == consdata->var);
1023 abscoef =
REALABS(consdata->vbdcoef);
1043 inferbd = inferbd + 1.0;
1053 assert(infervar == consdata->var);
1055 abscoef =
REALABS(consdata->vbdcoef);
1081 relaxedlb = inferbd + 1.0;
1091 assert(infervar == consdata->var);
1093 abscoef =
REALABS(consdata->vbdcoef);
1113 inferbd = inferbd - 1.0;
1123 assert(infervar == consdata->var);
1125 abscoef =
REALABS(consdata->vbdcoef);
1173 if( conshdlr ==
NULL )
1181 var = consdata->var;
1182 vbdvar = consdata->vbdvar;
1183 vbdcoef = consdata->vbdcoef;
1216 else if( tightened )
1247 else if( tightened )
1262 if( consdata->row ==
NULL )
1319 consdata->rhs = lhs;
1328 if( consdata->vbdcoef > 0.0 )
1342 if( consdata->vbdcoef > 0.0 )
1355 consdata->varboundsadded =
FALSE;
1356 consdata->tightened =
FALSE;
1361 consdata->presolved =
FALSE;
1362 consdata->lhs = lhs;
1363 consdata->changed =
TRUE;
1399 consdata->lhs = rhs;
1409 if( consdata->vbdcoef > 0.0 )
1423 if( consdata->vbdcoef > 0.0 )
1436 consdata->varboundsadded =
FALSE;
1437 consdata->tightened =
FALSE;
1442 consdata->presolved =
FALSE;
1443 consdata->rhs = rhs;
1444 consdata->changed =
TRUE;
1488 SCIPdebugMsg(
scip,
"propagating variable bound constraint <%s>: %.15g <= <%s>[%.9g, %.9g] + %.15g<%s>[%.9g, %.9g] <= %.15g\n",
1526 tightenedround =
FALSE;
1538 if( consdata->vbdcoef > 0.0 )
1588 tightenedround =
TRUE;
1602 if( consdata->vbdcoef > 0.0 )
1610 if( newlb > ylb + 0.5 )
1627 tightenedround =
TRUE;
1642 if( newub < yub - 0.5 )
1661 tightenedround =
TRUE;
1681 if( consdata->vbdcoef > 0.0 )
1731 tightenedround =
TRUE;
1745 if( consdata->vbdcoef > 0.0 )
1753 if( newub < yub - 0.5 )
1772 tightenedround =
TRUE;
1787 if( newlb > ylb + 0.5 )
1806 tightenedround =
TRUE;
1817 while( tightenedround );
1822 islhsredundant =
TRUE;
1823 isrhsredundant =
TRUE;
1830 vars[0] = consdata->var;
1831 vars[1] = consdata->vbdvar;
1833 scalars[1] = consdata->vbdcoef;
1836 if( requiredsize >
nvars )
1858 islhsredundant =
FALSE;
1868 islhsredundant =
FALSE;
1877 islhsredundant =
FALSE;
1893 isrhsredundant =
FALSE;
1903 isrhsredundant =
FALSE;
1912 isrhsredundant =
FALSE;
1919 if( islhsredundant && isrhsredundant )
1921 SCIPdebugMsg(
scip,
"variable bound constraint <%s> is redundant: sides=[%.15g,%.15g]\n",
1931#ifdef SCIP_DISABLED_CODE
1976 if( ndelconss !=
NULL )
1982 if( islhsredundant )
1992 if( nchgsides !=
NULL )
1997 else if( isrhsredundant )
2007 if( nchgsides !=
NULL )
2067 assert(coef0 * coef1 > 0.0);
2075 redundant0 = cons1sidered;
2076 redundant1 = cons0sidered;
2080 redundant0 = cons0sidered;
2081 redundant1 = cons1sidered;
2094 if( !*redundant0 && !*redundant1 )
2112 boundxlb1 = side0 - lbvbdvar * coef0;
2113 boundxlb2 = side1 - lbvbdvar * coef1;
2130 boundylb1 = (side0 - lbvar) / coef0;
2131 boundylb2 = (side1 - lbvar) / coef1;
2148 boundxub1 = side0 - ubvbdvar * coef0;
2149 boundxub2 = side1 - ubvbdvar * coef1;
2166 boundyub1 = (side0 - ubvar) / coef0;
2167 boundyub2 = (side1 - ubvar) / coef1;
2172 boundvaluex1 =
MAX(boundxlb1, boundxlb2);
2173 boundvaluex2 =
MAX(boundxub1, boundxub2);
2177 boundvaluex1 =
MIN(boundxlb1, boundxlb2);
2178 boundvaluex2 =
MIN(boundxub1, boundxub2);
2184 valuex1 =
MIN(boundvaluex1, ubvar);
2185 valuex1 =
MAX(valuex1, lbvar);
2186 valuex2 =
MAX(boundvaluex2, lbvar);
2187 valuex2 =
MIN(valuex2, ubvar);
2198 valuex1 =
MAX(boundvaluex1, lbvar);
2199 valuex1 =
MIN(valuex1, ubvar);
2200 valuex2 =
MIN(boundvaluex2, ubvar);
2201 valuex2 =
MAX(valuex2, lbvar);
2217 valuey1 = side0 / coef0;
2218 valuey2 = side1 / coef1;
2221 else if( valuex1 > 0.0 )
2235 valuey1 = (side0 - valuex1) / coef0;
2236 valuey2 = (side1 - valuex1) / coef1;
2242 else if( coef0 > 0.0 )
2244 if( valuey1 < valuey2 )
2251 if( valuey1 < valuey2 )
2263 valuey1 = side0 / coef0;
2264 valuey2 = side1 / coef1;
2267 else if( valuex2 > 0.0 )
2281 valuey1 = (side0 - valuex2) / coef0;
2282 valuey2 = (side1 - valuex2) / coef1;
2306 else if( ( *redundant1 &&
SCIPisGT(
scip, valuey1, valuey2) )
2307 || ( *redundant0 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2309 *redundant0 =
FALSE;
2310 *redundant1 =
FALSE;
2334 else if( ( *redundant0 &&
SCIPisGT(
scip, valuey1, valuey2) )
2335 || ( *redundant1 &&
SCIPisLT(
scip, valuey1, valuey2) ) )
2337 *redundant0 =
FALSE;
2338 *redundant1 =
FALSE;
2342 assert(*sideequal || *redundant0 || *redundant1);
2349 boundvaluey1 =
MAX(boundylb1, boundylb2);
2350 boundvaluey2 =
MAX(boundyub1, boundyub2);
2354 boundvaluey1 =
MIN(boundylb1, boundylb2);
2355 boundvaluey2 =
MIN(boundyub1, boundyub2);
2358 valuey1 =
MIN(boundvaluey1, ubvbdvar);
2359 valuey1 =
MAX(valuey1, lbvbdvar);
2360 valuey2 =
MAX(boundvaluey2, lbvbdvar);
2361 valuey2 =
MIN(valuey2, ubvbdvar);
2370 boundvaluey1 =
MIN(boundylb1, boundylb2);
2371 boundvaluey2 =
MIN(boundyub1, boundyub2);
2375 boundvaluey1 =
MAX(boundylb1, boundylb2);
2376 boundvaluey2 =
MAX(boundyub1, boundyub2);
2379 valuey1 =
MAX(boundvaluey1, lbvbdvar);
2380 valuey1 =
MIN(valuey1, ubvbdvar);
2381 valuey2 =
MIN(boundvaluey2, ubvbdvar);
2382 valuey2 =
MAX(valuey2, lbvbdvar);
2398 else if( valuey1 > 0.0 )
2412 valuex1 = side0 - valuey1 * coef0;
2413 valuex2 = side1 - valuey1 * coef1;
2433 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2434 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2436 *redundant0 =
FALSE;
2437 *redundant1 =
FALSE;
2451 else if( valuey2 > 0.0 )
2465 valuex1 = side0 - valuey2 * coef0;
2466 valuex2 = side1 - valuey2 * coef1;
2486 else if( ( *redundant1 &&
SCIPisGT(
scip, valuex1, valuex2) )
2487 || ( *redundant0 &&
SCIPisLT(
scip, valuex1, valuex2) ) )
2489 *redundant0 =
FALSE;
2490 *redundant1 =
FALSE;
2493 assert(*redundant0 || *redundant1 || *sideequal);
2566 SCIPsortPtr((
void**)sortedconss, consVarboundComp, nconss);
2569 for(
c = nconss - 1;
c > 0 && !(*cutoff); --
c )
2574 cons0 = sortedconss[
c];
2588 if( !consdata0->changed )
2591 consdata0->changed =
FALSE;
2593 for( s =
c - 1; s >= 0; --s )
2602 cons1 = sortedconss[s];
2616 lhs = consdata0->lhs;
2617 rhs = consdata0->rhs;
2618 coef = consdata0->vbdcoef;
2621 if ( consdata0->var == consdata1->vbdvar && consdata0->vbdvar == consdata1->var &&
2629 scalar = (1.0 - coef * consdata1->vbdcoef);
2641 bnd = (lhs - coef * consdata1->rhs)/scalar;
2647 bnd = (lhs - coef * consdata1->lhs)/scalar;
2696 bnd = (rhs - coef * consdata1->lhs)/scalar;
2702 bnd = (rhs - coef * consdata1->rhs)/scalar;
2751 bnd = (consdata1->lhs - consdata1->vbdcoef * rhs)/scalar;
2757 bnd = (consdata1->lhs - consdata1->vbdcoef * lhs)/scalar;
2806 bnd = (consdata1->rhs - consdata1->vbdcoef * lhs)/scalar;
2812 bnd = (consdata1->rhs - consdata1->vbdcoef * rhs)/scalar;
2856 if( consdata0->var != consdata1->var || consdata0->vbdvar != consdata1->vbdvar )
2865 lhs =
MAX(consdata1->lhs, lhs);
2866 rhs =
MIN(consdata1->rhs, rhs);
2879 lhs =
MAX(consdata1->lhs, lhs);
2880 coef = lhs -
MAX(consdata1->lhs - consdata1->vbdcoef, consdata0->lhs - coef);
2885 rhs =
MIN(consdata1->rhs, rhs);
2886 coef = rhs -
MIN(consdata1->rhs - consdata1->vbdcoef, consdata0->rhs - coef);
2908 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, lhs, consdata1->lhs, &lhsequal, &cons0lhsred, &cons1lhsred,
TRUE);
2911 checkRedundancySide(
scip, consdata0->var, consdata0->vbdvar, coef, consdata1->vbdcoef, rhs, consdata1->rhs, &rhsequal, &cons0rhsred, &cons1rhsred,
FALSE);
2914 if( (lhsequal || cons0lhsred) && (rhsequal || cons0rhsred) )
2931 else if( cons1lhsred && cons1rhsred )
2971 deletecons1 =
FALSE;
2997 deletecons1 =
FALSE;
3050 rhs = (lhs + rhs)/2;
3107 if( consdata0->vbdcoef * coef < 0.0 )
3114 if( consdata0->vbdcoef > 0.0 )
3136 consdata0->varboundsadded =
FALSE;
3137 consdata0->tightened =
FALSE;
3138 consdata0->presolved =
FALSE;
3139 consdata0->changed =
FALSE;
3141 consdata0->vbdcoef = coef;
3204 for(
c = nconss - 1;
c >= 0; --
c )
3235 success =
SCIPrealToRational(consdata->vbdcoef, -epsilon, epsilon , maxmult, &numerator, &denominator);
3242 denominator /= numerator;
3246 success = success && (denominator <= maxmult);
3249 if( success &&
ABS(denominator) > 1 && numerator == 1 )
3259 if( consdata->vbdcoef < 0 )
3268 consdata->lhs = consdata->rhs * denominator;
3276 consdata->rhs = consdata->lhs * denominator;
3286 tmp = consdata->lhs;
3287 consdata->lhs = consdata->rhs * denominator;
3288 consdata->rhs = tmp * denominator;
3289 consdata->tightened =
FALSE;
3304 consdata->lhs *= denominator;
3312 consdata->rhs *= denominator;
3321 swapvar = consdata->var;
3322 consdata->var = consdata->vbdvar;
3323 consdata->vbdvar = swapvar;
3326 consdata->vbdcoef = (
SCIP_Real)denominator;
3330 consdata->varboundsadded =
FALSE;
3331 consdata->tightened =
FALSE;
3380 var = consdata->var;
3384 vbdvar = consdata->vbdvar;
3386 vbdvarconstant = 0.0;
3388 varschanged = (
var != consdata->var || vbdvar != consdata->vbdvar);
3396 SCIPdebugMsg(
scip,
"variable bound constraint <%s> has equal variable and vbd variable <%s>\n",
3402 scalar = varscalar + consdata->vbdcoef * vbdvarscalar;
3403 constant = varconstant + consdata->vbdcoef * vbdvarconstant;
3413 else if( scalar > 0.0 )
3419 newbnd = (consdata->lhs - constant) / scalar;
3436 newbnd = (consdata->rhs - constant) / scalar;
3456 newbnd = (consdata->lhs - constant) / scalar;
3473 newbnd = (consdata->rhs - constant) / scalar;
3503 SCIP_Real activity = varconstant + consdata->vbdcoef * vbdvarconstant;
3505 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: variable <%s> is fixed to %.15g\n",
3522 assert( consdata->vbdcoef != 0.0 );
3523 assert( vbdvarscalar != 0.0 );
3528 if( consdata->vbdcoef > 0.0 )
3532 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3538 else if( tightened )
3548 newbnd = (consdata->lhs - varconstant) / consdata->vbdcoef;
3554 else if( tightened )
3563 if( consdata->vbdcoef > 0.0 )
3567 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3573 else if( tightened )
3583 newbnd = (consdata->rhs - varconstant) / consdata->vbdcoef;
3589 else if( tightened )
3599 else if(
var != consdata->var )
3607 if( consdata->vbdcoef > 0.0 )
3619 if( varscalar > 0.0 )
3626 consdata->lhs = (consdata->lhs - varconstant)/varscalar;
3628 consdata->rhs = (consdata->rhs - varconstant)/varscalar;
3629 consdata->vbdcoef /= varscalar;
3635 consdata->tightened =
FALSE;
3641 assert(varscalar != 0.0);
3647 lhs = consdata->lhs;
3648 consdata->lhs = -consdata->rhs;
3649 consdata->rhs = -lhs;
3651 consdata->lhs = (consdata->lhs + varconstant)/(-varscalar);
3653 consdata->rhs = (consdata->rhs + varconstant)/(-varscalar);
3654 consdata->vbdcoef /= varscalar;
3660 consdata->tightened =
FALSE;
3663 consdata->var =
var;
3671 if( consdata->vbdcoef > 0.0 )
3686 SCIPdebugMsg(
scip,
"variable bound constraint <%s>: vbd variable <%s> is fixed to %.15g\n",
3700 newbnd = consdata->lhs - consdata->vbdcoef * vbdvarconstant;
3706 else if( tightened )
3716 newbnd = consdata->rhs - consdata->vbdcoef * vbdvarconstant;
3722 else if( tightened )
3731 else if( !(*
cutoff) && vbdvar != consdata->vbdvar )
3734 if( consdata->vbdcoef > 0.0 )
3756 consdata->lhs -= consdata->vbdcoef * vbdvarconstant;
3758 consdata->rhs -= consdata->vbdcoef * vbdvarconstant;
3760 consdata->tightened =
FALSE;
3761 consdata->vbdcoef *= vbdvarscalar;
3762 consdata->vbdvar = vbdvar;
3766 if( consdata->vbdcoef > 0.0 )
3794 consdata->changed =
TRUE;
3804 lhs = consdata->lhs;
3805 rhs = consdata->rhs;
3815 if(
var != consdata->var )
3841 if( vbdvar != consdata->vbdvar )
3861 assert(vbdvar == consdata->vbdvar);
3916 if( consdata->tightened )
3921 consdata->tightened =
TRUE;
3931 consdata->changed =
TRUE;
3937 consdata->changed =
TRUE;
3945 oldnchgcoefs = *nchgcoefs;
3946 oldnchgsides = *nchgsides;
3947 oldcoef = consdata->vbdcoef;
4032 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))) )
4053 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))) )
4153 consdata->vbdcoef = oldcoef;
4181 oldrhs = consdata->rhs;
4187 newcoef =
MAX(consdata->vbdcoef - consdata->rhs + xub, consdata->lhs - xlb);
4201 newrhs = consdata->rhs - consdata->vbdcoef + newcoef;
4204 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4205 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4211 assert(consdata->vbdcoef * newcoef > 0);
4213 consdata->vbdcoef = newcoef;
4214 consdata->rhs =
MAX(newrhs, consdata->lhs);
4224 consdata->tightened =
FALSE;
4226 assert(consdata->tightened);
4239 oldlhs = consdata->lhs;
4245 newcoef =
MIN(consdata->vbdcoef - consdata->lhs + xlb, consdata->rhs - xub);
4259 newlhs = consdata->lhs - consdata->vbdcoef + newcoef;
4262 "tighten varbound %.15g <= <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to %.15g <= <%s> %+.15g<%s> <= %.15g\n",
4263 consdata->lhs,
SCIPvarGetName(consdata->var), xlb, xub, consdata->vbdcoef,
4269 assert(consdata->vbdcoef * newcoef > 0);
4271 consdata->vbdcoef = newcoef;
4272 consdata->lhs =
MIN(newlhs, consdata->rhs);
4282 consdata->tightened =
FALSE;
4284 assert(consdata->tightened);
4295 if( consdata->vbdcoef > 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs - consdata->vbdcoef) )
4303 newcoef = consdata->lhs - xlb;
4316 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4323 assert(consdata->vbdcoef * newcoef > 0);
4325 consdata->vbdcoef = newcoef;
4329 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasGT(
scip, xlb, consdata->lhs) )
4337 newcoef = consdata->vbdcoef - consdata->lhs + xlb;
4350 SCIPdebugMsg(
scip,
"tighten binary VLB <%s>[%.15g,%.15g] %+.15g<%s> >= %.15g to <%s> %+.15g<%s> >= %.15g\n",
4353 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->lhs + xlb,
4357 assert(consdata->vbdcoef * newcoef > 0);
4359 consdata->vbdcoef = newcoef;
4360 consdata->lhs = xlb;
4377 newcoef = consdata->vbdcoef - consdata->rhs + xub;
4390 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4393 SCIPvarGetName(consdata->var), consdata->vbdcoef - consdata->rhs + xub,
4397 assert(consdata->vbdcoef * newcoef > 0);
4399 consdata->vbdcoef = newcoef;
4400 consdata->rhs = xub;
4405 else if( consdata->vbdcoef < 0.0 &&
SCIPisFeasLT(
scip, xub, consdata->rhs - consdata->vbdcoef) )
4413 newcoef = consdata->rhs - xub;
4426 SCIPdebugMsg(
scip,
"tighten binary VUB <%s>[%.15g,%.15g] %+.15g<%s> <= %.15g to <%s> %+.15g<%s> <= %.15g\n",
4431 assert(consdata->vbdcoef * newcoef > 0);
4433 consdata->vbdcoef = newcoef;
4442 if( *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides )
4444 consdata->varboundsadded =
FALSE;
4445 consdata->changed =
TRUE;
4495 for(
c = nconss - 1;
c >= 0; --
c )
4507 if( !consdata->presolved )
4529 if( !consdata->tightened )
4552 if( consdata->vbdcoef > 0.0 )
4563 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> + <%s> == 1\n",
4576 assert(consdata->lhs < 0.5);
4578 vars[0] = consdata->var;
4579 vars[1] = consdata->vbdvar;
4602 SCIPdebugMsg(
scip,
"varbound constraint <%s>: aggregate <%s> - <%s> == 0\n",
4615 assert(consdata->lhs < -0.5);
4617 vars[0] = consdata->var;
4626 vars[1] = consdata->vbdvar;
4671 upgrade = (
nvars == 2) && (nposbin + nnegbin <= 1) && (nposcont + nnegcont <= 1);
4685 if( zerotype < onetype )
4687 else if( zerotype > onetype )
4705 vbdvar =
vars[vbdind];
4708 vbdcoef = vals[vbdind]/vals[1-vbdind];
4710 if( vals[1-vbdind] > 0.0 )
4773 cons, lhs, rhs, success) );
4836 for(
c = 0;
c < nconss; ++
c )
4853 for(
c = 0;
c < nconss; ++
c )
4858 if( consdata->row !=
NULL )
4863 if( consdata->nlrow !=
NULL )
4912 sourcedata->var, sourcedata->vbdvar, sourcedata->vbdcoef, sourcedata->lhs, sourcedata->rhs) );
4934 *infeasible =
FALSE;
4936 for(
i = 0;
i < nconss && !(*infeasible);
i++ )
4961 for(
i = 0;
i < nusefulconss; ++
i )
4991 for(
i = 0;
i < nusefulconss; ++
i )
5020 for(
i = 0;
i < nconss;
i++ )
5060 for(
i = 0;
i < nconss;
i++ )
5092 for(
i = 0;
i < nconss;
i++ )
5173 SCIPdebugMsg(
scip,
"propagating %d variable bound constraints\n", nmarkedconss);
5176 for(
i = 0;
i < nmarkedconss && !
cutoff;
i++ )
5183 else if( nchgbds > 0 )
5219 oldnchgbds = *nchgbds;
5220 oldndelconss = *ndelconss;
5221 oldnaddconss = *naddconss;
5222 oldnchgcoefs = *nchgcoefs;
5223 oldnchgsides = *nchgsides;
5224 oldnaggrvars = *naggrvars;
5226 for(
i = 0;
i < nconss;
i++ )
5241 consdata->presolved =
FALSE;
5243 if( consdata->presolved )
5245 consdata->presolved =
TRUE;
5271 if( !consdata->varboundsadded )
5275 int localoldnchgbds;
5277 localoldnchgbds = *nchgbds;
5282 SCIPdebugMsg(
scip,
"adding variable lower bound <%s> >= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5284 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
">=" :
"<="), 1.0/-consdata->vbdcoef,
5288 &infeasible, &nlocalchgbds) );
5291 *nchgbds += nlocalchgbds;
5297 SCIPdebugMsg(
scip,
"adding variable upper bound <%s> <= %g<%s> + %g (and potentially also <%s> %s %g<%s> + %g)\n",
5299 SCIPvarGetName(consdata->vbdvar), (consdata->vbdcoef > 0 ?
"<=" :
">="), 1.0/-consdata->vbdcoef,
5303 &infeasible, &nlocalchgbds) );
5306 *nchgbds += nlocalchgbds;
5308 consdata->varboundsadded =
TRUE;
5310 if( *nchgbds > localoldnchgbds )
5326 SCIP_CALL(
upgradeConss(
scip, conshdlrdata, conss, nconss, &
cutoff, naggrvars, nchgbds, nchgcoefs, nchgsides, ndelconss, naddconss) );
5338 else if( *nchgbds > oldnchgbds || *ndelconss > oldndelconss || *naddconss > oldnaddconss
5339 || *nchgcoefs > oldnchgcoefs || *nchgsides > oldnchgsides || *naggrvars > oldnaggrvars )
5379 if( consdata->vbdcoef > 0.0 )
5392 if( consdata->vbdcoef > 0.0 )
5481 const char* consname;
5491 if( conshdlrdata->copytypedcons )
5526 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5548 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
5586 if( isdigit((
unsigned char)str[0]) || ((str[0] ==
'-' || str[0] ==
'+') && isdigit((
unsigned char)str[1])) )
5597 if( endstr[0] !=
'<' || endstr[1] !=
'=' )
5599 SCIPerrorMessage(
"missing \"<=\" after left hand side(, found %c%c)\n", endstr[0], endstr[1]);
5616 if( requiredsize == 2 && *success )
5630 if( *str !=
'\0' && *(str+1) !=
'\0' &&
SCIPparseReal(
scip, str+2, &value, &endstr) )
5655 else if( strncmp(str,
"[free]", 6) != 0 )
5662 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5689 vars[0] = consdata->var;
5690 vars[1] = consdata->vbdvar;
5744 consdata->presolved =
FALSE;
5750 consdata->presolved =
FALSE;
5751 consdata->tightened =
FALSE;
5773 eventExecVarbound,
NULL) );
5781 consEnfolpVarbound, consEnfopsVarbound, consCheckVarbound, consLockVarbound,
5818 "should pairwise constraint comparison be performed in presolving?",
5822 "maximum coefficient in varbound constraint to be added as a row into LP",
5825 "constraints/" CONSHDLR_NAME "/usebdwidening",
"should bound widening be used in conflict analysis?",
5829 "should varbound constraints be copied as varbound instead of as linear constraints?",
5884 if( conshdlr ==
NULL )
5897 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
5898 local, modifiable, dynamic, removable, stickingatnode) );
5946 return consdata->lhs;
5964 return consdata->rhs;
5982 return consdata->var;
6000 return consdata->vbdvar;
6018 return consdata->vbdcoef;
6036 if( consdata->row !=
NULL )
6057 if( consdata->row !=
NULL )
6080 return consdata->row;
6125 if( conshdlr ==
NULL )
6129 *infeasible =
FALSE;
6138 eventhdlr = conshdlrdata->eventhdlr;
6143 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
#define DEFAULT_COPYTYPEDCONS
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_STRINGEQ(name, reference, retcode)
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_RETCODE SCIPgetVarCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR *sourcevar, SCIP_VAR **targetvar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *success)
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