0.41421356237309504880,
840.56042566045031785945,
850.60582958618826802099,
860.64146546982884663257,
870.67033204760309682774,
880.69428385661425826738,
890.71453772716733489700,
900.73192937842370733350
94structSCIP_ExprhdlrData
97 intexpandmaxexponent;
128assert(exponent > 1.0);
129assert(root !=
NULL);
141*root = 0.39821689389382575186;
150 else if( exponent <= 2.0 )
155 for( iter = 0; iter < 1000; ++iter )
157polyval = (exponent - 1.0) * pow(*root, exponent) + exponent * pow(*root, exponent - 1.0) - 1.0;
162gradval = (exponent - 1.0) * exponent * (pow(*root, exponent - 1.0) + pow(*root, exponent - 2.0));
167*root -= polyval / gradval;
177 SCIPdebugMsg(
scip,
"root for %g is %.20g, certainty = %g\n", exponent, *root, polyval);
196assert(exponent < -1.0);
197assert(root !=
NULL);
201 for( iter = 0; iter < 1000; ++iter )
203polyval = (exponent - 1.0) * pow(*root, exponent) - exponent * pow(*root, exponent - 1.0) + 1.0;
208gradval = (exponent - 1.0) * exponent * (pow(*root, exponent - 1.0) - pow(*root, exponent - 2.0));
213*root -= polyval / gradval;
223 SCIPdebugMsg(
scip,
"root for %g is %.20g, certainty = %g\n", exponent, *root, polyval);
237assert(exprdata !=
NULL);
241(*exprdata)->exponent = exponent;
270assert(constant !=
NULL);
271assert(slope !=
NULL);
272assert(success !=
NULL);
273assert(xref != 0.0 || exponent > 0.0);
282 if( !
EPSISINT(exponent, 0.0) && !signpower && xref < 0.0 )
285xrefpow = pow(signpower ?
REALABS(xref) : xref, exponent - 1.0);
294*constant = (1.0 - exponent) * xrefpow * xref;
295*slope = exponent * xrefpow;
318assert(constant !=
NULL);
319assert(slope !=
NULL);
320assert(success !=
NULL);
321assert(xlb >= 0.0 ||
EPSISINT(exponent, 0.0) || signpower);
322assert(xub >= 0.0 ||
EPSISINT(exponent, 0.0) || signpower);
323assert(exponent != 1.0);
338*constant = pow(xlb, exponent);
350*constant = pow(xlb, exponent);
357 else if( xlb == 0.0 && exponent > 0.0 )
360*slope = pow(xub, exponent-1.0);
363 else if( xub == 0.0 && exponent > 0.0 )
370*slope = pow(-xlb, exponent-1.0);
372*slope = pow(xlb, exponent-1.0);
375 else if(
SCIPisEQ(
scip, xlb, xub) && (!signpower || xlb >= 0.0 || xub <= 0.0) )
404 if( signpower && xub <= 0.0 )
410xlb_n = pow(xlb, exponent);
411xlb_n1 = pow(xlb, exponent - 1.0);
412xlb_n2 = pow(xlb, exponent - 2.0);
414*slope = 0.5*exponent * ((3.0-exponent) * xlb_n1 + (exponent-1.0) * xlb_n2 * xub);
415*constant = (1.0 - 0.5*exponent*(3.0-exponent)) * xlb_n - 0.5*exponent*(exponent-1.0) * xlb_n1 * xub;
417 if( signpower && xub <= 0.0 )
426lbval =
SIGN(xlb) * pow(
REALABS(xlb), exponent);
428lbval = pow(xlb, exponent);
433ubval =
SIGN(xub) * pow(
REALABS(xub), exponent);
435ubval = pow(xub, exponent);
442 if( lbval == ubval )
445*slope = (ubval - lbval) / (xub - xlb);
446*constant = lbval - *slope * xlb;
501assert(constant !=
NULL);
502assert(slope !=
NULL);
503assert(islocal !=
NULL);
504assert(success !=
NULL);
505assert((exponent >= 0.0 &&
EPSISINT(exponent/2.0, 0.0)) || (exponent > 1.0 && xlb >= 0.0));
573assert(constant !=
NULL);
574assert(slope !=
NULL);
575assert(islocal !=
NULL);
576assert(branchcand !=
NULL);
577assert(*branchcand ==
TRUE);
578assert(success !=
NULL);
579assert(exponent >= 1.0);
581assert(xubglobal <= 0.0 || (root > 0.0 && root < 1.0));
610*branchcand =
FALSE;
636*islocal = xref < -root * xlbglobal;
639*branchcand =
FALSE;
655*islocal = xref > -root * xubglobal;
658*branchcand =
FALSE;
721assert(constant !=
NULL);
722assert(slope !=
NULL);
723assert(islocal !=
NULL);
724assert(branchcand !=
NULL);
725assert(*branchcand ==
TRUE);
726assert(success !=
NULL);
727assert(exponent < 0.0);
728assert(
EPSISINT(exponent/2.0, 0.0) || xlb >= 0.0);
734 if( xlb >= 0.0 || xub <= 0.0 )
739 if( xref < 0.0 && xlb >= 0.0 )
741 else if( xref > 0.0 && xub <= 0.0 )
753xref = 0.9 * xlb + 0.1 * xub;
761xref = 0.1 * xlb + 0.9 * xub;
774*branchcand =
FALSE;
784 if( xref > 0.0 && xlbglobal < 0.0 )
786assert(xubglobal > 0.0);
789*islocal = xref < xlbglobal * root;
791 else if( xref < 0.0 && xubglobal > 0.0 )
793assert(xlbglobal < 0.0);
796*islocal = xref > xubglobal * root;
804*islocal = xlbglobal * xubglobal < 0.0;
824constant, slope, islocal, branchcand, success);
849 if( xref <= xlb * root )
865*islocal = xref < xlbglobal * root;
866*branchcand =
FALSE;
874 if( xlb < 0.0 && xub > 0.0 )
932assert(constant !=
NULL);
933assert(slope !=
NULL);
934assert(islocal !=
NULL);
935assert(branchcand !=
NULL);
936assert(*branchcand ==
TRUE);
937assert(success !=
NULL);
938assert(exponent < 0.0);
939assert(
EPSISINT((exponent-1.0)/2.0, 0.0));
967xref = 0.1*xlb + 0.9*xub;
977*islocal = xlbglobal * xubglobal < 0.0;
980*branchcand =
FALSE;
1015assert(exprdata !=
NULL);
1016assert(coef !=
NULL);
1017assert(constant !=
NULL);
1018assert(success !=
NULL);
1019assert(islocal !=
NULL);
1020assert(branchcand !=
NULL);
1022isinteger =
EPSISINT(exponent, 0.0);
1023iseven = isinteger &&
EPSISINT(exponent / 2.0, 0.0);
1025 if( exponent == 2.0 )
1042*branchcand =
FALSE;
1045 else if( exponent > 0.0 && iseven )
1047 estimateParabola(
scip, exponent, overestimate, childlb, childub, refpoint, constant, coef, islocal, success);
1049*branchcand = *islocal;
1051 else if( exponent > 1.0 && childlb >= 0.0 )
1054 if( refpoint < 0.0 )
1057 estimateParabola(
scip, exponent, overestimate, childlb, childub, refpoint, constant, coef, islocal, success);
1060*branchcand = *islocal;
1065 if( !*islocal && !iseven && childglb < 0.0 )
1075*islocal = refpoint < exprdata->root * (-childglb);
1079 else if( exponent > 1.0 )
1082 if( exprdata->root ==
SCIP_INVALID&& childgub > 0.0 )
1087-childglb, childgub, constant, coef, islocal, branchcand, success);
1089 else if( exponent < 0.0 && (iseven || childlb >= 0.0) )
1097childglb, childgub, constant, coef, islocal, branchcand, success);
1099 else if( exponent < 0.0 )
1102assert(childlb < 0.0);
1106constant, coef, islocal, branchcand, success);
1110assert(exponent < 1.0);
1111assert(exponent > 0.0);
1113 SCIPestimateRoot(
scip, exponent, overestimate, childlb, childub, refpoint, constant, coef, islocal, success);
1116*branchcand = *islocal;
1134assert(refpoints !=
NULL);
1139 if( ub > -maxabsbnd )
1140lb =
MAX(lb, -maxabsbnd);
1141 if( lb < maxabsbnd )
1142ub =
MIN(ub, maxabsbnd);
1150refpoints[0] = (7.0 * lb + ub) / 8.0;
1151refpoints[1] = (lb + ub) / 2.0;
1152refpoints[2] = (lb + 7.0 * ub) / 8.0;
1172assert(refpoints !=
NULL);
1184lb = -ub * exprdata->root - 1.0;
1186ub = -lb * exprdata->root + 1.0;
1188 if( underestimate )
1194 if( -lb * exprdata->root < ub - 2.0 )
1196 if( -lb * exprdata->root < ub - 4.0 )
1197refpoints[1] = (-lb * exprdata->root + ub) / 2.0;
1200 if( !underestimate )
1206 if( -ub * exprdata->root > lb + 2.0 )
1208 if( -ub * exprdata->root > lb + 4.0 )
1209refpoints[1] = (lb - ub * exprdata->root) / 2.0;
1235assert(exprdata !=
NULL);
1236assert(refpointsunder !=
NULL&& refpointsover !=
NULL);
1238exponent = exprdata->exponent;
1243mixedsign = lb < 0.0 && ub > 0.0;
1250 if( (exponent > 1.0 && (lb >= 0 || even)) || (exponent < 0.0 && lb >= 0) || (exponent < 0.0 && even && ub <= 0.0) )
1256 else if( ub <= 0 || (exponent > 0.0 && exponent < 1.0) )
1259 if( underestimate )
1264(exponent < 0.0 && even && mixedsign) )
1267refpointsunder[0] = (lb + ub) / 2.0;
1269 else if( exponent > 1.0 && !even && mixedsign )
1280refpointsover[0] = (lb + ub) / 2.0;
1283 else if( exponent > 1.0 && !even && mixedsign )
1313 if( compareresult != 0 )
1314 returncompareresult;
1319 returnexpo1 == expo2 ? 0 : expo1 < expo2 ? -1 : 1;
1336assert(expr !=
NULL);
1337assert(simplifiedexpr !=
NULL);
1341assert(exprhdlr !=
NULL);
1344assert(exprhdlrdata !=
NULL);
1347assert(base !=
NULL);
1351 SCIPdebugPrintf(
"[simplifyPow] simplifying power with expo %g\n", exponent);
1354 if( exponent == 0.0 )
1364 if( exponent == 1.0 )
1367*simplifiedexpr = base;
1385 if( baseval < 0.0 && fmod(exponent, 1.0) != 0.0 && baseval > -
SCIPepsilon(
scip) )
1389assert(baseval >= 0.0 || fmod(exponent, 1.0) == 0.0);
1390assert(baseval != 0.0 || exponent != 0.0);
1392 if( baseval != 0.0 || exponent > 0.0 )
1414 SCIP_CALL( SCIPcallExprSimplify(
scip, prod, &simplifiedprod, ownercreate, ownercreatedata) );
1422 SCIP_CALL( SCIPcallExprSimplify(
scip, exponential, simplifiedexpr, ownercreate, ownercreatedata) );
1436assert(basevar !=
NULL);
1443*simplifiedexpr = base;
1462 SCIP_CALL( simplifyPow(
scip, newpow, simplifiedexpr, ownercreate, ownercreatedata) );
1486 SCIP_CALL( simplifyPow(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
1496 SCIP_CALL( SCIPcallExprSimplify(
scip, auxproduct, simplifiedexpr, ownercreate, ownercreatedata) );
1511 SCIPdebugPrintf(
"[simplifyPow] seeing a sum with one term, exponent %g\n", exponent);
1520 SCIP_CALL( simplifyPow(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
1526 SCIP_CALL( SCIPcallExprSimplify(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
1538 if(
SCIPisExprSum(
scip, base) && exponent == 2.0 && exprhdlrdata->expandmaxexponent >= 2 )
1542 intnexpandedchildren;
1551nexpandedchildren = nchildren * (nchildren + 1) / 2 + nchildren;
1555 for( i = 0; i < nchildren; ++i )
1563 for( j = 0; j < i; ++j )
1570 SCIP_CALL( SCIPcallExprSimplify(
scip, expansionchild, &expandedchildren[i*(i+1)/2 + j],
1571ownercreate, ownercreatedata) );
1580 SCIP_CALL( SCIPcallExprSimplify(
scip, expansionchild, &expandedchildren[i*(i+1)/2 + i], ownercreate,
1585 for( i = 0; i < nchildren; ++i )
1592constant *= constant;
1595ownercreate, ownercreatedata) );
1596 SCIP_CALL( SCIPcallExprSimplify(
scip, expansion, simplifiedexpr, ownercreate,
1602 for( i = 0; i < nexpandedchildren - nchildren; ++i )
1613 if(
SCIPisExprSum(
scip, base) && exponent > 2.0 && exponent <= exprhdlrdata->expandmaxexponent )
1638 SCIPdebugPrintf(
"[simplifyPow] seeing a sum with one term, exponent %g\n", exponent);
1646 SCIP_CALL( simplifyPow(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
1654 SCIP_CALL( SCIPcallExprSimplify(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
1681 SCIP_CALL( simplifyPow(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
1691 SCIP_CALL( SCIPcallExprSimplify(
scip, auxproduct, simplifiedexpr, ownercreate, ownercreatedata) );
1708newexponent = baseexponent * exponent;
1718 if( !
EPSISINT(newexponent, 0.0) ||
1720(
EPSISINT(baseexponent, 0.0) && ((
int)baseexponent) % 2 == 0) )
1724 if(
EPSISINT(baseexponent, 0.0) && ((
int)baseexponent) % 2 == 0 &&
1725(!
EPSISINT(newexponent, 0.0) || ((
int)newexponent) % 2 == 1) )
1735 SCIP_CALL( SCIPcallExprSimplify(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
1746 SCIP_CALL( simplifyPow(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
1754*simplifiedexpr = expr;
1769assert(expr !=
NULL);
1772assert(exprdata !=
NULL);
1776(*symdata)->nconstants = 1;
1777(*symdata)->ncoefficients = 0;
1780(*symdata)->constants[0] = exprdata->exponent;
1798assert(exprhdlrdata !=
NULL);
1799assert(*exprhdlrdata !=
NULL);
1812assert(targetexprdata !=
NULL);
1813assert(sourceexpr !=
NULL);
1816assert(sourceexprdata !=
NULL);
1818*targetexprdata =
NULL;
1831assert(expr !=
NULL);
1834assert(exprdata !=
NULL);
1847assert(expr !=
NULL);
1861assert(currentchild == 0);
1870 if( exponent >= 0.0 )
1894assert(expr !=
NULL);
1901*val = pow(base, exponent);
1906 if( !
SCIPisFinite(*val) || *val == HUGE_VAL || *val == -HUGE_VAL )
1924assert(expr !=
NULL);
1929assert(child !=
NULL);
1934assert(exponent != 0.0);
1957assert(expr !=
NULL);
1960assert(childidx == 0);
1963assert(child !=
NULL);
1968assert(exponent != 0.0);
1971 if( exponent > 0.0 && exponent < 2.0 &&
SCIPexprGetEvalValue(child) == 0.0 && exponent != 1.0 )
1987assert(expr !=
NULL);
1989assert(childidx == 0);
1992assert(child !=
NULL);
1999assert(exponent != 0.0);
2002 if( exponent > 0.0 && exponent < 1.0 && childval == 0.0 )
2005*val = exponent * pow(childval, exponent - 1.0);
2017assert(expr !=
NULL);
2024 if( exponent < 0.0 )
2028assert(exprhdlrdata !=
NULL);
2030 if( exprhdlrdata->minzerodistance > 0.0 )
2033 if( childinterval.
inf> -exprhdlrdata->minzerodistance && childinterval.
inf< exprhdlrdata->minzerodistance )
2038 "Check your model formulation or use option expr/" POWEXPRHDLR_NAME "/minzerodistance to avoid this warning.\n",
2039exponent, childinterval.
inf, exprhdlrdata->minzerodistance);
2043exprhdlrdata->warnedonpole =
TRUE;
2045childinterval.
inf= exprhdlrdata->minzerodistance;
2047 else if( childinterval.
sup< exprhdlrdata->minzerodistance
2048&& childinterval.
sup> -exprhdlrdata->minzerodistance )
2053 "Check your model formulation or use option expr/" POWEXPRHDLR_NAME "/minzerodistance to avoid this warning.\n",
2054exponent, childinterval.
sup, -exprhdlrdata->minzerodistance);
2058exprhdlrdata->warnedonpole =
TRUE;
2060childinterval.
sup= -exprhdlrdata->minzerodistance;
2076 if( exponent < 0.0 && childinterval.
inf== 0.0 && childinterval.
sup== 0.0 )
2094assert(expr !=
NULL);
2097assert(refpoint !=
NULL);
2098assert(coefs !=
NULL);
2099assert(constant !=
NULL);
2100assert(islocal !=
NULL);
2101assert(branchcand !=
NULL);
2102assert(*branchcand ==
TRUE);
2103assert(success !=
NULL);
2109assert(child !=
NULL);
2118childlb = localbounds[0].inf;
2119childub = localbounds[0].sup;
2122exponent = exprdata->exponent;
2123assert(exponent != 1.0 && exponent != 0.0);
2128 if( childlb == childub )
2131*constant = pow(childlb, exponent);
2133*islocal = globalbounds[0].inf != globalbounds[0].sup;
2134*branchcand =
FALSE;
2138isinteger =
EPSISINT(exponent, 0.0);
2141 if( !isinteger && childlb < 0.0 )
2149assert(isinteger || childlb >= 0.0);
2153constant, success, islocal, branchcand) );
2167assert(expr !=
NULL);
2171child = childrenbounds[0];
2173 SCIPdebugMsg(
scip,
"reverseprop x^%g in [%.15g,%.15g], x = [%.15g,%.15g]", exponent, bounds.inf, bounds.sup,
2174child.
inf, child.
sup);
2178*infeasible =
TRUE;
2185 if( !
EPSISINT(exponent, 0.0) && child.
inf< 0.0 )
2201 if( exponent < 0.0 )
2206assert(exprhdlrdata !=
NULL);
2208 if( exprhdlrdata->minzerodistance > 0.0 )
2214 if( interval.
inf> -exprhdlrdata->minzerodistance && interval.
inf< exprhdlrdata->minzerodistance )
2219 "Check your model formulation or use option expr/" POWEXPRHDLR_NAME "/minzerodistance to avoid this warning.\n",
2220exponent, interval.
inf, exprhdlrdata->minzerodistance);
2224exprhdlrdata->warnedonpole =
TRUE;
2226interval.
inf= exprhdlrdata->minzerodistance;
2228 else if( interval.
sup< exprhdlrdata->minzerodistance && interval.
sup> -exprhdlrdata->minzerodistance )
2233 "Check your model formulation or use option expr/" POWEXPRHDLR_NAME "/minzerodistance to avoid this warning.\n",
2234exponent, interval.
sup, -exprhdlrdata->minzerodistance);
2238exprhdlrdata->warnedonpole =
TRUE;
2240interval.
sup= -exprhdlrdata->minzerodistance;
2247childrenbounds[0] = interval;
2271assert(expr !=
NULL);
2274assert(child !=
NULL);
2276childlb = bounds[0].inf;
2277childub = bounds[0].sup;
2282 SCIPdebugMsg(
scip,
"skip initestimates as child seems essentially fixed [%.15g,%.15g]\n", childlb, childub);
2287exponent = exprdata->exponent;
2288assert(exponent != 1.0 && exponent != 0.0);
2290isinteger =
EPSISINT(exponent, 0.0);
2293 if( !isinteger && childlb < 0.0 )
2301assert(isinteger || childlb >= 0.0);
2311 if( (overest[i] && !overestimate) || (!overest[i] && overestimate) )
2314assert(overest[i] || i < 3);
2315refpoint = overest[i] ? refpointsover[i % 3] : refpointsunder[i % 3];
2324 SCIPexprIsIntegral(child), refpoint, exponent, coefs[*nreturned], &constant[*nreturned],
2325&success, &islocal, &branchcand) );
2329 SCIPdebugMsg(
scip,
"initestimate x^%g for base in [%g,%g] at ref=%g, over:%u -> %g*x+%g\n", exponent,
2330childlb, childub, refpoint, overest[i], coefs[*nreturned][0], constant[*nreturned]);
2343assert(expr !=
NULL);
2345assert(hashkey !=
NULL);
2346assert(childrenhashes !=
NULL);
2350*hashkey ^= childrenhashes[0];
2364assert(expr !=
NULL);
2366assert(childcurv !=
NULL);
2367assert(success !=
NULL);
2372assert(child !=
NULL);
2395assert(expr !=
NULL);
2396assert(result !=
NULL);
2398assert(childidx == 0);
2408expisint =
EPSISINT(exponent, 0.0);
2412 SCIP_Boolexpisodd = ceil(exponent/2) != exponent/2;
2417 if( exponent >= 0.0 )
2421 else if( inf >= 0.0 || sup <= 0.0 )
2430 else if( sup <= 0.0 )
2456assert(expr !=
NULL);
2457assert(isintegral !=
NULL);
2460*isintegral =
FALSE;
2463assert(child !=
NULL);
2470assert(exponent != 0.0);
2471expisint =
EPSISINT(exponent, 0.0);
2474*isintegral = expisint && exponent >= 0.0;
2488assert(expr !=
NULL);
2489assert(simplifiedexpr !=
NULL);
2493assert(base !=
NULL);
2496 SCIPdebugPrintf(
"[simplifySignpower] simplifying power with expo %g\n", exponent);
2497assert(exponent >= 1.0);
2500 if( exponent == 1.0 )
2503*simplifiedexpr = base;
2517ownercreate, ownercreatedata) );
2539 SCIP_CALL( SCIPcallExprSimplify(
scip, prod, &simplifiedprod, ownercreate, ownercreatedata) );
2547 SCIP_CALL( SCIPcallExprSimplify(
scip, exponential, simplifiedexpr, ownercreate, ownercreatedata) );
2554 if(
EPSISINT(exponent, 0.0) && ((
int)exponent) % 2 == 1 )
2564 SCIP_CALL( simplifyPow(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
2578assert(basevar !=
NULL);
2582*simplifiedexpr = base;
2605assert(((
int)exponent) % 2 == 0 );
2609ownercreate, ownercreatedata) );
2610 SCIP_CALL( simplifySignpower(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
2626 SCIPdebugPrintf(
"[simplifySignpower] seeing a sum with one term, exponent %g\n", exponent);
2633ownercreate, ownercreatedata) );
2635 SCIP_CALL( simplifySignpower(
scip, aux, &simplifiedaux, ownercreate, ownercreatedata) );
2641 SCIP_CALL( SCIPcallExprSimplify(
scip, aux, simplifiedexpr, ownercreate, ownercreatedata) );
2648*simplifiedexpr = expr;
2669assert(expr !=
NULL);
2681assert(currentchild == 0);
2706assert(expr !=
NULL);
2711assert(childexpr !=
NULL);
2713 string= *endstring;
2714 while( *
string==
' ')
2717 if( *
string!=
',')
2719 SCIPerrorMessage(
"Expected comma after first argument of signpower().\n");
2726 SCIPerrorMessage(
"Expected numeric exponent for second argument of signpower().\n");
2738assert(*expr !=
NULL);
2756assert(expr !=
NULL);
2763*val =
SIGN(base) * pow(
REALABS(base), exponent);
2768 if( !
SCIPisFinite(*val) || *val == HUGE_VAL || *val == -HUGE_VAL )
2782assert(expr !=
NULL);
2784assert(childidx == 0);
2787assert(child !=
NULL);
2794assert(exponent >= 1.0);
2796*val = exponent * pow(
REALABS(childval), exponent - 1.0);
2807assert(expr !=
NULL);
2834assert(expr !=
NULL);
2837assert(refpoint !=
NULL);
2838assert(coefs !=
NULL);
2839assert(constant !=
NULL);
2840assert(islocal !=
NULL);
2841assert(branchcand !=
NULL);
2842assert(*branchcand ==
TRUE);
2843assert(success !=
NULL);
2847 SCIPdebugMsg(
scip,
"%sestimation of signed x^%g at x=%g\n", overestimate ?
"over":
"under",
2854childlb = localbounds[0].inf;
2855childub = localbounds[0].sup;
2857childglb = globalbounds[0].inf;
2858childgub = globalbounds[0].sup;
2861exponent = exprdata->exponent;
2862assert(exponent > 1.0);
2867 if( childlb == childub )
2870*constant =
SIGN(childlb)*pow(
REALABS(childlb), exponent);
2872*islocal = childglb != childgub;
2873*branchcand =
FALSE;
2877 if( childlb >= 0.0 )
2882*branchcand = *islocal;
2887 if( !*islocal && childglb < 0.0 )
2897*islocal = *refpoint < exprdata->root * (-childglb);
2904 if( exprdata->root ==
SCIP_INVALID&& childgub > 0.0 )
2909childglb, childgub, constant, coefs, islocal, branchcand, success);
2933assert(expr !=
NULL);
2937childlb = bounds[0].inf;
2938childub = bounds[0].sup;
2943 SCIPdebugMsg(
scip,
"skip initestimates as child seems essentially fixed [%.15g,%.15g]\n", childlb, childub);
2948exponent = exprdata->exponent;
2949assert(exponent > 1.0);
2951 if( childlb >= 0.0 )
2953 if( !overestimate )
2956refpointsover[0] = (childlb + childub) / 2.0;
2958 else if( childub <= 0.0 )
2961refpointsunder[0] = (childlb + childub) / 2.0;
2973 if( (overest[i] && !overestimate) || (!overest[i] && overestimate) )
2976assert(overest[i] || i < 3);
2977refpoint = overest[i] ? refpointsover[i % 3] : refpointsunder[i % 3];
2984 estimateParabola(
scip, exponent, overest[i], childlb, childub, refpoint, &constant[*nreturned], coefs[*nreturned],
2985&islocal, &success);
2996childlb, childub, &constant[*nreturned], coefs[*nreturned], &islocal,
2997&branchcand, &success);
3016assert(expr !=
NULL);
3021 SCIPdebugMsg(
scip,
"reverseprop signpow(x,%g) in [%.15g,%.15g]", exponent, bounds.inf, bounds.sup);
3032 if( exprecip.
inf== exprecip.
sup)
3046childrenbounds[0] = interval;
3056assert(expr !=
NULL);
3058assert(hashkey !=
NULL);
3059assert(childrenhashes !=
NULL);
3063*hashkey ^= childrenhashes[0];
3076assert(expr !=
NULL);
3078assert(childcurv !=
NULL);
3079assert(success !=
NULL);
3083assert(child !=
NULL);
3092*success = childinterval.
inf>= 0.0;
3098*success = childinterval.
sup<= 0.0;
3111assert(expr !=
NULL);
3112assert(result !=
NULL);
3129evalPow, exprhdlrdata) );
3130assert(exprhdlr !=
NULL);
3148 "minimal distance from zero to enforce for child in bound tightening",
3152 "maximal exponent when to expand power of sum in simplify",
3153&exprhdlrdata->expandmaxexponent,
FALSE, 2, 1, INT_MAX,
NULL,
NULL) );
3156 "whether a fractional exponent is distributed onto factors on power of product",
3171assert(exprhdlr !=
NULL);
3199 void* ownercreatedata
3204assert(expr !=
NULL);
3205assert(child !=
NULL);
3208assert(exprdata !=
NULL);
3223 void* ownercreatedata
3228assert(expr !=
NULL);
3229assert(child !=
NULL);
3233assert(exprdata !=
NULL);
3236ownercreate, ownercreatedata) );
3247assert(expr !=
NULL);
3264assert(lincoef !=
NULL);
3265assert(linconstant !=
NULL);
3266assert(success !=
NULL);
3268 if( sqrcoef == 0.0 )
3283tmp = sqrcoef * refpoint;
3291*lincoef += 2.0 * tmp;
3293*linconstant -= tmp;
3306coef = sqrcoef * (2.0 * f + 1.0);
3307constant = -sqrcoef * f * (f + 1.0);
3316*linconstant += constant;
3338assert(lincoef !=
NULL);
3339assert(linconstant !=
NULL);
3340assert(success !=
NULL);
3342 if( sqrcoef == 0.0 )
3355coef = sqrcoef * (lb + ub);
3356constant = -sqrcoef * lb * ub;
3364*linconstant += constant;
3410assert(constant !=
NULL);
3411assert(slope !=
NULL);
3412assert(islocal !=
NULL);
3413assert(success !=
NULL);
3414assert(exponent > 0.0);
3415assert(exponent < 1.0);
3418 if( !overestimate )
3443xref = 0.5 * xlb + 0.5 * xub;
3462assert(expr !=
NULL);
3465assert(exprdata !=
NULL);
3467 returnexprdata->exponent;
#define SCIP_INTERVAL_INFINITY
absolute expression handler
exponential expression handler
#define SIGNPOWEXPRHDLR_PRECEDENCE
static SCIP_DECL_EXPRPRINT(printPow)
static SCIP_DECL_EXPRESTIMATE(estimatePow)
static SCIP_DECL_EXPRREVERSEPROP(reversepropPow)
#define POWEXPRHDLR_PRECEDENCE
void SCIPaddSquareLinearization(SCIP *scip, SCIP_Real sqrcoef, SCIP_Real refpoint, SCIP_Bool isint, SCIP_Real *lincoef, SCIP_Real *linconstant, SCIP_Bool *success)
static SCIP_DECL_EXPRBWDIFF(bwdiffPow)
static SCIP_RETCODE chooseRefpointsPow(SCIP *scip, SCIP_EXPRDATA *exprdata, SCIP_Real lb, SCIP_Real ub, SCIP_Real *refpointsunder, SCIP_Real *refpointsover, SCIP_Bool underestimate, SCIP_Bool overestimate)
static SCIP_DECL_EXPRPARSE(parseSignpower)
static SCIP_DECL_EXPRINITESTIMATES(initestimatesPow)
static SCIP_DECL_EXPRFWDIFF(fwdiffPow)
static void estimateSignedpower(SCIP *scip, SCIP_Real exponent, SCIP_Real root, SCIP_Bool overestimate, SCIP_Real xlb, SCIP_Real xub, SCIP_Real xref, SCIP_Real xlbglobal, SCIP_Real xubglobal, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *islocal, SCIP_Bool *branchcand, SCIP_Bool *success)
static SCIP_DECL_EXPRFREEHDLR(freehdlrPow)
static void computeTangent(SCIP *scip, SCIP_Bool signpower, SCIP_Real exponent, SCIP_Real xref, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *success)
#define SIGNPOWEXPRHDLR_NAME
static SCIP_DECL_EXPRINTEVAL(intevalPow)
void SCIPestimateRoot(SCIP *scip, SCIP_Real exponent, SCIP_Bool overestimate, SCIP_Real xlb, SCIP_Real xub, SCIP_Real xref, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *islocal, SCIP_Bool *success)
#define SIGNPOWEXPRHDLR_HASHKEY
static SCIP_DECL_EXPRCOPYHDLR(copyhdlrPow)
static SCIP_RETCODE buildPowEstimator(SCIP *scip, SCIP_EXPRDATA *exprdata, SCIP_Bool overestimate, SCIP_Real childlb, SCIP_Real childub, SCIP_Real childglb, SCIP_Real childgub, SCIP_Bool childintegral, SCIP_Real refpoint, SCIP_Real exponent, SCIP_Real *coef, SCIP_Real *constant, SCIP_Bool *success, SCIP_Bool *islocal, SCIP_Bool *branchcand)
static void estimateParabola(SCIP *scip, SCIP_Real exponent, SCIP_Bool overestimate, SCIP_Real xlb, SCIP_Real xub, SCIP_Real xref, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *islocal, SCIP_Bool *success)
static SCIP_DECL_EXPRGETSYMDATA(getSymDataPow)
static SCIP_DECL_EXPREVAL(evalPow)
static SCIP_RETCODE createData(SCIP *scip, SCIP_EXPRDATA **exprdata, SCIP_Real exponent)
static SCIP_DECL_EXPRMONOTONICITY(monotonicityPow)
static SCIP_DECL_EXPRINTEGRALITY(integralityPow)
static SCIP_DECL_EXPRCURVATURE(curvaturePow)
static SCIP_DECL_EXPRCOMPARE(comparePow)
static SCIP_DECL_EXPRFREEDATA(freedataPow)
void SCIPaddSquareSecant(SCIP *scip, SCIP_Real sqrcoef, SCIP_Real lb, SCIP_Real ub, SCIP_Real *lincoef, SCIP_Real *linconstant, SCIP_Bool *success)
static SCIP_RETCODE addSignpowerRefpoints(SCIP *scip, SCIP_EXPRDATA *exprdata, SCIP_Real lb, SCIP_Real ub, SCIP_Real exponent, SCIP_Bool underestimate, SCIP_Real *refpoints)
#define SIGNPOW_ROOTS_KNOWN
static void estimateHyperbolaPositive(SCIP *scip, SCIP_Real exponent, SCIP_Real root, SCIP_Bool overestimate, SCIP_Real xlb, SCIP_Real xub, SCIP_Real xref, SCIP_Real xlbglobal, SCIP_Real xubglobal, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *islocal, SCIP_Bool *branchcand, SCIP_Bool *success)
static SCIP_DECL_EXPRBWFWDIFF(bwfwdiffPow)
#define POWEXPRHDLR_HASHKEY
static SCIP_DECL_EXPRCOPYDATA(copydataPow)
static SCIP_RETCODE computeSignpowerRoot(SCIP *scip, SCIP_Real *root, SCIP_Real exponent)
static SCIP_DECL_EXPRSIMPLIFY(simplifyPow)
static void estimateHyperbolaMixed(SCIP *scip, SCIP_Real exponent, SCIP_Bool overestimate, SCIP_Real xlb, SCIP_Real xub, SCIP_Real xref, SCIP_Real xlbglobal, SCIP_Real xubglobal, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *islocal, SCIP_Bool *branchcand, SCIP_Bool *success)
#define SIGNPOWEXPRHDLR_DESC
static SCIP_DECL_EXPRHASH(hashPow)
static void addTangentRefpoints(SCIP *scip, SCIP_Real exponent, SCIP_Real lb, SCIP_Real ub, SCIP_Real *refpoints)
static SCIP_RETCODE computeHyperbolaRoot(SCIP *scip, SCIP_Real *root, SCIP_Real exponent)
static SCIP_Real signpow_roots[SIGNPOW_ROOTS_KNOWN+1]
static void computeSecant(SCIP *scip, SCIP_Bool signpower, SCIP_Real exponent, SCIP_Real xlb, SCIP_Real xub, SCIP_Real *constant, SCIP_Real *slope, SCIP_Bool *success)
power and signed power expression handlers
product expression handler
constant value expression handler
SCIP_RETCODE SCIPcreateExprProduct(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real coefficient, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPpowerExprSum(SCIP *scip, SCIP_EXPR **result, SCIP_EXPR *base, int exponent, SCIP_Bool simplify, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprAbs(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExprAbs(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprSignpower(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_Real exponent, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprExp(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExprExp(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprSignpower(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExprSum(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real *coefficients, SCIP_Real constant, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprValue(SCIP *scip, SCIP_EXPR **expr, SCIP_Real value, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprPow(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_Real exponent, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPincludeExprhdlrSignpower(SCIP *scip)
SCIP_RETCODE SCIPincludeExprhdlrPow(SCIP *scip)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_VERBLEVEL SCIPgetVerbLevel(SCIP *scip)
#define SCIPdebugMsgPrint
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)
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)
const char * SCIPexprhdlrGetName(SCIP_EXPRHDLR *exprhdlr)
void SCIPexprhdlrSetIntegrality(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINTEGRALITY((*integrality)))
void SCIPexprhdlrSetCopyFreeData(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOPYDATA((*copydata)), SCIP_DECL_EXPRFREEDATA((*freedata)))
void SCIPexprhdlrSetPrint(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRPRINT((*print)))
void SCIPexprhdlrSetGetSymdata(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRGETSYMDATA((*getsymdata)))
void SCIPexprhdlrSetHash(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRHASH((*hash)))
SCIP_EXPRHDLRDATA * SCIPexprhdlrGetData(SCIP_EXPRHDLR *exprhdlr)
void SCIPexprhdlrSetCopyFreeHdlr(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOPYHDLR((*copyhdlr)), SCIP_DECL_EXPRFREEHDLR((*freehdlr)))
void SCIPexprhdlrSetDiff(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRBWDIFF((*bwdiff)), SCIP_DECL_EXPRFWDIFF((*fwdiff)), SCIP_DECL_EXPRBWFWDIFF((*bwfwdiff)))
void SCIPexprhdlrSetReverseProp(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRREVERSEPROP((*reverseprop)))
void SCIPexprhdlrSetParse(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRPARSE((*parse)))
void SCIPexprhdlrSetEstimate(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINITESTIMATES((*initestimates)), SCIP_DECL_EXPRESTIMATE((*estimate)))
void SCIPexprhdlrSetMonotonicity(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRMONOTONICITY((*monotonicity)))
void SCIPexprhdlrSetIntEval(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINTEVAL((*inteval)))
void SCIPexprhdlrSetCurvature(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCURVATURE((*curvature)))
SCIP_RETCODE SCIPincludeExprhdlr(SCIP *scip, SCIP_EXPRHDLR **exprhdlr, const char *name, const char *desc, unsigned int precedence, SCIP_DECL_EXPREVAL((*eval)), SCIP_EXPRHDLRDATA *data)
void SCIPexprhdlrSetCompare(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOMPARE((*compare)))
SCIP_EXPRHDLR * SCIPgetExprhdlrPower(SCIP *scip)
SCIP_EXPRHDLR * SCIPfindExprhdlr(SCIP *scip, const char *name)
void SCIPexprhdlrSetSimplify(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRSIMPLIFY((*simplify)))
SCIP_RETCODE SCIPcreateExpr(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPRHDLR *exprhdlr, SCIP_EXPRDATA *exprdata, int nchildren, SCIP_EXPR **children, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPappendExprChild(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR *child)
void SCIPexprSetData(SCIP_EXPR *expr, SCIP_EXPRDATA *exprdata)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprProduct(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPRCURV SCIPexprcurvPowerInv(SCIP_INTERVAL basebounds, SCIP_Real exponent, SCIP_EXPRCURV powercurv)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPexprIsIntegral(SCIP_EXPR *expr)
SCIP_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprValue(SCIP *scip, SCIP_EXPR *expr)
int SCIPcompareExpr(SCIP *scip, SCIP_EXPR *expr1, SCIP_EXPR *expr2)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
SCIP_Real SCIPexprGetDot(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPRDATA * SCIPexprGetData(SCIP_EXPR *expr)
SCIP_RETCODE SCIPparseExpr(SCIP *scip, SCIP_EXPR **expr, const char *exprstr, const char **finalpos, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPprintExpr(SCIP *scip, SCIP_EXPR *expr, FILE *file)
SCIP_Real SCIPgetValueExprValue(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPexprGetEvalValue(SCIP_EXPR *expr)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetConstantExprSum(SCIP_EXPR *expr)
SCIP_VAR * SCIPgetVarExprVar(SCIP_EXPR *expr)
SCIP_INTERVAL SCIPexprGetActivity(SCIP_EXPR *expr)
void SCIPcaptureExpr(SCIP_EXPR *expr)
SCIP_RETCODE SCIPevalExprActivity(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPRHDLR * SCIPexprGetHdlr(SCIP_EXPR *expr)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
SCIP_Bool SCIPintervalIsEntire(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSignPowerScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalUnify(SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalPowerScalarInverse(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL basedomain, SCIP_Real exponent, SCIP_INTERVAL image)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
void SCIPintervalReciprocal(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalPowerScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
void SCIPintervalSetEmpty(SCIP_INTERVAL *resultant)
#define SCIPallocClearBlockMemory(scip, ptr)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
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_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
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 SCIPparseReal(SCIP *scip, const char *str, SCIP_Real *value, char **endptr)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
public functions to work with algebraic expressions
structs for symmetry computations
#define SCIP_DECL_EXPR_OWNERCREATE(x)
struct SCIP_ExprhdlrData SCIP_EXPRHDLRDATA
struct SCIP_ExprData SCIP_EXPRDATA
#define SCIP_EXPR_MAXINITESTIMATES
#define SCIP_EXPRITER_VISITINGCHILD
#define SCIP_EXPRITER_VISITEDCHILD
#define SCIP_EXPRITER_LEAVEEXPR
#define SCIP_EXPRITER_ENTEREXPR
enum SCIP_Retcode SCIP_RETCODE
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4