SCIP_NlhdlrExprData
121#define DECL_CURVCHECK(x) SCIP_RETCODE x( \ 124 SCIP_Bool isrootexpr, \ 126 SCIP_HASHMAP* nlexpr2origexpr, \ 127 SCIP_NLHDLRDATA* nlhdlrdata, \ 128 SCIP_HASHMAP* assumevarfixed, \ 150assert(nlexpr2origexpr !=
NULL);
151assert(nlhdlrexpr !=
NULL);
152assert(origexpr !=
NULL);
157*nlhdlrexpr = origexpr;
168assert(*nlhdlrexpr !=
NULL);
196assert(nlhdlrexpr !=
NULL);
202 if( nchildren == 0 )
205 for( i = 0; i < nchildren; ++i )
226assert(args !=
NULL);
228assert(evaldata !=
NULL);
230#ifdef SCIP_MORE_DEBUG 233 for( i = 0; i < nargs; ++i )
235#ifdef SCIP_MORE_DEBUG 257assert(exprstack !=
NULL);
258assert(initsize > 0);
275assert(exprstack !=
NULL);
290assert(exprstack !=
NULL);
295assert(exprs !=
NULL);
315assert(exprstack !=
NULL);
327assert(exprstack !=
NULL);
351assert(nlexpr !=
NULL);
352assert(stack !=
NULL);
353assert(nlexpr2origexpr !=
NULL);
354assert(success !=
NULL);
358 if( !nlhdlrdata->cvxquadratic )
370assert(expr !=
NULL);
382 if( nquadexprs <= 1 )
386 if( isrootexpr && !nlhdlrdata->detectsum && nbilinexprs == 0 )
395 if( presentcurv != wantedcurv )
400 if( !nlhdlrdata->detectsum )
408 for( i = 0; i < nquadexprs; ++i )
414 if( nadjbilin == 0 )
416assert(sqrexpr !=
NULL);
436assert(child !=
NULL);
463 if( nlhdlrdata->extendedform )
471 if( lonelysquares !=
NULL)
495assert(nlexpr !=
NULL);
496assert(stack !=
NULL);
497assert(nlexpr2origexpr !=
NULL);
498assert(success !=
NULL);
502 if( !nlhdlrdata->cvxsignomial )
509assert(expr !=
NULL);
519 for( i = 0; i < nfactors; ++i )
522assert(child !=
NULL);
539nfactors, exponents, bounds, curv) )
553 for( i = 0; i < nfactors; ++i )
556assert(child !=
NULL);
566 if( nlhdlrdata->extendedform )
625assert(nlexpr !=
NULL);
626assert(stack !=
NULL);
627assert(nlexpr2origexpr !=
NULL);
628assert(success !=
NULL);
632 if( !nlhdlrdata->cvxprodcomp )
639assert(expr !=
NULL);
645 for( fidx = 0; fidx <= 1; ++fidx )
664#ifndef NLHDLR_CONVEX_UNITTEST 679#ifdef SCIP_MORE_DEBUG 693 if( hbounds.
inf< 0.0 && hbounds.
sup> 0.0 )
704 SCIP_CALL( SCIPcallExprMonotonicity(
scip, f, 0, &fmonotonicity) );
725 if( hbounds.
inf>= 0 )
730 if( fbounds.
inf< 0.0 )
740 if( fbounds.
sup> 0.0 )
757 if( hbounds.
sup<= 0 )
762 if( fbounds.
inf< 0.0 )
772 if( fbounds.
sup> 0.0 )
788#ifndef NLHDLR_CONVEX_UNITTEST 795 if( nlhdlrdata->extendedform )
832assert(nlexpr !=
NULL);
833assert(stack !=
NULL);
834assert(nlexpr2origexpr !=
NULL);
835assert(success !=
NULL);
838assert(origexpr !=
NULL);
841 if( nchildren == 0 )
857 if( isrootexpr && !nlhdlrdata->detectsum &&
SCIPisExprSum(
scip, nlexpr) && nchildren > 1 )
864#ifdef SCIP_MORE_DEBUG 880 if( nlhdlrdata->extendedform )
883 for( i = 0; i < nchildren; ++i )
906static DECL_CURVCHECK((*CURVCHECKS[])) = { curvCheckProductComposite, curvCheckSignomial, curvCheckQuadratic, curvCheckExprhdlr };
908static const int NCURVCHECKS=
sizeof(CURVCHECKS) /
sizeof(
void*);
927assert(expr !=
NULL);
933 if( nchildren <= 1 )
936 for( c = 0; c < nchildren; ++c )
972assert(nlhdlrdata !=
NULL);
973assert(rootnlexpr !=
NULL);
974assert(nlexpr2origexpr !=
NULL);
975assert(nleafs !=
NULL);
976assert(rootexpr !=
NULL);
983 if( curvsuccess !=
NULL)
984*curvsuccess =
TRUE;
992assert(nlexpr !=
NULL);
1010#ifdef SCIP_MORE_DEBUG 1022 for( method = 0; method <
NCURVCHECKS; ++method )
1024 SCIP_CALL( CURVCHECKS[method](
scip, nlexpr, isrootexpr, &stack, nlexpr2origexpr, nlhdlrdata, assumevarfixed, &success) );
1040assert(stack.
stackpos>= oldstackpos);
1042isrootexpr =
FALSE;
1048 if( stack.
stackpos== oldstackpos )
1054*curvsuccess =
FALSE;
1060 if( !nlhdlrdata->isnlhdlrconvex && *rootnlexpr !=
NULL)
1076assert(child !=
NULL);
1087#ifdef SCIP_MORE_DEBUG 1089 SCIPinfoMessage(
scip,
NULL,
"... is a multivariate linear sum that we'll treat as auxvar instead (postprocess)\n");
1110 if( *rootnlexpr !=
NULL)
1161assert(nlhdlrexprdata !=
NULL);
1162assert(nlhdlrexprdata->nlexpr !=
NULL);
1163assert(nlhdlrexprdata->nlexpr2origexpr !=
NULL);
1167assert(nlhdlrexprdata->nleafs > 0);
1168assert(nlhdlrexprdata->leafexprs ==
NULL);
1172nlhdlrexprdata->nleafs = 0;
1183assert(nlexpr !=
NULL);
1192assert(origexpr !=
NULL);
1205assert(var !=
NULL);
1242assert(nlhdlrexprdata->nleafs > 0);
1255 if( entry ==
NULL)
1259assert(leaf !=
NULL);
1264assert(idx < nlhdlrexprdata->nleafs);
1266nlhdlrexprdata->leafexprs[idx] = leaf;
1293assert(expr !=
NULL);
1294assert(nlhdlrexprdata !=
NULL);
1295assert(*nlhdlrexprdata ==
NULL);
1296assert(nlexpr !=
NULL);
1297assert(nlexpr2origexpr !=
NULL);
1303(*nlhdlrexprdata)->nlexpr = nlexpr;
1304(*nlhdlrexprdata)->nlexpr2origexpr = nlexpr2origexpr;
1305(*nlhdlrexprdata)->nleafs = nleafs;
1327assert(origexpr !=
NULL);
1394assert(nlhdlr !=
NULL);
1395assert(nlhdlrexprdata !=
NULL);
1396assert(rowprep !=
NULL);
1397assert(success !=
NULL);
1409 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
1412assert(var !=
NULL);
1421assert(nlhdlrdata !=
NULL);
1423 if( nlhdlrdata->evalsol ==
NULL)
1429evaldata.
evalsol= nlhdlrdata->evalsol;
1436 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
1439assert(var !=
NULL);
1444 SCIPdebugMsg(
scip,
"lower bound at -infinity, no estimate possible\n");
1451 SCIPdebugMsg(
scip,
"upper bound at +infinity, no estimate possible\n");
1459xstar[i] = 0.5 * (box[2*i] + box[2*i+1]);
1475xstar, box, nlhdlrexprdata->nleafs, targetvalue, success,
SCIProwprepGetCoefs(rowprep), &facetconstant) );
1485 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
1517assert(nlhdlrexprdata !=
NULL);
1518assert(rowprep !=
NULL);
1519assert(success !=
NULL);
1521nlexpr = nlhdlrexprdata->nlexpr;
1522assert(nlexpr !=
NULL);
1530 SCIPdebugMsg(
scip,
"gradient evaluation error for %p\n", (
void*)nlexpr);
1540 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
1550 SCIPdebugMsg(
scip,
"gradient evaluation error for component %d of %p\n", i, (
void*)nlexpr);
1555assert(var !=
NULL);
1588assert(nlhdlrexprdata !=
NULL);
1589assert(rowprep !=
NULL);
1590assert(success !=
NULL);
1607assert(nlhdlrdata !=
NULL);
1610 if( nlhdlrdata->maxperturb == 0.0 )
1612 SCIPdebugMsg(
scip,
"gradient evaluation error, perturbation disabled\n");
1616 SCIPdebugMsg(
scip,
"gradient evaluation error, try perturbed point\n");
1618 if( nlhdlrdata->evalsol ==
NULL)
1623 if( nlhdlrdata->randnumgen ==
NULL)
1628 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
1637assert(var !=
NULL);
1642val =
MIN(ub,
MAX(lb, val));
1644p =
SCIPrandomGetReal(nlhdlrdata->randnumgen, -nlhdlrdata->maxperturb, nlhdlrdata->maxperturb);
1651 if( val + p <= lb )
1653 else if( val + p >= ub )
1661 if( val <= lb || val >= ub )
1691assert(nlhdlrexprdata !=
NULL);
1692assert(nlhdlrexprdata->nleafs == 1);
1693assert(rowprep !=
NULL);
1694assert(success !=
NULL);
1696nlexpr = nlhdlrexprdata->nlexpr;
1697assert(nlexpr !=
NULL);
1702assert(nlhdlrdata !=
NULL);
1705assert(var !=
NULL);
1737assert(left != right);
1740 if( nlhdlrdata->evalsol ==
NULL)
1767 SCIPdebugMsg(
scip,
"f(%g)=%g, f(%g)=%g\n", left, fleft, right, fright);
1799assert(nlhdlrdata !=
NULL);
1800assert(*nlhdlrdata !=
NULL);
1801assert((*nlhdlrdata)->evalsol ==
NULL);
1802assert((*nlhdlrdata)->randnumgen ==
NULL);
1814assert(nlhdlrexprdata !=
NULL);
1815assert(*nlhdlrexprdata !=
NULL);
1833assert(nlhdlrdata !=
NULL);
1835 if( nlhdlrdata->evalsol !=
NULL)
1840 if( nlhdlrdata->randnumgen !=
NULL)
1856assert(nlhdlr !=
NULL);
1857assert(expr !=
NULL);
1858assert(enforcing !=
NULL);
1859assert(participating !=
NULL);
1860assert(nlhdlrexprdata !=
NULL);
1871assert(nlhdlrdata !=
NULL);
1872assert(nlhdlrdata->isnlhdlrconvex);
1874 SCIPdebugMsg(
scip,
"nlhdlr_convex detect for expr %p\n", (
void*)expr);
1886 if( nlexpr !=
NULL)
1892 SCIPdebugMsg(
scip,
"detected expr %p to be convex -> can enforce expr <= auxvar\n", (
void*)expr);
1904 if( nlexpr !=
NULL)
1910 SCIPdebugMsg(
scip,
"detected expr %p to be concave -> can enforce expr >= auxvar\n", (
void*)expr);
1915*enforcing |= *participating;
1917assert(*participating || nlexpr ==
NULL);
1918 if( !*participating )
1936assert(nlhdlrexprdata !=
NULL);
1937assert(nlhdlrexprdata->nlexpr !=
NULL);
1938assert(auxvalue !=
NULL);
1962assert(expr !=
NULL);
1963assert(nlhdlrexprdata !=
NULL);
1968nlexpr = nlhdlrexprdata->nlexpr;
1969assert(nlexpr !=
NULL);
1977overestimate =
FALSE;
1979underestimate =
FALSE;
1980 if( !overestimate && !underestimate )
1989*infeasible =
FALSE;
1991 for( k = 0; k < 5; ++k )
1994lambda = 0.1 * (k+1);
1996 for( i = 0; i < nlhdlrexprdata->nleafs; ++i )
2039 SCIPdebugMsg(
scip,
"failed to cleanup rowprep numerics for k = %d\n", k);
2045overestimate ?
"over":
"under", (
void*)expr, k);
2073assert(expr !=
NULL);
2074assert(nlhdlrexprdata !=
NULL);
2075assert(nlhdlrexprdata->nlexpr !=
NULL);
2076assert(rowpreps !=
NULL);
2077assert(success !=
NULL);
2079assert(
SCIPhashmapGetImage(nlhdlrexprdata->nlexpr2origexpr, (
void*)nlhdlrexprdata->nlexpr) == expr);
2088*addedbranchscores =
FALSE;
2097 if( nlhdlrexprdata->nleafs == 1 &&
SCIPexprIsIntegral(nlhdlrexprdata->leafexprs[0]) )
2102overestimate ?
"over":
"under",
2104sol !=
NULL?
"sol":
"lp",
2114overestimate ?
"over":
"under",
2116sol !=
NULL?
"sol":
"lp",
2140assert(expr !=
NULL);
2141assert(nlhdlrexprdata !=
NULL);
2142assert(nlhdlrexprdata->nlexpr !=
NULL);
2143assert(
SCIPhashmapGetImage(nlhdlrexprdata->nlexpr2origexpr, (
void*)nlhdlrexprdata->nlexpr) == expr);
2144assert(sol !=
NULL);
2151assert(underestimate == !overestimate);
2158 if( nlhdlrexprdata->nleafs == 1 &&
SCIPexprIsIntegral(nlhdlrexprdata->leafexprs[0]) )
2163overestimate ?
"over":
"under", (
void*)expr,
SCIPsolGetIndex(sol));
2172overestimate ?
"over":
"under", (
void*)expr,
SCIPsolGetIndex(sol));
2201assert(targetscip !=
NULL);
2202assert(sourcenlhdlr !=
NULL);
2221nlhdlrdata->isnlhdlrconvex =
TRUE;
2222nlhdlrdata->evalsol =
NULL;
2223nlhdlrdata->randnumgen =
NULL;
2227assert(nlhdlr !=
NULL);
2230 "whether to run convexity detection when the root of an expression is a non-quadratic sum",
2234 "whether to create extended formulations instead of looking for maximal convex expressions",
2238 "maximal relative perturbation of non-differentiable reference point",
2242 "whether to use convexity check on quadratics",
2246 "whether to use convexity check on signomials",
2250 "whether to use convexity check on product composition f(h)*h",
2254 "whether to also handle trivial convex expressions",
2278assert(nlhdlrdata !=
NULL);
2279assert(nlhdlrdata->randnumgen ==
NULL);
2281 if( nlhdlrdata->evalsol !=
NULL)
2299assert(nlhdlr !=
NULL);
2300assert(expr !=
NULL);
2301assert(enforcing !=
NULL);
2302assert(participating !=
NULL);
2303assert(nlhdlrexprdata !=
NULL);
2314assert(nlhdlrdata !=
NULL);
2315assert(!nlhdlrdata->isnlhdlrconvex);
2317 SCIPdebugMsg(
scip,
"nlhdlr_concave detect for expr %p\n", (
void*)expr);
2332 SCIPdebugMsg(
scip,
"Too many variables (%d) in constructed expression. Will not be able to estimate. Rejecting.\n", nleafs);
2336 if( nlexpr !=
NULL)
2342 SCIPdebugMsg(
scip,
"detected expr %p to be concave -> can enforce expr <= auxvar\n", (
void*)expr);
2357 SCIPdebugMsg(
scip,
"Too many variables (%d) in constructed expression. Will not be able to estimate. Rejecting.\n", nleafs);
2361 if( nlexpr !=
NULL)
2367 SCIPdebugMsg(
scip,
"detected expr %p to be convex -> can enforce expr >= auxvar\n", (
void*)expr);
2372*enforcing |= *participating;
2374assert(*participating || nlexpr ==
NULL);
2375 if( !*participating )
2400assert(expr !=
NULL);
2401assert(nlhdlrexprdata !=
NULL);
2403nlexpr = nlhdlrexprdata->nlexpr;
2404assert(nlexpr !=
NULL);
2414overestimate =
FALSE;
2416underestimate =
FALSE;
2417 if( !overestimate && !underestimate )
2442overestimate ?
"over":
"under", (
void*)expr);
2454 if( rowprep !=
NULL)
2467assert(expr !=
NULL);
2468assert(nlhdlrexprdata !=
NULL);
2469assert(nlhdlrexprdata->nlexpr !=
NULL);
2470assert(rowpreps !=
NULL);
2471assert(success !=
NULL);
2473assert(
SCIPhashmapGetImage(nlhdlrexprdata->nlexpr2origexpr, (
void*)nlhdlrexprdata->nlexpr) == expr);
2482*addedbranchscores =
FALSE;
2493overestimate ?
"over":
"under",
2495sol !=
NULL?
"sol":
"lp",
2503 if( addbranchscores )
2525 if( !overestimate )
2526violation =
MAX(0.0, auxvalue - auxval);
2528violation =
MAX(0.0, auxval - auxvalue);
2530assert(violation >= 0.0);
2533 if( nlhdlrexprdata->nleafs == 1 )
2548 for( c = 0; c < nlhdlrexprdata->nleafs; ++c )
2564assert(targetscip !=
NULL);
2565assert(sourcenlhdlr !=
NULL);
2584nlhdlrdata->isnlhdlrconvex =
FALSE;
2585nlhdlrdata->evalsol =
NULL;
2586nlhdlrdata->randnumgen =
NULL;
2590assert(nlhdlr !=
NULL);
2593 "whether to run convexity detection when the root of an expression is a sum",
2597nlhdlrdata->extendedform =
FALSE;
2600 "whether to use convexity check on quadratics",
2604 "whether to use convexity check on signomials",
2608 "whether to use convexity check on product composition f(h)*h",
2612 "whether to also handle trivial convex expressions",
2641assert(expr !=
NULL);
2643assert(success !=
NULL);
2649nlhdlrdata.isnlhdlrconvex =
TRUE;
2650nlhdlrdata.evalsol =
NULL;
2651nlhdlrdata.detectsum =
TRUE;
2652nlhdlrdata.extendedform =
FALSE;
2653nlhdlrdata.cvxquadratic =
TRUE;
2654nlhdlrdata.cvxsignomial =
TRUE;
2655nlhdlrdata.cvxprodcomp =
TRUE;
2656nlhdlrdata.handletrivial =
TRUE;
2661 if( rootnlexpr !=
NULL)
constraint handler for nonlinear constraints specified by algebraic expressions
defines macros for basic operations in double-double arithmetic giving roughly twice the precision of...
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
absolute expression handler
variable expression handler
SCIP_Bool SCIPassumeConvexNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_VAR * SCIPgetExprAuxVarNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPaddExprsViolScoreNonlinear(SCIP *scip, SCIP_EXPR **exprs, int nexprs, SCIP_Real violscore, SCIP_SOL *sol, SCIP_Bool *success)
SCIP_RETCODE SCIPregisterExprUsageNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool useauxvar, SCIP_Bool useactivityforprop, SCIP_Bool useactivityforsepabelow, SCIP_Bool useactivityforsepaabove)
SCIP_RETCODE SCIPcomputeFacetVertexPolyhedralNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_Bool overestimate, SCIP_DECL_VERTEXPOLYFUN((*function)), void *fundata, SCIP_Real *xstar, SCIP_Real *box, int nallvars, SCIP_Real targetvalue, SCIP_Bool *success, SCIP_Real *facetcoefs, SCIP_Real *facetconstant)
#define SCIP_MAXVERTEXPOLYDIM
SCIP_RETCODE SCIPcreateExprVar(SCIP *scip, SCIP_EXPR **expr, SCIP_VAR *var, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprAbs(SCIP *scip, SCIP_EXPR *expr)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_RETCODE SCIPhashmapSetImage(SCIP_HASHMAP *hashmap, void *origin, void *image)
int SCIPhashmapEntryGetImageInt(SCIP_HASHMAPENTRY *entry)
int SCIPhashmapGetNEntries(SCIP_HASHMAP *hashmap)
SCIP_HASHMAPENTRY * SCIPhashmapGetEntry(SCIP_HASHMAP *hashmap, int entryidx)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
void * SCIPhashmapEntryGetOrigin(SCIP_HASHMAPENTRY *entry)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
SCIP_RETCODE SCIPhashmapRemoveAll(SCIP_HASHMAP *hashmap)
void SCIPhashsetFree(SCIP_HASHSET **hashset, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPhashsetExists(SCIP_HASHSET *hashset, void *element)
SCIP_RETCODE SCIPhashsetInsert(SCIP_HASHSET *hashset, BMS_BLKMEM *blkmem, void *element)
SCIP_RETCODE SCIPhashsetCreate(SCIP_HASHSET **hashset, BMS_BLKMEM *blkmem, int size)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPhasExprCurvature(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPRCURV curv, SCIP_Bool *success, SCIP_HASHMAP *assumevarfixed)
SCIP_RETCODE SCIPincludeNlhdlrConvex(SCIP *scip)
SCIP_RETCODE SCIPincludeNlhdlrConcave(SCIP *scip)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPsetPtrarrayVal(SCIP *scip, SCIP_PTRARRAY *ptrarray, int idx, void *val)
const char * SCIPexprhdlrGetName(SCIP_EXPRHDLR *exprhdlr)
SCIP_Bool SCIPexprhdlrHasBwdiff(SCIP_EXPRHDLR *exprhdlr)
const char * SCIPexprcurvGetName(SCIP_EXPRCURV curv)
SCIP_RETCODE SCIPappendExprChild(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR *child)
SCIP_RETCODE SCIPevalExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Longint soltag)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_RETCODE SCIPcomputeExprIntegrality(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprProduct(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPevalExprGradient(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Longint soltag)
SCIP_Bool SCIPexpriterIsEnd(SCIP_EXPRITER *iterator)
void SCIPexprSetCurvature(SCIP_EXPR *expr, SCIP_EXPRCURV curvature)
SCIP_EXPR * SCIPexpriterSkipDFS(SCIP_EXPRITER *iterator)
SCIP_Real SCIPexprGetDerivative(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPduplicateExprShallow(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR **copyexpr, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPexprIsIntegral(SCIP_EXPR *expr)
void SCIPexprGetQuadraticData(SCIP_EXPR *expr, SCIP_Real *constant, int *nlinexprs, SCIP_EXPR ***linexprs, SCIP_Real **lincoefs, int *nquadexprs, int *nbilinexprs, SCIP_Real **eigenvalues, SCIP_Real **eigenvectors)
SCIP_RETCODE SCIPreplaceExprChild(SCIP *scip, SCIP_EXPR *expr, int childidx, SCIP_EXPR *newchild)
SCIP_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprValue(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPgetCoefExprProduct(SCIP_EXPR *expr)
int SCIPcompareExpr(SCIP *scip, SCIP_EXPR *expr1, SCIP_EXPR *expr2)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
SCIP_EXPR * SCIPexpriterGetCurrent(SCIP_EXPRITER *iterator)
SCIP_Bool SCIPexprcurvMonomialInv(SCIP_EXPRCURV monomialcurv, int nfactors, SCIP_Real *exponents, SCIP_INTERVAL *factorbounds, SCIP_EXPRCURV *factorcurv)
void SCIPexpriterSetStagesDFS(SCIP_EXPRITER *iterator, SCIP_EXPRITER_STAGE stopstages)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcomputeExprQuadraticCurvature(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPRCURV *curv, SCIP_HASHMAP *assumevarfixed, SCIP_Bool storeeigeninfo)
SCIP_EXPRCURV SCIPexprcurvMultiply(SCIP_Real factor, SCIP_EXPRCURV curvature)
SCIP_RETCODE SCIPcreateExpriter(SCIP *scip, SCIP_EXPRITER **iterator)
SCIP_RETCODE SCIPprintExpr(SCIP *scip, SCIP_EXPR *expr, FILE *file)
SCIP_EXPRCURV SCIPexprGetCurvature(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPexprGetEvalValue(SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetNext(SCIP_EXPRITER *iterator)
SCIP_RETCODE SCIPcheckExprQuadratic(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool *isquadratic)
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 SCIPexprGetQuadraticQuadTerm(SCIP_EXPR *quadexpr, int termidx, SCIP_EXPR **expr, SCIP_Real *lincoef, SCIP_Real *sqrcoef, int *nadjbilin, int **adjbilin, SCIP_EXPR **sqrexpr)
int SCIPexpriterGetChildIdxDFS(SCIP_EXPRITER *iterator)
void SCIPfreeExpriter(SCIP_EXPRITER **iterator)
void SCIPcaptureExpr(SCIP_EXPR *expr)
SCIP_RETCODE SCIPexpriterInit(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_TYPE type, SCIP_Bool allowrevisit)
SCIP_Longint SCIPexprGetDiffTag(SCIP_EXPR *expr)
SCIP_RETCODE SCIPremoveExprChildren(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPevalExprActivity(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPRHDLR * SCIPexprGetHdlr(SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetChildExprDFS(SCIP_EXPRITER *iterator)
#define SCIPallocClearBlockMemory(scip, ptr)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
void SCIPnlhdlrSetCopyHdlr(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRCOPYHDLR((*copy)))
void SCIPnlhdlrSetFreeExprData(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRFREEEXPRDATA((*freeexprdata)))
void SCIPnlhdlrSetSollinearize(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRSOLLINEARIZE((*sollinearize)))
SCIP_NLHDLRDATA * SCIPnlhdlrGetData(SCIP_NLHDLR *nlhdlr)
void SCIPnlhdlrSetFreeHdlrData(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRFREEHDLRDATA((*freehdlrdata)))
void SCIPnlhdlrSetSepa(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRINITSEPA((*initsepa)), SCIP_DECL_NLHDLRENFO((*enfo)), SCIP_DECL_NLHDLRESTIMATE((*estimate)), SCIP_DECL_NLHDLREXITSEPA((*exitsepa)))
void SCIPnlhdlrSetInitExit(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRINIT((*init)), SCIP_DECL_NLHDLREXIT((*exit_)))
const char * SCIPnlhdlrGetName(SCIP_NLHDLR *nlhdlr)
SCIP_RETCODE SCIPincludeNlhdlrNonlinear(SCIP *scip, SCIP_NLHDLR **nlhdlr, const char *name, const char *desc, int detectpriority, int enfopriority, SCIP_DECL_NLHDLRDETECT((*detect)), SCIP_DECL_NLHDLREVALAUX((*evalaux)), SCIP_NLHDLRDATA *nlhdlrdata)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
int SCIPsolGetIndex(SCIP_SOL *sol)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Longint SCIPgetNLPs(SCIP *scip)
SCIP_Bool SCIPisRelEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPround(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPgetHugeValue(SCIP *scip)
SCIP_Real SCIPceil(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_BOUNDTYPE SCIPvarGetBestBoundType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
SCIP_RETCODE SCIPcleanupRowprep2(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Real maxcoefbound, SCIP_Bool *success)
SCIP_RETCODE SCIPensureRowprepSize(SCIP *scip, SCIP_ROWPREP *rowprep, int size)
SCIP_Real * SCIProwprepGetCoefs(SCIP_ROWPREP *rowprep)
char * SCIProwprepGetName(SCIP_ROWPREP *rowprep)
SCIP_Bool SCIProwprepIsLocal(SCIP_ROWPREP *rowprep)
void SCIProwprepAddConstant(SCIP_ROWPREP *rowprep, SCIP_Real constant)
SCIP_RETCODE SCIPaddRowprepTerm(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_VAR *var, SCIP_Real coef)
SCIP_RETCODE SCIPgetRowprepRowCons(SCIP *scip, SCIP_ROW **row, SCIP_ROWPREP *rowprep, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateRowprep(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_SIDETYPE sidetype, SCIP_Bool local)
void SCIProwprepSetLocal(SCIP_ROWPREP *rowprep, SCIP_Bool islocal)
void SCIPfreeRowprep(SCIP *scip, SCIP_ROWPREP **rowprep)
void SCIPprintRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, FILE *file)
int SCIPsnprintf(char *t, int len, const char *s,...)
static SCIP_DECL_NLHDLREXIT(nlhdlrExitConvex)
#define DEFAULT_HANDLETRIVIAL
static SCIP_RETCODE exprstackInit(SCIP *scip, EXPRSTACK *exprstack, int initsize)
static SCIP_DECL_NLHDLREVALAUX(nlhdlrEvalAuxConvexConcave)
static SCIP_DECL_VERTEXPOLYFUN(nlhdlrExprEvalConcave)
static SCIP_RETCODE estimateGradientInner(SCIP *scip, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_ROWPREP *rowprep, SCIP_Bool *success)
#define CONCAVE_NLHDLR_NAME
static SCIP_Bool exprIsMultivarLinear(SCIP *scip, SCIP_EXPR *expr)
#define CONCAVE_NLHDLR_DESC
static SCIP_DECL_NLHDLRFREEHDLRDATA(nlhdlrfreeHdlrDataConvexConcave)
static SCIP_RETCODE exprstackPush(SCIP *scip, EXPRSTACK *exprstack, int nexprs, SCIP_EXPR **exprs)
static void exprstackFree(SCIP *scip, EXPRSTACK *exprstack)
#define CONVEX_NLHDLR_DETECTPRIORITY
#define DEFAULT_EXTENDEDFORM
static SCIP_RETCODE estimateVertexPolyhedral(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_NLHDLR *nlhdlr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_Bool usemidpoint, SCIP_Bool overestimate, SCIP_Real targetvalue, SCIP_ROWPREP *rowprep, SCIP_Bool *success)
static SCIP_RETCODE createNlhdlrExprData(SCIP *scip, SCIP_NLHDLRDATA *nlhdlrdata, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_EXPR *expr, SCIP_EXPR *nlexpr, SCIP_HASHMAP *nlexpr2origexpr, int nleafs, SCIP_NLHDLR_METHOD participating)
static SCIP_DECL_NLHDLRCOPYHDLR(nlhdlrCopyhdlrConvex)
#define CONVEX_NLHDLR_DESC
#define CONVEX_NLHDLR_NAME
static SCIP_DECL_NLHDLRFREEEXPRDATA(nlhdlrfreeExprDataConvexConcave)
#define DEFAULT_MAXPERTURB
#define CONCAVE_NLHDLR_DETECTPRIORITY
static SCIP_DECL_NLHDLRINITSEPA(nlhdlrInitSepaConvex)
static const int NCURVCHECKS
static SCIP_DECL_NLHDLRESTIMATE(nlhdlrEstimateConvex)
#define CONVEX_NLHDLR_ENFOPRIORITY
#define DEFAULT_CVXSIGNOMIAL
static SCIP_RETCODE constructExpr(SCIP *scip, SCIP_NLHDLRDATA *nlhdlrdata, SCIP_EXPR **rootnlexpr, SCIP_HASHMAP *nlexpr2origexpr, int *nleafs, SCIP_EXPR *rootexpr, SCIP_EXPRCURV curv, SCIP_HASHMAP *assumevarfixed, SCIP_Bool assumecurvature, SCIP_Bool *curvsuccess)
static SCIP_RETCODE collectLeafs(SCIP *scip, SCIP_NLHDLREXPRDATA *nlhdlrexprdata)
#define DEFAULT_DETECTSUM
static SCIP_RETCODE nlhdlrExprCreate(SCIP *scip, SCIP_HASHMAP *nlexpr2origexpr, SCIP_EXPR **nlhdlrexpr, SCIP_EXPR *origexpr, SCIP_EXPRCURV curv)
#define DEFAULT_CVXPRODCOMP
#define DEFAULT_CVXQUADRATIC_CONCAVE
#define DEFAULT_CVXQUADRATIC_CONVEX
static SCIP_RETCODE estimateConvexSecant(SCIP *scip, SCIP_NLHDLR *nlhdlr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_ROWPREP *rowprep, SCIP_Bool *success)
static SCIP_DECL_NLHDLRSOLLINEARIZE(nlhdlrSollinearizeConvex)
static SCIP_RETCODE nlhdlrExprGrowChildren(SCIP *scip, SCIP_HASHMAP *nlexpr2origexpr, SCIP_EXPR *nlhdlrexpr, SCIP_EXPRCURV *childrencurv)
#define DECL_CURVCHECK(x)
static SCIP_Bool exprstackIsEmpty(EXPRSTACK *exprstack)
static SCIP_EXPR * exprstackPop(EXPRSTACK *exprstack)
#define CONCAVE_NLHDLR_ENFOPRIORITY
static SCIP_DECL_NLHDLRDETECT(nlhdlrDetectConvex)
static SCIP_RETCODE estimateGradient(SCIP *scip, SCIP_NLHDLR *nlhdlr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_ROWPREP *rowprep, SCIP_Bool *success)
nonlinear handlers for convex and concave expressions, respectively
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
preparation of a linear inequality to become a SCIP_ROW
public functions of nonlinear handlers of nonlinear constraints
public functions to work with algebraic expressions
SCIP_NLHDLREXPRDATA * nlhdlrexprdata
#define SCIP_EXPRITER_VISITINGCHILD
#define SCIP_NLHDLR_METHOD_SEPAABOVE
struct SCIP_NlhdlrData SCIP_NLHDLRDATA
#define SCIP_NLHDLR_METHOD_SEPABOTH
unsigned int SCIP_NLHDLR_METHOD
struct SCIP_NlhdlrExprData SCIP_NLHDLREXPRDATA
#define SCIP_NLHDLR_METHOD_SEPABELOW
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