46#define CONVEX_NLHDLR_NAME "convex"
47#define CONVEX_NLHDLR_DESC "handler that identifies and estimates convex expressions"
48#define CONVEX_NLHDLR_DETECTPRIORITY 50
49#define CONVEX_NLHDLR_ENFOPRIORITY 50
51#define CONCAVE_NLHDLR_NAME "concave"
52#define CONCAVE_NLHDLR_DESC "handler that identifies and estimates concave expressions"
53#define CONCAVE_NLHDLR_DETECTPRIORITY 40
54#define CONCAVE_NLHDLR_ENFOPRIORITY 40
56#define DEFAULT_DETECTSUM FALSE
57#define DEFAULT_EXTENDEDFORM TRUE
58#define DEFAULT_CVXQUADRATIC_CONVEX TRUE
59#define DEFAULT_CVXQUADRATIC_CONCAVE FALSE
60#define DEFAULT_CVXSIGNOMIAL TRUE
61#define DEFAULT_CVXPRODCOMP TRUE
62#define DEFAULT_HANDLETRIVIAL FALSE
64#define INITLPMAXVARVAL 1000.0
76struct SCIP_NlhdlrExprData
88 SCIP_Bool isnlhdlrconvex;
94 SCIP_Bool extendedform;
97 SCIP_Bool cvxquadratic;
98 SCIP_Bool cvxsignomial;
99 SCIP_Bool cvxprodcomp;
100 SCIP_Bool handletrivial;
119#define DECL_CURVCHECK(x) SCIP_RETCODE x( \
122 SCIP_Bool isrootexpr, \
124 SCIP_HASHMAP* nlexpr2origexpr, \
125 SCIP_NLHDLRDATA* nlhdlrdata, \
126 SCIP_HASHMAP* assumevarfixed, \
203 for(
i = 0;
i < nchildren; ++
i )
228#ifdef SCIP_MORE_DEBUG
233#ifdef SCIP_MORE_DEBUG
380 if( nquadexprs <= 1 )
406 for(
i = 0;
i < nquadexprs; ++
i )
662#ifndef NLHDLR_CONVEX_UNITTEST
677#ifdef SCIP_MORE_DEBUG
786#ifndef NLHDLR_CONVEX_UNITTEST
862#ifdef SCIP_MORE_DEBUG
881 for(
i = 0;
i < nchildren; ++
i )
934 for(
c = 0;
c < nchildren; ++
c )
1008#ifdef SCIP_MORE_DEBUG
1085#ifdef SCIP_MORE_DEBUG
1087 SCIPinfoMessage(
scip,
NULL,
"... is a multivariate linear sum that we'll treat as auxvar instead (postprocess)\n");
1161 assert(nlhdlrexprdata->nlexpr2origexpr !=
NULL);
1165 assert(nlhdlrexprdata->nleafs > 0);
1170 nlhdlrexprdata->nleafs = 0;
1240 assert(nlhdlrexprdata->nleafs > 0);
1264 nlhdlrexprdata->leafexprs[idx] = leaf;
1301 (*nlhdlrexprdata)->nlexpr = nlexpr;
1302 (*nlhdlrexprdata)->nlexpr2origexpr = nlexpr2origexpr;
1303 (*nlhdlrexprdata)->nleafs = nleafs;
1376 SCIP_Bool overestimate,
1377 SCIP_Real targetvalue,
1407 for(
i = 0;
i < nlhdlrexprdata->nleafs; ++
i )
1426 evaldata.nlhdlrexprdata = nlhdlrexprdata;
1434 for(
i = 0;
i < nlhdlrexprdata->nleafs; ++
i )
1483 for(
i = 0;
i < nlhdlrexprdata->nleafs; ++
i )
1513 SCIP_Real
QUAD(constant);
1520 nlexpr = nlhdlrexprdata->nlexpr;
1534 SCIPdebugMsg(
scip,
"evaluation error / too large value (%g) for %p\n", auxvalue, (
void*)nlexpr);
1554 for(
i = 0;
i < nlhdlrexprdata->nleafs; ++
i )
1564 SCIPdebugMsg(
scip,
"gradient evaluation error for component %d of %p\n",
i, (
void*)nlexpr);
1603 SCIP_Real left, right;
1607 assert(nlhdlrexprdata->nleafs == 1);
1611 nlexpr = nlhdlrexprdata->nlexpr;
1797 if( nlexpr !=
NULL )
1803 SCIPdebugMsg(
scip,
"detected expr %p to be convex -> can enforce expr <= auxvar\n", (
void*)expr);
1815 if( nlexpr !=
NULL )
1821 SCIPdebugMsg(
scip,
"detected expr %p to be concave -> can enforce expr >= auxvar\n", (
void*)expr);
1879 nlexpr = nlhdlrexprdata->nlexpr;
1888 overestimate =
FALSE;
1890 underestimate =
FALSE;
1891 if( !overestimate && !underestimate )
1900 *infeasible =
FALSE;
1902 for(
k = 0;
k < 5; ++
k )
1905 lambda = 0.1 * (
k+1);
1907 for(
i = 0;
i < nlhdlrexprdata->nleafs; ++
i )
1956 overestimate ?
"over" :
"under", (
void*)expr,
k);
2008 if( nlhdlrexprdata->nleafs == 1 &&
SCIPexprIsIntegral(nlhdlrexprdata->leafexprs[0]) )
2013 overestimate ?
"over" :
"under",
2025 overestimate ?
"over" :
"under",
2075 "whether to run convexity detection when the root of an expression is a non-quadratic sum",
2079 "whether to create extended formulations instead of looking for maximal convex expressions",
2083 "whether to use convexity check on quadratics",
2087 "whether to use convexity check on signomials",
2091 "whether to use convexity check on product composition f(h)*h",
2095 "whether to also handle trivial convex expressions",
2171 SCIPdebugMsg(
scip,
"Too many variables (%d) in constructed expression. Will not be able to estimate. Rejecting.\n", nleafs);
2175 if( nlexpr !=
NULL )
2181 SCIPdebugMsg(
scip,
"detected expr %p to be concave -> can enforce expr <= auxvar\n", (
void*)expr);
2196 SCIPdebugMsg(
scip,
"Too many variables (%d) in constructed expression. Will not be able to estimate. Rejecting.\n", nleafs);
2200 if( nlexpr !=
NULL )
2206 SCIPdebugMsg(
scip,
"detected expr %p to be convex -> can enforce expr >= auxvar\n", (
void*)expr);
2242 nlexpr = nlhdlrexprdata->nlexpr;
2253 overestimate =
FALSE;
2255 underestimate =
FALSE;
2256 if( !overestimate && !underestimate )
2281 overestimate ?
"over" :
"under", (
void*)expr);
2332 overestimate ?
"over" :
"under",
2372 if( nlhdlrexprdata->nleafs == 1 )
2387 for(
c = 0;
c < nlhdlrexprdata->nleafs; ++
c )
2431 "whether to run convexity detection when the root of an expression is a sum",
2438 "whether to use convexity check on quadratics",
2442 "whether to use convexity check on signomials",
2446 "whether to use convexity check on product composition f(h)*h",
2450 "whether to also handle trivial convex expressions",
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)
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_DECL_VERTEXPOLYFUN(f)
#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 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 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 SCIPnlhdlrSetInitExit(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRINIT((*init)),)
SCIP_NLHDLRDATA * SCIPnlhdlrGetData(SCIP_NLHDLR *nlhdlr)
void SCIPnlhdlrSetFreeExprData(SCIP_NLHDLR *nlhdlr,)
const char * SCIPnlhdlrGetName(SCIP_NLHDLR *nlhdlr)
void SCIPnlhdlrSetSepa(SCIP_NLHDLR *nlhdlr, SCIP_DECL_NLHDLRINITSEPA((*initsepa)), SCIP_DECL_NLHDLRENFO((*enfo)), SCIP_DECL_NLHDLRESTIMATE((*estimate)),)
void SCIPnlhdlrSetFreeHdlrData(SCIP_NLHDLR *nlhdlr,)
void SCIPnlhdlrSetCopyHdlr(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)
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)
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)
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,...)
SCIPfreeSol(scip, &heurdata->sol))
SCIPcreateSol(scip, &heurdata->sol, heur))
assert(minobj< SCIPgetCutoffbound(scip))
#define DEFAULT_HANDLETRIVIAL
static SCIP_RETCODE exprstackInit(SCIP *scip, EXPRSTACK *exprstack, int initsize)
#define CONCAVE_NLHDLR_NAME
static SCIP_Bool exprIsMultivarLinear(SCIP *scip, SCIP_EXPR *expr)
#define CONCAVE_NLHDLR_DESC
static SCIP_RETCODE estimateGradient(SCIP *scip, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_Real auxvalue, SCIP_ROWPREP *rowprep, SCIP_Bool *success)
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)
#define CONVEX_NLHDLR_DESC
#define CONVEX_NLHDLR_NAME
#define CONCAVE_NLHDLR_DETECTPRIORITY
static const int NCURVCHECKS
#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_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
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
#define SCIP_DECL_NLHDLREVALAUX(x)
#define SCIP_DECL_NLHDLRESTIMATE(x)
struct SCIP_NlhdlrData SCIP_NLHDLRDATA
#define SCIP_NLHDLR_METHOD_SEPABOTH
#define SCIP_DECL_NLHDLRCOPYHDLR(x)
unsigned int SCIP_NLHDLR_METHOD
#define SCIP_DECL_NLHDLREXIT(x)
#define SCIP_DECL_NLHDLRFREEEXPRDATA(x)
#define SCIP_DECL_NLHDLRDETECT(x)
#define SCIP_DECL_NLHDLRINITSEPA(x)
#define SCIP_DECL_NLHDLRFREEHDLRDATA(x)
struct SCIP_NlhdlrExprData SCIP_NLHDLREXPRDATA
#define SCIP_NLHDLR_METHOD_SEPABELOW
enum SCIP_Retcode SCIP_RETCODE