56#define NLHDLR_NAME "soc"
57#define NLHDLR_DESC "nonlinear handler for second-order cone structures"
58#define NLHDLR_DETECTPRIORITY 100
59#define NLHDLR_ENFOPRIORITY 100
60#define DEFAULT_MINCUTEFFICACY 1e-5
61#define DEFAULT_COMPEIGENVALUES TRUE
108struct SCIP_NlhdlrExprData
112 SCIP_Real* transcoefs;
123struct SCIP_NlhdlrData
125 SCIP_Real mincutefficacy;
126 SCIP_Bool compeigenvalues;
145 nterms = nlhdlrexprdata->nterms;
153 startidx = nlhdlrexprdata->termbegins[
i];
156 if( startidx == nlhdlrexprdata->termbegins[
i + 1] )
158 assert(nlhdlrexprdata->offsets[
i] != 0.0);
167 for(
j = startidx;
j < nlhdlrexprdata->termbegins[
i + 1]; ++
j )
169 if( nlhdlrexprdata->transcoefs[
j] != 1.0 )
181 else if( nlhdlrexprdata->offsets[
i] != 0.0 )
193 for(
j = nlhdlrexprdata->termbegins[
nterms-1];
j < nlhdlrexprdata->termbegins[
nterms]; ++
j )
195 if( nlhdlrexprdata->transcoefs[
j] != 1.0 )
204 else if( nlhdlrexprdata->offsets[
nterms-1] != 0.0 )
226 ndisvars = nlhdlrexprdata->nterms - 1;
258 if( nlhdlrexprdata->disvars ==
NULL )
261 ndisvars = nlhdlrexprdata->nterms - 1;
296 nterms = nlhdlrexprdata->nterms;
297 beta = nlhdlrexprdata->offsets[
nterms - 1];
313 for(
i = nlhdlrexprdata->termbegins[
nterms - 1];
i < nlhdlrexprdata->termbegins[
nterms]; ++
i )
321 coef = -nlhdlrexprdata->transcoefs[
i];
335 SCIP_Real* transcoefs,
360 (*nlhdlrexprdata)->nvars =
nvars;
361 (*nlhdlrexprdata)->nterms =
nterms;
363 (*nlhdlrexprdata)->disrow =
NULL;
364 (*nlhdlrexprdata)->disvars =
NULL;
367 SCIPdebugMsg(
scip,
"created nlhdlr data for the following soc expression:\n");
390 ntranscoefs = (*nlhdlrexprdata)->termbegins[(*nlhdlrexprdata)->nterms];
418 result = nlhdlrexprdata->offsets[
k];
420 for(
i = nlhdlrexprdata->termbegins[
k];
i < nlhdlrexprdata->termbegins[
k + 1]; ++
i )
456 SCIP_Real mincutviolation,
462 SCIP_Real* transcoefs;
478 assert(mincutviolation >= 0.0);
481 vars = nlhdlrexprdata->vars;
482 transcoefs = nlhdlrexprdata->transcoefs;
483 transcoefsidx = nlhdlrexprdata->transcoefsidx;
484 termbegins = nlhdlrexprdata->termbegins;
485 nterms = nlhdlrexprdata->nterms;
523 for(
i = termbegins[
j];
i < termbegins[
j + 1]; ++
i )
593 SCIP_Real mincutviolation,
600 SCIP_Real* transcoefs;
619 assert(mincutviolation >= 0.0);
622 vars = nlhdlrexprdata->vars;
623 disvars = nlhdlrexprdata->disvars;
624 transcoefs = nlhdlrexprdata->transcoefs;
625 transcoefsidx = nlhdlrexprdata->transcoefsidx;
626 termbegins = nlhdlrexprdata->termbegins;
627 nterms = nlhdlrexprdata->nterms;
643 if(
fvalue <= mincutviolation )
716 NULL), mincutviolation);
760 for(
i = nchildren - 1;
i >= 0; --
i )
779 assert(*nexprs < 2 * nchildren);
792 assert(*nexprs < 2 * nchildren);
814 assert(*nexprs < 2 * nchildren);
825 assert(*nexprs < 2 * nchildren);
874 for(
i = 0;
i < nchildren; ++
i )
884 assert(0 <= varpos && varpos < nexprs);
893 assert(0 <= varpos && varpos < nexprs);
906 assert(0 <= varpos && varpos < nexprs);
918 assert(0 <= varpos && varpos < nexprs);
938 SCIP_Real* transcoefs,
1171 SCIP_Real* transcoefs;
1232 for(
i = 0;
i < nchildren; ++
i )
1295 for(
i = 0;
i < nchildren; ++
i )
1326 if( constant > 0.0 )
1338 transcoefsidx[
i] =
i;
1345 if( constant > 0.0 )
1353 offsets[
nterms - 1] = 0.0;
1355 transcoefs[
nterms - 2] = 1.0;
1364 offsets[
nterms - 1] = 0.0;
1366 transcoefs[
nterms - 1] = 1.0;
1374 for(
i = 0;
i < nchildren; ++
i )
1410 SCIPdebugMsg(
scip,
"found SOC structure for expression %p\n", (
void*)expr);
1454 SCIP_Real* offsets =
NULL;
1455 SCIP_Real* transcoefs =
NULL;
1456 int* transcoefsidx =
NULL;
1457 int* termbegins =
NULL;
1506 for(
i = 0;
i < nchildren; ++
i )
1627 for(
i = 0;
i < nchildren; ++
i )
1724 for(
i = 0;
i < nchildren; ++
i )
1864 SCIPdebugMsg(
scip,
"found SOC structure for expression %p\n%f <= ", (
void*)expr, lhs);
1923 SCIP_Real* transcoefs;
1926 SCIP_Real* lincoefs;
1969 transcoefsidx =
NULL;
2011 SCIPdebugMsg(
scip,
"Failed to compute eigenvalues and eigenvectors for expression:\n");
2130 SCIPdebugMsg(
scip,
"found SOC structure for expression %p\n%f <= ", (
void*)expr, lhs);
2278#define nlhdlrInitSoc NULL
2293#define nlhdlrExitSoc NULL
2353 assert(nlhdlrexprdata->transcoefsidx !=
NULL);
2354 assert(nlhdlrexprdata->nterms > 1);
2363 for(
i = 0;
i < nlhdlrexprdata->nterms - 1; ++
i )
2371 assert(*auxvalue >= 0.0);
2374 *auxvalue =
SQRT(*auxvalue);
2391 for(
i = 0;
i < nchildren; ++
i )
2445 if( nlhdlrexprdata->nterms > 3 )
2450#ifdef WITH_DEBUG_SOLUTION
2467 nterms = nlhdlrexprdata->nterms;
2471 for(
i = nlhdlrexprdata->termbegins[
nterms - 1];
i < nlhdlrexprdata->termbegins[
nterms]; ++
i )
2483 ndisvars = nlhdlrexprdata->nterms - 1;
2497 lhsval = nlhdlrexprdata->offsets[
k];
2499 for(
i = nlhdlrexprdata->termbegins[
k];
i < nlhdlrexprdata->termbegins[
k + 1]; ++
i )
2535 if( nlhdlrexprdata->disrow !=
NULL )
2552 SCIP_Bool infeasible;
2555 assert(nlhdlrexprdata->nterms < 4 || nlhdlrexprdata->disrow !=
NULL);
2556 assert(nlhdlrexprdata->nterms > 1);
2566 if( nlhdlrexprdata->nterms < 4 )
2580 SCIPdebugMsg(
scip,
"generated row for %d-SOC, efficacy=%g, minefficacy=%g, allowweakcuts=%u\n",
2588#ifdef SCIP_CONSNONLINEAR_ROWNOTREMOVABLE
2619 SCIPdebugMsg(
scip,
"added disaggregation row to LP, cutoff=%u\n", infeasible);
2643 SCIPdebugMsg(
scip,
"generated row for disaggregation %d, efficacy=%g, minefficacy=%g, allowweakcuts=%u\n",
2651#ifdef SCIP_CONSNONLINEAR_ROWNOTREMOVABLE
2700 "Minimum efficacy which a cut needs in order to be added.",
2704 "Should Eigenvalue computations be done to detect complex cases in quadratic constraints?",
2736 SCIP_Bool compeigenvalues,
2741 SCIP_Real** offsets,
2742 SCIP_Real** transcoefs,
2743 int** transcoefsidx,
2763 nlhdlrdata.compeigenvalues = compeigenvalues;
2775 for(
i = 0;
i < nlhdlrexprdata->nvars; ++
i )
2790 for(
i = 0;
i < nlhdlrexprdata->nvars; ++
i )
2796 *offsets = nlhdlrexprdata->offsets;
2797 *transcoefs = nlhdlrexprdata->transcoefs;
2798 *transcoefsidx = nlhdlrexprdata->transcoefsidx;
2799 *termbegins = nlhdlrexprdata->termbegins;
2800 *
nvars = nlhdlrexprdata->nvars;
2801 *
nterms = nlhdlrexprdata->nterms;
2806 if( nlhdlrexprdata !=
NULL )
2813 *transcoefsidx =
NULL;
2826 SCIP_Real** offsets,
2827 SCIP_Real** transcoefs,
2828 int** transcoefsidx,
constraint handler for nonlinear constraints specified by algebraic expressions
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugAddSolVal(scip, var, val)
power and signed power expression handlers
variable expression handler
unsigned int SCIPgetExprNAuxvarUsesNonlinear(SCIP_EXPR *expr)
int SCIPgetExprNLocksPosNonlinear(SCIP_EXPR *expr)
SCIP_VAR * SCIPgetExprAuxVarNonlinear(SCIP_EXPR *expr)
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
int SCIPgetExprNLocksNegNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPregisterExprUsageNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool useauxvar, SCIP_Bool useactivityforprop, SCIP_Bool useactivityforsepabelow, SCIP_Bool useactivityforsepaabove)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
int SCIPhashmapGetNElements(SCIP_HASHMAP *hashmap)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
void SCIPhashsetFree(SCIP_HASHSET **hashset, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPhashsetExists(SCIP_HASHSET *hashset, void *element)
int SCIPhashsetGetNElements(SCIP_HASHSET *hashset)
SCIP_RETCODE SCIPhashsetInsert(SCIP_HASHSET *hashset, BMS_BLKMEM *blkmem, void *element)
SCIP_RETCODE SCIPhashsetCreate(SCIP_HASHSET **hashset, BMS_BLKMEM *blkmem, int size)
SCIP_RETCODE SCIPhashsetRemove(SCIP_HASHSET *hashset, void *element)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPfreeSOCArraysNonlinear(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **offsets, SCIP_Real **transcoefs, int **transcoefsidx, int **termbegins, int nvars, int nterms)
SCIP_RETCODE SCIPisSOCNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_Bool compeigenvalues, SCIP_Bool *success, SCIP_SIDETYPE *sidetype, SCIP_VAR ***vars, SCIP_Real **offsets, SCIP_Real **transcoefs, int **transcoefsidx, int **termbegins, int *nvars, int *nterms)
SCIP_RETCODE SCIPcallLapackDsyevIpopt(SCIP_Bool computeeigenvectors, int N, SCIP_Real *a, SCIP_Real *w)
SCIP_Bool SCIPisIpoptAvailableIpopt(void)
SCIP_RETCODE SCIPincludeNlhdlrSoc(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)
void SCIPswapReals(SCIP_Real *value1, SCIP_Real *value2)
SCIP_Real SCIPgetCutEfficacy(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_Bool SCIPisCutApplicable(SCIP *scip, SCIP_ROW *cut)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprProduct(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPprintExpr(SCIP *scip, SCIP_EXPR *expr, FILE *file)
SCIP_Bool SCIPisExprPower(SCIP *scip, 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)
SCIP_RETCODE SCIPdismantleExpr(SCIP *scip, FILE *file, SCIP_EXPR *expr)
SCIP_RETCODE SCIPevalExprActivity(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPgetLPFeastol(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBlockMemory(scip, ptr)
#define SCIPallocClearBufferArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
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 SCIPcreateEmptyRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
void SCIPmarkRowNotRemovableLocal(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Longint SCIPgetNLPs(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
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_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
void SCIPvarMarkRelaxationOnly(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
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 SCIPgetRowprepViolation(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Bool *reliable)
char * SCIProwprepGetName(SCIP_ROWPREP *rowprep)
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 SCIProwprepAddSide(SCIP_ROWPREP *rowprep, SCIP_Real side)
void SCIPfreeRowprep(SCIP *scip, SCIP_ROWPREP **rowprep)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
static volatile int nterms
#define NLHDLR_DETECTPRIORITY
static SCIP_RETCODE generateCutSolDisagg(SCIP *scip, SCIP_EXPR *expr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, int disaggidx, SCIP_Real mincutviolation, SCIP_Real rhsval, SCIP_ROW **cut)
static SCIP_RETCODE tryFillNlhdlrExprDataQuad(SCIP *scip, SCIP_EXPR **occurringexprs, SCIP_Real *eigvecmatrix, SCIP_Real *eigvals, SCIP_Real *bp, int nvars, int *termbegins, SCIP_Real *transcoefs, int *transcoefsidx, SCIP_Real *offsets, SCIP_Real *lhsconstant, int *nterms, SCIP_Bool *success)
#define NLHDLR_ENFOPRIORITY
static SCIP_RETCODE freeNlhdlrExprData(SCIP *scip, SCIP_NLHDLREXPRDATA **nlhdlrexprdata)
static SCIP_Real evalSingleTerm(SCIP *scip, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, int k)
static SCIP_RETCODE createDisaggrRow(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *expr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata)
static SCIP_RETCODE detectSocNorm(SCIP *scip, SCIP_EXPR *expr, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_Bool *success)
static SCIP_RETCODE generateCutSolSOC(SCIP *scip, SCIP_EXPR *expr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_Real mincutviolation, SCIP_Real rhsval, SCIP_ROW **cut)
static SCIP_RETCODE detectSOC(SCIP *scip, SCIP_NLHDLRDATA *nlhdlrdata, SCIP_EXPR *expr, SCIP_Real conslhs, SCIP_Real consrhs, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_Bool *enforcebelow, SCIP_Bool *success)
static SCIP_RETCODE checkAndCollectQuadratic(SCIP *scip, SCIP_EXPR *quadexpr, SCIP_HASHMAP *expr2idx, SCIP_EXPR **occurringexprs, int *nexprs, SCIP_Bool *success)
#define DEFAULT_MINCUTEFFICACY
#define DEFAULT_COMPEIGENVALUES
static SCIP_RETCODE createDisaggrVars(SCIP *scip, SCIP_EXPR *expr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata)
static SCIP_RETCODE detectSocQuadraticComplex(SCIP *scip, SCIP_EXPR *expr, SCIP_Real conslhs, SCIP_Real consrhs, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_Bool *enforcebelow, SCIP_Bool *success)
static SCIP_RETCODE createNlhdlrExprData(SCIP *scip, SCIP_EXPR **vars, SCIP_Real *offsets, SCIP_Real *transcoefs, int *transcoefsidx, int *termbegins, int nvars, int nterms, SCIP_NLHDLREXPRDATA **nlhdlrexprdata)
static void buildQuadExprMatrix(SCIP *scip, SCIP_EXPR *quadexpr, SCIP_HASHMAP *expr2idx, int nexprs, SCIP_Real *quadmatrix, SCIP_Real *linvector)
static SCIP_RETCODE freeDisaggrVars(SCIP *scip, SCIP_NLHDLREXPRDATA *nlhdlrexprdata)
static SCIP_RETCODE detectSocQuadraticSimple(SCIP *scip, SCIP_EXPR *expr, SCIP_Real conslhs, SCIP_Real consrhs, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_Bool *enforcebelow, SCIP_Bool *success)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public functions of nonlinear handlers of nonlinear constraints
enum SCIP_SideType SCIP_SIDETYPE
#define SCIP_NLHDLR_METHOD_SEPAABOVE
#define SCIP_DECL_NLHDLREVALAUX(x)
struct SCIP_NlhdlrData SCIP_NLHDLRDATA
#define SCIP_NLHDLR_METHOD_SEPABOTH
#define SCIP_DECL_NLHDLRCOPYHDLR(x)
#define SCIP_DECL_NLHDLRINIT(x)
#define SCIP_DECL_NLHDLREXIT(x)
#define SCIP_DECL_NLHDLRFREEEXPRDATA(x)
#define SCIP_DECL_NLHDLRDETECT(x)
#define SCIP_DECL_NLHDLREXITSEPA(x)
#define SCIP_DECL_NLHDLRINITSEPA(x)
#define SCIP_DECL_NLHDLRFREEHDLRDATA(x)
struct SCIP_NlhdlrExprData SCIP_NLHDLREXPRDATA
#define SCIP_DECL_NLHDLRENFO(x)
#define SCIP_NLHDLR_METHOD_SEPABELOW
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS