27 #define SCIP_PRIVATE_ROWPREP 41 #define CONSHDLR_NAME "abspower" 42 #define CONSHDLR_DESC "constraint handler for absolute power constraints lhs <= sign(x+offset)abs(x+offset)^n + c*z <= rhs" 43 #define CONSHDLR_SEPAPRIORITY 0 44 #define CONSHDLR_ENFOPRIORITY -30 45 #define CONSHDLR_CHECKPRIORITY -3500000 46 #define CONSHDLR_SEPAFREQ 1 47 #define CONSHDLR_PROPFREQ 1 48 #define CONSHDLR_EAGERFREQ 100 50 #define CONSHDLR_MAXPREROUNDS -1 51 #define CONSHDLR_DELAYSEPA FALSE 52 #define CONSHDLR_DELAYPROP FALSE 53 #define CONSHDLR_NEEDSCONS TRUE 55 #define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST | SCIP_PRESOLTIMING_MEDIUM 56 #define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_ALWAYS 58 #define QUADCONSUPGD_PRIORITY 50000 59 #define NONLINCONSUPGD_PRIORITY 50000 65 #define PROPVARTOL SCIPepsilon(scip) 66 #define PROPSIDETOL SCIPepsilon(scip) 67 #define INITLPMAXVARVAL 1000.0 70 #define DECL_MYPOW(x) SCIP_Real x (SCIP_Real base, SCIP_Real exponent) 76 #define SIGN(x) ((x) >= 0.0 ? 1.0 : -1.0) 83 #define ROOTS_KNOWN 10 92 0.41421356237309504880,
94 0.56042566045031785945,
95 0.60582958618826802099,
96 0.64146546982884663257,
97 0.67033204760309682774,
98 0.69428385661425826738,
99 0.71453772716733489700,
100 0.73192937842370733350
122 unsigned int propvarbounds:1;
128 struct SCIP_ConshdlrData
135 int preferzerobranch;
148 int newsoleventfilterpos;
153 unsigned int nsecantcuts;
179 assert(exponent == 2.0);
190 assert(event !=
NULL);
194 assert(cons !=
NULL);
215 assert(scip !=
NULL);
216 assert(cons !=
NULL);
217 assert(eventhdlr !=
NULL);
220 assert(consdata !=
NULL);
240 if( consdata->zcoef > 0.0 )
274 assert(scip !=
NULL);
275 assert(cons !=
NULL);
276 assert(eventhdlr !=
NULL);
279 assert(consdata !=
NULL);
290 consdata->xeventfilterpos = -1;
296 if( consdata->zcoef > 0.0 )
312 consdata->zeventfilterpos = -1;
315 assert(consdata->xeventfilterpos == -1);
316 assert(consdata->zeventfilterpos == -1);
337 assert(consdata1 !=
NULL);
338 assert(consdata2 !=
NULL);
340 if( consdata1->x != consdata2->x )
343 if( consdata1->exponent != consdata2->exponent )
346 if( consdata1->xoffset != consdata2->xoffset && consdata1->z != consdata2->z )
359 assert(consdata !=
NULL);
374 assert(consdata1 !=
NULL);
375 assert(consdata2 !=
NULL);
377 if( consdata1->z != consdata2->z )
380 if( consdata1->exponent != consdata2->exponent )
393 assert(consdata !=
NULL);
419 assert(scip !=
NULL);
420 assert(cons1 !=
NULL);
421 assert(cons2 !=
NULL);
422 assert(infeas !=
NULL);
423 assert(nupgdconss !=
NULL);
424 assert(ndelconss !=
NULL);
425 assert(naggrvars !=
NULL);
429 assert(consdata1 !=
NULL);
430 assert(consdata2 !=
NULL);
432 assert(
SCIPisEQ(scip, consdata2->lhs, consdata2->rhs));
434 assert(consdata1->x == consdata2->x);
435 assert(consdata1->exponent == consdata2->exponent);
436 assert(consdata1->xoffset == consdata2->xoffset);
438 lhs = consdata1->lhs;
440 lhs -= consdata2->lhs;
441 rhs = consdata1->rhs;
443 rhs -= consdata2->lhs;
445 vars[0] = consdata1->z;
446 vars[1] = consdata2->z;
448 coefs[0] = consdata1->zcoef;
449 coefs[1] = -consdata2->zcoef;
457 SCIP_CALL(
SCIPaggregateVars(scip, consdata1->z, consdata2->z, consdata1->zcoef, -consdata2->zcoef, rhs, infeas, &redundant, &aggregated) );
479 vars[0] = consdata1->z;
480 vars[1] = consdata2->z;
481 coefs[0] = consdata1->zcoef;
482 coefs[1] = -consdata2->zcoef;
532 assert(scip !=
NULL);
533 assert(infeas !=
NULL);
534 assert(xval !=
NULL);
535 assert(zval !=
NULL);
536 assert(exponent == 2.0);
537 assert(!
SCIPisEQ(scip, xoffset1, xoffset2));
538 assert(
SCIPisEQ(scip, zcoef1 * rhs2, zcoef2 * rhs1));
539 assert(zcoef1 != 0.0);
540 assert(zcoef2 != 0.0);
542 if( xoffset2 < xoffset1 )
544 presolveFindDuplicatesSolveEquations(scip, infeas, xval, zval, exponent, xoffset2, zcoef2, rhs2, xoffset1, zcoef1, rhs1);
548 if(
SCIPisEQ(scip, zcoef1, zcoef2) )
556 if(
SCIPisEQ(scip, zcoef1, -zcoef2) )
558 *xval = - (xoffset1 + xoffset2) / 2.0;
560 else if( zcoef2 * zcoef1 > 0.0 )
562 *xval = (xoffset2 - xoffset1) / (
sqrt(zcoef2 / zcoef1) - 1.0) - xoffset1;
566 assert(zcoef2 * zcoef1 < 0.0);
567 *xval = (xoffset2 - xoffset1) / (-
sqrt(-zcoef2 / zcoef1) - 1.0) - xoffset1;
570 *zval = rhs1 - (*xval + xoffset1) *
REALABS(*xval + xoffset1);
573 assert(
SCIPisFeasEQ(scip, (*xval + xoffset1) *
REALABS(*xval + xoffset1) + zcoef1 * *zval, rhs1));
574 assert(
SCIPisFeasEQ(scip, (*xval + xoffset2) *
REALABS(*xval + xoffset2) + zcoef2 * *zval, rhs2));
598 assert(scip !=
NULL);
599 assert(conshdlr !=
NULL);
600 assert(conss !=
NULL || nconss == 0);
601 assert(nupgdconss !=
NULL);
602 assert(ndelconss !=
NULL);
603 assert(naddconss !=
NULL);
604 assert(nfixedvars !=
NULL);
605 assert(naggrvars !=
NULL);
606 assert(success !=
NULL);
607 assert(infeas !=
NULL);
616 assert(conshdlrdata !=
NULL);
621 presolveFindDuplicatesGetKey, presolveFindDuplicatesKeyEQ, presolveFindDuplicatesKeyVal, (
void*)scip) );
623 for( c = 0; c < nconss && !*infeas; ++c )
634 multihashlist =
NULL;
650 assert(cons0 != cons1);
654 assert(consdata0 !=
NULL);
655 assert(consdata1 !=
NULL);
660 assert(consdata0->x == consdata1->x);
661 assert(consdata0->exponent == consdata1->exponent);
663 if(
SCIPisEQ(scip, consdata0->xoffset, consdata1->xoffset) )
668 if( consdata0->z == consdata1->z &&
SCIPisEQ(scip, consdata0->zcoef, consdata1->zcoef) )
671 if(
SCIPisGT(scip, consdata0->lhs, consdata1->rhs) ||
SCIPisGT(scip, consdata1->lhs, consdata0->rhs) )
686 if( consdata1->zcoef > 0.0 )
691 consdata1->lhs =
MAX(consdata0->lhs, consdata1->lhs);
692 consdata1->rhs =
MIN(consdata0->rhs, consdata1->rhs);
696 if( consdata1->zcoef > 0.0 )
703 consdata1->lhs =
MAX(consdata0->lhs, consdata1->lhs);
704 consdata1->rhs =
MIN(consdata0->rhs, consdata1->rhs);
715 if(
SCIPisEQ(scip, consdata1->lhs, consdata1->rhs) )
725 if(
SCIPisEQ(scip, consdata0->lhs, consdata0->rhs) )
758 SCIP_CALL(
SCIPcreateConsAbspower(scip, &auxcons, name, consdata0->x, auxvar, consdata0->exponent, consdata0->xoffset, -1.0, 0.0, 0.0,
774 #ifdef SCIP_DEBUG_SOLUTION 775 if( SCIPdebugIsMainscip(scip) )
786 vars[1] = consdata0->z;
788 coefs[1] = consdata0->zcoef;
799 vars[1] = consdata1->z;
800 coefs[1] = consdata1->zcoef;
820 else if( consdata0->z == consdata1->z &&
821 consdata0->exponent == 2.0 &&
824 SCIPisEQ(scip, consdata0->lhs, consdata0->rhs) &&
825 SCIPisEQ(scip, consdata1->lhs, consdata1->rhs) &&
826 SCIPisEQ(scip, consdata0->lhs * consdata1->zcoef, consdata1->lhs * consdata0->zcoef) )
837 assert(consdata0->x == consdata1->x);
838 assert(consdata0->exponent == consdata1->exponent);
839 assert(!
SCIPisEQ(scip, consdata0->xoffset, consdata1->xoffset));
843 consdata0->xoffset, consdata0->zcoef, consdata0->lhs,
844 consdata1->xoffset, consdata1->zcoef, consdata1->lhs);
848 SCIPdebugMsg(scip,
"infeasibility detected while solving the equations, no solution exists\n");
854 SCIPdebugMsg(scip,
"fixing variables <%s>[%g, %g] to %g and <%s>[%g, %g] to %g due to equations\n",
926 if( multihashlist ==
NULL )
946 presolveFindDuplicatesGetKey, presolveFindDuplicatesKeyEQ2, presolveFindDuplicatesKeyVal2, (
void*) scip) );
948 for( c = 0; c < nconss && !*infeas; ++c )
965 assert(consdata0 !=
NULL);
970 if( !
SCIPisEQ(scip, consdata0->lhs, consdata0->rhs) )
973 multihashlist =
NULL;
988 assert(cons0 != cons1);
992 assert(consdata1 !=
NULL);
997 assert(consdata0->z == consdata1->z);
998 assert(consdata0->exponent == consdata1->exponent);
999 assert(
SCIPisEQ(scip, consdata1->lhs, consdata1->rhs));
1002 if(
SCIPisEQ(scip, consdata0->lhs*consdata1->zcoef, consdata1->lhs*consdata0->zcoef) )
1019 if( consdata0->exponent == 2.0 )
1020 coef =
SIGN(consdata0->zcoef / consdata1->zcoef) *
sqrt(
REALABS(consdata0->zcoef / consdata1->zcoef));
1022 coef =
SIGN(consdata0->zcoef / consdata1->zcoef) *
pow(
REALABS(consdata0->zcoef / consdata1->zcoef), 1.0/consdata0->exponent);
1023 rhs = coef * consdata1->xoffset - consdata0->xoffset;
1032 else if( redundant )
1049 vars[0] = consdata0->x;
1050 vars[1] = consdata1->x;
1072 if( multihashlist ==
NULL )
1107 assert(scip !=
NULL);
1108 assert(cons !=
NULL);
1109 assert(cutoff !=
NULL);
1110 assert(nfixedvars !=
NULL);
1111 assert(ndelconss !=
NULL);
1121 assert(consdata !=
NULL);
1137 assert(consdata->zcoef != 0.0);
1153 if(
SCIPisEQ(scip, consdata->lhs, consdata->rhs) )
1182 xfix = 0.5 * (xlb + xub);
1190 else if( consdata->exponent == 2.0 )
1202 if(
SCIPisLT(scip, xlb, -consdata->xoffset) )
1212 c = consdata->xoffset * consdata->xoffset *
SCIPvarGetObj(consdata->z) / consdata->zcoef;
1224 xfixobjval = a * xlb * xlb + b * xlb + c;
1227 cand =
MIN(-consdata->xoffset, xub);
1228 if( xfixobjval > a * cand * cand + b * cand + c )
1231 xfixobjval = a * cand * cand + b * cand + c;
1236 if( cand > xlb && cand < -consdata->xoffset && cand < xub && xfixobjval > -b*b/(4.0*a) + c )
1239 xfixobjval = -b*b/(4.0*a) + c;
1244 if(
SCIPisGT(scip, xub, -consdata->xoffset) )
1254 c = -consdata->xoffset * consdata->xoffset *
SCIPvarGetObj(consdata->z) / consdata->zcoef;
1268 xfixobjval = a * xub * xub + b * xub + c;
1274 if( xfixobjval > a * cand * cand + b * cand + c )
1277 xfixobjval = a * cand * cand + b * cand + c;
1282 cand =
MAX(xlb, -consdata->xoffset);
1283 if( xfixobjval > a * cand * cand + b * cand + c )
1286 xfixobjval = a * cand * cand + b * cand + c;
1291 if( cand > xlb && cand > -consdata->xoffset && cand < xub && xfixobjval > -b*b/(4.0*a) + c )
1311 if( consdata->zcoef > 0.0 )
1324 if( consdata->zcoef > 0.0 )
1342 zfix = consdata->rhs -
SIGN(xfix + consdata->xoffset) * consdata->power(ABS(xfix + consdata->xoffset), consdata->exponent);
1343 zfix /= consdata->zcoef;
1348 zfix =
MAX(zlb,
MIN(zub, zfix));
1352 SCIPdebugMsg(scip,
"dual presolve fixes x=<%s>[%g,%g] to %g and z=<%s>[%g,%g] to %g in cons <%s>\n",
1398 assert(scip !=
NULL);
1399 assert(var !=
NULL);
1400 assert(cons !=
NULL);
1401 assert(result !=
NULL);
1402 assert(nchgbds !=
NULL);
1403 assert(nfixedvars !=
NULL);
1428 if( bounds.
inf != bounds.
sup )
1429 fixval = (bounds.
inf + bounds.
sup) / 2.0;
1431 fixval = bounds.
inf;
1452 SCIPdebugMsg(scip,
"found <%s> infeasible due to fixing fixed variable <%s>[%.20g,%.20g] to [%.20g,%.20g]\n",
1507 assert(naddconss !=
NULL);
1548 assert(scip !=
NULL);
1549 assert(cons !=
NULL);
1550 assert(zbnds !=
NULL);
1554 assert(consdata !=
NULL);
1564 if( consdata->zcoef > 0.0 )
1565 zbnds->
sup = bnd / consdata->zcoef;
1567 zbnds->
inf = bnd / consdata->zcoef;
1576 if( consdata->zcoef > 0.0 )
1577 zbnds->
inf = bnd / consdata->zcoef;
1579 zbnds->
sup = bnd / consdata->zcoef;
1582 SCIPdebugMsg(scip,
"given x = [%.20g, %.20g], computed z = [%.20g, %.20g] via", xbnds.
inf, xbnds.
sup, zbnds->
inf, zbnds->
sup);
1601 assert(scip !=
NULL);
1602 assert(cons !=
NULL);
1603 assert(xbnds !=
NULL);
1607 assert(consdata !=
NULL);
1612 z = (consdata->zcoef > 0.0 ? zbnds.
inf : zbnds.
sup);
1616 if( consdata->exponent == 2.0 )
1620 xbnds->
sup = bnd - consdata->xoffset;
1624 z = (consdata->zcoef > 0.0 ? zbnds.
sup : zbnds.
inf);
1628 if( consdata->exponent == 2.0 )
1632 xbnds->
inf = bnd - consdata->xoffset;
1635 SCIPdebugMsg(scip,
"given z = [%.20g, %.20g], computed x = [%.20g, %.20g] via", zbnds.
inf, zbnds.
sup, xbnds->
inf, xbnds->
sup);
1661 assert(scip !=
NULL);
1662 assert(cons !=
NULL);
1663 assert(ndelconss !=
NULL);
1664 assert(nupgdconss !=
NULL);
1665 assert(nchgbds !=
NULL);
1666 assert(nfixedvars !=
NULL);
1669 assert(conshdlrdata !=
NULL);
1672 assert(consdata !=
NULL);
1704 if(
SCIPisEQ(scip, consdata->lhs, consdata->rhs) )
1718 zfix = consdata->rhs -
SIGN(constant + consdata->xoffset) * consdata->power(
REALABS(constant + consdata->xoffset), consdata->exponent);
1719 zfix /= consdata->zcoef;
1752 else if( scalar > 0.0 )
1753 factor = consdata->power( scalar, consdata->exponent);
1755 factor = -consdata->power(-scalar, consdata->exponent);
1771 consdata->xoffset += constant;
1774 if( scalar == 1.0 ) ;
1775 else if( scalar > 0.0 )
1778 consdata->lhs /= factor;
1780 consdata->rhs /= factor;
1781 consdata->zcoef /= factor;
1782 consdata->xoffset /= scalar;
1788 assert(scalar < 0.0);
1789 assert(factor < 0.0);
1791 oldlhs = consdata->lhs;
1794 consdata->lhs = consdata->rhs / factor;
1798 consdata->rhs = oldlhs / factor;
1801 consdata->zcoef /= factor;
1802 consdata->xoffset /= scalar;
1812 conshdlrdata->comparedpairwise =
FALSE;
1816 SCIPwarningMessage(scip,
"Skip resolving aggregation of variable <%s> in abspower constraint <%s> to avoid zcoef = %g\n",
1849 if(
SCIPisEQ(scip, consdata->lhs, consdata->rhs) )
1863 xfix = consdata->rhs - consdata->zcoef * constant;
1864 if( consdata->exponent == 2.0 )
1867 xfix =
SIGN(xfix) *
pow(
REALABS(xfix), 1.0/consdata->exponent) - consdata->xoffset;
1899 if( consdata->zcoef > 0.0 )
1912 consdata->lhs -= consdata->zcoef * constant;
1914 consdata->rhs -= consdata->zcoef * constant;
1917 consdata->zcoef *= scalar;
1919 if( consdata->zcoef > 0.0 )
1926 conshdlrdata->comparedpairwise =
FALSE;
1948 assert(scip !=
NULL);
1949 assert(cons !=
NULL);
1952 assert(consdata !=
NULL);
1957 if( consdata->exponent == 2.0 )
1958 val = consdata->exponent *
REALABS(xval + consdata->xoffset);
1960 val = consdata->exponent *
pow(
REALABS(xval + consdata->xoffset), consdata->exponent - 1.0);
1982 assert(scip !=
NULL);
1983 assert(conshdlr !=
NULL);
1984 assert(cons !=
NULL);
1985 assert(viol !=
NULL);
1986 assert(solviolbounds !=
NULL);
1989 assert(conshdlrdata !=
NULL);
1992 assert(consdata !=
NULL);
1994 *solviolbounds =
FALSE;
2016 *solviolbounds =
TRUE;
2018 xval =
MAX(lb,
MIN(ub, xval));
2021 xval += consdata->xoffset;
2023 val =
SIGN(xval) * consdata->power(
REALABS(xval), consdata->exponent);
2024 val += consdata->zcoef * zval;
2026 if( val < consdata->lhs && !
SCIPisInfinity(scip, -consdata->lhs) )
2027 consdata->lhsviol = *viol = consdata->lhs - val;
2029 consdata->lhsviol = 0.0;
2031 if( val > consdata->rhs && !
SCIPisInfinity(scip, consdata->rhs) )
2032 consdata->rhsviol = *viol = val - consdata->rhs;
2034 consdata->rhsviol = 0.0;
2036 switch( conshdlrdata->scaling )
2044 if( consdata->lhsviol > 0.0 || consdata->rhsviol > 0.0 )
2050 consdata->lhsviol /= norm;
2051 consdata->rhsviol /= norm;
2061 if( consdata->lhsviol > 0.0 )
2063 absval =
REALABS(consdata->lhs);
2064 consdata->lhsviol /=
MAX(1.0, absval);
2067 if( consdata->rhsviol > 0.0 )
2069 absval =
REALABS(consdata->rhs);
2070 consdata->rhsviol /=
MAX(1.0, absval);
2103 assert(scip !=
NULL);
2104 assert(conss !=
NULL || nconss == 0);
2105 assert(solviolbounds !=
NULL);
2106 assert(maxviolcon !=
NULL);
2108 *solviolbounds =
FALSE;
2113 for( c = 0; c < nconss; ++c )
2115 assert(conss !=
NULL);
2116 assert(conss[c] !=
NULL);
2119 *solviolbounds |= solviolbounds1;
2122 assert(consdata !=
NULL);
2124 viol =
MAX(consdata->lhsviol, consdata->rhsviol);
2128 *maxviolcon = conss[c];
2152 assert(scip !=
NULL);
2153 assert(cons !=
NULL);
2156 assert(consdata !=
NULL);
2163 if(
SCIPisLT(scip, xlb, -consdata->xoffset) &&
SCIPisGT(scip, xub, -consdata->xoffset) )
2169 assert(preferzero >= 0);
2171 if( preferzero == 0 )
2175 return -consdata->xoffset;
2177 xlb += consdata->xoffset;
2178 xub += consdata->xoffset;
2189 return -consdata->xoffset;
2199 return -consdata->xoffset;
2203 if( branchminconverror )
2208 if(
SCIPisGE(scip, xlb, -consdata->xoffset) )
2211 xlb =
MAX(0.0, xlb + consdata->xoffset);
2212 xub =
MAX(0.0, xub + consdata->xoffset);
2214 ref = (consdata->power(xub, consdata->exponent) - consdata->power(xlb, consdata->exponent)) / (consdata->exponent * (xub - xlb));
2215 ref =
pow(ref, 1.0/(consdata->exponent-1.0));
2216 ref -= consdata->xoffset;
2226 assert(
SCIPisLE(scip, xub, -consdata->xoffset));
2228 xlb =
MIN(0.0, xlb + consdata->xoffset);
2229 xub =
MIN(0.0, xub + consdata->xoffset);
2231 ref = (consdata->power(-xlb, consdata->exponent) - consdata->power(-xub, consdata->exponent)) / (consdata->exponent * (-xlb + xub));
2232 ref = -
pow(ref, 1.0/(consdata->exponent-1.0));
2233 ref -= consdata->xoffset;
2262 assert(scip !=
NULL);
2263 assert(conshdlr !=
NULL);
2264 assert(conss !=
NULL || nconss == 0);
2267 assert(conshdlrdata !=
NULL);
2271 onlynonfixedsign = conshdlrdata->preferzerobranch == 3;
2275 for( c = 0; c < nconss; ++c )
2277 assert(conss[c] !=
NULL);
2280 assert(consdata !=
NULL);
2285 if( onlynonfixedsign &&
2303 if( onlynonfixedsign && *nnotify == 0 )
2306 onlynonfixedsign =
FALSE;
2331 assert(scip !=
NULL);
2332 assert(conss !=
NULL || nconss == 0);
2337 for( c = 0; c < nconss; ++c )
2339 assert(conss !=
NULL);
2341 assert(consdata !=
NULL);
2346 val =
SCIPgetSolVal(scip, sol, consdata->x) + consdata->xoffset;
2349 brvarval = ABS(val);
2350 *brvar = consdata->x;
2354 if( *brvar !=
NULL )
2378 assert(scip !=
NULL);
2379 assert(cons !=
NULL);
2380 assert(infervar !=
NULL);
2383 assert(consdata !=
NULL);
2384 assert(consdata->zcoef != 0.0);
2390 assert(infervar == consdata->x);
2393 if( consdata->zcoef > 0.0 )
2405 assert(infervar == consdata->z);
2412 assert(infervar == consdata->x);
2415 if( consdata->zcoef > 0.0 )
2427 assert(infervar == consdata->z);
2504 assert(conshdlr !=
NULL);
2505 assert(cutoff !=
NULL);
2506 assert(nchgbds !=
NULL);
2507 assert(naddconss !=
NULL);
2510 assert(consdata !=
NULL);
2524 while( tightenedround )
2526 tightenedround =
FALSE;
2547 newlb = consdata->lhs - consdata->zcoef * (consdata->zcoef > 0.0 ? zub : zlb);
2550 if( consdata->exponent == 2.0 )
2551 newlb =
SIGN(newlb) *
sqrt(ABS(newlb));
2553 newlb =
SIGN(newlb) *
pow(ABS(newlb), 1.0/consdata->exponent);
2554 newlb -= consdata->xoffset;
2562 if( consdata->exponent == 2.0 )
2563 newlb =
SIGN(newlb) *
sqrt(ABS(newlb));
2565 newlb =
SIGN(newlb) *
pow(ABS(newlb), 1.0/consdata->exponent);
2566 newlb -= consdata->xoffset;
2571 newlb =
MIN(newlb, xub);
2576 if( consdata->zcoef > 0.0 )
2594 if( consdata->exponent == 2.0 )
2595 newlb =
SIGN(newlb) *
sqrt(ABS(newlb));
2597 newlb =
SIGN(newlb) *
pow(ABS(newlb), 1.0/consdata->exponent);
2598 newlb -= consdata->xoffset;
2605 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->x), xlb, xub, newlb, xub);
2618 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2633 tightenedround =
TRUE;
2656 newbd = xub + consdata->xoffset;
2657 newbd = consdata->lhs -
SIGN(newbd) * consdata->power(
REALABS(newbd), consdata->exponent);
2658 newbd /= consdata->zcoef;
2665 if( (consdata->zcoef > 0.0 &&
SCIPisFeasGT(scip, newbd, zub)) || (consdata->zcoef < 0.0 &&
SCIPisFeasLT(scip, newbd, zlb)) )
2668 newbd = xub +
PROPVARTOL + consdata->xoffset;
2670 newbd /= consdata->zcoef;
2675 newbd =
MIN(zub,
MAX(zlb, newbd) );
2680 newbd = xub +
PROPVARTOL + consdata->xoffset;
2682 newbd /= consdata->zcoef;
2685 if( consdata->zcoef > 0.0 )
2692 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->z), zlb, zub, newlb, zub);
2703 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2718 tightenedround =
TRUE;
2731 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->z), zlb, zub, zlb, newub);
2742 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2757 tightenedround =
TRUE;
2785 newub = consdata->rhs - consdata->zcoef * (consdata->zcoef > 0.0 ? zlb : zub);
2788 if( consdata->exponent == 2.0 )
2789 newub =
SIGN(newub) *
sqrt(ABS(newub));
2791 newub =
SIGN(newub) *
pow(ABS(newub), 1.0/consdata->exponent);
2792 newub -= consdata->xoffset;
2800 if( consdata->exponent == 2.0 )
2801 newub =
SIGN(newub) *
sqrt(ABS(newub));
2803 newub =
SIGN(newub) *
pow(ABS(newub), 1.0/consdata->exponent);
2804 newub -= consdata->xoffset;
2809 newub =
MAX(newub, xlb);
2814 if( consdata->zcoef > 0.0 )
2831 if( consdata->exponent == 2.0 )
2832 newub =
SIGN(newub) *
sqrt(ABS(newub));
2834 newub =
SIGN(newub) *
pow(ABS(newub), 1.0/consdata->exponent);
2835 newub -= consdata->xoffset;
2842 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->x), xlb, xub, xlb, newub);
2855 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2870 tightenedround =
TRUE;
2893 newbd = xlb + consdata->xoffset;
2894 newbd = consdata->rhs -
SIGN(newbd) * consdata->power(
REALABS(newbd), consdata->exponent);
2895 newbd /= consdata->zcoef;
2902 if( (consdata->zcoef > 0.0 &&
SCIPisFeasLT(scip, newbd, zlb)) || (consdata->zcoef < 0.0 &&
SCIPisFeasGT(scip, newbd, zub)) )
2905 newbd = xlb -
PROPVARTOL + consdata->xoffset;
2907 newbd /= consdata->zcoef;
2912 newbd =
MIN(zub,
MAX(zlb, newbd) );
2917 newbd = xlb -
PROPVARTOL + consdata->xoffset;
2919 newbd /= consdata->zcoef;
2922 if( consdata->zcoef > 0.0 )
2929 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->z), zlb, zub, zlb, newub);
2940 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2955 tightenedround =
TRUE;
2968 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g] -> cutoff\n",
SCIPvarGetName(consdata->z), zlb, zub, newlb, zub);
2979 SCIPdebugMsg(scip,
" -> tighten <%s>[%.15g,%.15g] -> [%.15g,%.15g]\n",
2994 tightenedround =
TRUE;
3014 minact =
SIGN(xlb + consdata->xoffset) * consdata->power(
REALABS(xlb + consdata->xoffset), consdata->exponent) + consdata->zcoef * (consdata->zcoef > 0.0 ? zlb : zub);
3019 maxact =
SIGN(xub + consdata->xoffset) * consdata->power(
REALABS(xub + consdata->xoffset), consdata->exponent) + consdata->zcoef * (consdata->zcoef > 0.0 ? zub : zlb);
3025 SCIPdebugMsg(scip,
"absolute power constraint <%s> is redundant: <%s>[%.15g,%.15g], <%s>[%.15g,%.15g]\n",
3042 SCIPdebugMsg(scip,
"x-variable in constraint <%s> is fixed: x = <%s>[%.15g,%.15g], z = <%s>[%.15g,%.15g]\n",
3065 SCIPdebugMsg(scip,
"z-variable in constraint <%s> is fixed: x = <%s>[%.15g,%.15g], z = <%s>[%.15g,%.15g]\n",
3102 assert(scip !=
NULL);
3103 assert(cons !=
NULL);
3104 assert(var !=
NULL);
3105 assert(vbdvar !=
NULL);
3108 assert(infeas !=
NULL);
3158 *nbdchgs += nbdchgs_local;
3166 *nbdchgs += nbdchgs_local;
3213 assert(scip !=
NULL);
3214 assert(conshdlr !=
NULL);
3215 assert(cons !=
NULL);
3216 assert(infeas !=
NULL);
3217 assert(nbdchgs !=
NULL);
3218 assert(naddconss !=
NULL);
3223 assert(conshdlrdata !=
NULL);
3226 assert(consdata !=
NULL);
3227 assert(consdata->z !=
NULL);
3252 if(
SCIPisFeasZero(scip, consdata->power(a, consdata->exponent)) )
3257 fb =
SIGN( b + consdata->xoffset) * consdata->power( b + consdata->xoffset, consdata->exponent);
3258 fab =
SIGN(a+b + consdata->xoffset) * consdata->power(a+b + consdata->xoffset, consdata->exponent);
3260 vbcoef = (fb - fab) / consdata->zcoef;
3261 vbconst = (consdata->lhs - fb) / consdata->zcoef;
3263 if( consdata->zcoef > 0.0 )
3266 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->z, y, -vbcoef, vbconst,
SCIPinfinity(scip), infeas, nbdchgs, naddconss) );
3271 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->z, y, -vbcoef, -
SCIPinfinity(scip), vbconst, infeas, nbdchgs, naddconss) );
3297 if(
SCIPisFeasZero(scip, consdata->power(a, consdata->exponent)) )
3302 fb =
SIGN( b + consdata->xoffset) * consdata->power( b + consdata->xoffset, consdata->exponent);
3303 fab =
SIGN(a+b + consdata->xoffset) * consdata->power(a+b + consdata->xoffset, consdata->exponent);
3305 vbcoef = (fb - fab) / consdata->zcoef;
3306 vbconst = (consdata->rhs - fb) / consdata->zcoef;
3308 if( consdata->zcoef > 0.0 )
3311 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->z, y, -vbcoef, -
SCIPinfinity(scip), vbconst, infeas, nbdchgs, naddconss) );
3316 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->z, y, -vbcoef, vbconst,
SCIPinfinity(scip), infeas, nbdchgs, naddconss) );
3327 if( (consdata->zcoef > 0.0 && !
SCIPisInfinity(scip, -consdata->lhs)) ||
3328 ( consdata->zcoef < 0.0 && !
SCIPisInfinity(scip, consdata->rhs)) )
3343 if( consdata->zcoef > 0.0 )
3345 fb = consdata->lhs - b;
3346 fb =
SIGN(fb) *
pow(ABS(fb), 1.0/consdata->exponent);
3347 fab = consdata->lhs - (a+b);
3348 fab =
SIGN(fab) *
pow(ABS(fab), 1.0/consdata->exponent);
3349 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->x, y, fb - fab, fb - consdata->xoffset,
SCIPinfinity(scip), infeas, nbdchgs, naddconss) );
3353 fb = consdata->rhs - b;
3354 fb =
SIGN(fb) *
pow(ABS(fb), 1.0/consdata->exponent);
3355 fab = consdata->rhs - (a+b);
3356 fab =
SIGN(fab) *
pow(ABS(fab), 1.0/consdata->exponent);
3357 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->x, y, fb - fab, -
SCIPinfinity(scip), fb - consdata->xoffset, infeas, nbdchgs, naddconss) );
3367 if( (consdata->zcoef < 0.0 && !
SCIPisInfinity(scip, -consdata->lhs)) ||
3368 ( consdata->zcoef > 0.0 && !
SCIPisInfinity(scip, consdata->rhs)) )
3383 if( consdata->zcoef > 0.0 )
3385 fb = consdata->rhs - b;
3386 fb =
SIGN(fb) *
pow(ABS(fb), 1.0/consdata->exponent);
3387 fab = consdata->rhs - (a+b);
3388 fab =
SIGN(fab) *
pow(ABS(fab), 1.0/consdata->exponent);
3389 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->x, y, fb - fab, -
SCIPinfinity(scip), fb - consdata->xoffset, infeas, nbdchgs, naddconss) );
3393 fb = consdata->lhs - b;
3394 fb =
SIGN(fb) *
pow(ABS(fb), 1.0/consdata->exponent);
3395 fab = consdata->lhs - (a+b);
3396 fab =
SIGN(fab) *
pow(ABS(fab), 1.0/consdata->exponent);
3397 SCIP_CALL(
addVarbound(scip, cons, conshdlrdata->addvarboundcons, consdata->x, y, fb - fab, fb - consdata->xoffset,
SCIPinfinity(scip), infeas, nbdchgs, naddconss) );
3429 assert(scip !=
NULL);
3430 assert(rowprep !=
NULL);
3435 assert(conshdlrdata !=
NULL);
3437 if( refpoint < -xoffset )
3438 refpoint = -xoffset;
3440 tmp = exponent == 2.0 ? refpoint+xoffset :
pow(refpoint+xoffset, exponent-1);
3443 SCIPdebugMsg(scip,
"skip linearization cut because (refpoint+offset)^(exponent-1) > infinity\n");
3448 rhs += ((exponent-1)*refpoint-xoffset)*tmp;
3452 SCIPdebugMsg(scip,
"skip linearization cut because its rhs would be > infinity\n");
3458 (void)
SCIPsnprintf((*rowprep)->name, (
int)
sizeof((*rowprep)->name),
"signpowlinearizecut_%u", ++(conshdlrdata->ncuts));
3501 assert(scip !=
NULL);
3510 if( exponent == 2.0 )
3513 tmp = (xproj+xoffset) * (xproj+xoffset);
3514 gval = xproj - xref + 2*(xproj+xoffset) / zcoef * ((tmp-rhs)/zcoef + zref);
3518 gderiv = 1 + 6 * tmp / (zcoef*zcoef) + 2 / zcoef * (zref - rhs/zcoef);
3519 xproj -= gval / gderiv;
3522 while( ++iter <= 5 );
3526 tmp =
pow(xproj + xoffset, exponent-1);
3527 gval = xproj - xref + exponent / zcoef * (
pow(xproj+xoffset, 2*exponent-1)/zcoef + tmp * (zref-rhs/zcoef));
3531 gderiv = 1 + exponent / zcoef * ( (2*exponent-1)*tmp*tmp/zcoef + (exponent-1)*
pow(xproj+xoffset, exponent-2) * (zref-rhs/zcoef) );
3532 xproj -= gval / gderiv;
3535 while( ++iter <= 5 );
3540 SCIP_CALL(
generateLinearizationCut(scip, rowprep, conshdlr, xproj, exponent, xoffset, xmult, zcoef, rhs, x, z, islocal) );
3573 assert(scip !=
NULL);
3578 assert(conshdlrdata !=
NULL);
3584 if( xlb > -xoffset )
3587 tmp = mypow(-xlb-xoffset, exponent);
3588 slope =
SIGN(xub+xoffset) * mypow(ABS(xub+xoffset), exponent) + tmp;
3632 assert(scip !=
NULL);
3633 assert(rowprep !=
NULL);
3641 if( xlb > -xoffset )
3644 tmp = mypow(-xlb-xoffset, exponent);
3645 slope =
SIGN(xub+xoffset) * mypow(ABS(xub+xoffset), exponent) + tmp;
3652 strcpy((*rowprep)->name,
"signpowcut");
3687 assert(scip !=
NULL);
3688 assert(cons !=
NULL);
3689 assert(row !=
NULL);
3692 assert(conshdlrdata !=
NULL);
3695 assert(consdata !=
NULL);
3711 xoffset = consdata->xoffset;
3713 zcoef = consdata->zcoef;
3714 rhs = consdata->rhs;
3722 xoffset = -consdata->xoffset;
3724 zcoef = -consdata->zcoef;
3725 rhs = -consdata->lhs;
3730 SCIPdebugMsg(scip,
"skip separation since x is at infinity\n");
3740 if( conshdlrdata->projectrefpoint && !onlyinbounds )
3743 xoffset, xmult, zcoef, rhs, consdata->x, consdata->z, islocal) );
3745 else if( !onlyinbounds )
3748 consdata->x, consdata->z, islocal) );
3753 consdata->x, consdata->z, islocal) );
3761 SCIP_CALL(
generateSecantCut(scip, &rowprep,
SCIPconsGetHdlr(cons), sol, xlb, xub, consdata->exponent, xoffset, consdata->power, xmult, zcoef, rhs, consdata->x, consdata->z) );
3763 else if( (c = - consdata->root * (xlb+xoffset) - xoffset) > xub )
3768 SCIP_CALL(
generateSecantCut(scip, &rowprep,
SCIPconsGetHdlr(cons), sol, xlb, xub, consdata->exponent, xoffset, consdata->power, xmult, zcoef, rhs, consdata->x, consdata->z) );
3770 else if( xval >= c )
3773 if( conshdlrdata->projectrefpoint && !onlyinbounds )
3776 else if( !onlyinbounds )
3788 SCIP_CALL(
generateSecantCut(scip, &rowprep,
SCIPconsGetHdlr(cons), sol, xlb, c, consdata->exponent, xoffset, consdata->power, xmult, zcoef, rhs, consdata->x, consdata->z) );
3792 if( rowprep !=
NULL )
3799 assert(rowprep->
nvars <= 2);
3803 if( coefrange >= conshdlrdata->cutmaxrange )
3855 assert(scip !=
NULL);
3856 assert(conshdlr !=
NULL);
3857 assert(conss !=
NULL || nconss == 0);
3858 assert(success !=
NULL);
3859 assert(cutoff !=
NULL);
3865 assert(conshdlrdata !=
NULL);
3867 if( bestefficacy !=
NULL )
3868 *bestefficacy = 0.0;
3872 assert(conss[c] !=
NULL);
3875 assert(consdata !=
NULL);
3877 if(
SCIPisGT(scip, side == SCIP_SIDETYPE_LEFT ? consdata->lhsviol : consdata->rhsviol,
SCIPfeastol(scip)) )
3900 switch( conshdlrdata->scaling )
3903 efficacy = -feasibility;
3912 efficacy = -feasibility /
MAX(1.0, norm);
3921 efficacy = -feasibility /
MAX(1.0, minval);
3944 if( bestefficacy !=
NULL && efficacy > *bestefficacy )
3945 *bestefficacy = efficacy;
3954 if( inenforcement && !conshdlrdata->enfocutsremovable )
3964 if( c >= nusefulconss && *success )
3992 assert(scip !=
NULL);
3993 assert(conshdlr !=
NULL);
3994 assert(conss !=
NULL || nconss == 0);
3996 if( separatedlpsol !=
NULL )
3997 *separatedlpsol =
FALSE;
3999 for( c = 0; c < nconss; ++c )
4001 assert(conss[c] !=
NULL);
4007 assert(consdata !=
NULL);
4012 consdata->lhsviol = 1.0;
4013 consdata->rhsviol = 0.0;
4019 consdata->lhsviol = 0.0;
4020 consdata->rhsviol = 1.0;
4035 if( separatedlpsol !=
NULL )
4042 assert(conshdlrdata !=
NULL);
4045 switch( conshdlrdata->scaling )
4056 efficacy /=
MAX(1.0, norm);
4065 efficacy /=
MAX(1.0, minval);
4075 if( efficacy >= minefficacy )
4079 *separatedlpsol =
TRUE;
4082 assert( ! infeasible );
4107 assert(scip !=
NULL);
4108 assert(event !=
NULL);
4109 assert(eventdata !=
NULL);
4110 assert(eventhdlr !=
NULL);
4122 assert(sol !=
NULL);
4125 assert(conshdlrdata !=
NULL);
4135 assert(conss !=
NULL);
4162 assert(scip !=
NULL);
4163 assert(conshdlr !=
NULL);
4164 assert(conss !=
NULL || nconss == 0);
4180 for( c = 0; c < nconss; ++c )
4183 assert(consdata !=
NULL);
4184 assert(consdata->z !=
NULL);
4185 assert(consdata->zcoef != 0.0);
4189 assert(!solviolbounds);
4207 xtermval += consdata->xoffset;
4208 xtermval =
SIGN(xtermval) * consdata->power(ABS(xtermval), consdata->exponent);
4215 zval = (consdata->lhs - xtermval)/consdata->zcoef;
4225 zval = (consdata->rhs - xtermval)/consdata->zcoef;
4241 assert(conshdlrdata !=
NULL);
4242 assert(conshdlrdata->trysolheur !=
NULL);
4273 assert(scip !=
NULL);
4274 assert(cons !=
NULL);
4277 assert(consdata !=
NULL);
4279 if( consdata->nlrow !=
NULL )
4300 n = (int)
SCIPround(scip, consdata->exponent);
4303 if(
sign != 0 || (expisint && (n % 2 == 1)) )
4306 if( expisint && n == 2 )
4315 quadvar = consdata->x;
4317 if( consdata->xoffset != 0.0 )
4319 linvars[0] = consdata->x;
4320 lincoefs[0] =
sign * 2.0 * consdata->xoffset;
4322 constant =
sign * consdata->xoffset * consdata->xoffset;
4332 if( consdata->xoffset != 0.0 )
4337 if(
sign == -1 && !expisint )
4354 if(
sign == -1 && !(expisint && n % 2 == 1) )
4369 if( consdata->xoffset != 0.0 )
4378 assert(exprtree !=
NULL || nquadelems > 0);
4381 if( exprtree !=
NULL )
4386 assert(nlinvars < 2);
4387 linvars[nlinvars] = consdata->z;
4388 lincoefs[nlinvars] = consdata->zcoef;
4393 nlinvars, linvars, lincoefs,
4394 nquadvars, &quadvar, nquadelems, &quadelem,
4395 exprtree, consdata->lhs, consdata->rhs,
4399 if( exprtree !=
NULL )
4435 x = quadvarterm.
var;
4447 if( -*nupgdconss > upgdconsssize )
4486 #ifdef SCIP_DEBUG_SOLUTION 4487 if( SCIPdebugIsMainscip(scip) )
4517 lhs += quadvarterm.
sqrcoef * xoffset * xoffset;
4519 rhs += quadvarterm.
sqrcoef * xoffset * xoffset;
4522 signpowcoef = quadvarterm.
sqrcoef;
4524 signpowcoef = -signpowcoef;
4525 if( signpowcoef > 0.0 )
4537 newrhs = lhs / signpowcoef;
4541 lhs = rhs / signpowcoef;
4546 zcoef /= signpowcoef;
4550 xoffset, zcoef, lhs, rhs,
4578 assert(nupgdconss !=
NULL);
4579 assert(upgdconss !=
NULL);
4608 if( exponent <= 1.0 )
4620 if( exponent <= 1.0 )
4624 if( (
int)exponent % 2 == 0 && childbounds.
inf < 0.0 && childbounds.
sup > 0.0 )
4628 if( (
int)exponent % 2 == 0 && childbounds.
inf < 0.0 )
4640 if( childbounds.
inf < 0.0 && childbounds.
sup > 0.0 )
4644 if( childbounds.
inf < 0.0 )
4654 if( exponent <= 1.0 )
4674 if( exponent <= 1.0 )
4682 if( childbounds.
sup > 0.0 )
4702 zcoef /= signpowcoef;
4709 SCIPdebugMsg(scip,
"skip upgrade to signpower since |zcoef| = %g would be zero\n", zcoef);
4739 if( upgdconsssize < -*nupgdconss )
4766 signpowcoef *= (xcoef < 0.0 ? -1.0 : 1.0) *
pow(
REALABS(xcoef), exponent);
4792 assert(upgdconsssize > *nupgdconss);
4821 assert(upgdconsssize > *nupgdconss);
4838 #ifdef SCIP_DEBUG_SOLUTION 4839 if( SCIPdebugIsMainscip(scip) )
4865 if( constant != 0.0 )
4874 if( signpowcoef != 1.0 )
4876 zcoef /= signpowcoef;
4877 if( signpowcoef < 0.0 )
4896 assert(*nupgdconss < upgdconsssize);
4898 x, z, exponent, xoffset, zcoef, lhs, rhs,
4928 assert(scip !=
NULL);
4929 assert(exprgraph !=
NULL);
4930 assert(node !=
NULL);
4931 assert(naddcons !=
NULL);
4932 assert(reformnode !=
NULL);
4950 if( exponent <= 1.0 )
4962 if( exponent <= 1.0 )
4966 if( (
int)exponent % 2 == 0 && childbounds.
inf < 0.0 && childbounds.
sup > 0.0 )
4970 if( (
int)exponent % 2 == 0 && childbounds.
inf < 0.0 )
4982 if( childbounds.
inf < 0.0 && childbounds.
sup > 0.0 )
4986 if( childbounds.
inf < 0.0 )
4996 if( exponent <= 1.0 )
5018 if( exponent <= 1.0 )
5026 if( childbounds.
sup > 0.0 )
5047 SCIPdebugMsg(scip,
"reformulate node %p via signpower\n", (
void*)node);
5064 signpowcoef *= (xcoef < 0.0 ? -1.0 : 1.0) *
pow(
REALABS(xcoef), exponent);
5112 x, z, exponent, xoffset, -1.0/signpowcoef, -constant/signpowcoef, -constant/signpowcoef,
5119 #ifdef SCIP_DEBUG_SOLUTION 5120 if( SCIPdebugIsMainscip(scip) )
5126 zval = signpowcoef *
SIGN(xval + xoffset) *
pow(
REALABS(xval + xoffset), exponent) + constant;
5140 x, z, exponent, xoffset, -1.0, 0.0, 0.0,
5147 #ifdef SCIP_DEBUG_SOLUTION 5148 if( SCIPdebugIsMainscip(scip) )
5154 zval =
SIGN(xval + xoffset) *
pow(
REALABS(xval + xoffset), exponent);
5164 *reformnode = linnode;
5199 assert(scip !=
NULL);
5200 assert(conshdlr !=
NULL);
5201 assert(conss !=
NULL || nconss == 0);
5202 assert(result !=
NULL);
5205 assert(conshdlrdata !=
NULL);
5209 if( maxviolcons ==
NULL )
5224 assert(solinfeasible);
5228 if( !solinfeasible )
5242 if( conshdlrdata->nenforounds > 100 )
5255 ++conshdlrdata->nenforounds;
5260 conshdlrdata->nenforounds = 0;
5264 for( c = 0; c < nconss; ++c )
5269 assert(conss[c] !=
NULL);
5272 assert(consdata !=
NULL);
5294 assert(consdata !=
NULL);
5295 maxviol = consdata->lhsviol + consdata->rhsviol;
5303 minefficacy =
MIN(0.75*maxviol, conshdlrdata->mincutefficacyenfofac *
SCIPfeastol(scip));
5305 SCIP_CALL(
separatePoint(scip, conshdlr, conss, nconss, nusefulconss, sol, minefficacy,
TRUE,
FALSE, &success,
5306 &cutoff, &sepaefficacy) );
5315 SCIPdebugMsg(scip,
"separation succeeded (bestefficacy = %g, minefficacy = %g)\n", sepaefficacy, minefficacy);
5319 SCIPdebugMsg(scip,
"separation failed (bestefficacy = %g < %g = minefficacy ); max viol: %g\n", sepaefficacy, minefficacy,
5329 if( nnotify == 0 && !solinfeasible && minefficacy > leastpossibleefficacy )
5333 &success, &cutoff, &sepaefficacy) );
5347 if( nnotify == 0 && !solinfeasible )
5355 SCIPwarningMessage(scip,
"Could not find any branching variable candidate. Cutting off node. Max viol = %g.\n",
5362 SCIPdebugMsg(scip,
"Could not find any usual branching variable candidate. Proposed variable %s with LP value %g for branching. Max. viol. cons. <%s>: %g+%g\n",
5381 assert(scip !=
NULL);
5382 assert(conshdlr !=
NULL);
5399 assert(scip !=
NULL);
5400 assert(conshdlr !=
NULL);
5403 assert(conshdlrdata !=
NULL);
5416 assert(scip !=
NULL);
5417 assert(conshdlr !=
NULL);
5420 assert(conshdlrdata !=
NULL);
5422 conshdlrdata->subnlpheur =
SCIPfindHeur(scip,
"subnlp");
5423 conshdlrdata->trysolheur =
SCIPfindHeur(scip,
"trysol");
5425 conshdlrdata->nsecantcuts = 0;
5426 conshdlrdata->ncuts = 0;
5437 assert(scip !=
NULL);
5438 assert(conshdlr !=
NULL);
5441 assert(conshdlrdata !=
NULL);
5443 conshdlrdata->subnlpheur =
NULL;
5444 conshdlrdata->trysolheur =
NULL;
5445 conshdlrdata->conshdlrindicator =
NULL;
5456 assert(conshdlr !=
NULL);
5459 assert(conshdlrdata !=
NULL);
5462 conshdlrdata->comparedpairwise = (nconss <= 1);
5473 assert(scip !=
NULL);
5474 assert(conss !=
NULL || nconss == 0);
5477 for( c = 0; c < nconss; ++c )
5479 assert(conss[c] !=
NULL);
5500 assert(conshdlrdata !=
NULL);
5502 assert(scip !=
NULL);
5503 assert(conss !=
NULL || nconss == 0);
5505 for( c = 0; c < nconss; ++c )
5507 assert(conss[c] !=
NULL);
5510 assert(consdata !=
NULL);
5512 assert(consdata->exponent > 1.0);
5517 consdata->root =
roots[(int)
SCIPfloor(scip, consdata->exponent+0.5)];
5519 else if(
SCIPisEQ(scip, consdata->exponent, 1.852) )
5521 consdata->root = 0.398217;
5534 else if( consdata->exponent <= 2.0 )
5541 polyval = (consdata->exponent - 1.0) * consdata->power(root, consdata->exponent) + consdata->exponent *
pow(root, consdata->exponent-1.0) - 1.0;
5546 gradval = (consdata->exponent - 1.0) * consdata->exponent * (
pow(root, consdata->exponent - 1.0) +
pow(root, consdata->exponent - 2.0));
5551 root -= polyval / gradval;
5555 while( ++iter < 1000 );
5559 SCIPerrorMessage(
"failed to compute root for exponent %g\n", consdata->exponent);
5562 SCIPdebugMsg(scip,
"root for %g is %.20g, certainty = %g\n", consdata->exponent, root, polyval);
5565 consdata->root = root;
5571 if( consdata->nlrow ==
NULL )
5574 assert(consdata->nlrow !=
NULL);
5580 conshdlrdata->newsoleventfilterpos = -1;
5586 assert(eventhdlr !=
NULL);
5592 conshdlrdata->sepanlp =
FALSE;
5593 conshdlrdata->lastenfonode =
NULL;
5594 conshdlrdata->nenforounds = 0;
5607 assert(scip !=
NULL);
5608 assert(conss !=
NULL || nconss == 0);
5611 assert(conshdlrdata !=
NULL);
5613 if( conshdlrdata->newsoleventfilterpos >= 0 )
5618 assert(eventhdlr !=
NULL);
5621 conshdlrdata->newsoleventfilterpos = -1;
5624 for( c = 0; c < nconss; ++c )
5626 assert(conss[c] !=
NULL);
5629 assert(consdata !=
NULL);
5632 if( consdata->nlrow !=
NULL )
5645 assert(scip !=
NULL);
5646 assert(conshdlr !=
NULL);
5647 assert(cons !=
NULL);
5648 assert(consdata !=
NULL);
5649 assert((*consdata)->x !=
NULL);
5650 assert((*consdata)->z !=
NULL);
5651 assert((*consdata)->xeventfilterpos == -1);
5652 assert((*consdata)->zeventfilterpos == -1);
5654 if( (*consdata)->nlrow !=
NULL )
5672 assert(sourcedata !=
NULL);
5675 assert(targetdata->xeventfilterpos == -1);
5676 assert(targetdata->zeventfilterpos == -1);
5715 assert(scip !=
NULL);
5716 assert(conshdlr !=
NULL);
5717 assert(conss !=
NULL || nconss == 0);
5720 assert(conshdlrdata !=
NULL);
5722 *infeasible =
FALSE;
5724 for( c = 0; c < nconss && !(*infeasible); ++c )
5726 assert(conss[c] !=
NULL);
5729 assert(consdata !=
NULL);
5745 consdata->exponent, consdata->xoffset, consdata->power, 1.0, consdata->zcoef, consdata->rhs, consdata->x, consdata->z) );
5746 if( rowprep !=
NULL )
5753 assert(!(*infeasible));
5769 consdata->x, consdata->z,
FALSE) );
5770 assert(rowprep !=
NULL);
5777 assert(!(*infeasible));
5780 if( conshdlrdata->conshdlrindicator !=
NULL )
5793 if( -consdata->root * (xlb+consdata->xoffset) - consdata->xoffset < xub && xub <=
INITLPMAXVARVAL )
5796 consdata->x, consdata->z,
FALSE) );
5797 assert(rowprep !=
NULL);
5804 assert(!(*infeasible));
5807 if( conshdlrdata->conshdlrindicator !=
NULL )
5826 consdata->exponent, -consdata->xoffset, consdata->power, -1.0, -consdata->zcoef, -consdata->lhs, consdata->x, consdata->z) );
5827 if( rowprep !=
NULL )
5834 assert(!(*infeasible));
5850 consdata->x, consdata->z,
FALSE) );
5851 assert(rowprep !=
NULL);
5858 assert(!(*infeasible));
5861 if( conshdlrdata->conshdlrindicator !=
NULL )
5874 if( -consdata->root * (xub+consdata->xoffset) - consdata->xoffset > xlb && xlb >= -
INITLPMAXVARVAL )
5877 consdata->x, consdata->z,
FALSE) );
5878 assert(rowprep !=
NULL);
5885 assert(!(*infeasible));
5888 if( conshdlrdata->conshdlrindicator !=
NULL )
5913 assert(scip !=
NULL);
5914 assert(conshdlr !=
NULL);
5915 assert(conss !=
NULL || nconss == 0);
5916 assert(result !=
NULL);
5921 assert(conshdlrdata !=
NULL);
5930 if( maxviolcon ==
NULL )
5936 if(
SCIPgetDepth(scip) == 0 && !conshdlrdata->sepanlp &&
5953 for( c = 0; c < nconss; ++c )
5955 assert(conss[c] !=
NULL);
5958 assert(consdata !=
NULL);
5974 if( conshdlrdata->subnlpheur !=
NULL )
5989 SCIPdebugMsg(scip,
"solved NLP relax, solution status: %d\n", solstat);
5995 conshdlrdata->sepanlp =
TRUE;
5999 SCIPdebugMsg(scip,
"NLP relaxation is globally infeasible, thus can cutoff node\n");
6011 assert(nlpsol !=
NULL);
6014 if( solvednlp && conshdlrdata->trysolheur !=
NULL )
6024 if( nfracvars == 0 )
6035 if( lpsolseparated )
6037 SCIPdebugMsg(scip,
"linearization cuts separate LP solution\n");
6049 SCIP_CALL(
separatePoint(scip, conshdlr, conss, nconss, nusefulconss,
NULL, conshdlrdata->mincutefficacysepa,
FALSE, conshdlrdata->sepainboundsonly, &success, &cutoff,
NULL) );
6068 assert(scip !=
NULL);
6069 assert(conshdlr !=
NULL);
6070 assert(conss !=
NULL || nconss == 0);
6071 assert(sol !=
NULL);
6072 assert(result !=
NULL);
6075 assert(conshdlrdata !=
NULL);
6086 if( maxviolcon ==
NULL )
6089 SCIP_CALL(
separatePoint(scip, conshdlr, conss, nconss, nusefulconss, sol, conshdlrdata->mincutefficacysepa,
FALSE,
FALSE, &success, &cutoff,
NULL) );
6127 assert(scip !=
NULL);
6128 assert(conshdlr !=
NULL);
6129 assert(conss !=
NULL || nconss == 0);
6132 assert(conshdlrdata !=
NULL);
6136 assert(!solviolbounds);
6138 if( maxviolcon ==
NULL )
6147 for( c = 0; c < nconss; ++c )
6153 assert(conss[c] !=
NULL);
6156 assert(consdata !=
NULL);
6181 for( c = 0; c < nconss; ++c )
6183 assert(conss !=
NULL);
6185 assert(consdata !=
NULL);
6202 SCIPdebugMsg(scip,
"All variables in violated constraints fixed (up to epsilon). Cannot find branching candidate. Forcing solution of LP.\n");
6220 assert(scip !=
NULL);
6221 assert(conshdlr !=
NULL);
6222 assert(conss !=
NULL || nconss == 0);
6223 assert(result !=
NULL);
6227 for( c = 0; c < nmarkedconss; ++c )
6229 assert(conss !=
NULL);
6235 assert(naddconss == 0);
6266 assert(scip !=
NULL);
6267 assert(conss !=
NULL || nconss == 0);
6268 assert(result !=
NULL);
6271 assert(conshdlrdata !=
NULL);
6278 SCIP_CALL(
presolveFindDuplicates(scip, conshdlr, conss, nconss, nupgdconss, ndelconss, naddconss, nfixedvars, naggrvars, &success, &infeas) );
6287 conshdlrdata->comparedpairwise =
TRUE;
6292 for( c = 0; c < nconss; ++c )
6294 assert(conss[c] !=
NULL);
6300 assert(consdata !=
NULL);
6306 if( consdata->exponent == 1.0 )
6314 vars[0] = consdata->x;
6315 vars[1] = consdata->z;
6317 coefs[1] = consdata->zcoef;
6318 lhs = consdata->lhs;
6319 rhs = consdata->rhs;
6321 lhs -= consdata->xoffset;
6323 rhs -= consdata->xoffset;
6341 switch( replaceresult )
6381 if( consdata->xoffset != 0.0 )
6385 xcoef =
SIGN(consdata->xoffset + 1.0) * consdata->power(ABS(consdata->xoffset + 1.0), consdata->exponent)
6386 -
SIGN(consdata->xoffset) * consdata->power(ABS(consdata->xoffset), consdata->exponent);
6393 lhs = (consdata->rhs -
SIGN(consdata->xoffset) * consdata->power(ABS(consdata->xoffset), consdata->exponent)) / xcoef;
6397 rhs = (consdata->lhs -
SIGN(consdata->xoffset) * consdata->power(ABS(consdata->xoffset), consdata->exponent)) / xcoef;
6404 lhs = (consdata->lhs -
SIGN(consdata->xoffset) * consdata->power(ABS(consdata->xoffset), consdata->exponent)) / xcoef;
6408 rhs = (consdata->rhs -
SIGN(consdata->xoffset) * consdata->power(ABS(consdata->xoffset), consdata->exponent)) / xcoef;
6410 zcoef = consdata->zcoef / xcoef;
6418 lhs = consdata->lhs;
6419 rhs = consdata->rhs;
6420 zcoef = consdata->zcoef;
6436 if( infeas || !fixed )
6438 SCIPdebugMsg(scip,
"propagation on constraint <%s> says problem is infeasible in presolve\n",
6450 SCIPdebugMsg(scip,
"propagation on constraint <%s> says problem is infeasible in presolve\n",
6460 consdata->x, consdata->z, zcoef, lhs, rhs,
6469 1, &consdata->z, &zcoef, lhs, rhs,
6499 if( localnchgbds > 0 || localnaddconss > 0 )
6501 *nchgbds += localnchgbds;
6502 *naddconss += localnaddconss;
6540 consdata->propvarbounds =
TRUE;
6579 assert(result !=
NULL);
6596 assert(scip !=
NULL);
6597 assert(cons !=
NULL);
6600 assert(consdata !=
NULL);
6605 if( consdata->x !=
NULL )
6617 if( consdata->z !=
NULL )
6619 if( consdata->zcoef > 0 )
6652 assert(conshdlr !=
NULL);
6655 assert(conshdlrdata !=
NULL);
6658 conshdlrdata->comparedpairwise =
FALSE;
6669 assert(scip !=
NULL);
6670 assert(cons !=
NULL);
6671 assert(conshdlr !=
NULL);
6674 assert(conshdlrdata !=
NULL);
6675 assert(conshdlrdata->eventhdlr !=
NULL);
6688 assert(scip !=
NULL);
6689 assert(cons !=
NULL);
6690 assert(conshdlr !=
NULL);
6693 assert(conshdlrdata !=
NULL);
6694 assert(conshdlrdata->eventhdlr !=
NULL);
6707 assert(scip !=
NULL);
6708 assert(cons !=
NULL);
6711 assert(consdata !=
NULL);
6716 && !
SCIPisEQ(scip, consdata->lhs, consdata->rhs) )
6722 SCIPinfoMessage(scip, file,
" %+.15g, %.15g) ", consdata->xoffset, consdata->exponent);
6728 if(
SCIPisEQ(scip, consdata->lhs, consdata->rhs) )
6760 assert(scip !=
NULL);
6761 assert(conss !=
NULL || nconss == 0);
6762 assert(result !=
NULL);
6765 assert(conshdlrdata !=
NULL);
6773 for( c = 0; c < nconss; ++c )
6775 assert(conss !=
NULL);
6778 assert(!solviolbounds);
6781 assert(consdata !=
NULL);
6789 SCIPinfoMessage(scip,
NULL,
"absolute power constraint <%s> violated by %g (scaled = %g)\n\t",
6791 SCIP_CALL( consPrintAbspower(scip, conshdlr, conss[c],
NULL) );
6795 if( conshdlrdata->subnlpheur ==
NULL && !dolinfeasshift && !completely )
6797 if( consdata->lhsviol > maxviol || consdata->rhsviol > maxviol )
6798 maxviol =
MAX(consdata->lhsviol, consdata->rhsviol);
6823 assert(scip !=
NULL);
6824 assert(cons !=
NULL);
6825 assert(sourcescip !=
NULL);
6826 assert(sourcecons !=
NULL);
6827 assert(varmap !=
NULL);
6828 assert(valid !=
NULL);
6831 assert(consdata !=
NULL);
6846 x, z, consdata->exponent, consdata->xoffset, consdata->zcoef, consdata->lhs, consdata->rhs,
6847 initial, separate, enforce, check, propagate, local,
FALSE, dynamic, removable, stickingatnode) );
6874 SCIPdebugMsg(scip,
"start parsing absolute power constraint expression %s\n", str);
6876 if( strncmp(str,
"signpower(", 10) != 0 )
6905 while( isspace((
int)*str) )
6926 while( isspace((
int)*str) )
6947 while( isspace((
int)*str) )
6970 while( isspace((
int)*str) )
6973 if( strncmp(str,
"[free]", 6) != 0 )
6976 if( (*str !=
'<' && *str !=
'>' && *str !=
'=') || str[1] !=
'=' )
7010 SCIP_CALL(
SCIPcreateConsAbspower(scip, cons, name, x, z, exponent, xoffset, zcoef, lhs, rhs,
7011 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
7026 assert(cons !=
NULL);
7027 assert(vars !=
NULL);
7030 assert(consdata !=
NULL);
7032 vars[0] = consdata->x;
7033 vars[1] = consdata->z;
7070 consEnfolpAbspower, consEnfopsAbspower, consCheckAbspower, consLockAbspower,
7073 assert(conshdlr !=
NULL);
7113 "minimal efficacy for a cut to be added to the LP during separation; overwrites separating/efficacy",
7117 "minimal target efficacy of a cut in order to add it to relaxation during enforcement as factor of feasibility tolerance (may be ignored)",
7121 "whether scaling of infeasibility is 'o'ff, by sup-norm of function 'g'radient, or by left/right hand 's'ide",
7122 &conshdlrdata->scaling,
TRUE,
'o',
"ogs",
NULL,
NULL) );
7125 "maximal coef range of a cut (maximal coefficient divided by minimal coefficient) in order to be added to LP relaxation",
7129 "whether to project the reference point when linearizing an absolute power constraint in a convex region",
7133 "how much to prefer branching on 0.0 when sign of variable is not fixed yet: 0 no preference, 1 prefer if LP solution will be cutoff in both child nodes, 2 prefer always, 3 ensure always",
7134 &conshdlrdata->preferzerobranch,
FALSE, 1, 0, 3,
NULL,
NULL) );
7137 "whether to compute branching point such that the convexification error is minimized (after branching on 0.0)",
7141 "should variable bound constraints be added for derived variable bounds?",
7145 "whether to try to make solutions in check function feasible by shifting the linear variable z",
7149 "should dual presolve be applied?",
7153 "whether to separate linearization cuts only in the variable bounds (does not affect enforcement)",
7157 "minimal required fraction of continuous variables in problem to use solution of NLP relaxation in root for separation",
7158 &conshdlrdata->sepanlpmincont,
FALSE, 1.0, 0.0, 2.0,
NULL,
NULL) );
7161 "are cuts added during enforcement removable from the LP in the same node?",
7165 processVarEvent,
NULL) );
7166 conshdlrdata->eventhdlr = eventhdlr;
7169 processNewSolutionEvent,
NULL) );
7219 assert(exponent > 1.0);
7222 assert(!modifiable);
7226 if( conshdlr ==
NULL )
7235 consdata->xeventfilterpos = -1;
7236 consdata->zeventfilterpos = -1;
7240 consdata->xoffset = xoffset;
7241 consdata->zcoef = zcoef;
7242 consdata->lhs = lhs;
7243 consdata->rhs = rhs;
7245 if(
SCIPisEQ(scip, exponent, 2.0) )
7247 consdata->exponent = 2.0;
7248 consdata->power =
square;
7252 consdata->exponent = exponent;
7253 consdata->power =
pow;
7265 SCIP_CALL(
SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
7266 local, modifiable, dynamic, removable, stickingatnode) );
7292 assert(scip !=
NULL);
7294 SCIP_CALL(
SCIPcreateConsAbspower(scip, cons, name, x, z, exponent, xoffset, zcoef, lhs, rhs,
7309 assert(cons !=
NULL);
7311 assert(nlrow !=
NULL);
7314 assert(consdata !=
NULL);
7316 if( consdata->nlrow ==
NULL )
7320 assert(consdata->nlrow !=
NULL);
7321 *nlrow = consdata->nlrow;
7334 assert(cons !=
NULL);
7338 assert(consdata !=
NULL);
7351 assert(cons !=
NULL);
7355 assert(consdata !=
NULL);
7368 assert(cons !=
NULL);
7372 assert(consdata !=
NULL);
7374 return consdata->exponent;
7385 assert(cons !=
NULL);
7389 assert(consdata !=
NULL);
7391 return consdata->xoffset;
7402 assert(cons !=
NULL);
7406 assert(consdata !=
NULL);
7408 return consdata->zcoef;
7419 assert(cons !=
NULL);
7423 assert(consdata !=
NULL);
7425 return consdata->lhs;
7436 assert(cons !=
NULL);
7440 assert(consdata !=
NULL);
7442 return consdata->rhs;
7458 assert(cons !=
NULL);
7462 assert(consdata !=
NULL);
7463 assert(consdata->lhs == 0.0);
7464 assert(consdata->rhs == 0.0);
7469 rhs = -1.0 * consdata->zcoef * z_val;
7470 proj_val =
SIGN(rhs) *
pow(
REALABS(rhs), 1.0 / consdata->exponent) - consdata->xoffset;
7472 SCIPdebugMsg(scip,
"computing slack: linear: %f, power: %f, projected: %f\n", z_val, x_val, proj_val);
7474 return x_val - proj_val;
SCIP_Real SCIPgetCoefLinearAbspower(SCIP *scip, SCIP_CONS *cons)
enum SCIP_Result SCIP_RESULT
static SCIP_RETCODE generateLinearizationCut(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_CONSHDLR *conshdlr, SCIP_Real refpoint, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z, SCIP_Bool islocal)
void SCIPmultihashFree(SCIP_MULTIHASH **multihash)
SCIP_VAR * SCIPgetNonlinearVarAbspower(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons)
enum SCIP_BoundType SCIP_BOUNDTYPE
SCIP_Real SCIPexprgraphGetNodeVal(SCIP_EXPRGRAPHNODE *node)
int SCIPgetNIntVars(SCIP *scip)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
static SCIP_DECL_HASHGETKEY(presolveFindDuplicatesGetKey)
SCIPInterval square(const SCIPInterval &x)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete)))
SCIP_EXPRGRAPH * SCIPgetExprgraphNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPincludeNonlinconsUpgrade(SCIP *scip, SCIP_DECL_NONLINCONSUPGD((*nonlinconsupgd)), SCIP_DECL_EXPRGRAPHNODEREFORM((*nodereform)), int priority, SCIP_Bool active, const char *conshdlrname)
SCIP_Real * SCIPvarGetVlbCoefs(SCIP_VAR *var)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
void SCIPexprgraphSetVarNodeValue(SCIP_EXPRGRAPHNODE *varnode, SCIP_Real value)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
SCIP_RETCODE SCIPexprgraphAddNode(SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node, int mindepth, int nchildren, SCIP_EXPRGRAPHNODE **children)
primal heuristic that tries a given solution
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
static SCIP_DECL_CONSPROP(consPropAbspower)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPexprgraphAddVars(SCIP_EXPRGRAPH *exprgraph, int nvars, void **vars, SCIP_EXPRGRAPHNODE **varnodes)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans)))
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Constraint handler for variable bound constraints .
SCIP_Bool SCIPisRelEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE dropVarEvents(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_Real SCIPgetOffsetAbspower(SCIP *scip, SCIP_CONS *cons)
int SCIPexprgraphGetNodeNChildren(SCIP_EXPRGRAPHNODE *node)
int SCIPvarGetNVlbs(SCIP_VAR *var)
SCIP_Bool SCIPisUbBetter(SCIP *scip, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub)
static SCIP_DECL_CONSDISABLE(consDisableAbspower)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPincludeQuadconsUpgrade(SCIP *scip, SCIP_DECL_QUADCONSUPGD((*quadconsupgd)), int priority, SCIP_Bool active, const char *conshdlrname)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars)))
SCIP_VAR * SCIPgetLinearVarAbspower(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
SCIPInterval pow(const SCIPInterval &x, const SCIPInterval &y)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcleanupRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Real maxcoefrange, SCIP_Real minviol, SCIP_Real *coefrange, SCIP_Real *viol)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
static SCIP_DECL_CONSINITPRE(consInitpreAbspower)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
static SCIP_RETCODE addLinearizationCuts(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *ref, SCIP_Bool *separatedlpsol, SCIP_Real minefficacy)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddRowprepTerm(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_VAR *var, SCIP_Real coef)
static SCIP_DECL_CONSPARSE(consParseAbspower)
SCIP_Bool SCIPconsIsAdded(SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_NLPSOLSTAT SCIPgetNLPSolstat(SCIP *scip)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPparseVarName(SCIP *scip, const char *str, SCIP_VAR **var, char **endptr)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPmultihashCreate(SCIP_MULTIHASH **multihash, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITPRE((*consinitpre)))
constraint handler for indicator constraints
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPgetRelaxFeastolFactor(SCIP *scip)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
static SCIP_DECL_CONSINITSOL(consInitsolAbspower)
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_Real * SCIPgetLinearCoefsNonlinear(SCIP *scip, SCIP_CONS *cons)
static SCIP_DECL_CONSINITLP(consInitlpAbspower)
static SCIP_DECL_CONSEXITPRE(consExitpreAbspower)
SCIP_Real SCIPinfinity(SCIP *scip)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPexprgraphGetNodeSignPowerExponent(SCIP_EXPRGRAPHNODE *node)
SCIP_RETCODE SCIPunmarkConsPropagate(SCIP *scip, SCIP_CONS *cons)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPsolveNLP(SCIP *scip)
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
int SCIPvarGetNVubs(SCIP_VAR *var)
static SCIP_RETCODE tightenBounds(SCIP *scip, SCIP_VAR *var, SCIP_INTERVAL bounds, SCIP_Bool force, SCIP_CONS *cons, SCIP_RESULT *result, int *nchgbds, int *nfixedvars, int *naddconss)
SCIP_INTERVAL SCIPexprgraphGetNodeBounds(SCIP_EXPRGRAPHNODE *node)
static SCIP_RETCODE enforceConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_Bool solinfeasible, SCIP_RESULT *result)
static SCIP_DECL_CONSENFOPS(consEnfopsAbspower)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
SCIP_Real SCIPgetRhsNonlinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPexprtreeSetVars(SCIP_EXPRTREE *tree, int nvars, SCIP_VAR **vars)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
#define CONSHDLR_CHECKPRIORITY
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
static SCIP_RETCODE checkFixedVariables(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, int *ndelconss, int *nupgdconss, int *nchgbds, int *nfixedvars, SCIP_RESULT *result)
#define SCIPfreeBlockMemory(scip, ptr)
static SCIP_DECL_HASHKEYVAL(presolveFindDuplicatesKeyVal)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_VAR ** SCIPvarGetVlbVars(SCIP_VAR *var)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
static SCIP_DECL_HASHKEYEQ(presolveFindDuplicatesKeyEQ)
static SCIP_DECL_CONSTRANS(consTransAbspower)
static SCIP_RETCODE separatePoint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_Real minefficacy, SCIP_Bool inenforcement, SCIP_Bool onlyinbounds, SCIP_Bool *success, SCIP_Bool *cutoff, SCIP_Real *bestefficacy)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddVarVlb(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vlbvar, SCIP_Real vlbcoef, SCIP_Real vlbconstant, SCIP_Bool *infeasible, int *nbdchgs)
int SCIPnodeGetDepth(SCIP_NODE *node)
static SCIP_DECL_CONSGETVARS(consGetVarsAbspower)
SCIP_RETCODE SCIPcreateLPSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
SCIP_RETCODE SCIPexprtreeCreate(BMS_BLKMEM *blkmem, SCIP_EXPRTREE **tree, SCIP_EXPR *root, int nvars, int nparams, SCIP_Real *params)
static SCIP_DECL_NONLINCONSUPGD(nonlinconsUpgdAbspower)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPdebugPrintCons(x, y, z)
SCIP_RETCODE SCIPaddVarVub(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vubvar, SCIP_Real vubcoef, SCIP_Real vubconstant, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp)))
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
#define NONLINCONSUPGD_PRIORITY
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse)))
SCIP_Real SCIPgetLhsQuadratic(SCIP *scip, SCIP_CONS *cons)
static SCIP_DECL_CONSENABLE(consEnableAbspower)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
int SCIPgetNContVars(SCIP *scip)
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)
static SCIP_DECL_CONSEXIT(consExitAbspower)
SCIP_RETCODE SCIPcreateConsBasicAbspower(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *x, SCIP_VAR *z, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real zcoef, SCIP_Real lhs, SCIP_Real rhs)
SCIP_Real SCIPepsilon(SCIP *scip)
#define CONSHDLR_DELAYSEPA
int SCIPexprgraphGetNodePolynomialNMonomials(SCIP_EXPRGRAPHNODE *node)
static SCIP_Real proposeBranchingPoint(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, int preferzero, SCIP_Bool branchminconverror)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
static SCIP_DECL_QUADCONSUPGD(quadconsUpgdAbspower)
SCIP_Real SCIPgetRowMaxCoef(SCIP *scip, SCIP_ROW *row)
int SCIPgetNQuadVarTermsQuadratic(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsGlobal(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)
int SCIPexprGetMonomialNFactors(SCIP_EXPRDATA_MONOMIAL *monomial)
int SCIPgetNBilinTermsQuadratic(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPheurPassSolTrySol(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *sol)
SCIP_EXPROP SCIPexprgraphGetNodeOperator(SCIP_EXPRGRAPHNODE *node)
SCIP_Bool SCIPisLbBetter(SCIP *scip, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_EXPRDATA_MONOMIAL ** SCIPexprgraphGetNodePolynomialMonomials(SCIP_EXPRGRAPHNODE *node)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetProbvar(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITSOL((*consinitsol)))
#define SCIP_EVENTTYPE_SOLFOUND
void SCIPfreeRowprep(SCIP *scip, SCIP_ROWPREP **rowprep)
#define CONSHDLR_ENFOPRIORITY
static SCIP_RETCODE createNlRow(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateSolCopy(SCIP *scip, SCIP_SOL **sol, SCIP_SOL *sourcesol)
SCIP_Real SCIPexprgraphGetNodeLinearConstant(SCIP_EXPRGRAPHNODE *node)
#define SCIP_PRESOLTIMING_MEDIUM
SCIP_Real SCIPexprgraphGetNodePolynomialConstant(SCIP_EXPRGRAPHNODE *node)
void SCIPmarkRowNotRemovableLocal(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy)))
SCIP_RETCODE SCIPaddLinearConsToNlpHeurSubNlp(SCIP *scip, SCIP_HEUR *heur, SCIP_Bool addcombconss, SCIP_Bool addcontconss)
SCIP_Bool SCIPexprgraphHasNodeNonlinearAncestor(SCIP_EXPRGRAPHNODE *node)
SCIP_EXPRCURV SCIPexprgraphGetNodeCurvature(SCIP_EXPRGRAPHNODE *node)
static void computeBoundsX(SCIP *scip, SCIP_CONS *cons, SCIP_INTERVAL zbnds, SCIP_INTERVAL *xbnds)
const char * SCIPheurGetName(SCIP_HEUR *heur)
SCIP_HEUR * SCIPfindHeur(SCIP *scip, const char *name)
SCIP_Real SCIPvarGetBestBoundGlobal(SCIP_VAR *var)
#define CONSHDLR_EAGERFREQ
static void computeBoundsZ(SCIP *scip, SCIP_CONS *cons, SCIP_INTERVAL xbnds, SCIP_INTERVAL *zbnds)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
interval arithmetics for provable bounds
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE computeViolations(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_Bool *solviolbounds, SCIP_CONS **maxviolcon)
SCIP_RETCODE SCIPaddConsLocal(SCIP *scip, SCIP_CONS *cons, SCIP_NODE *validnode)
#define QUADCONSUPGD_PRIORITY
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
enum SCIP_NlpSolStat SCIP_NLPSOLSTAT
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
static void presolveFindDuplicatesSolveEquations(SCIP *scip, SCIP_Bool *infeas, SCIP_Real *xval, SCIP_Real *zval, SCIP_Real exponent, SCIP_Real xoffset1, SCIP_Real zcoef1, SCIP_Real rhs1, SCIP_Real xoffset2, SCIP_Real zcoef2, SCIP_Real rhs2)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_Real * SCIPgetCoefsLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons)
SCIPInterval sqrt(const SCIPInterval &x)
static INLINE uint32_t SCIPrealHashCode(double x)
static SCIP_RETCODE proposeFeasibleSolution(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
#define CONSHDLR_NEEDSCONS
static SCIP_RETCODE catchVarEvents(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Real * SCIPvarGetVubConstants(SCIP_VAR *var)
SCIPInterval sign(const SCIPInterval &x)
static SCIP_DECL_CONSACTIVE(consActiveAbspower)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
void SCIPaddRowprepSide(SCIP_ROWPREP *rowprep, SCIP_Real side)
struct SCIP_EventData SCIP_EVENTDATA
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree)))
static SCIP_RETCODE presolveFindDuplicates(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *nupgdconss, int *ndelconss, int *naddconss, int *nfixedvars, int *naggrvars, SCIP_Bool *success, SCIP_Bool *infeas)
constraint handler for quadratic constraints
static SCIP_DECL_CONSFREE(consFreeAbspower)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPcreateRowprep(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_SIDETYPE sidetype, SCIP_Bool local)
SCIP_RETCODE SCIPmarkConsPropagate(SCIP *scip, SCIP_CONS *cons)
SCIP_HEUR * SCIPsolGetHeur(SCIP_SOL *sol)
SCIP_Real SCIPgetSolTransObj(SCIP *scip, SCIP_SOL *sol)
int SCIPgetNNlpis(SCIP *scip)
static SCIP_RETCODE presolveDual(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *ndelconss, int *nfixedvars)
SCIP_RETCODE SCIPsetNLPInitialGuessSol(SCIP *scip, SCIP_SOL *sol)
SCIP_RETCODE SCIPcreateChild(SCIP *scip, SCIP_NODE **node, SCIP_Real nodeselprio, SCIP_Real estimate)
static SCIP_Real getGradientMaxElement(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
static SCIP_RETCODE registerLargeRelaxValueVariableForBranching(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_VAR **brvar)
static SCIP_DECL_EVENTEXEC(processVarEvent)
SCIP_RETCODE SCIPexprgraphCreateNodeLinear(BMS_BLKMEM *blkmem, SCIP_EXPRGRAPHNODE **node, int ncoefs, SCIP_Real *coefs, SCIP_Real constant)
#define SCIPhashTwo(a, b)
#define SCIP_EVENTTYPE_LBTIGHTENED
SCIP_Real * SCIPvarGetVlbConstants(SCIP_VAR *var)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE generateSecantCutNoCheck(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_Real xlb, SCIP_Real xub, SCIP_Real exponent, SCIP_Real xoffset, DECL_MYPOW((*mypow)), SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z)
#define CONSHDLR_SEPAPRIORITY
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_Real * SCIPvarGetVubCoefs(SCIP_VAR *var)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
static SCIP_DECL_CONSDELETE(consDeleteAbspower)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop)))
#define SCIPdebugGetSolVal(scip, var, val)
SCIP_RETCODE SCIPaddCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_Real SCIPgetViolationAbspower(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
struct SCIP_ConsData SCIP_CONSDATA
#define CONSHDLR_PROP_TIMING
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
SCIP_Bool SCIPexprgraphHasNodeSibling(SCIP_EXPRGRAPHNODE *node)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
static SCIP_DECL_CONSGETNVARS(consGetNVarsAbspower)
SCIP_Real SCIPgetRhsQuadratic(SCIP *scip, SCIP_CONS *cons)
static SCIP_DECL_CONSPRINT(consPrintAbspower)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
static SCIP_RETCODE presolveFindDuplicatesUpgradeCons(SCIP *scip, SCIP_CONS *cons1, SCIP_CONS *cons2, SCIP_Bool *infeas, int *nupgdconss, int *ndelconss, int *naggrvars)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPmultihashInsert(SCIP_MULTIHASH *multihash, void *element)
SCIP_Real SCIPgetLhsNonlinear(SCIP *scip, SCIP_CONS *cons)
int SCIPgetDepth(SCIP *scip)
constraint handler for nonlinear constraints
SCIP_RETCODE SCIPgetNlRowAbspower(SCIP *scip, SCIP_CONS *cons, SCIP_NLROW **nlrow)
static SCIP_DECL_CONSSEPALP(consSepalpAbspower)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_Bool SCIPstrToRealValue(const char *str, SCIP_Real *value, char **endptr)
static SCIP_RETCODE propagateVarbounds(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool *infeas, int *nbdchgs, int *naddconss)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
static SCIP_RETCODE generateLinearizationCutProject(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_CONSHDLR *conshdlr, SCIP_Real xref, SCIP_Real zref, SCIP_Real xmin, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z, SCIP_Bool islocal)
static SCIP_DECL_CONSSEPASOL(consSepasolAbspower)
static SCIP_DECL_CONSCHECK(consCheckAbspower)
static SCIP_DECL_EXPRGRAPHNODEREFORM(exprgraphnodeReformAbspower)
SCIP_RETCODE SCIPsetConshdlrDisable(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDISABLE((*consdisable)))
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_RETCODE SCIPexprCreate(BMS_BLKMEM *blkmem, SCIP_EXPR **expr, SCIP_EXPROP op,...)
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPexprtreeFree(SCIP_EXPRTREE **tree)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
SCIP_RETCODE SCIPaddExternBranchCand(SCIP *scip, SCIP_VAR *var, SCIP_Real score, SCIP_Real solval)
static SCIP_RETCODE computeViolation(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Real *viol, SCIP_Bool *solviolbounds)
SCIP_RETCODE SCIPcreateConsAbspower(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *x, SCIP_VAR *z, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real zcoef, 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)
static SCIP_DECL_CONSRESPROP(consRespropAbspower)
void * SCIPmultihashRetrieveNext(SCIP_MULTIHASH *multihash, SCIP_MULTIHASHLIST **multihashlist, void *key)
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
static SCIP_RETCODE addVarbound(SCIP *scip, SCIP_CONS *cons, SCIP_Bool addcons, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *infeas, int *nbdchgs, int *naddconss)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
static SCIP_DECL_CONSINIT(consInitAbspower)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint)))
#define SCIP_EVENTTYPE_UBTIGHTENED
Constraint handler for linear constraints in their most general form, .
SCIP_Bool SCIPisCutApplicable(SCIP *scip, SCIP_ROW *cut)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
#define BMSclearMemory(ptr)
SCIP_Real SCIPexprGetMonomialCoef(SCIP_EXPRDATA_MONOMIAL *monomial)
Constraint handler for absolute power constraints .
SCIP_RETCODE SCIPgetRowprepRowCons(SCIP *scip, SCIP_ROW **row, SCIP_ROWPREP *rowprep, SCIP_CONSHDLR *conshdlr)
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 SCIPsetConshdlrEnable(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENABLE((*consenable)))
void * SCIPexprgraphGetNodeVar(SCIP_EXPRGRAPH *exprgraph, SCIP_EXPRGRAPHNODE *node)
int SCIPgetNBinVars(SCIP *scip)
SCIP_RETCODE SCIPincludeConshdlrAbspower(SCIP *scip)
SCIP_Bool SCIPinProbing(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
#define SCIP_EVENTTYPE_DISABLED
int SCIPexprgraphGetNodeIntPowerExponent(SCIP_EXPRGRAPHNODE *node)
SCIP_Real SCIPnodeGetEstimate(SCIP_NODE *node)
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool canaddcons, SCIP_Bool *cutoff, int *nchgbds, int *naddconss)
void SCIPenableNLP(SCIP *scip)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITPRE((*consexitpre)))
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
static SCIP_RETCODE registerBranchingCandidates(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, int *nnotify)
int SCIPgetNLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateNLPSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real * SCIPexprgraphGetNodeLinearCoefs(SCIP_EXPRGRAPHNODE *node)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
int SCIPgetNLinearVarsNonlinear(SCIP *scip, SCIP_CONS *cons)
#define CONSHDLR_SEPAFREQ
SCIP_Real SCIPgetRhsAbspower(SCIP *scip, SCIP_CONS *cons)
void SCIPintervalSetEntire(SCIP_Real infinity, SCIP_INTERVAL *resultant)
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_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
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 SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit)))
int SCIPexprgraphGetNodePosition(SCIP_EXPRGRAPHNODE *node)
static SCIP_DECL_CONSENFORELAX(consEnforelaxAbspower)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXIT((*consexit)))
static SCIP_DECL_CONSLOCK(consLockAbspower)
#define SCIP_EVENTTYPE_FORMAT
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
static SCIP_DECL_CONSPRESOL(consPresolAbspower)
#define CONSHDLR_MAXPREROUNDS
static SCIP_DECL_CONSENFOLP(consEnfolpAbspower)
SCIP_Bool SCIPallowDualReds(SCIP *scip)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
NLP local search primal heuristic using sub-SCIPs.
SCIP_Real SCIPgetRowLPFeasibility(SCIP *scip, SCIP_ROW *row)
static SCIP_Real roots[ROOTS_KNOWN+1]
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsNonlinear2(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, SCIP_EXPRGRAPHNODE *exprgraphnode, 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 SCIPgetNLPFracVars(SCIP *scip, SCIP_VAR ***fracvars, SCIP_Real **fracvarssol, SCIP_Real **fracvarsfrac, int *nfracvars, int *npriofracvars)
SCIP_VARSTATUS SCIPvarGetStatus(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_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
static SCIP_RETCODE analyzeConflict(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BOUNDTYPE boundtype)
SCIP_VAR ** SCIPgetLinearVarsNonlinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_RETCODE SCIPaddRowIndicator(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars)))
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_EXPRGRAPHNODE ** SCIPexprgraphGetNodeChildren(SCIP_EXPRGRAPHNODE *node)
static SCIP_DECL_CONSCOPY(consCopyAbspower)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Real SCIPgetExponentAbspower(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPvarGetVubVars(SCIP_VAR *var)
SCIP_Real * SCIPexprGetMonomialExponents(SCIP_EXPRDATA_MONOMIAL *monomial)
#define CONSHDLR_PROPFREQ
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPunlinkSol(SCIP *scip, SCIP_SOL *sol)
#define SCIPdebugAddSolVal(scip, var, val)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
static SCIP_RETCODE generateSecantCut(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_Real xlb, SCIP_Real xub, SCIP_Real exponent, SCIP_Real xoffset, DECL_MYPOW((*mypow)), SCIP_Real xmult, SCIP_Real zcoef, SCIP_Real rhs, SCIP_VAR *x, SCIP_VAR *z)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPmultihashRemove(SCIP_MULTIHASH *multihash, void *element)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define CONSHDLR_PRESOLTIMING
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
int SCIPcalcMultihashSize(int minsize)
SCIP_RETCODE SCIPupdateStartpointHeurSubNlp(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *solcand, SCIP_Real violation)
SCIP_Bool SCIPconsIsMarkedPropagate(SCIP_CONS *cons)
SCIP_Real SCIPexprgraphGetNodeRealPowerExponent(SCIP_EXPRGRAPHNODE *node)
static SCIP_DECL_CONSEXITSOL(consExitsolAbspower)
static SCIP_RETCODE generateCut(SCIP *scip, SCIP_CONS *cons, SCIP_SIDETYPE violside, SCIP_SOL *sol, SCIP_ROW **row, SCIP_Bool onlyinbounds, SCIP_Real minviol)
SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSACTIVE((*consactive)))
SCIP_Real SCIPgetLhsAbspower(SCIP *scip, SCIP_CONS *cons)
SCIP_QUADVARTERM * SCIPgetQuadVarTermsQuadratic(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadvars, SCIP_VAR **quadvars, int nquadelems, SCIP_QUADELEM *quadelems, SCIP_EXPRTREE *expression, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
SCIP_EXPRGRAPHNODE * SCIPgetExprgraphNodeNonlinear(SCIP *scip, SCIP_CONS *cons)
void SCIPprintRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, FILE *file)
#define CONSHDLR_DELAYPROP
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITSOL((*consexitsol)))
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
SCIP_Real SCIPround(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_SOL * SCIPeventGetSol(SCIP_EVENT *event)
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)
#define SCIPduplicateBlockMemory(scip, ptr, source)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
int SCIPexprgraphGetNodeDepth(SCIP_EXPRGRAPHNODE *node)
SCIP_Bool SCIPallowObjProp(SCIP *scip)
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_Bool SCIPvarIsActive(SCIP_VAR *var)
static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyAbspower)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
enum SCIP_SideType SCIP_SIDETYPE