83#define CONSHDLR_NAME "nonlinear"
84#define CONSHDLR_DESC "handler for nonlinear constraints specified by algebraic expressions"
85#define CONSHDLR_ENFOPRIORITY 50
86#define CONSHDLR_CHECKPRIORITY -4000010
87#define CONSHDLR_EAGERFREQ 100
89#define CONSHDLR_NEEDSCONS TRUE
92#define CONSHDLR_SEPAPRIORITY 10
93#define CONSHDLR_SEPAFREQ 1
94#define CONSHDLR_DELAYSEPA FALSE
96#define CONSHDLR_PROPFREQ 1
97#define CONSHDLR_DELAYPROP FALSE
98#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
100#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_ALWAYS
101#define CONSHDLR_MAXPREROUNDS -1
104#define TABLE_NAME_NONLINEAR "cons_nonlinear"
105#define TABLE_DESC_NONLINEAR "nonlinear constraint handler statistics"
106#define TABLE_POSITION_NONLINEAR 14600
107#define TABLE_EARLIEST_STAGE_NONLINEAR SCIP_STAGE_TRANSFORMED
110#define TABLE_NAME_NLHDLR "nlhdlr"
111#define TABLE_DESC_NLHDLR "nonlinear handler statistics"
112#define TABLE_POSITION_NLHDLR 14601
113#define TABLE_EARLIEST_STAGE_NLHDLR SCIP_STAGE_PRESOLVING
115#define DIALOG_NAME "nlhdlrs"
116#define DIALOG_DESC "display nonlinear handlers"
117#define DIALOG_ISSUBMENU FALSE
119#define VERTEXPOLY_MAXPERTURBATION 1e-3
120#define VERTEXPOLY_USEDUALSIMPLEX TRUE
121#define VERTEXPOLY_RANDNUMINITSEED 20181029
122#define VERTEXPOLY_ADJUSTFACETFACTOR 1e1
124#define BRANCH_RANDNUMINITSEED 20191229
126#define BILIN_MAXNAUXEXPRS 10
132#define infty2infty(infty1, infty2, val) ((val) >= (infty1) ? (infty2) : (val))
135#define POWEROFTWO(x) (0x1u << (x))
138#define ENFOLOG(x) if( SCIPgetSubscipDepth(scip) == 0 && SCIPgetVerbLevel(scip) >= SCIP_VERBLEVEL_NORMAL ) { x }
139FILE* enfologfile =
NULL;
161struct SCIP_Expr_OwnerData
169 int monotonicitysize;
173 unsigned int propboundstag;
179 unsigned int lastenforced;
180 unsigned int nactivityusesprop;
181 unsigned int nactivityusessepa;
182 unsigned int nauxvaruses;
189 unsigned int violscoretag;
220 unsigned int ispropagated:1;
221 unsigned int issimplified:1;
248struct SCIP_ConshdlrData
260 int consupgradessize;
273 unsigned int enforound;
281 unsigned int curpropboundstag;
294 int reformbinprodsfac;
304 char rownotremovable;
307 int branchauxmindepth;
318 char branchviolsplit;
321 char linearizeheursol;
343 int bilinmaxnauxexprs;
347 char branchpscostupdatestrategy;
352 int newsoleventfilterpos;
399 if( mydata->auxvar ==
NULL )
441 mydata->nactivityusesprop = 0;
442 mydata->nactivityusessepa = 0;
443 mydata->nauxvaruses = 0;
447 for( e = 0; e < mydata->nenfos; ++e )
453 nlhdlr = mydata->enfos[e]->nlhdlr;
456 if( mydata->enfos[e]->issepainit )
459 SCIP_CALL( SCIPnlhdlrExitsepa(
scip, nlhdlr, expr, mydata->enfos[e]->nlhdlrexprdata) );
460 mydata->enfos[e]->issepainit =
FALSE;
464 if( mydata->enfos[e]->nlhdlrexprdata !=
NULL )
466 SCIP_CALL( SCIPnlhdlrFreeexprdata(
scip, nlhdlr, expr, &mydata->enfos[e]->nlhdlrexprdata) );
467 assert(mydata->enfos[e]->nlhdlrexprdata ==
NULL);
493 assert((*ownerdata)->nlockspos == 0);
494 assert((*ownerdata)->nlocksneg == 0);
499 assert((*ownerdata)->nenfos <= 0);
508 assert((*ownerdata)->nconss == 0);
510 assert((*ownerdata)->filterpos == -1);
542 if( ownerdata->nenfos > 0 )
547 for(
i = 0;
i < ownerdata->nenfos; ++
i )
564 if( ownerdata->auxvar !=
NULL )
609 (*ownerdata)->nenfos = -1;
617 (*ownerdata)->filterpos = -1;
640 (*ownerdata)->filterpos = -2;
643 *ownerfree = exprownerFree;
644 *ownerprint = exprownerPrint;
645 *ownerevalactivity = exprownerEvalactivity;
750 if( consdata->varexprs !=
NULL )
754 assert(consdata->nvarexprs == 0);
757 if( consdata->issimplified )
773 assert(varexprssize >= consdata->nvarexprs);
776 if( varexprssize > consdata->nvarexprs )
788 for(
i = 0;
i < consdata->nvarexprs; ++
i )
811 if( consdata->varexprs ==
NULL )
815 assert(consdata->nvarexprs >= 0);
816 assert(!consdata->catchedevents);
819 for(
i = 0;
i < consdata->nvarexprs; ++
i )
828 consdata->varexprs =
NULL;
829 consdata->nvarexprs = 0;
853 if( conshdlrdata->globalbounds )
876 switch( conshdlrdata->varboundrelax )
891 lb =
MAX(bnd, lb - conshdlrdata->varboundrelaxamount);
898 ub =
MIN(bnd, ub + conshdlrdata->varboundrelaxamount);
911 lb -= conshdlrdata->varboundrelaxamount;
914 ub += conshdlrdata->varboundrelaxamount;
946 SCIPerrorMessage(
"Unsupported value '%c' for varboundrelax option.\n", conshdlrdata->varboundrelax);
975 return consdata1->consindex - consdata2->consindex;
1002 assert(ownerdata->nconss > 0);
1006 boundtightened =
TRUE;
1015 boundtightened =
TRUE;
1026 boundtightened =
TRUE;
1033 if( boundtightened )
1038 for(
c = 0;
c < ownerdata->nconss; ++
c )
1048 consdata->ispropagated =
FALSE;
1054 consdata->issimplified =
FALSE;
1070 ++conshdlrdata->curboundstag;
1071 assert(conshdlrdata->curboundstag > 0);
1075 conshdlrdata->lastboundrelax = conshdlrdata->curboundstag;
1080 SCIP_CALL( SCIPcallExprInteval(
scip, expr, &activity, conshdlrdata->intevalvar, conshdlrdata) );
1118 for(
i = 0;
i < ownerdata->nconss; ++
i )
1119 assert(ownerdata->conss[
i] != cons);
1125 ownerdata->conss[ownerdata->nconss++] = cons;
1129 if( ownerdata->nconss <= 1 )
1130 ownerdata->consssorted =
TRUE;
1131 else if( ownerdata->consssorted )
1132 ownerdata->consssorted = compIndexConsNonlinear(ownerdata->conss[ownerdata->nconss-2], ownerdata->conss[ownerdata->nconss-1]) < 0;
1135 if( ownerdata->filterpos < 0 )
1139 assert(ownerdata->nconss == 1);
1144 assert(ownerdata->filterpos >= 0);
1169 assert(consdata->nvarexprs >= 0);
1172 if( consdata->catchedevents )
1178 assert(conshdlrdata->intevalvar == intEvalVarBoundTightening);
1183 for(
i = 0;
i < consdata->nvarexprs; ++
i )
1185 expr = consdata->varexprs[
i];
1198 SCIP_CALL( SCIPcallExprInteval(
scip, expr, &activity, intEvalVarBoundTightening, conshdlrdata) );
1207 consdata->catchedevents =
TRUE;
1235 assert(ownerdata->nconss > 0);
1237 if( ownerdata->conss[ownerdata->nconss-1] == cons )
1239 pos = ownerdata->nconss-1;
1243 if( !ownerdata->consssorted )
1245 SCIPsortPtr((
void**)ownerdata->conss, compIndexConsNonlinear, ownerdata->nconss);
1246 ownerdata->consssorted =
TRUE;
1249 if( !
SCIPsortedvecFindPtr((
void**)ownerdata->conss, compIndexConsNonlinear, cons, ownerdata->nconss, &pos) )
1254 assert(pos >= 0 && pos < ownerdata->nconss);
1256 assert(ownerdata->conss[pos] == cons);
1259 if( pos < ownerdata->nconss-1 )
1261 ownerdata->conss[pos] = ownerdata->conss[ownerdata->nconss-1];
1262 ownerdata->consssorted =
FALSE;
1264 --ownerdata->nconss;
1267 if( ownerdata->nconss == 0 )
1271 assert(ownerdata->filterpos >= 0);
1276 ownerdata->filterpos = -1;
1300 if( !consdata->catchedevents )
1304 assert(consdata->nvarexprs >= 0);
1308 for(
i = consdata->nvarexprs - 1;
i >= 0; --
i )
1315 consdata->catchedevents =
FALSE;
1367 SCIPerrorMessage(
"Locally valid nonlinear constraints are not supported, yet.\n");
1374 SCIPerrorMessage(
"Non-initial nonlinear constraints are not supported, yet.\n");
1378 if( isnan(lhs) || isnan(rhs) )
1381 isnan(lhs) ?
"left" :
"right", name);
1395 consdata->expr = expr;
1398 consdata->lhs = lhs;
1399 consdata->rhs = rhs;
1400 consdata->consindex = conshdlrdata->lastconsindex++;
1404 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
1405 local, modifiable, dynamic, removable,
FALSE) );
1442 if( violunder !=
NULL )
1444 if( violover !=
NULL )
1453 if( violunder !=
NULL )
1455 if( violover !=
NULL )
1462 if( violunder !=
NULL )
1464 if( violover !=
NULL )
1469 if( violunder !=
NULL )
1471 if( violover !=
NULL )
1509 if( violunder !=
NULL )
1511 if( violover !=
NULL )
1518 if( ownerdata->nlocksneg > 0 && auxvarvalue > auxvalue )
1520 if( violunder !=
NULL )
1522 if( violover !=
NULL )
1524 return auxvarvalue - auxvalue;
1527 if( ownerdata->nlockspos > 0 && auxvalue > auxvarvalue )
1529 if( violunder !=
NULL )
1531 if( violover !=
NULL )
1533 return auxvalue - auxvarvalue;
1536 if( violunder !=
NULL )
1538 if( violover !=
NULL )
1596 return MAX3(0.0, consdata->lhsviol, consdata->rhsviol);
1628 if( conshdlrdata->violscale ==
'n' )
1637 if( conshdlrdata->violscale ==
'a' )
1642 if( consdata->lhsviol > 0.0 &&
REALABS(consdata->lhs) > scale )
1645 scale =
REALABS(consdata->lhs);
1647 else if( consdata->rhsviol > 0.0 &&
REALABS(consdata->rhs) > scale )
1650 scale =
REALABS(consdata->rhs);
1658 assert(conshdlrdata->violscale ==
'g');
1659 if( soltag == 0L || consdata->gradnormsoltag != soltag )
1665 consdata->gradnorm = 0.0;
1674 for(
i = 0;
i < consdata->nvarexprs; ++
i )
1683 consdata->gradnorm = 0.0;
1687 consdata->gradnorm += deriv*deriv;
1690 consdata->gradnorm = sqrt(consdata->gradnorm);
1691 consdata->gradnormsoltag = soltag;
1694 *viol /=
MAX(1.0, consdata->gradnorm);
1729 consdata->linvarincr =
NULL;
1730 consdata->linvardecr =
NULL;
1731 consdata->linvarincrcoef = 0.0;
1732 consdata->linvardecrcoef = 0.0;
1768 if( (consdata->linvardecr ==
NULL) ||
1771 consdata->linvardecr =
var;
1772 consdata->linvardecrcoef = coef;
1781 if( (consdata->linvarincr ==
NULL) ||
1784 consdata->linvarincr =
var;
1785 consdata->linvarincrcoef = coef;
1791 assert(consdata->linvarincr ==
NULL || consdata->linvarincrcoef != 0.0);
1792 assert(consdata->linvardecr ==
NULL || consdata->linvardecrcoef != 0.0);
1794 if( consdata->linvarincr !=
NULL )
1798 if( consdata->linvardecr !=
NULL )
1846 SCIPdebugMsg(
scip,
"attempt to make solution from <%s> feasible by shifting linear variable\n",
1849 for(
c = 0;
c < nconss; ++
c )
1860 viol = consdata->lhsviol;
1862 viol = -consdata->rhsviol;
1866 if( consdata->linvarincr !=
NULL &&
1867 ((viol > 0.0 && consdata->linvarincrcoef > 0.0) || (viol < 0.0 && consdata->linvarincrcoef < 0.0)) )
1872 delta = viol / consdata->linvarincrcoef;
1879 delta =
MIN(
MAX(0.0, gap), delta);
1888 SCIPdebugMsg(
scip,
"increase <%s> by %g to %g to remedy lhs-violation %g of cons <%s>\n",
1892 viol -= consdata->linvarincrcoef * delta;
1899 if( consdata->linvardecr !=
NULL &&
1900 ((viol > 0.0 && consdata->linvardecrcoef < 0.0) || (viol < 0.0 && consdata->linvardecrcoef > 0.0)) )
1905 delta = viol / consdata->linvardecrcoef;
1912 delta =
MAX(
MIN(0.0, gap), delta);
1921 SCIPdebugMsg(
scip,
"increase <%s> by %g to %g to remedy rhs-violation %g of cons <%s>\n",
1925 viol -= consdata->linvardecrcoef * delta;
1997 for(
c = 0;
c < nconss; ++
c )
2013 for(
i = 0;
i < consdata->nvarexprs; ++
i )
2035 if( ownerdata->auxvar !=
NULL )
2041 for( e = 0; e < ownerdata->nenfos; ++e )
2045 ownerdata->enfos[e]->nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata,
sol, solisbest,
2139 if( ntightenings !=
NULL )
2153 if( ntightenings !=
NULL )
2192 if( infeasible !=
NULL )
2193 *infeasible =
FALSE;
2194 if( ntightenings !=
NULL )
2203 SCIPdebugMsg(
scip,
"stored activity of root expr is empty and valid (activitytag >= lastboundrelax (%" SCIP_LONGINT_FORMAT ")), skip forwardPropExpr -> cutoff\n", conshdlrdata->lastboundrelax);
2205 if( infeasible !=
NULL )
2232 if( ownerdata->nenfos >= 0 && ownerdata->nactivityusesprop == 0 && ownerdata->nactivityusessepa == 0 && !conshdlrdata->indetect)
2235 SCIPdebugMsg(
scip,
"root expr activity is not used but enfo initialized, skip inteval\n");
2283 SCIPexprGetActivityTag(expr) >= conshdlrdata->lastvaractivitymethodchange && !conshdlrdata->globalbounds )
2288 SCIP_CALL( SCIPcallExprInteval(
scip, expr, &exprhdlrinterval, conshdlrdata->intevalvar, conshdlrdata) );
2318 if( infeasible !=
NULL )
2320 SCIPdebugMsg(
scip,
"expr %p already has empty activity -> cutoff\n", (
void*)expr);
2330 if( ownerdata->nenfos >= 0 && ownerdata->nactivityusesprop == 0 && ownerdata->nactivityusessepa == 0 && !conshdlrdata->indetect )
2333 SCIPdebugMsg(
scip,
"expr %p activity is not used but enfo initialized, skip inteval\n", (
void*)expr);
2345 if( ownerdata->nenfos > 0 )
2358 nlhdlr = ownerdata->enfos[e]->nlhdlr;
2366 nlhdlrinterval = activity;
2367 SCIP_CALL( SCIPnlhdlrInteval(
scip, nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata,
2368 &nlhdlrinterval, conshdlrdata->intevalvar, conshdlrdata) );
2384 SCIP_CALL( SCIPcallExprInteval(
scip, expr, &exprhdlrinterval, conshdlrdata->intevalvar, conshdlrdata) );
2429 if( infeasible !=
NULL )
2432 else if( tightenauxvars && ownerdata->auxvar !=
NULL )
2437 if( tighteninfeasible )
2439 if( infeasible !=
NULL )
2485 if( subsetsufficient )
2544 while( !
SCIPqueueIsEmpty(conshdlrdata->reversepropqueue) && !(*infeasible) )
2555 assert(ownerdata->inpropqueue);
2557 ownerdata->inpropqueue =
FALSE;
2562 assert(ownerdata->propboundstag == conshdlrdata->curpropboundstag);
2570#ifdef SCIP_DISABLED_CODE
2578 propbounds = ownerdata->propbounds;
2581 if( ownerdata->nenfos > 0 )
2584 for( e = 0; e < ownerdata->nenfos && !*infeasible; ++e )
2593 nlhdlr = ownerdata->enfos[e]->nlhdlr;
2604 SCIP_CALL( SCIPnlhdlrReverseprop(
scip, conshdlr, nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata, propbounds, infeasible, &nreds) );
2606 *ntightenings += nreds;
2624 assert(ownerdata->nenfos < 0);
2631 SCIP_CALL( SCIPcallExprReverseprop(
scip, expr, propbounds, childrenbounds, infeasible) );
2653 ownerdata->inpropqueue =
FALSE;
2721 assert(conshdlrdata->intevalvar == intEvalVarBoundTightening);
2723 assert(!conshdlrdata->globalbounds);
2729 conshdlrdata->forceboundtightening = force;
2732 ++conshdlrdata->curpropboundstag;
2735 if( conshdlrdata->propauxvars )
2750 for(
i = 0;
i < nconss; ++
i )
2762 if( consdata->ispropagated )
2783 if( !conshdlrdata->propauxvars || ownerdata->auxvar ==
NULL )
2789 if( ownerdata->auxvar ==
NULL )
2798 conssides = intEvalVarBoundTightening(
scip, ownerdata->auxvar, (
void*)conshdlrdata);
2817 if( ownerdata->auxvar ==
NULL )
2820 if( ownerdata->nactivityusesprop == 0 && ownerdata->nactivityusessepa == 0 )
2823 conssides = intEvalVarBoundTightening(
scip, ownerdata->auxvar, (
void*)conshdlrdata);
2835 assert(ntightenings >= 0);
2836 if( ntightenings > 0 )
2838 *nchgbds += ntightenings;
2843 consdata->ispropagated =
TRUE;
2848 assert(ntightenings >= 0);
2858 if( ntightenings > 0 )
2860 *nchgbds += ntightenings;
2864 while( ntightenings > 0 && ++roundnr < conshdlrdata->maxproprounds );
2866 if( conshdlrdata->propauxvars )
2871 conshdlrdata->forceboundtightening =
FALSE;
2874 ++conshdlrdata->curpropboundstag;
2924 for(
c = 0;
c < nconss && !
cutoff; ++
c )
2941 for( e = 0; e < ownerdata->nenfos; ++e )
2946 nlhdlr = ownerdata->enfos[e]->nlhdlr;
2951 SCIPdebugMsg(
scip,
"propExprDomains calling reverseprop for expression %p [%g,%g]\n", (
void*)expr,
2954 SCIP_CALL( SCIPnlhdlrReverseprop(
scip, conshdlr, nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata,
2965 assert(ntightenings >= 0);
2966 if( ntightenings > 0 )
2968 *nchgbds += ntightenings;
2977 assert(ntightenings >= 0);
2984 else if( ntightenings > 0 )
2986 *nchgbds += ntightenings;
3014 if( nlockspos == 0 && nlocksneg == 0 )
3023 ituserdata.
intvals[0] = nlockspos;
3024 ituserdata.
intvals[1] = nlocksneg;
3031 nlockspos = ituserdata.
intvals[0];
3032 nlocksneg = ituserdata.
intvals[1];
3047 ownerdata->nlockspos += nlockspos;
3048 ownerdata->nlocksneg += nlocksneg;
3051 if( ownerdata->nlockspos == nlockspos && ownerdata->nlocksneg == nlocksneg &&
SCIPexprGetNChildren(expr) > 0
3057 assert(ownerdata->monotonicitysize == 0);
3065 SCIP_CALL( SCIPcallExprMonotonicity(
scip, expr,
i, &ownerdata->monotonicity[
i]) );
3074 if( ownerdata->nlockspos == 0 && ownerdata->nlocksneg == 0 && ownerdata->monotonicity !=
NULL )
3076 assert(ownerdata->monotonicitysize > 0);
3081 ownerdata->monotonicitysize = 0;
3097 switch( monotonicity )
3100 ituserdata.
intvals[0] = nlockspos;
3101 ituserdata.
intvals[1] = nlocksneg;
3104 ituserdata.
intvals[0] = nlocksneg;
3105 ituserdata.
intvals[1] = nlockspos;
3108 ituserdata.
intvals[0] = nlockspos + nlocksneg;
3109 ituserdata.
intvals[1] = nlockspos + nlocksneg;
3164 if( nlockspos == 0 && nlocksneg == 0 )
3175 consdata->nlockspos += nlockspos;
3176 consdata->nlocksneg += nlocksneg;
3178 assert(consdata->nlockspos >= 0);
3179 assert(consdata->nlocksneg >= 0);
3215 if( consdata->nlrow !=
NULL )
3324 assert(conshdlrdata->auxvarid >= 0);
3325 assert(!conshdlrdata->indetect);
3328 assert(ownerdata->nenfos < 0);
3338 if( ownerdata->nauxvaruses == 0 )
3342 if( ownerdata->nlockspos == 0 )
3344 if( ownerdata->nlocksneg == 0 )
3347 if( ownerdata->nactivityusesprop == 0 && ownerdata->nactivityusessepa == 0 )
3356 ownerdata->nenfos = 0;
3359 conshdlrdata->indetect =
TRUE;
3361 SCIPdebugMsg(
scip,
"detecting nlhdlrs for %s expression %p (%s); requiring%s%s%s\n",
3367 for(
h = 0;
h < conshdlrdata->nnlhdlrs; ++
h )
3371 nlhdlr = conshdlrdata->nlhdlrs[
h];
3379 nlhdlrexprdata =
NULL;
3380 enforcemethodsnew = enforcemethods;
3382 conshdlrdata->registerusesactivitysepabelow =
FALSE;
3383 conshdlrdata->registerusesactivitysepaabove =
FALSE;
3385 SCIP_CALL( SCIPnlhdlrDetect(
scip, ownerdata->conshdlr, nlhdlr, expr, cons, &enforcemethodsnew, &nlhdlrparticipating, &nlhdlrexprdata) );
3388 nlhdlrparticipating &= enforcemethodsallowed;
3391 assert((enforcemethodsnew & enforcemethods) == enforcemethods);
3396 nlhdlrenforcemethods = (enforcemethodsnew ^ enforcemethods) & enforcemethodsallowed;
3399 assert((nlhdlrparticipating & nlhdlrenforcemethods) == nlhdlrenforcemethods);
3407 if( nlhdlrexprdata !=
NULL )
3409 SCIP_CALL( SCIPnlhdlrFreeexprdata(
scip, nlhdlr, expr, &nlhdlrexprdata) );
3419 SCIPdebugMsg(
scip,
"nlhdlr <%s> detect successful; sepabelow: %s, sepaabove: %s, activity: %s\n",
3428 ownerdata->enfos[ownerdata->nenfos]->nlhdlr = nlhdlr;
3429 ownerdata->enfos[ownerdata->nenfos]->nlhdlrexprdata = nlhdlrexprdata;
3430 ownerdata->enfos[ownerdata->nenfos]->nlhdlrparticipation = nlhdlrparticipating;
3431 ownerdata->enfos[ownerdata->nenfos]->issepainit =
FALSE;
3432 ownerdata->enfos[ownerdata->nenfos]->sepabelowusesactivity = conshdlrdata->registerusesactivitysepabelow;
3433 ownerdata->enfos[ownerdata->nenfos]->sepaaboveusesactivity = conshdlrdata->registerusesactivitysepaabove;
3434 ownerdata->nenfos++;
3437 enforcemethods = enforcemethodsnew;
3440 conshdlrdata->indetect =
FALSE;
3447 SCIPerrorMessage(
"no nonlinear handler provided some of the required enforcement methods\n");
3451 assert(ownerdata->nenfos > 0);
3454 if( ownerdata->nenfos > 1 )
3455 SCIPsortDownPtr((
void**)ownerdata->enfos, enfodataCmp, ownerdata->nenfos);
3495 conshdlrdata->globalbounds =
TRUE;
3496 conshdlrdata->lastvaractivitymethodchange = conshdlrdata->curboundstag;
3499 for(
i = 0;
i < nconss; ++
i )
3521 if( ownerdata->nenfos > 0 )
3524 assert(ownerdata->nenfos < 0);
3532 conshdlrdata->indetect =
TRUE;
3537 conshdlrdata->indetect =
FALSE;
3567 if( ownerdata->nenfos >= 0 )
3577 if( ownerdata->nauxvaruses > 0 || ownerdata->nactivityusesprop > 0 || ownerdata->nactivityusessepa > 0 )
3581 assert(ownerdata->nenfos >= 0);
3590 ownerdata->nenfos = 0;
3596 consdata->ispropagated =
FALSE;
3605 conshdlrdata->globalbounds =
FALSE;
3606 conshdlrdata->lastvaractivitymethodchange = conshdlrdata->curboundstag;
3642 for(
c = 0;
c < nconss; ++
c )
3693 if( consdata->nlrow ==
NULL )
3743 for(
c = 0;
c < nconss; ++
c )
3757 SCIPdebugMsg(
scip,
"exitsepa and free nonlinear handler data for expression %p\n", (
void*)expr);
3765 if( rootactivityvalid )
3776 if( consdata->nlrow !=
NULL )
3790 consdata->linvardecr =
NULL;
3791 consdata->linvarincr =
NULL;
3929 minact +=
MIN(coefs[
i], 0.0);
3930 maxact +=
MAX(coefs[
i], 0.0);
3937 assert(minact <= maxact);
3945#ifdef WITH_DEBUG_SOLUTION
3946 if( SCIPdebugIsMainscip(
scip) )
3957 debugsolval += coefs[
i] * val;
3976 if( naddconss !=
NULL )
3987 if( naddconss !=
NULL )
4001 if( naddconss !=
NULL )
4014 if( naddconss !=
NULL )
4047 int* childidxs =
NULL;
4072 if( nchildren < minterms )
4106 assert(xidx < ntotalvars);
4108 assert(yidx < ntotalvars);
4139 for( j = 0; j <
nterms; ++j )
4141 int childidx = childidxs[j];
4142 assert(childidx >= 0 && childidx < nchildren);
4144 if( !isused[childidx] && (xs[j] == facvar || ys[j] == facvar) )
4150 coef = sumcoefs[childidx];
4154 tmpvars[ntmpvars] = (xs[j] == facvar) ? ys[j] : xs[j];
4155 tmpcoefs[ntmpvars] = coef;
4160 assert(xidx < ntotalvars);
4162 assert(yidx < ntotalvars);
4165 assert(count[xidx] >= 0);
4166 assert(count[yidx] >= 0);
4169 isused[childidx] =
TRUE;
4172 assert(ntmpvars >= minterms);
4178 exprcoefs[nexprs] = 1.0;
4185 int nexprsold = nexprs;
4188 for(
i = 0;
i < nchildren; ++
i )
4193 exprcoefs[nexprs] = sumcoefs[
i];
4202 for(
i = 0;
i < nexprsold; ++
i )
4258 strcpy(name,
"binreform");
4259 for(
i = 0;
i < nchildren; ++
i )
4264 (void) strcat(name,
"_");
4277#ifdef WITH_DEBUG_SOLUTION
4278 if( SCIPdebugIsMainscip(
scip) )
4285 for(
i = 0;
i < nchildren; ++
i )
4297 if( nchildren == 2 && !empathy4and )
4327 if( naddconss !=
NULL )
4339 if( naddconss !=
NULL )
4397 SCIPdebugMsg(
scip,
" product expression %p has been considered for the first time\n", (
void*)prodexpr);
4399 if( nchildren == 2 )
4425 if( nchgcoefs !=
NULL )
4428 found_clique =
TRUE;
4437 if( nchgcoefs !=
NULL )
4440 found_clique =
TRUE;
4457 if( nchgcoefs !=
NULL )
4460 found_clique =
TRUE;
4478 if( nchgcoefs !=
NULL )
4481 found_clique =
TRUE;
4548 if( conshdlrdata->reformbinprodsfac > 1 )
4554 if( newexpr ==
NULL )
4559 if( newexpr !=
NULL )
4561 assert(naddconss ==
NULL || *naddconss > 0 || nchgcoefs ==
NULL || *nchgcoefs > 0);
4570 consdata->issimplified =
FALSE;
4646 for(
c = 0;
c < nconss; ++
c )
4657 if( conshdlrdata->reformbinprodsfac > 1 )
4663 if( newexpr !=
NULL )
4666 consdata->expr = newexpr;
4669 consdata->issimplified =
FALSE;
4718 if( nchildren == 1 && constant == 0.0 && coefs[0] == -1.0 )
4721 expr = consdata->expr;
4729 consdata->lhs = -consdata->lhs;
4730 consdata->rhs = -consdata->rhs;
4738 for(
i = 0;
i < nchildren; ++
i )
4739 counter += coefs[
i] > 0 ? 1 : -1;
4749 for(
i = 0;
i < nchildren; ++
i )
4750 newcoefs[
i] = -coefs[
i];
4757 consdata->expr = expr;
4759 consdata->lhs = -consdata->lhs;
4760 consdata->rhs = -consdata->rhs;
4795 for(
c = 0;
c < nconss; ++
c )
4870 ++(conshdlrdata->ncanonicalizecalls);
4874 *infeasible =
FALSE;
4877 havechange = conshdlrdata->ncanonicalizecalls == 1;
4887 for(
i = 0;
i < nconss; ++
i )
4895 nlockspos[
i] = consdata->nlockspos;
4896 nlocksneg[
i] = consdata->nlocksneg;
4900 assert(consdata->nlockspos == 0);
4901 assert(consdata->nlocksneg == 0);
4906 for(
i = 0;
i < nconss; ++
i )
4931 int tmpnaddconss = 0;
4932 int tmpnchgcoefs = 0;
4940 if( naddconss !=
NULL )
4941 *naddconss += tmpnaddconss;
4942 if( nchgcoefs !=
NULL )
4943 *nchgcoefs += tmpnchgcoefs;
4946 if( tmpnaddconss + tmpnchgcoefs > 0 )
4950 for(
i = 0;
i < nconss; ++
i )
4956 if( !consdata->issimplified && consdata->expr !=
NULL )
4963 consdata->issimplified =
TRUE;
4971 if( simplified != consdata->expr )
4979 consdata->expr = simplified;
5014 if( ndelconss !=
NULL )
5023 if( havechange && !*infeasible )
5030 for(
i = 0;
i < nconss; ++
i )
5039 for(
i = 0;
i < nconss; ++
i )
5052 SCIPsortPtr((
void**)consssorted, compIndexConsNonlinear, nconss);
5054 for(
i = nconss-1;
i >= 0; --
i )
5056 assert(
i == 0 || compIndexConsNonlinear((
void*)consssorted[
i-1], (
void*)consssorted[
i]) < 0);
5063 for(
i = 0;
i < nconss; ++
i )
5082 for(
i = 0;
i < nconss; ++
i )
5096 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
5139 for(
c = 0;
c < nconss; ++
c )
5161 assert(idx >= 0 && idx < nconss);
5165 assert(imgconsdata->expr == consdata->expr);
5167 SCIPdebugMsg(
scip,
"merge constraint %g <= %s <= %g with %g <= %s <= %g\n", consdata->lhs,
5174 nlockspos[idx] = imgconsdata->nlockspos;
5175 nlocksneg[idx] = imgconsdata->nlocksneg;
5177 updatelocks[idx] =
TRUE;
5181 imgconsdata->lhs =
MAX(imgconsdata->lhs, consdata->lhs);
5182 imgconsdata->rhs =
MIN(imgconsdata->rhs, consdata->rhs);
5193 for(
c = 0;
c < nconss; ++
c )
5195 if( updatelocks[
c] )
5229 if( conshdlrdata->globalbounds )
5315 ++conshdlrdata->curboundstag;
5316 assert(conshdlrdata->curboundstag > 0);
5317 conshdlrdata->lastvaractivitymethodchange = conshdlrdata->curboundstag;
5318 conshdlrdata->lastboundrelax = conshdlrdata->curboundstag;
5319 conshdlrdata->intevalvar = intEvalVarRedundancyCheck;
5324 for(
i = 0;
i < nconss; ++
i )
5425 SCIPdebugMsg(
scip,
" -> redundant: activity [%g,%g] within sides [%g,%g]\n", activity.
inf, activity.
sup, consdata->lhs, consdata->rhs);
5433 SCIPdebugMsg(
scip,
" -> not redundant: activity [%g,%g] not within sides [%g,%g]\n", activity.
inf, activity.
sup, consdata->lhs, consdata->rhs);
5438 ++conshdlrdata->curboundstag;
5439 conshdlrdata->lastvaractivitymethodchange = conshdlrdata->curboundstag;
5440 conshdlrdata->lastboundrelax = conshdlrdata->curboundstag;
5441 conshdlrdata->intevalvar = intEvalVarBoundTightening;
5480 if( conshdlrdata->nconsupgrades == 0 )
5494 for(
i = 0;
i < conshdlrdata->nconsupgrades; ++
i )
5496 if( !conshdlrdata->consupgrades[
i]->active )
5499 assert(conshdlrdata->consupgrades[
i]->consupgd !=
NULL);
5501 SCIP_CALL( conshdlrdata->consupgrades[
i]->consupgd(
scip, cons, consdata->nvarexprs, &nupgdconss_, upgdconss, upgdconsssize) );
5503 while( nupgdconss_ < 0 )
5506 assert(-nupgdconss_ > upgdconsssize);
5507 upgdconsssize = -nupgdconss_;
5510 SCIP_CALL( conshdlrdata->consupgrades[
i]->consupgd(
scip, cons, consdata->nvarexprs, &nupgdconss_, upgdconss, upgdconsssize) );
5512 assert(nupgdconss_ != 0);
5515 if( nupgdconss_ > 0 )
5523 for( j = 0; j < nupgdconss_; ++j )
5534 *naddconss += nupgdconss_ - 1;
5626 int nsinglelocked = 0;
5637 *infeasible =
FALSE;
5661 for(
i = 0;
i < consdata->nvarexprs; ++
i )
5668 singlelocked[nsinglelocked++] = consdata->varexprs[
i];
5673 if( nsinglelocked > 0 )
5687 for(
i = 0;
i < nchildren; ++
i )
5692 child = children[
i];
5718 keepevenpower = (haslhs && productactivity.
inf >= 0.0) || (hasrhs && productactivity.
sup <= 0.0);
5730 if( exponent > 1.0 && fmod(exponent, 2.0) == 0.0 )
5751 valid = exponent > 1.0 && fmod(exponent, 2.0) == 0.0;
5775 for(
i = 0;
i < nsinglelocked; ++
i )
5789 SCIPdebugMsg(
scip,
"found single locked variable %s in [%g,%g] that can be fixed to one of its bounds\n",
5854 *infeasible =
FALSE;
5864 for(
c = 0;
c < nconss; ++
c )
5894 if( nchildren <= 1 )
5900 for(
i = 0;
i < nchildren; ++
i )
5905 candcoef = coefs[
i];
5924 for(
i = 0;
i < nchildren; ++
i )
5926 if( children[
i] == cand )
5948 SCIPdebugMsg(
scip,
"make variable <%s> implicit integer due to constraint <%s>\n",
5989 assert(ownerdata->nauxvaruses > 0);
5992 if( ownerdata->auxvar !=
NULL )
6007 assert(conshdlrdata->auxvarid >= 0);
6017 ++conshdlrdata->auxvarid;
6072#ifdef WITH_DEBUG_SOLUTION
6073 if( SCIPdebugIsMainscip(
scip) )
6115 int nreductions = 0;
6128 ++conshdlrdata->curpropboundstag;
6134 *infeasible =
FALSE;
6135 for(
c = 0;
c < nconss; ++
c )
6144#ifdef WITH_DEBUG_SOLUTION
6145 if( SCIPdebugIsMainscip(
scip) )
6151 if( debugsol !=
NULL )
6173 if( auxvar !=
NULL )
6175 SCIPdebugMsg(
scip,
"tighten auxvar <%s> bounds using constraint sides [%g,%g]\n",
6208 for(
c = 0;
c < nconss && !*infeasible; ++
c )
6224 if( ownerdata->nauxvaruses == 0 )
6227 for( e = 0; e < ownerdata->nenfos; ++e )
6237 if( ownerdata->enfos[e]->issepainit )
6244 nlhdlr = ownerdata->enfos[e]->nlhdlr;
6252 overestimate = ownerdata->nlocksneg > 0;
6253 underestimate = ownerdata->nlockspos > 0;
6254 assert(underestimate || overestimate);
6256 SCIPdebugMsg(
scip,
"initsepa under=%u over=%u for expression %p\n", underestimate, overestimate, (
void*)expr);
6259 SCIP_CALL( SCIPnlhdlrInitsepa(
scip, conshdlr, conss[
c], nlhdlr, expr,
6260 ownerdata->enfos[e]->nlhdlrexprdata, overestimate, underestimate, infeasible) );
6261 ownerdata->enfos[e]->issepainit =
TRUE;
6312 switch( conshdlrdata->branchviolsplit )
6321 return MAX(0.05, weight);
6332 return 10.0*log10(width);
6334 return 0.1/(-log10(width));
6339 SCIPerrorMessage(
"invalid value for parameter constraints/expr/branching/violsplit");
6390 for(
i = 0;
i < nexprs; ++
i )
6402 for(
i = 0;
i < nexprs; ++
i )
6407 if( nunbounded > 0 )
6412 SCIPdebugMsg(
scip,
"add score %g (%g%% of %g) to <%s>[%g,%g]\n", violscore / nunbounded,
6413 100.0/nunbounded, violscore,
6424 SCIPdebugMsg(
scip,
"add score %g (%g%% of %g) to <%s>[%g,%g]\n", violscore * weight / weightsum,
6425 100*weight / weightsum, violscore,
6467 SCIPsortPtr((
void**)auxvars, SCIPvarComp, nauxvars);
6478 if( auxvar ==
NULL )
6484 assert(auxvars[pos] == auxvar);
6487 exprs[nexprs++] = expr;
6489 if( nexprs == nauxvars )
6524 for(
c = 0;
c < nconss; ++
c )
6537 for(
i = 0;
i < consdata->nvarexprs; ++
i )
6579 for(
c = 0;
c < nconss; ++
c )
6598 for(
i = 0;
i < consdata->nvarexprs; ++
i )
6608 if( violscore == 0.0 )
6646 if( violscore == 0.0 )
6724 for( attempt = 0; attempt < 2; ++attempt )
6730 for(
c = 0;
c < nconss; ++
c )
6746 if( attempt == 0 && consviol < conshdlrdata->branchhighviolfactor * maxrelconsviol )
6748 else if( attempt == 1 && consviol >= conshdlrdata->branchhighviolfactor * maxrelconsviol )
6760 for(
i = 0;
i < consdata->nvarexprs; ++
i )
6783 cands[*ncands].
expr = consdata->varexprs[
i];
6784 cands[*ncands].
var =
var;
6822 cands[*ncands].
expr = expr;
6823 cands[*ncands].
var =
var;
6910 for(
r = 0;
r < nrows; ++
r )
6913 const char* estimategapstr;
6927 if( estimategapstr ==
NULL )
6929 estimategap = atof(estimategapstr + 13);
6930 assert(estimategap >= 0.0);
6990 for(
c = 0;
c < ncands; ++
c )
6992 if( conshdlrdata->branchviolweight > 0.0 )
7003 assert(cands[
c].expr !=
NULL || cands[
c].fractionality > 0.0);
7005 if( considerfracnl && cands[
c].fractionality == 0.0 )
7024 if( conshdlrdata->branchdomainweight > 0.0 && cands[
c].
expr !=
NULL )
7039 if( domainwidth >= 1.0 )
7049 if( conshdlrdata->branchdualweight > 0.0 && cands[
c].
expr !=
NULL )
7060 cands[
c].
dual = 0.0;
7069 if( cands[
c].expr !=
NULL )
7085 strategy = conshdlrdata->branchpscostupdatestrategy;
7200 if( conshdlrdata->branchvartypeweight > 0.0 )
7229 for(
c = 0;
c < ncands; ++
c )
7235 cands[
c].weighted = 0.0;
7241 weightsum += conshdlrdata->branchviolweight;
7249 weightsum += conshdlrdata->branchfracweight;
7254 if( maxscore.
domain > 0.0 )
7257 weightsum += conshdlrdata->branchdomainweight;
7262 if( maxscore.
dual > 0.0 )
7265 weightsum += conshdlrdata->branchdualweight;
7270 if( maxscore.
pscost > 0.0 )
7276 weightsum += conshdlrdata->branchpscostweight;
7290 weightsum += conshdlrdata->branchvartypeweight;
7312 if( cands[ind1].weighted != cands[ind2].weighted )
7315 if( cands[ind1].
var != cands[ind2].
var )
7318 return cands[ind1].
expr !=
NULL ? 1 : -1;
7360 SCIPsortDown(perm, branchcandCompare, (
void*)cands, ncands);
7364 SCIPvarGetName(cands[perm[ncands - 1]].
var), cands[perm[ncands - 1]].weighted); )
7369 threshold = conshdlrdata->branchhighscorefactor * cands[perm[0]].
weighted;
7370 while( left < right )
7372 int mid = (left + right) / 2;
7373 if( cands[perm[mid]].weighted >= threshold )
7382 if( cands[perm[left]].weighted >= threshold )
7384 assert(left + 1 == ncands || cands[perm[left + 1]].weighted < threshold);
7389 assert(cands[perm[left]].weighted < threshold);
7395 ENFOLOG(
SCIPinfoMessage(
scip, enfologfile,
" %d branching candidates <%s>(%g)...<%s>(%g) after removing low scores\n", ncands,
7397 SCIPvarGetName(cands[perm[ncands - 1]].
var), cands[perm[ncands - 1]].weighted); )
7402 if( conshdlrdata->branchrandnumgen ==
NULL )
7407 *selected = &cands[perm[
c]];
7410 *selected = &cands[perm[0]];
7446 if( conshdlrdata->branchexternal )
7480 if( downchild !=
NULL || eqchild !=
NULL || upchild !=
NULL )
7520 SCIP_CALL( SCIPnlhdlrEnfo(
scip, conshdlr, cons, nlhdlr, expr, nlhdlrexprdata,
sol, auxvalue, overestimate,
7521 allowweakcuts, separated, inenforcement, branchcandonly,
result) );
7554 SCIP_CALL( SCIPnlhdlrEstimate(
scip, conshdlr, nlhdlr, expr, nlhdlrexprdata,
sol, auxvalue, overestimate,
7555 SCIPgetSolVal(
scip,
sol, auxvar), inenforcement, rowpreps, &sepasuccess, &branchscoresuccess) );
7560 assert((sepasuccess && minidx <= maxidx) || (!sepasuccess && minidx > maxidx));
7568 for(
r = minidx;
r <= maxidx; ++
r )
7575 if( !branchcandonly )
7584 auxvalue, allowweakcuts, branchscoresuccess, inenforcement,
sol,
result) );
7590 if( branchcandonly && branchscoresuccess )
7651 if( !overestimate && !underestimate )
7657 for( e = 0; e < ownerdata->nenfos; ++e )
7666 if( branchcandonly && !ownerdata->enfos[e]->sepaaboveusesactivity && !ownerdata->enfos[e]->sepabelowusesactivity )
7669 nlhdlr = ownerdata->enfos[e]->nlhdlr;
7673 SCIP_CALL( SCIPnlhdlrEvalaux(
scip, nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata, &ownerdata->enfos[e]->auxvalue,
sol) );
7677 SCIPinfoMessage(
scip, enfologfile,
" (%p): evalvalue %.15g auxvarvalue %.15g [%.15g,%.15g], nlhdlr <%s> " \
7694 if( !
SCIPisInfinity(
scip, auxviol) && auxviol < conshdlrdata->enfoauxviolfactor * origviol )
7697 "auxviolation %g << origviolation %g under:%d over:%d\n",
SCIPnlhdlrGetName(nlhdlr), (
void*)expr,
7709 underestimate, overestimate); )
7717 auxviol, origviol, underestimate, overestimate, allowweakcuts); )
7722 if( overestimate && auxoverestimate && (ownerdata->enfos[e]->nlhdlrparticipation &
SCIP_NLHDLR_METHOD_SEPAABOVE) != 0 && (!branchcandonly || ownerdata->enfos[e]->sepaaboveusesactivity) )
7727 ownerdata->enfos[e]->auxvalue,
TRUE, *
result ==
SCIP_SEPARATED, allowweakcuts, inenforcement, branchcandonly, &hdlrresult) );
7733 ownerdata->lastenforced = conshdlrdata->enforound;
7741 ownerdata->lastenforced = conshdlrdata->enforound;
7750 ownerdata->lastenforced = conshdlrdata->enforound;
7763 ownerdata->lastenforced = conshdlrdata->enforound;
7770 if( underestimate && auxunderestimate && (ownerdata->enfos[e]->nlhdlrparticipation &
SCIP_NLHDLR_METHOD_SEPABELOW) != 0 && (!branchcandonly || ownerdata->enfos[e]->sepabelowusesactivity) )
7775 ownerdata->enfos[e]->auxvalue,
FALSE, *
result ==
SCIP_SEPARATED, allowweakcuts, inenforcement, branchcandonly, &hdlrresult) );
7781 ownerdata->lastenforced = conshdlrdata->enforound;
7789 ownerdata->lastenforced = conshdlrdata->enforound;
7798 ownerdata->lastenforced = conshdlrdata->enforound;
7811 ownerdata->lastenforced = conshdlrdata->enforound;
7854 if( inenforcement && !branchcandonly && !consdata->ispropagated )
7874 if( ntightenings > 0 )
7887 if( ownerdata->auxvar ==
NULL )
7890 assert(ownerdata->lastenforced <= conshdlrdata->enforound);
7891 if( ownerdata->lastenforced == conshdlrdata->enforound )
7906 if( ownerdata->lastenforced == conshdlrdata->enforound )
7970 ++(conshdlrdata->enforound);
7977 for(
c = 0;
c < nconss; ++
c )
8003 for(
i = 0;
i < consdata->nvarexprs; ++
i )
8012 SCIP_CALL(
enforceConstraint(
scip, conshdlr, conss[
c],
sol, soltag, it,
FALSE, inenforcement, branchcandonly,
result, &consenforced) );
8017 if( !consenforced && inenforcement && !branchcandonly )
8022 if( viol > conshdlrdata->weakcutminviolfactor * maxrelconsviol )
8027 SCIP_CALL(
enforceConstraint(
scip, conshdlr, conss[
c],
sol, soltag, it,
TRUE, inenforcement, branchcandonly,
result, &consenforced) );
8030 ++conshdlrdata->nweaksepa;
8040 ENFOLOG(
if( enfologfile !=
NULL ) fflush( enfologfile); )
8057 ENFOLOG(
if( enfologfile !=
NULL ) fflush( enfologfile); )
8099 *branchintegral =
FALSE;
8110 *branchintegral =
TRUE;
8121 SCIPerrorMessage(
"Unexpected separation or propagation from enforceConstraints(branchcandonly = TRUE)\n");
8133 SCIPerrorMessage(
"Unexpected return from enforceConstraints(branchcandonly = TRUE)\n");
8168 *branchintegral =
TRUE;
8220 for(
i = 0;
i < nbinvars + nintvars && !isfractional; ++
i )
8226 isfractional =
TRUE;
8238 if( conshdlrdata->branchmixfractional == 0.0 )
8287 *maxabsconsviol = 0.0;
8288 *maxrelconsviol = 0.0;
8291 *maxvarboundviol = 0.0;
8293 for(
c = 0;
c < nconss; ++
c )
8306 *maxabsconsviol =
MAX(*maxabsconsviol, v);
8313 *maxrelconsviol =
MAX(*maxrelconsviol, v);
8330 if( ownerdata->auxvar ==
NULL )
8343 origviol = auxvarlb - auxvarvalue;
8345 origviol = auxvarvalue - auxvarub;
8346 if( origviol <= 0.0 )
8349 *maxvarboundviol =
MAX(*maxvarboundviol, origviol);
8370 *maxvarboundviol = auxvarlb - auxvarvalue;
8371 else if( auxvarvalue - auxvarub > *maxvarboundviol && !
SCIPisInfinity(
scip, auxvarub) )
8372 *maxvarboundviol = auxvarvalue - auxvarub;
8377 if( origviol > 0.0 || auxvarlb > auxvarvalue || auxvarub < auxvarvalue )
8384 if( origviol > 0.0 )
8385 SCIPinfoMessage(
scip, enfologfile,
" auxvar %s expr violated by %g", violunder ?
">=" :
"<=", origviol);
8387 SCIPinfoMessage(
scip, enfologfile,
" auxvar >= auxvar's lb violated by %g", auxvarlb - auxvarvalue);
8389 SCIPinfoMessage(
scip, enfologfile,
" auxvar <= auxvar's ub violated by %g", auxvarvalue - auxvarub);
8395 if( origviol == 0.0 )
8399 for( e = 0; e < ownerdata->nenfos; ++e )
8407 nlhdlr = ownerdata->enfos[e]->nlhdlr;
8411 SCIP_CALL( SCIPnlhdlrEvalaux(
scip, nlhdlr, expr, ownerdata->enfos[e]->nlhdlrexprdata, &ownerdata->enfos[e]->auxvalue,
sol) );
8420 *maxauxviol =
MAX(*maxauxviol, auxviol);
8421 *minauxviol =
MIN(*minauxviol, auxviol);
8468 for(
c = 0;
c < nconss; ++
c )
8484 &minauxviol, &maxauxviol, &maxvarboundviol) );
8487 "auxviolations in %g..%g, variable bounds violated by at most %g, LP feastol=%e\n",
8504 if( branchintegral )
8513 if( conshdlrdata->propinenforce )
8534 ++conshdlrdata->ntightenlp;
8550 ++conshdlrdata->ntightenlp;
8580 ++conshdlrdata->ntightenlp;
8602 ++conshdlrdata->ndesperatetightenlp;
8612 if( !conshdlrdata->propinenforce )
8634 ++conshdlrdata->ndesperatebranch;
8649 ENFOLOG(
SCIPinfoMessage(
scip, enfologfile,
" enforcement with max. violation %g failed; cutting off node\n", maxabsconsviol); )
8654 ++conshdlrdata->ndesperatecutoff;
8679 for(
c = 0;
c < nconss; ++
c )
8719 idx = ((int)(size_t)elem) - 1;
8720 assert(idx >= 0 && idx < conshdlrdata->nbilinterms);
8722 return (
void*)&conshdlrdata->bilinterms[idx];
8740 return entry1->
x == entry2->
x && entry1->
y == entry2->
y;
8775 for(
i = 0;
i < 3; ++
i )
8778 return auxexpr1->
coefs[
i] < auxexpr2->
coefs[
i] ? -1 : 1;
8781 return auxexpr1->
cst < auxexpr2->
cst ? -1 : auxexpr1->
cst == auxexpr2->
cst ? 0 : 1;
8813 if( term->
nauxexprs >= conshdlrdata->bilinmaxnauxexprs )
8860 if( conshdlrdata->bilinterms !=
NULL )
8869 for(
c = 0;
c < nconss; ++
c )
8950 assert(conshdlrdata->bilinterms[*idx].x ==
x);
8951 assert(conshdlrdata->bilinterms[*idx].y ==
y);
8954 term = &conshdlrdata->bilinterms[*idx];
8955 assert(existing <= term->existing);
8964 *idx = conshdlrdata->nbilinterms;
8967 term = &conshdlrdata->bilinterms[*idx];
8982 ++(conshdlrdata->nbilinterms);
8985 if( conshdlrdata->bilinhashtable ==
NULL )
8988 bilinearTermsGetHashkey, bilinearTermsIsHashkeyEq, bilinearTermsGetHashkeyVal,
8989 (
void*)conshdlrdata) );
8991 assert(conshdlrdata->bilinhashtable !=
NULL);
9019 if( conshdlrdata->bilinterms ==
NULL )
9022 assert(conshdlrdata->nbilinterms == 0);
9023 assert(conshdlrdata->bilintermssize == 0);
9029 for(
i = 0;
i < conshdlrdata->nbilinterms; ++
i )
9034 for( j = 0; j < conshdlrdata->bilinterms[
i].nauxexprs; ++j )
9036 if( conshdlrdata->bilinterms[
i].aux.exprs[j]->auxvar !=
NULL )
9043 if( conshdlrdata->bilinterms[
i].nauxexprs > 0 )
9052 if( conshdlrdata->bilinterms[
i].aux.var !=
NULL )
9059 if( conshdlrdata->bilinhashtable !=
NULL )
9066 conshdlrdata->nbilinterms = 0;
9067 conshdlrdata->bilintermssize = 0;
9101 SCIPdebugMsg(
scip,
"Building LP for computing facets of convex envelope of vertex-polyhedral function\n");
9106 nrows = (
unsigned int)
nvars + 1;
9108 nnonz = (ncols * (nrows + 1)) / 2;
9119 for(
i = 0, k = 0;
i < ncols; ++
i )
9153 ind[k] = (int)nrows - 1;
9164 (
int)ncols,
obj, lb, ub,
NULL,
9165 (
int)nrows, lb, lb,
NULL,
9166 (
int)nnonz, beg, ind, val) );
9169 ind[0] = (int)nrows - 1;
9206 unsigned int ncorners;
9219 facetval = facetconstant;
9220 for(
i = 0;
i < (
unsigned int) nallvars; ++
i )
9221 facetval += facetcoefs[
i] * box[2*
i];
9224 funval = funvals[0];
9226 error = funval - facetval;
9228 error = facetval - funval;
9231 maxerror =
MAX(error, maxerror);
9234 for(
i = 1;
i < ncorners; ++
i )
9241 gray =
i ^ (
i >> 1);
9246 while( (diff >>= 1) != 0 )
9250 origpos = nonfixedpos[pos];
9253 facetval += facetcoefs[origpos] * (box[2*origpos+1] - box[2*origpos]);
9255 facetval -= facetcoefs[origpos] * (box[2*origpos+1] - box[2*origpos]);
9258 funval = funvals[gray];
9260 error = funval - facetval;
9262 error = facetval - funval;
9265 maxerror =
MAX(error, maxerror);
9321 if( conshdlrdata->vp_randnumgen ==
NULL && conshdlrdata->vp_maxperturb > 0.0 )
9327 if( conshdlrdata->vp_lp[
nvars] ==
NULL )
9331 lp = conshdlrdata->vp_lp[
nvars];
9349 for(
i = 0;
i < ncols; ++
i )
9354 for(
i = 0;
i < nrows-1; ++
i )
9363 varpos = nonfixedpos[
i];
9364 lb = box[2 * varpos];
9365 ub = box[2 * varpos + 1];
9366 solval = xstar[varpos];
9368 if( ub - lb < mindomwidth )
9369 mindomwidth = ub - lb;
9374 else if( solval >= ub )
9377 aux[
i] = (solval - lb) / (ub - lb);
9380 if( conshdlrdata->vp_maxperturb > 0.0 )
9385 aux[
i] -=
SCIPrandomGetReal(conshdlrdata->vp_randnumgen, 0.0, conshdlrdata->vp_maxperturb);
9386 else if( aux[
i] == 0.0 )
9387 aux[
i] +=
SCIPrandomGetReal(conshdlrdata->vp_randnumgen, 0.0, conshdlrdata->vp_maxperturb);
9392 perturbation =
MIN( aux[
i], 1.0 - aux[
i] ) / 2.0;
9393 perturbation =
MIN( perturbation, conshdlrdata->vp_maxperturb );
9394 aux[
i] +=
SCIPrandomGetReal(conshdlrdata->vp_randnumgen, -perturbation, perturbation);
9396 assert(0.0 < aux[
i] && aux[
i] < 1.0);
9429 if( conshdlrdata->vp_dualsimplex )
9457 facetcoefs[nonfixedpos[
i]] = aux[
i];
9459 *facetconstant = aux[nrows - 1];
9463 for(
i = 0;
i < nallvars; ++
i )
9483 varpos = nonfixedpos[
i];
9484 lb = box[2 * varpos];
9485 ub = box[2 * varpos + 1];
9489 facetcoefs[varpos] = facetcoefs[varpos] / (ub - lb);
9492 *facetconstant -= facetcoefs[varpos] * lb;
9495 facetvalue += facetcoefs[varpos] * xstar[varpos];
9502 facetvalue += *facetconstant;
9511 if( overestimate == (facetvalue > targetvalue) )
9513 SCIPdebugMsg(
scip,
"missed the target, facetvalue %g targetvalue %g, overestimate=%u\n", facetvalue, targetvalue, overestimate);
9554 *facetcoef = (funright - funleft) / (right - left);
9555 *facetconstant = funleft - *facetcoef * left;
9592 *
alpha = -b3*c2 + a3*(-b2+c2) + a2*(b3-c3) + b2*c3;
9593 *beta = -(-b3*c1 + a3*(-b1+c1) + a1*(b3-c3) + b1*c3);
9594 *gamma_ = -a2*b1 + a1*b2 + a2*c1 - b2*c1 - a1*c2 + b1*c2;
9595 *delta = -a3*b2*c1 + a2*b3*c1 + a3*b1*c2 - a1*b3*c2 - a2*b1*c3 + a1*b2*c3;
9642 SCIPdebugMsg(
scip,
"numerical troubles - try to solve the linear system via an LU factorization\n");
9720 targetvalue = -targetvalue;
9737 for( leaveout = 1; leaveout <= 4; ++leaveout )
9743 SCIP_CALL(
computeHyperplaneThreePoints(
scip, p2[0], p2[1], p2val, p3[0], p3[1], p3val, p4[0], p4[1], p4val,
9744 &
alpha, &beta, &gamma_, &delta) );
9746 if(
alpha * p1[0] + beta * p1[1] + gamma_ * p1val - delta > 0.0 )
9752 SCIP_CALL(
computeHyperplaneThreePoints(
scip, p1[0], p1[1], p1val, p3[0], p3[1], p3val, p4[0], p4[1], p4val,
9753 &
alpha, &beta, &gamma_, &delta) );
9755 if(
alpha * p2[0] + beta * p2[1] + gamma_ * p2val - delta > 0.0 )
9761 SCIP_CALL(
computeHyperplaneThreePoints(
scip, p1[0], p1[1], p1val, p2[0], p2[1], p2val, p4[0], p4[1], p4val,
9762 &
alpha, &beta, &gamma_, &delta) );
9764 if(
alpha * p3[0] + beta * p3[1] + gamma_ * p3val - delta > 0.0 )
9770 SCIP_CALL(
computeHyperplaneThreePoints(
scip, p1[0], p1[1], p1val, p2[0], p2[1], p2val, p3[0], p3[1], p3val,
9771 &
alpha, &beta, &gamma_, &delta) );
9773 if(
alpha * p4[0] + beta * p4[1] + gamma_ * p4val - delta > 0.0 )
9798 xstarval = -
alpha/gamma_ * xstar[0] -beta/gamma_ * xstar[1] + delta/gamma_;
9801 if( xstarval <= targetvalue && (!*success || xstarval < candxstarval) )
9807 facetcoefs[0] = -
alpha/gamma_;
9808 facetcoefs[1] = -beta/gamma_;
9809 *facetconstant = delta/gamma_;
9812 candxstarval = xstarval;
9834 if( nelems > *maxnelems )
9839 assert(newsize >= nelems);
9843 *maxnelems = newsize;
9864 if( nelems > *maxnelems )
9869 assert(newsize > *maxnelems);
9874 *maxnelems = newsize;
9926 assert(*maxnconsvars > 0);
9934 if( nchildren != 2 )
9944 for( childidx = 0; childidx < 2; ++childidx )
9947 (*consvals)[0] = 1.0;
9964 var1 = (*consvars)[0];
9965 val1 = (*consvals)[0];
9969 var2 = (*consvars)[0];
9970 val2 = (*consvals)[0];
9999 prodval = coef * val1 * val2;
10083 safeexponent = (int) (exponent + 0.5);
10084 if( safeexponent % 2 != 0 )
10167 (*consvars)[0] =
var;
10168 (*consvals)[0] = 1.0;
10184 var = (*consvars)[0];
10185 edgeweight = (*consvals)[0];
10196 TRUE, edgeweight) );
10198 TRUE, edgeweight) );
10258 for(
i = 0;
i < nlocvars; ++
i)
10278 var = (*consvars)[0];
10282 if( nlocvars == 2 )
10284 var = (*consvars)[1];
10307 if( nlocvars == 1 )
10309 var = (*consvars)[0];
10310 weight = (*consvals)[0];
10331 for(
i = 0;
i < 2; ++
i)
10333 var = (*consvars)[
i];
10334 weight =
ABS((*consvals)[
i]);
10379 assert(*maxnconsvars > 0);
10403 hasval, val, consvars, consvals, maxnconsvars, success) );
10408 hasval, val, consvars, consvals, maxnconsvars, handledexprs, success) );
10461 return (ub + lb) / 2;
10495 int* powperm =
NULL;
10496 int* prodperm =
NULL;
10507 int nprodexprs = 0;
10517 assert(*maxnconsvars > 0);
10531 for(
i = 0;
i < nchildren; ++
i )
10567 powexprs[npowexprs] = children[
i];
10568 powvars[npowexprs++] =
var;
10596 prodexprs[nprodexprs] = children[
i];
10597 prodvars[nprodexprs++] =
var;
10598 prodexprs[nprodexprs] = children[
i];
10599 prodvars[nprodexprs++] = var2;
10604 if( npowexprs == 0 || nprodexprs != npowexprs )
10611 SCIPsort(powperm, SCIPsortVarPtr, (
void*) powvars, npowexprs);
10612 SCIPsort(prodperm, SCIPsortVarPtr, (
void*) prodvars, npowexprs);
10614 for(
i = 0;
i < npowexprs; ++
i )
10621 assert(npowexprs % 2 == 0);
10632 (*consvals)[0] = 1.0;
10633 (*consvars)[0] = prodvars[cnt++];
10640 if( nlocvars != 1 )
10645 actvar = (*consvars)[0];
10646 val = (*consvals)[0];
10648 (*consvals)[0] = 1.0;
10649 (*consvars)[0] = prodvars[cnt++];
10656 if( nlocvars != 1 )
10658 actvar2 = (*consvars)[0];
10659 val2 = (*consvals)[0];
10692 for( j = 0; j < npowexprs && !(var1found && var2found); ++j )
10694 if( powexprused[j] )
10698 if( !var1found && powvars[j] == prodvars[cnt - 2] )
10701 powexprused[j] =
TRUE;
10704 else if( !var2found && powvars[j] == prodvars[cnt - 1] )
10707 powexprused[j] =
TRUE;
10826 if( expr == rootexpr )
10827 parentidx = consnodeidx;
10831 parentidx = openidx[nopenidx - 1];
10835 hasparentcoef =
FALSE;
10836 if ( expr != rootexpr )
10847 openidx[nopenidx++] = -1;
10849 assert(maxnconsvars > 0);
10853 if( hasparentcoef )
10858 parentidx = nodeidx;
10878 parentidx = thisidx;
10881 nconsvars, constant) );
10894 openidx[nopenidx++] = -1;
10900 assert(expr == rootexpr || parentidx > 0);
10912 usedefaultgadget =
FALSE;
10951 &consvars, &consvals, &maxnconsvars, handledexprs) );
10955 openidx[nopenidx++] = sumidx;
10962 parentcoef, &consvars, &consvals, &maxnconsvars, handledexprs, &succ) );
10966 usedefaultgadget =
FALSE;
10976 &consvars, &consvals, &maxnconsvars, handledexprs, &succ) );
10980 usedefaultgadget =
FALSE;
10985 if( usedefaultgadget )
11015 openidx[nopenidx++] = opidx;
11053 assert(targetconshdlr != conshdlr);
11059 for(
i = 0;
i < sourceconshdlrdata->nnlhdlrs; ++
i )
11061 SCIP_CALL( SCIPnlhdlrCopyhdlr(
scip, targetconshdlr, conshdlr, sourceconshdlrdata->nlhdlrs[
i]) );
11080 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
11086 conshdlrdata->nlhdlrssize = 0;
11089 for(
i = 0;
i < conshdlrdata->nconsupgrades; ++
i )
11100 if( conshdlrdata->vp_randnumgen !=
NULL )
11106 if( conshdlrdata->vp_lp[
i] !=
NULL )
11112 assert(conshdlrdata->branchrandnumgen ==
NULL);
11135 conshdlrdata->lastboundrelax = ++conshdlrdata->curboundstag;
11137 conshdlrdata->enforound = 1;
11139 conshdlrdata->auxvarid = 0;
11141 for(
i = 0;
i < nconss; ++
i )
11148 if( conshdlrdata->nnlhdlrs > 1 )
11149 SCIPsortDownPtr((
void**)conshdlrdata->nlhdlrs, SCIPnlhdlrComp, conshdlrdata->nnlhdlrs);
11156 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
11162 conshdlrdata->nweaksepa = 0;
11163 conshdlrdata->ntightenlp = 0;
11164 conshdlrdata->ndesperatebranch = 0;
11165 conshdlrdata->ndesperatecutoff = 0;
11166 conshdlrdata->ndesperatetightenlp = 0;
11167 conshdlrdata->nforcelp = 0;
11169 conshdlrdata->ncanonicalizecalls = 0;
11172 ENFOLOG( enfologfile = fopen(ENFOLOGFILE,
"w"); )
11194 SCIPsortDownPtr((
void**)consssorted, compIndexConsNonlinear, nconss);
11196 for(
i = 0;
i < nconss; ++
i )
11205 conshdlrdata->subnlpheur =
NULL;
11206 conshdlrdata->trysolheur =
NULL;
11208 if( conshdlrdata->vp_randnumgen !=
NULL )
11214 if( conshdlrdata->vp_lp[
i] !=
NULL )
11220 if( conshdlrdata->branchrandnumgen !=
NULL )
11224 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
11230 if( enfologfile !=
NULL )
11232 fclose(enfologfile);
11233 enfologfile =
NULL;
11241#ifdef SCIP_DISABLED_CODE
11245 SCIPerrorMessage(
"method of nonlinear constraint handler not implemented yet\n");
11251#define consInitpreNonlinear NULL
11310 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
11316 if( conshdlrdata->branchpscostweight > 0.0 )
11319 if( strchr(
"lds", conshdlrdata->branchpscostupdatestrategy) ==
NULL )
11321 SCIPerrorMessage(
"branching/lpgainnormalize strategy %c unknown\n", conshdlrdata->branchpscostupdatestrategy);
11346 conshdlrdata->checkedvarlocks =
FALSE;
11349 if( conshdlrdata->newsoleventfilterpos >= 0 )
11357 conshdlrdata->newsoleventfilterpos = -1;
11373 assert((*consdata)->nlockspos == 0);
11374 assert((*consdata)->nlocksneg == 0);
11382 if( (*consdata)->nlrow !=
NULL )
11409 targetexpr, sourcedata->lhs, sourcedata->rhs,
FALSE,
11439 if( conshdlrdata->linearizeheursol !=
'o' && conshdlrdata->newsoleventfilterpos == -1 )
11447 eventhdlr, (
SCIP_EVENTDATA*)conshdlr, &conshdlrdata->newsoleventfilterpos) );
11514 for(
c = 0;
c < nconss; ++
c )
11541 SCIPdebugMsg(
scip,
"registered %d external branching candidates\n", nnotify);
11546 SCIPdebugMsg(
scip,
"could not find branching candidates, forcing to solve LP\n");
11580 maypropfeasible =
FALSE;
11583 for(
c = 0;
c < nconss; ++
c )
11598 maxviol =
MAX(maxviol, absviol);
11618 else if( (conshdlrdata->subnlpheur ==
NULL ||
sol ==
NULL) && !maypropfeasible && !completely )
11626 maypropfeasible =
FALSE;
11628 if( maypropfeasible )
11635 if( !(consdata->linvarincr !=
NULL && consdata->linvarincrcoef > 0.0) &&
11636 !(consdata->linvardecr !=
NULL && consdata->linvardecrcoef < 0.0) )
11637 maypropfeasible =
FALSE;
11645 if( !(consdata->linvarincr !=
NULL && consdata->linvarincrcoef < 0.0) &&
11646 !(consdata->linvardecr !=
NULL && consdata->linvardecrcoef > 0.0) )
11647 maypropfeasible =
FALSE;
11753 for(
c = 0;
c < nconss; ++
c )
11779 && !conshdlrdata->checkedvarlocks && conshdlrdata->checkvarlocks !=
'd' )
11784 conshdlrdata->checkedvarlocks =
TRUE;
11786 for(
c = 0;
c < nconss; ++
c )
11788 int tmpnchgvartypes = 0;
11789 int tmpnaddconss = 0;
11792 SCIPdebugMsg(
scip,
"presolSingleLockedVars() for %s: nchgvartypes=%d naddconss=%d infeas=%u\n",
11802 (*nchgvartypes) += tmpnchgvartypes;
11803 (*naddconss) += tmpnaddconss;
11807 if( *ndelconss > 0 || *nchgbds > 0 || *nupgdconss > 0 || *naddconss > 0 || *nchgvartypes > 0 )
11817#ifdef SCIP_DISABLED_CODE
11821 SCIPerrorMessage(
"method of nonlinear constraint handler not implemented yet\n");
11827#define consRespropNonlinear NULL
11852 if( ownerdata->nenfos >= 0 )
11854 if( (consdata->nlockspos == 0) != (nlockspos == 0) )
11855 reinitsolve =
TRUE;
11856 if( (consdata->nlocksneg == 0) != (nlocksneg == 0) )
11857 reinitsolve =
TRUE;
11892 if( !consdata->issimplified )
11901 consdata->expr = simplified;
11902 consdata->issimplified =
TRUE;
11933 if( hashmapexpr !=
NULL && hashmapexpr != child )
11951 assert(consdata->nlockspos == 0);
11952 assert(consdata->nlocksneg == 0);
12038#ifdef SCIP_DISABLED_CODE
12042 SCIPerrorMessage(
"method of nonlinear constraint handler not implemented yet\n");
12048#define consDelvarsNonlinear NULL
12101 SCIP_CALL(
SCIPcopyExpr(sourcescip,
scip, sourcedata->expr, &targetexpr, exprownerCreate, (
void*)targetconshdlr, varmap, consmap, global,
valid) );
12103 if( targetexpr ==
NULL )
12111 targetexpr, sourcedata->lhs, sourcedata->rhs,
FALSE,
12112 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable) );
12115 if( targetexpr !=
NULL )
12148 endptr = (
char*)str;
12157 if( isdigit((
unsigned char)str[0]) || ((str[0] ==
'-' || str[0] ==
'+') && isdigit((
unsigned char)str[1])) )
12169 if( endptr[0] !=
'<' || endptr[1] !=
'=' )
12193 if( strncmp(str,
"[free]", 6) == 0 )
12247 consexprtree, lhs, rhs,
FALSE,
12248 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable) );
12273 if( varssize < consdata->nvarexprs )
12279 for(
i = 0;
i < consdata->nvarexprs; ++
i )
12302 *
nvars = consdata->nvarexprs;
12309#ifdef SCIP_DISABLED_CODE
12313 SCIPerrorMessage(
"method of nonlinear constraint handler not implemented yet\n");
12319#define consGetDiveBdChgsNonlinear NULL
12354 SCIPinfoMessage(
scip, file,
"Nonlinear Conshdlr : %10s %10s %10s %10s %10s %10s %10s\n",
"WeakSepa",
"TightenLP",
"DespTghtLP",
"DespBranch",
"DespCutoff",
"ForceLP",
"CanonTime");
12467 for(
i = 0;
i < conshdlrdata->nnlhdlrs; ++
i )
12501 conshdlrdata->intevalvar = intEvalVarBoundTightening;
12502 conshdlrdata->curboundstag = 1;
12503 conshdlrdata->lastboundrelax = 1;
12504 conshdlrdata->curpropboundstag = 1;
12505 conshdlrdata->newsoleventfilterpos = -1;
12516 conshdlrCopyNonlinear,
12517 consFreeNonlinear, consInitNonlinear, consExitNonlinear,
12519 consDeleteNonlinear, consTransNonlinear, consInitlpNonlinear,
12520 consSepalpNonlinear, consSepasolNonlinear, consEnfolpNonlinear, consEnforelaxNonlinear, consEnfopsNonlinear, consCheckNonlinear,
12522 consActiveNonlinear, consDeactiveNonlinear,
12524 consPrintNonlinear, consCopyNonlinear, consParseNonlinear,
12526 consGetSignedPermsymGraphNonlinear, conshdlrdata) );
12531 "limit on number of propagation rounds for a set of constraints within one round of SCIP propagation",
12532 &conshdlrdata->maxproprounds,
FALSE, 10, 0, INT_MAX,
NULL,
NULL) );
12535 "whether to check bounds of all auxiliary variable to seed reverse propagation",
12539 "strategy on how to relax variable bounds during bound tightening: relax (n)ot, relax by (a)bsolute value, relax always by a(b)solute value, relax by (r)relative value",
12540 &conshdlrdata->varboundrelax,
TRUE,
'r',
"nabr",
NULL,
NULL) );
12543 "by how much to relax variable bounds during bound tightening if strategy 'a', 'b', or 'r'",
12547 "by how much to relax constraint sides during bound tightening",
12551 "maximal relative perturbation of reference point when computing facet of envelope of vertex-polyhedral function (dim>2)",
12555 "adjust computed facet of envelope of vertex-polyhedral function up to a violation of this value times LP feasibility tolerance",
12559 "whether to use dual simplex instead of primal simplex for LP that computes facet of vertex-polyhedral function",
12563 "maximal number of auxiliary expressions per bilinear term",
12567 "whether to reformulate products of binary variables during presolving",
12571 "whether to use the AND constraint handler for reformulating binary products",
12575 "minimum number of terms to reformulate bilinear binary products by factorizing variables (<= 1: disabled)",
12576 &conshdlrdata->reformbinprodsfac,
FALSE, 50, 1, INT_MAX,
NULL,
NULL) );
12579 "whether to forbid multiaggregation of nonlinear variables",
12583 "whether to tighten LP feasibility tolerance during enforcement, if it seems useful",
12587 "whether to (re)run propagation in enforcement",
12591 "threshold for when to regard a cut from an estimator as weak (lower values allow more weak cuts)",
12592 &conshdlrdata->weakcutthreshold,
TRUE, 0.2, 0.0, 1.0,
NULL,
NULL) );
12595 "\"strong\" cuts will be scaled to have their maximal coef in [1/strongcutmaxcoef,strongcutmaxcoef]",
12599 "consider efficacy requirement when deciding whether a cut is \"strong\"",
12603 "whether to force \"strong\" cuts in enforcement",
12607 "an expression will be enforced if the \"auxiliary\" violation is at least this factor times the \"original\" violation",
12608 &conshdlrdata->enfoauxviolfactor,
TRUE, 0.01, 0.0, 1.0,
NULL,
NULL) );
12611 "retry enfo of constraint with weak cuts if violation is least this factor of maximal violated constraints",
12612 &conshdlrdata->weakcutminviolfactor,
TRUE, 0.5, 0.0, 2.0,
NULL,
NULL) );
12615 "whether to make rows to be non-removable in the node where they are added (can prevent some cycling): 'o'ff, in 'e'nforcement only, 'a'lways",
12616 &conshdlrdata->rownotremovable,
TRUE,
'o',
"oea",
NULL,
NULL) );
12619 "method how to scale violations to make them comparable (not used for feasibility check): (n)one, (a)ctivity and side, norm of (g)radient",
12620 &conshdlrdata->violscale,
TRUE,
'n',
"nag",
NULL,
NULL) );
12623 "whether variables contained in a single constraint should be forced to be at their lower or upper bounds ('d'isable, change 't'ype, add 'b'ound disjunction)",
12624 &conshdlrdata->checkvarlocks,
TRUE,
't',
"bdt",
NULL,
NULL) );
12627 "from which depth on in the tree to allow branching on auxiliary variables (variables added for extended formulation)",
12628 &conshdlrdata->branchauxmindepth,
FALSE, INT_MAX, 0, INT_MAX,
NULL,
NULL) );
12631 "whether to use external branching candidates and branching rules for branching",
12635 "consider a constraint highly violated if its violation is >= this factor * maximal violation among all constraints",
12636 &conshdlrdata->branchhighviolfactor,
FALSE, 0.0, 0.0, 1.0,
NULL,
NULL) );
12639 "consider a variable branching score high if its branching score >= this factor * maximal branching score among all variables",
12640 &conshdlrdata->branchhighscorefactor,
FALSE, 0.9, 0.0, 1.0,
NULL,
NULL) );
12643 "weight by how much to consider the violation assigned to a variable for its branching score",
12647 "weight by how much to consider fractionality of integer variables in branching score for spatial branching",
12651 "weight by how much to consider the dual values of rows that contain a variable for its branching score",
12655 "weight by how much to consider the pseudo cost of a variable for its branching score",
12659 "weight by how much to consider the domain width in branching score",
12663 "weight by how much to consider variable type (continuous: 0, binary: 1, integer: 0.1, impl-integer: 0.01) in branching score",
12667 "how to aggregate several branching scores given for the same expression: 'a'verage, 'm'aximum, 's'um",
12668 &conshdlrdata->branchscoreagg,
FALSE,
's',
"ams",
NULL,
NULL) );
12671 "method used to split violation in expression onto variables: 'u'niform, 'm'idness of solution, 'd'omain width, 'l'ogarithmic domain width",
12672 &conshdlrdata->branchviolsplit,
FALSE,
'm',
"umdl",
NULL,
NULL) );
12675 "minimum pseudo-cost update count required to consider pseudo-costs reliable",
12679 "minimal average pseudo cost count for discrete variables at which to start considering spatial branching before branching on fractional integer variables",
12683 "whether tight linearizations of nonlinear constraints should be added to cutpool when some heuristics finds a new solution ('o'ff, on new 'i'ncumbents, on 'e'very solution)",
12684 &conshdlrdata->linearizeheursol,
FALSE,
'o',
"oie",
NULL,
NULL) );
12687 "whether to assume that any constraint in the presolved problem is convex",
12692 "signals a bound change to a nonlinear constraint", processVarEvent,
NULL) );
12722 processNewSolutionEvent,
NULL) );
12733 const char* conshdlrname
12748 if( conshdlr ==
NULL )
12758 for(
i = conshdlrdata->nconsupgrades - 1;
i >= 0; --
i )
12760 if( conshdlrdata->consupgrades[
i]->consupgd == nlconsupgd )
12763 SCIPwarningMessage(
scip,
"Try to add already known upgrade method for constraint handler <%s>.\n", conshdlrname);
12771 consupgrade->consupgd = nlconsupgd;
12777 assert(conshdlrdata->nconsupgrades+1 <= conshdlrdata->consupgradessize);
12779 for(
i = conshdlrdata->nconsupgrades;
i > 0 && conshdlrdata->consupgrades[
i-1]->priority < consupgrade->
priority; --
i )
12780 conshdlrdata->consupgrades[
i] = conshdlrdata->consupgrades[
i-1];
12782 conshdlrdata->consupgrades[
i] = consupgrade;
12783 conshdlrdata->nconsupgrades++;
12833 if( conshdlr ==
NULL )
12841 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable) );
12913 assert(nquadterms == 0 || (quadvars1 !=
NULL && quadvars2 !=
NULL && quadcoefs !=
NULL));
12916 for(
i = 0;
i < nlinvars; ++
i )
12924 for(
i = 0;
i < nquadterms; ++
i )
12936 if( conshdlr ==
NULL )
12943 SCIP_CALL(
SCIPcreateExprQuadratic(
scip, &expr, nlinvars, linvars, lincoefs, nquadterms, quadvars1, quadvars2, quadcoefs, exprownerCreate, (
void*)conshdlr) );
12948 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable) );
12979 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, nlinvars, linvars, lincoefs, nquadterms, quadvars1, quadvars2, quadcoefs, lhs, rhs,
13029 SCIPerrorMessage(
"Second-order cone constant with infinite or nan value in nonlinear constraint %s\n", name);
13034 SCIPerrorMessage(
"Infinite or nan coefficient of right hand side variable in second-order cone constraint %s\n", name);
13039 SCIPerrorMessage(
"Infinite or nan right hand side offset in second-order cone constraint %s\n", name);
13051 if( offsets !=
NULL && offsets[
i] != 0.0 )
13070 termcoefs[0] = 1.0;
13073 termcoefs[1] = -rhscoeff;
13116 SCIPerrorMessage(
"exponent in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13122 SCIPerrorMessage(
"argument offset in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13128 SCIPerrorMessage(
"coefficient of linear variable in nonlinear signpower constraint <%s> is infinite or nan\n", name);
13133 if( xoffset != 0.0 )
13171 return conshdlrdata->curboundstag;
13184 return conshdlrdata->lastboundrelax;
13203 ++conshdlrdata->curboundstag;
13204 assert(conshdlrdata->curboundstag > 0);
13207 conshdlrdata->lastboundrelax = conshdlrdata->curboundstag;
13260 sepasuccess =
TRUE;
13263 if( cutviol > 0.0 )
13284 if( (!overestimate && ( cutviol <= conshdlrdata->weakcutthreshold * (auxvalue - auxvarvalue))) ||
13285 ( overestimate && (-cutviol >= conshdlrdata->weakcutthreshold * (auxvalue - auxvarvalue))) )
13288 "weak: auxvarvalue %g estimateval %g auxvalue %g (over %d)\n",
13290 auxvarvalue + (overestimate ? -cutviol : cutviol), auxvalue, overestimate); )
13291 sepasuccess =
FALSE;
13296 estimateval = auxvarvalue + (!overestimate ? cutviol : -cutviol);
13300 sepasuccess =
FALSE;
13309 "estimateval %g auxvalue %g (over %d)\n ",
SCIPnlhdlrGetName(nlhdlr), auxvarvalue,
13310 auxvarvalue + (overestimate ? -cutviol : cutviol), auxvalue, overestimate);
13316 if( !allowweakcuts )
13328 "min requ viol = %g\n", cutviol, sepasuccess ?
"" :
"not ", mincutviolation); )
13330 sepasuccess = cutviol > mincutviolation;
13354 if( auxvarcoef == 0.0 ||
13355 (!overestimate && ( cutviol / auxvarcoef <= conshdlrdata->weakcutthreshold * (auxvalue - auxvarvalue))) ||
13356 ( overestimate && (-cutviol / auxvarcoef >= conshdlrdata->weakcutthreshold * (auxvalue - auxvarvalue))) )
13358 ENFOLOG(
SCIPinfoMessage(
scip, enfologfile,
" cut is too weak after cleanup: auxvarvalue %g estimateval %g auxvalue %g (over %d)\n",
13359 auxvarvalue, auxvarvalue + (overestimate ? -cutviol : cutviol) / auxvarcoef, auxvalue, overestimate); )
13360 sepasuccess =
FALSE;
13371 if( !branchscoresuccess )
13389#ifdef BRSCORE_ABSVIOL
13414 if( conshdlrdata->branchdualweight > 0.0 )
13425 (void) sprintf(gap,
"_estimategap=%g",
REALABS(auxvalue - estimateval));
13451 SCIP_CALL(
SCIPaddRow(
scip, row, conshdlrdata->forcestrongcut && !allowweakcuts && inenforcement, &infeasible) );
13454 if( conshdlrdata->rownotremovable ==
'a' || (conshdlrdata->rownotremovable ==
'e' && inenforcement) )
13471 else if( branchscoresuccess )
13484 "branching candidates%s\n",
SCIPnlhdlrGetName(nlhdlr), (allowweakcuts && inenforcement) ?
13503 return conshdlrdata->assumeconvex;
13541 return conshdlrdata->nbilinterms;
13560 return conshdlrdata->bilinterms;
13585 if( conshdlrdata->bilinhashtable ==
NULL )
13601 assert(idx >= -1 && idx < conshdlrdata->nbilinterms);
13602 assert(idx < 0 || conshdlrdata->bilinterms[idx].
x ==
x);
13603 assert(idx < 0 || conshdlrdata->bilinterms[idx].
y ==
y);
13630 assert(idx >= -1 && idx < conshdlrdata->nbilinterms);
13634 return &conshdlrdata->bilinterms[idx];
13681 term = &conshdlrdata->bilinterms[idx];
13687 if( auxvar !=
NULL )
13723 nlockspos = overestimate ? 1 : 0;
13724 nlocksneg = overestimate ? 0 : 1;
13728 term = &conshdlrdata->bilinterms[idx];
13739 if( conshdlrdata->bilinmaxnauxexprs <= 1 )
13743 auxvarexpr->
cst = 0.0;
13744 auxvarexpr->
coefs[0] = 1.0;
13745 auxvarexpr->
coefs[1] = 0.0;
13746 auxvarexpr->
coefs[2] = 0.0;
13764 auxexpr->
auxvar = auxvar;
13765 auxexpr->
coefs[0] = coefaux;
13769 auxexpr->
coefs[1] = coefx;
13770 auxexpr->
coefs[2] = coefy;
13776 auxexpr->
coefs[1] = coefy;
13777 auxexpr->
coefs[2] = coefx;
13779 auxexpr->
cst = cst;
13786 else if( auxvar !=
NULL )
13815 unsigned int ncorners;
13833 for( j = 0; j < nallvars; ++j )
13837 nonfixedpos[
nvars] = j;
13855 for( j = 0; j < nallvars; ++j )
13858 corner[j] = (box[2 * j] + box[2 * j + 1]) / 2.0;
13860 for(
i = 0;
i < ncorners; ++
i )
13863 for( j = 0; j <
nvars; ++j )
13865 int varpos = nonfixedpos[j];
13869 if( (
i >> j) & 0x1 )
13870 corner[varpos] = box[2 * varpos + 1];
13872 corner[varpos] = box[2 * varpos ];
13877 funvals[
i] = function(corner, nallvars, fundata);
13883 SCIPdebugMsg(
scip,
"cannot compute underestimator; function value at corner is too large %g\n", funvals[
i]);
13896 if( *success && overestimate == (*facetconstant + facetcoefs[nonfixedpos[0]] * xstar[nonfixedpos[0]] > targetvalue) )
13898 SCIPdebugMsg(
scip,
"computed secant, but missed target %g (facetvalue=%g, overestimate=%u)\n", targetvalue, *facetconstant + facetcoefs[nonfixedpos[0]] * xstar[nonfixedpos[0]], overestimate);
13904 int idx1 = nonfixedpos[0];
13905 int idx2 = nonfixedpos[1];
13906 SCIP_Real p1[2] = { box[2*idx1], box[2*idx2] };
13907 SCIP_Real p2[2] = { box[2*idx1+1], box[2*idx2] };
13908 SCIP_Real p3[2] = { box[2*idx1], box[2*idx2+1] };
13909 SCIP_Real p4[2] = { box[2*idx1+1], box[2*idx2+1] };
13910 SCIP_Real xstar2[2] = { xstar[idx1], xstar[idx2] };
13913 SCIP_CALL(
computeVertexPolyhedralFacetBivariate(
scip, overestimate, p1, p2, p3, p4, funvals[0], funvals[1], funvals[2], funvals[3], xstar2, targetvalue, success, coefs, facetconstant) );
13915 facetcoefs[idx1] = coefs[0];
13916 facetcoefs[idx2] = coefs[1];
13920 SCIP_CALL(
computeVertexPolyhedralFacetLP(
scip, conshdlr, overestimate, xstar, box, nallvars, nonfixedpos, funvals,
nvars, targetvalue, success, facetcoefs, facetconstant) );
13935 if( maxfaceterror > 0.0 )
13944 for( j = 0; j <
nvars; ++j )
13945 corner[nonfixedpos[j]] = (box[2 * nonfixedpos[j]] + box[2 * nonfixedpos[j] + 1]) / 2.0;
13946 midval = function(corner, nallvars, fundata);
13954 if( maxfaceterror > conshdlrdata->vp_adjfacetthreshold * feastol * fabs(midval) )
13956 SCIPdebugMsg(
scip,
"ignoring facet due to instability, it cuts off a vertex by %g (midval=%g).\n", maxfaceterror, midval);
13961 SCIPdebugMsg(
scip,
"maximum facet error %g (midval=%g), adjust constant to make cut valid!\n", maxfaceterror, midval);
13964 *facetconstant += maxfaceterror;
13966 *facetconstant -= maxfaceterror;
13998 return consdata->expr;
14014 return consdata->lhs;
14030 return consdata->rhs;
14049 if( consdata->nlrow ==
NULL )
14054 *nlrow = consdata->nlrow;
14075 return consdata->curv;
14129 SCIPerrorMessage(
"SCIPchgLhsNonlinear can only be called in problem stage.\n");
14139 if( consdata->lhs == lhs )
14142 consdata->lhs = lhs;
14145 consdata->ispropagated =
FALSE;
14168 SCIPerrorMessage(
"SCIPchgLhsNonlinear can only be called in problem stage.\n");
14178 if( consdata->rhs == rhs )
14181 consdata->rhs = rhs;
14184 consdata->ispropagated =
FALSE;
14208 SCIPerrorMessage(
"SCIPchgExprNonlinear can only be called in problem stage.\n");
14226 assert(consdata->nvarexprs == 0);
14228 assert(!consdata->catchedevents);
14237 consdata->issimplified =
FALSE;
14238 consdata->ispropagated =
FALSE;
14263 SCIPerrorMessage(
"SCIPaddLinearVarNonlinear can only be called in problem stage.\n");
14284 assert(consdata->nvarexprs == 0);
14286 assert(!consdata->catchedevents);
14298 SCIP_EXPR* children[2] = { consdata->expr, varexpr };
14310 consdata->issimplified =
FALSE;
14311 consdata->ispropagated =
FALSE;
14336 SCIPerrorMessage(
"SCIPaddExprNonlinear can only be called in problem stage.\n");
14373 SCIP_EXPR* children[2] = { consdata->expr, exprowned };
14385 consdata->issimplified =
FALSE;
14386 consdata->ispropagated =
FALSE;
14482 *
var = consdata->linvardecr;
14483 *coef = consdata->linvardecrcoef;
14506 *
var = consdata->linvarincr;
14507 *coef = consdata->linvarincrcoef;
14552 return ownerdata->filterpos >= -1 ?
SCIPgetVarExprVar(expr) : ownerdata->auxvar;
14585 assert(idx < ownerdata->nenfos);
14589 *nlhdlr = ownerdata->enfos[idx]->nlhdlr;
14591 if( nlhdlrexprdata !=
NULL )
14592 *nlhdlrexprdata = ownerdata->enfos[idx]->nlhdlrexprdata;
14594 if( nlhdlrparticipation !=
NULL )
14595 *nlhdlrparticipation = ownerdata->enfos[idx]->nlhdlrparticipation;
14597 if( sepabelowusesactivity !=
NULL )
14598 *sepabelowusesactivity = ownerdata->enfos[idx]->sepabelowusesactivity;
14600 if( sepaaboveusesactivity !=
NULL )
14601 *sepaaboveusesactivity = ownerdata->enfos[idx]->sepaaboveusesactivity;
14603 if( auxvalue !=
NULL )
14604 *auxvalue = ownerdata->enfos[idx]->auxvalue;
14622 assert(idx < ownerdata->nenfos);
14625 ownerdata->enfos[idx]->auxvalue = auxvalue;
14703 if( ownerdata->nenfos >= 0 &&
14704 ( (ownerdata->nactivityusesprop == 0 && ownerdata->nactivityusessepa == 0 && (useactivityforprop || useactivityforsepabelow || useactivityforsepaabove)) ||
14705 (ownerdata->nauxvaruses == 0 && useauxvar)
14717 ++ownerdata->nauxvaruses;
14719 if( useactivityforprop )
14720 ++ownerdata->nactivityusesprop;
14722 if( useactivityforsepabelow || useactivityforsepaabove )
14723 ++ownerdata->nactivityusessepa;
14728 if( useactivityforsepabelow )
14730 if( useactivityforsepaabove )
14733 if( useactivityforprop )
14897 if( ownerdata->propboundstag == conshdlrdata->curpropboundstag )
14899 bounds = ownerdata->propbounds;
14912 if( ownerdata->auxvar !=
NULL )
14917 auxvarbounds = conshdlrdata->intevalvar(
scip, ownerdata->auxvar, conshdlrdata);
15000 if( ownerdata->propboundstag == conshdlrdata->curpropboundstag )
15013 SCIPdebugMsg(
scip,
" applied %s: [%.20g,%.20g]\n", ownerdata->propboundstag == conshdlrdata->curpropboundstag ?
"previous propbounds" :
"activity", newbounds.
inf, newbounds.
sup);
15019 SCIPdebugMsg(
scip,
" cut off due to empty intersection with previous propbounds or activity\n");
15031 ownerdata->propbounds = newbounds;
15032 ownerdata->propboundstag = conshdlrdata->curpropboundstag;
15046 SCIPdebugMsg(
scip,
" new bounds [%g,%g] for expr %p not sufficiently tighter than activity -- not adding to propqueue or tightening auxvar\n", newbounds.
inf, newbounds.
sup, (
void*)expr);
15051 if(
SCIPexprGetNChildren(expr) > 0 && !ownerdata->inpropqueue && (ownerdata->nactivityusesprop > 0 || ownerdata->nactivityusessepa > 0 || ownerdata->nenfos < 0) )
15060 ownerdata->inpropqueue =
TRUE;
15107 for(
c = 0;
c < ownerdata->nconss; ++
c )
15111 consdata->ispropagated =
FALSE;
15142 assert(violscore >= 0.0);
15156 if( ownerdata->violscoretag != conshdlrdata->enforound )
15158 ownerdata->violscoresum = violscore;
15159 ownerdata->violscoremax = violscore;
15160 ownerdata->nviolscores = 1;
15161 ownerdata->violscoretag = conshdlrdata->enforound;
15165 ownerdata->violscoresum += violscore;
15166 if( violscore > ownerdata->violscoremax )
15167 ownerdata->violscoremax = violscore;
15168 ++ownerdata->nviolscores;
15217 for(
i = 0;
i < nexprs; ++
i )
15226 if( varssize ==
nvars )
15233 varexprs[
nvars++] = e;
15263 if( conshdlrdata->enforound != ownerdata->violscoretag )
15266 if( ownerdata->nviolscores == 0 )
15269 switch( conshdlrdata->branchscoreagg )
15273 return ownerdata->violscoresum / ownerdata->nviolscores;
15277 return ownerdata->violscoremax;
15281 return ownerdata->violscoresum;
15284 SCIPerrorMessage(
"Invalid value %c for branchscoreagg parameter\n", conshdlrdata->branchscoreagg);
15406 for(
i = 0;
i < nlinexprs; ++
i )
15413 for(
i = 0;
i < nquadexprs; ++
i )
15425 auxvalue += (lincoef + sqrcoef * solval) * solval;
15429 for(
i = 0;
i < nbilinexprs; ++
i )
15455 int detectpriority,
15471 if( conshdlr ==
NULL )
15486 conshdlrdata->nlhdlrs[conshdlrdata->nnlhdlrs] = *nlhdlr;
15487 ++conshdlrdata->nnlhdlrs;
15493 SCIPsortDownPtr((
void**)conshdlrdata->nlhdlrs, SCIPnlhdlrComp, conshdlrdata->nnlhdlrs);
15510 return conshdlrdata->nnlhdlrs;
15525 return conshdlrdata->nlhdlrs;
15543 for(
h = 0;
h < conshdlrdata->nnlhdlrs; ++
h )
15545 return conshdlrdata->nlhdlrs[
h];
15568 for( e = 0; e < ownerdata->nenfos; ++e )
15569 if( ownerdata->enfos[e]->nlhdlr == nlhdlr )
15570 return ownerdata->enfos[e]->nlhdlrexprdata;
static GRAPHNODE ** active
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define CONSHDLR_SEPAPRIORITY
#define CONSHDLR_PROPFREQ
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
Constraint handler for AND constraints, .
constraint handler for bound disjunction constraints
Constraint handler for linear constraints in their most general form, .
static SCIP_Bool isBinaryProduct(SCIP *scip, SCIP_EXPR *expr)
static SCIP_RETCODE createExprVar(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR **expr, SCIP_VAR *var)
static SCIP_Real computeVertexPolyhedralMaxFacetError(SCIP *scip, SCIP_Bool overestimate, SCIP_Real *funvals, SCIP_Real *box, int nallvars, int nvars, int *nonfixedpos, SCIP_Real *facetcoefs, SCIP_Real facetconstant)
static SCIP_Bool isEvenOperator(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool *hasvalue, SCIP_Real *value)
static SCIP_RETCODE enforceConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_EXPRITER *it, SCIP_Bool allowweakcuts, SCIP_Bool inenforcement, SCIP_Bool branchcandonly, SCIP_RESULT *result, SCIP_Bool *success)
static SCIP_RETCODE tryAddGadgetEvenOperatorVariable(SCIP *scip, SCIP_EXPR *evenopexpr, SCIP_EXPR *child, SCIP_CONS *cons, SYM_GRAPH *graph, int parentidx, SCIP_Bool hasparentcoef, SCIP_Real parentcoef, SCIP_Bool hassymval, SCIP_Real symval, SCIP_VAR ***consvars, SCIP_Real **consvals, int *maxnconsvars, SCIP_Bool *success)
static SCIP_RETCODE analyzeViolation(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_Real *maxabsconsviol, SCIP_Real *maxrelconsviol, SCIP_Real *minauxviol, SCIP_Real *maxauxviol, SCIP_Real *maxvarboundviol)
static SCIP_RETCODE presolveRedundantConss(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Bool *cutoff, int *ndelconss, int *nchgbds)
static SCIP_RETCODE enforceExpr(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_Bool allowweakcuts, SCIP_Bool inenforcement, SCIP_Bool branchcandonly, SCIP_RESULT *result)
static SCIP_RETCODE reversePropQueue(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_Bool *infeasible, int *ntightenings)
#define BRANCH_RANDNUMINITSEED
static SCIP_RETCODE dropVarEvent(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_EXPR *expr, SCIP_CONS *cons)
static SCIP_RETCODE forbidNonlinearVariablesMultiaggration(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
static SCIP_RETCODE computeHyperplaneThreePoints(SCIP *scip, SCIP_Real a1, SCIP_Real a2, SCIP_Real a3, SCIP_Real b1, SCIP_Real b2, SCIP_Real b3, SCIP_Real c1, SCIP_Real c2, SCIP_Real c3, SCIP_Real *alpha, SCIP_Real *beta, SCIP_Real *gamma_, SCIP_Real *delta)
static SCIP_RETCODE propagateLocks(SCIP *scip, SCIP_EXPR *expr, int nlockspos, int nlocksneg)
static SCIP_RETCODE registerBranchingCandidates(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Bool *success)
static SCIP_RETCODE bilinTermAddAuxExpr(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONSNONLINEAR_BILINTERM *term, SCIP_CONSNONLINEAR_AUXEXPR *auxexpr, SCIP_Bool *added)
static SCIP_RETCODE freeVarExprs(SCIP *scip, SCIP_CONSDATA *consdata)
static SCIP_RETCODE proposeFeasibleSolution(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_Bool *success)
static void scoreBranchingCandidates(SCIP *scip, SCIP_CONSHDLR *conshdlr, BRANCHCAND *cands, int ncands, SCIP_Bool considerfracnl, SCIP_SOL *sol)
#define consRespropNonlinear
static SCIP_RETCODE consSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_RESULT *result)
static void addExprsViolScore(SCIP *scip, SCIP_EXPR **exprs, int nexprs, SCIP_Real violscore, SCIP_SOL *sol, SCIP_Bool *success)
static SCIP_RETCODE tightenAuxVarBounds(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *expr, SCIP_INTERVAL bounds, SCIP_Bool *cutoff, int *ntightenings)
#define TABLE_DESC_NLHDLR
static SCIP_RETCODE replaceBinaryProducts(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_HASHMAP *exprmap, SCIP_EXPRITER *it, int *naddconss, int *nchgcoefs)
static SCIP_RETCODE computeVertexPolyhedralFacetBivariate(SCIP *scip, SCIP_Bool overestimate, SCIP_Real p1[2], SCIP_Real p2[2], SCIP_Real p3[2], SCIP_Real p4[2], SCIP_Real p1val, SCIP_Real p2val, SCIP_Real p3val, SCIP_Real p4val, SCIP_Real xstar[2], SCIP_Real targetvalue, SCIP_Bool *success, SCIP_Real *facetcoefs, SCIP_Real *facetconstant)
static SCIP_RETCODE tryAddGadgetEvenOperator(SCIP *scip, SCIP_EXPR *expr, SCIP_CONS *cons, SYM_GRAPH *graph, int parentidx, SCIP_Bool hasparentcoef, SCIP_Real parentcoef, SCIP_VAR ***consvars, SCIP_Real **consvals, int *maxnconsvars, SCIP_HASHSET *handledexprs, SCIP_Bool *success)
#define consInitpreNonlinear
static SCIP_RETCODE addExprViolScoresAuxVars(SCIP *scip, SCIP_EXPR *expr, SCIP_Real violscore, SCIP_VAR **auxvars, int nauxvars, SCIP_SOL *sol, SCIP_Bool *success)
static SCIP_RETCODE detectNlhdlr(SCIP *scip, SCIP_EXPR *expr, SCIP_CONS *cons)
static SCIP_RETCODE computeVertexPolyhedralFacetLP(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_Bool overestimate, SCIP_Real *xstar, SCIP_Real *box, int nallvars, int *nonfixedpos, SCIP_Real *funvals, int nvars, SCIP_Real targetvalue, SCIP_Bool *success, SCIP_Real *facetcoefs, SCIP_Real *facetconstant)
#define TABLE_EARLIEST_STAGE_NLHDLR
#define VERTEXPOLY_RANDNUMINITSEED
static SCIP_RETCODE getFactorizedBinaryQuadraticExpr(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_EXPR *sumexpr, int minterms, SCIP_EXPR **newexpr, int *naddconss)
#define consDelvarsNonlinear
static SCIP_RETCODE reformulateFactorizedBinaryQuadratic(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_VAR *facvar, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_EXPR **newexpr, int *naddconss)
static SCIP_RETCODE getConsRelViolation(SCIP *scip, SCIP_CONS *cons, SCIP_Real *viol, SCIP_SOL *sol, SCIP_Longint soltag)
#define consGetDiveBdChgsNonlinear
static SCIP_Bool isConsViolated(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE getBinaryProductExprDo(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *prodexpr, SCIP_EXPR **newexpr, int *naddconss, SCIP_Bool empathy4and)
static SCIP_RETCODE registerBranchingCandidatesAllUnfixed(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *nnotify)
static SCIP_Bool isIntervalBetter(SCIP *scip, SCIP_Bool subsetsufficient, SCIP_INTERVAL newinterval, SCIP_INTERVAL oldinterval)
static SCIP_RETCODE detectNlhdlrs(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
#define TABLE_EARLIEST_STAGE_NONLINEAR
static SCIP_RETCODE getBinaryProductExpr(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_HASHMAP *exprmap, SCIP_EXPR *prodexpr, SCIP_EXPR **newexpr, int *naddconss, int *nchgcoefs)
static SCIP_RETCODE catchVarEvents(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
#define TABLE_DESC_NONLINEAR
static SCIP_RETCODE createAuxVar(SCIP *scip, SCIP_EXPR *expr)
static SCIP_Real getViolSplitWeight(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_VAR *var, SCIP_SOL *sol)
static SCIP_RETCODE freeEnfoData(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool freeauxvar)
#define infty2infty(infty1, infty2, val)
static SCIP_RETCODE getBilinearBinaryTerms(SCIP *scip, SCIP_EXPR *sumexpr, SCIP_VAR **xs, SCIP_VAR **ys, int *childidxs, int *nterms)
static SCIP_RETCODE storeVarExprs(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata)
static SCIP_RETCODE buildVertexPolyhedralSeparationLP(SCIP *scip, int nvars, SCIP_LPI **lp)
static SCIP_RETCODE tryAddGadgetSquaredDifference(SCIP *scip, SCIP_EXPR *sumexpr, SCIP_CONS *cons, SYM_GRAPH *graph, int sumnodeidx, SCIP_VAR ***consvars, SCIP_Real **consvals, int *maxnconsvars, SCIP_HASHSET *handledexprs)
static SCIP_RETCODE tryAddGadgetBilinearProductSignedPerm(SCIP *scip, SCIP_EXPR *expr, SCIP_CONS *cons, SYM_GRAPH *graph, int parentidx, SCIP_Bool hasparentcoef, SCIP_Real parentcoef, SCIP_VAR ***consvars, SCIP_Real **consvals, int *maxnconsvars, SCIP_HASHSET *handledexprs, SCIP_Bool *success)
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
static SCIP_RETCODE propConss(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Bool force, SCIP_RESULT *result, int *nchgbds)
static SCIP_RETCODE presolveUpgrade(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool *upgraded, int *nupgdconss, int *naddconss)
static SCIP_RETCODE forwardPropExpr(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_EXPR *rootexpr, SCIP_Bool tightenauxvars, SCIP_Bool *infeasible, int *ntightenings)
static SCIP_RETCODE consEnfo(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_RESULT *result)
static SCIP_Bool isSingleLockedCand(SCIP *scip, SCIP_EXPR *expr)
static SCIP_Bool branchAuxNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr)
static SCIP_RETCODE presolveImplint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *nchgvartypes, SCIP_Bool *infeasible)
#define TABLE_NAME_NONLINEAR
#define TABLE_NAME_NLHDLR
static SCIP_RETCODE tryAddGadgetEvenOperatorSum(SCIP *scip, SCIP_EXPR *evenopexpr, SCIP_EXPR *child, SCIP_CONS *cons, SYM_GRAPH *graph, int parentidx, SCIP_Bool hasparentcoef, SCIP_Real parentcoef, SCIP_Bool hassymval, SCIP_Real symval, SCIP_VAR ***consvars, SCIP_Real **consvals, int *maxnconsvars, SCIP_HASHSET *handledexprs, SCIP_Bool *success)
static SCIP_Real getDualBranchscore(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_VAR *var)
static SCIP_RETCODE deinitSolve(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
static SCIP_RETCODE ensureLocVarsArraySize(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **vals, int nelems, int *maxnelems)
static SCIP_RETCODE createNlRow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE enforceExprNlhdlr(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_NLHDLR *nlhdlr, SCIP_EXPR *expr, SCIP_NLHDLREXPRDATA *nlhdlrexprdata, SCIP_SOL *sol, SCIP_Real auxvalue, SCIP_Bool overestimate, SCIP_Bool separated, SCIP_Bool allowweakcuts, SCIP_Bool inenforcement, SCIP_Bool branchcandonly, SCIP_RESULT *result)
static SCIP_RETCODE selectBranchingCandidate(SCIP *scip, SCIP_CONSHDLR *conshdlr, BRANCHCAND *cands, int ncands, SCIP_Bool considerfracnl, SCIP_SOL *sol, BRANCHCAND **selected)
static SCIP_RETCODE scaleConsSides(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_Bool *changed)
static SCIP_RETCODE computeViolation(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Longint soltag)
#define VERTEXPOLY_MAXPERTURBATION
static SCIP_RETCODE presolveBinaryProducts(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int *naddconss, int *nchgcoefs)
static SCIP_RETCODE catchVarEvent(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_EXPR *expr, SCIP_CONS *cons)
static SCIP_RETCODE enforceConstraints(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_Bool inenforcement, SCIP_Bool branchcandonly, SCIP_Real maxrelconsviol, SCIP_RESULT *result)
static SCIP_RETCODE presolveSingleLockedVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, int *nchgvartypes, int *naddconss, SCIP_Bool *infeasible)
#define VERTEXPOLY_USEDUALSIMPLEX
static SCIP_Bool varIsCenteredAt0(SCIP *scip, SCIP_VAR *var)
static SCIP_RETCODE initSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Bool *infeasible)
static SCIP_RETCODE computeVertexPolyhedralFacetUnivariate(SCIP *scip, SCIP_Real left, SCIP_Real right, SCIP_Real funleft, SCIP_Real funright, SCIP_Bool *success, SCIP_Real *facetcoef, SCIP_Real *facetconstant)
static SCIP_RETCODE collectBranchingCandidates(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Real maxrelconsviol, SCIP_SOL *sol, SCIP_Longint soltag, BRANCHCAND *cands, int *ncands)
static SCIP_RETCODE branching(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Real maxrelconsviol, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_RESULT *result)
static SCIP_RETCODE bilinearTermsInsertAll(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
#define VERTEXPOLY_ADJUSTFACETFACTOR
#define TABLE_POSITION_NONLINEAR
static SCIP_RETCODE initSolve(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
static SCIP_RETCODE removeSingleLockedVars(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPRITER *it, SCIP_HASHMAP *exprcands)
static SCIP_RETCODE branchingIntegralOrNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_Longint soltag, SCIP_Real maxrelconsviol, SCIP_Bool *branchintegral, SCIP_Bool *cutoff)
static void findUnlockedLinearVar(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE addLocks(SCIP *scip, SCIP_CONS *cons, int nlockspos, int nlocksneg)
static SCIP_RETCODE propExprDomains(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_RESULT *result, int *nchgbds)
static SCIP_RETCODE freeAuxVar(SCIP *scip, SCIP_EXPR *expr)
static SCIP_Real getConsAbsViolation(SCIP_CONS *cons)
static SCIP_RETCODE bilinearTermsFree(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_Bool branchingIntegralFirst(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol)
static SCIP_RETCODE createCons(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **cons, const char *name, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool copyexpr, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
static SCIP_RETCODE bilinearTermsInsertEntry(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_VAR *x, SCIP_VAR *y, int nlockspos, int nlocksneg, int *idx, SCIP_Bool existing)
static SCIP_RETCODE notifyNlhdlrNewsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_SOL *sol, SCIP_Bool solisbest)
static SCIP_Real getExprAbsOrigViolation(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Bool *violunder, SCIP_Bool *violover)
static SCIP_RETCODE presolveMergeConss(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool *success)
static SCIP_Real getDomainCenter(SCIP *scip, SCIP_VAR *var)
#define TABLE_POSITION_NLHDLR
static SCIP_RETCODE ensureOpenArraySizeSymdetect(SCIP *scip, int **openidx, int nelems, int *maxnelems)
static SCIP_RETCODE canonicalizeConstraints(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, SCIP_PRESOLTIMING presoltiming, SCIP_Bool *infeasible, int *ndelconss, int *naddconss, int *nchgcoefs)
static SCIP_RETCODE dropVarEvents(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS *cons)
static SCIP_Real getExprAbsAuxViolation(SCIP *scip, SCIP_EXPR *expr, SCIP_Real auxvalue, SCIP_SOL *sol, SCIP_Bool *violunder, SCIP_Bool *violover)
#define BILIN_MAXNAUXEXPRS
constraint handler for nonlinear constraints specified by algebraic expressions
Constraint handler for variable bound constraints .
#define SCIPdebugGetSolVal(scip, var, val)
#define SCIPdebugAddSolVal(scip, var, val)
#define SCIP_INTERVAL_INFINITY
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
default user interface dialog
absolute expression handler
power and signed power expression handlers
handler for sin expressions
constant value expression handler
variable expression handler
handler for variable index expressions
SCIP_Real SCIPevalBilinAuxExprNonlinear(SCIP *scip, SCIP_VAR *x, SCIP_VAR *y, SCIP_CONSNONLINEAR_AUXEXPR *auxexpr, SCIP_SOL *sol)
SCIP_RETCODE SCIPcheckQuadraticNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *isquadratic)
SCIP_RETCODE SCIPaddLinearVarNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real coef)
#define SCIP_DECL_NONLINCONSUPGD(x)
SCIP_RETCODE SCIPmarkExprPropagateNonlinear(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateConsBasicSignpowerNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *x, SCIP_VAR *z, SCIP_Real exponent, SCIP_Real xoffset, SCIP_Real zcoef, SCIP_Real lhs, SCIP_Real rhs)
SCIP_Real SCIPgetExprViolScoreNonlinear(SCIP_EXPR *expr)
unsigned int SCIPgetExprNAuxvarUsesNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPincludeConsUpgradeNonlinear(SCIP *scip, SCIP_DECL_NONLINCONSUPGD((*nlconsupgd)), int priority, SCIP_Bool active, const char *conshdlrname)
void SCIPgetLinvarMayDecreaseNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **var, SCIP_Real *coef)
void SCIPgetExprEnfoDataNonlinear(SCIP_EXPR *expr, int idx, SCIP_NLHDLR **nlhdlr, SCIP_NLHDLREXPRDATA **nlhdlrexprdata, SCIP_NLHDLR_METHOD *nlhdlrparticipation, SCIP_Bool *sepabelowusesactivity, SCIP_Bool *sepaaboveusesactivity, SCIP_Real *auxvalue)
int SCIPgetExprNLocksPosNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateConsBasicSOCNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *coefs, SCIP_Real *offsets, SCIP_Real constant, SCIP_VAR *rhsvar, SCIP_Real rhscoeff, SCIP_Real rhsoffset)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicVarbound(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPchgLhsNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs)
SCIP_HASHMAP * SCIPgetVarExprHashmapNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPinsertBilinearTermImplicitNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_VAR *x, SCIP_VAR *y, SCIP_VAR *auxvar, SCIP_Real coefx, SCIP_Real coefy, SCIP_Real coefaux, SCIP_Real cst, SCIP_Bool overestimate)
void SCIPsetExprEnfoAuxValueNonlinear(SCIP_EXPR *expr, int idx, SCIP_Real auxvalue)
SCIP_RETCODE SCIPcreateConsBounddisjunction(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_BOUNDTYPE *boundtypes, SCIP_Real *bounds, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPgetNlRowNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_NLROW **nlrow)
SCIP_RETCODE SCIPchgRhsNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs)
SCIP_RETCODE SCIPgetAbsViolationNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Real *viol)
SCIP_RETCODE SCIPgetExprRelAuxViolationNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_Real auxvalue, SCIP_SOL *sol, SCIP_Real *viol, SCIP_Bool *violunder, SCIP_Bool *violover)
SCIP_Longint SCIPgetCurBoundsTagNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPassumeConvexNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_VAR * SCIPgetExprAuxVarNonlinear(SCIP_EXPR *expr)
int SCIPgetBilinTermIdxNonlinear(SCIP_CONSHDLR *conshdlr, SCIP_VAR *x, SCIP_VAR *y)
void SCIPgetLinvarMayIncreaseNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **var, SCIP_Real *coef)
SCIP_RETCODE SCIPinsertBilinearTermExistingNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_VAR *x, SCIP_VAR *y, SCIP_VAR *auxvar, int nlockspos, int nlocksneg)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPaddExprNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_EXPR *expr, SCIP_Real coef)
SCIP_RETCODE SCIPprocessRowprepNonlinear(SCIP *scip, SCIP_NLHDLR *nlhdlr, SCIP_CONS *cons, SCIP_EXPR *expr, SCIP_ROWPREP *rowprep, SCIP_Bool overestimate, SCIP_VAR *auxvar, SCIP_Real auxvalue, SCIP_Bool allowweakcuts, SCIP_Bool branchscoresuccess, SCIP_Bool inenforcement, SCIP_SOL *sol, SCIP_RESULT *result)
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPgetExprAbsOrigViolationNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Longint soltag, SCIP_Real *viol, SCIP_Bool *violunder, SCIP_Bool *violover)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
unsigned int SCIPgetExprNSepaUsesActivityNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateConsNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
SCIP_RETCODE SCIPcreateConsBasicNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPgetExprActivityNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Real *activity)
int SCIPgetExprNEnfosNonlinear(SCIP_EXPR *expr)
int SCIPgetExprNLocksNegNonlinear(SCIP_EXPR *expr)
SCIP_CONSNONLINEAR_BILINTERM * SCIPgetBilinTermsNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPtightenExprIntervalNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_INTERVAL newbounds, SCIP_Bool *cutoff, int *ntightenings)
SCIP_RETCODE SCIPaddExprsViolScoreNonlinear(SCIP *scip, SCIP_EXPR **exprs, int nexprs, SCIP_Real violscore, SCIP_SOL *sol, SCIP_Bool *success)
int SCIPgetNBilinTermsNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIPgetExprPartialDiffNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_VAR *var)
SCIP_Longint SCIPgetLastBoundRelaxTagNonlinear(SCIP_CONSHDLR *conshdlr)
struct SCIP_ConsNonlinear_BilinTerm SCIP_CONSNONLINEAR_BILINTERM
SCIP_RETCODE SCIPcollectBilinTermsNonlinear(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss)
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)
SCIP_RETCODE SCIPcreateConsBasicQuadraticNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_Real lhs, SCIP_Real rhs)
SCIP_CONSNONLINEAR_BILINTERM * SCIPgetBilinTermNonlinear(SCIP_CONSHDLR *conshdlr, SCIP_VAR *x, SCIP_VAR *y)
#define SCIP_DECL_VERTEXPOLYFUN(f)
SCIP_RETCODE SCIPgetRelViolationNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Real *viol)
SCIP_INTERVAL SCIPgetExprBoundsNonlinear(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateConsBasicAnd(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars)
unsigned int SCIPgetExprNPropUsesActivityNonlinear(SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateConsQuadraticNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
SCIP_RETCODE SCIPchgExprNonlinear(SCIP *scip, SCIP_CONS *cons, SCIP_EXPR *expr)
SCIP_EXPRCURV SCIPgetCurvatureNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
void SCIPaddExprViolScoreNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_Real violscore)
void SCIPincrementCurBoundsTagNonlinear(SCIP_CONSHDLR *conshdlr, SCIP_Bool boundrelax)
SCIP_RETCODE SCIPgetExprAbsAuxViolationNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_Real auxvalue, SCIP_SOL *sol, SCIP_Real *viol, SCIP_Bool *violunder, SCIP_Bool *violover)
SCIP_Real SCIPevalExprQuadraticAuxNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol)
#define SCIP_MAXVERTEXPOLYDIM
SCIP_Real SCIPgetExprPartialDiffGradientDirNonlinear(SCIP *scip, SCIP_EXPR *expr, SCIP_VAR *var)
struct SCIP_ConsNonlinear_Auxexpr SCIP_CONSNONLINEAR_AUXEXPR
SCIP_RETCODE SCIPincludeConshdlrNonlinear(SCIP *scip)
SCIP_RETCODE SCIPcreateExprVar(SCIP *scip, SCIP_EXPR **expr, SCIP_VAR *var, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprVaridx(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPisExprAbs(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPappendExprSumExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR *child, SCIP_Real childcoef)
SCIP_RETCODE SCIPcreateExprSignpower(SCIP *scip, SCIP_EXPR **expr, SCIP_EXPR *child, SCIP_Real exponent, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisExprSignpower(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPisExprCos(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_Bool SCIPisPresolveFinished(SCIP *scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
int SCIPgetNObjVars(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
int SCIPgetNIntVars(SCIP *scip)
int SCIPgetNImplVars(SCIP *scip)
int SCIPgetNContVars(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
int SCIPgetNTotalVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
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)
SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin)
void SCIPhashsetFree(SCIP_HASHSET **hashset, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPhashsetExists(SCIP_HASHSET *hashset, void *element)
SCIP_Bool SCIPhashsetIsEmpty(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 SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
#define SCIPhashTwo(a, b)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgObjsen(SCIP_LPI *lpi, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiLoadColLP(SCIP_LPI *lpi, SCIP_OBJSEN objsen, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
#define SCIPdebugMsgPrint
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPdialogMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPhasExprCurvature(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPRCURV curv, SCIP_Bool *success, SCIP_HASHMAP *assumevarfixed)
SCIP_RETCODE SCIPheurPassSolTrySol(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *sol)
SCIP_RETCODE SCIPupdateStartpointHeurSubNlp(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *solcand, SCIP_Real violation)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
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)
SCIP_RETCODE SCIPgetCharParam(SCIP *scip, const char *name, char *value)
void SCIPswapPointers(void **pointer1, void **pointer2)
void SCIPswapReals(SCIP_Real *value1, SCIP_Real *value2)
SCIP_RETCODE SCIPaddExternBranchCand(SCIP *scip, SCIP_VAR *var, SCIP_Real score, SCIP_Real solval)
SCIP_Real SCIPgetBranchingPoint(SCIP *scip, SCIP_VAR *var, SCIP_Real suggestion)
SCIP_RETCODE SCIPbranchVarVal(SCIP *scip, SCIP_VAR *var, SCIP_Real val, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild)
SCIP_RETCODE SCIPgetLPBranchCands(SCIP *scip, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars)
int SCIPgetNLPBranchCands(SCIP *scip)
SCIP_Real SCIPgetBranchScore(SCIP *scip, SCIP_VAR *var, SCIP_Real downgain, SCIP_Real upgain)
SCIP_ROW ** SCIPcolGetRows(SCIP_COL *col)
int SCIPcolGetNLPNonz(SCIP_COL *col)
SCIP_Bool SCIPcolIsInLP(SCIP_COL *col)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
int SCIPconshdlrGetMaxNActiveConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPincludeConshdlr(SCIP *scip, const char *name, const char *desc, int sepapriority, int enfopriority, int chckpriority, int sepafreq, int propfreq, int eagerfreq, int maxprerounds, SCIP_Bool delaysepa, SCIP_Bool delayprop, SCIP_Bool needscons, SCIP_PROPTIMING proptiming, SCIP_PRESOLTIMING presoltiming, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSFREE((*consfree)), SCIP_DECL_CONSINIT((*consinit)), SCIP_DECL_CONSEXIT((*consexit)), SCIP_DECL_CONSINITPRE((*consinitpre)), SCIP_DECL_CONSEXITPRE((*consexitpre)), SCIP_DECL_CONSINITSOL((*consinitsol)), SCIP_DECL_CONSEXITSOL((*consexitsol)), SCIP_DECL_CONSDELETE((*consdelete)), SCIP_DECL_CONSTRANS((*constrans)), SCIP_DECL_CONSINITLP((*consinitlp)), SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFORELAX((*consenforelax)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSPROP((*consprop)), SCIP_DECL_CONSPRESOL((*conspresol)), SCIP_DECL_CONSRESPROP((*consresprop)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_DECL_CONSACTIVE((*consactive)), SCIP_DECL_CONSDEACTIVE((*consdeactive)), SCIP_DECL_CONSENABLE((*consenable)), SCIP_DECL_CONSDISABLE((*consdisable)), SCIP_DECL_CONSDELVARS((*consdelvars)), SCIP_DECL_CONSPRINT((*consprint)), SCIP_DECL_CONSCOPY((*conscopy)), SCIP_DECL_CONSPARSE((*consparse)), SCIP_DECL_CONSGETVARS((*consgetvars)), SCIP_DECL_CONSGETNVARS((*consgetnvars)), SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)), SCIP_DECL_CONSGETPERMSYMGRAPH((*consgetpermsymgraph)), SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH((*consgetsignedpermsymgraph)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagationEnabled(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_Bool SCIPconsIsOriginal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsSeparationEnabled(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_Real SCIPgetCutEfficacy(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_Bool SCIPisCutEfficacious(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)
SCIP_RETCODE SCIPinsertDatatreeLong(SCIP *scip, SCIP_DATATREE *datatree, const char *name, SCIP_Longint value)
SCIP_RETCODE SCIPinsertDatatreeReal(SCIP *scip, SCIP_DATATREE *datatree, const char *name, SCIP_Real value)
SCIP_RETCODE SCIPreleaseDialog(SCIP *scip, SCIP_DIALOG **dialog)
SCIP_DIALOG * SCIPdialoghdlrGetRoot(SCIP_DIALOGHDLR *dialoghdlr)
SCIP_Bool SCIPdialogHasEntry(SCIP_DIALOG *dialog, const char *entryname)
SCIP_RETCODE SCIPdialoghdlrAddHistory(SCIP_DIALOGHDLR *dialoghdlr, SCIP_DIALOG *dialog, const char *command, SCIP_Bool escapecommand)
SCIP_RETCODE SCIPincludeDialog(SCIP *scip, SCIP_DIALOG **dialog, SCIP_DECL_DIALOGCOPY((*dialogcopy)), SCIP_DECL_DIALOGEXEC((*dialogexec)), SCIP_DECL_DIALOGDESC((*dialogdesc)), SCIP_DECL_DIALOGFREE((*dialogfree)), const char *name, const char *desc, SCIP_Bool issubmenu, SCIP_DIALOGDATA *dialogdata)
SCIP_RETCODE SCIPaddDialogEntry(SCIP *scip, SCIP_DIALOG *dialog, SCIP_DIALOG *subdialog)
SCIP_DIALOG * SCIPgetRootDialog(SCIP *scip)
int SCIPdialogFindEntry(SCIP_DIALOG *dialog, const char *entryname, SCIP_DIALOG **subdialog)
int SCIPgetPtrarrayMinIdx(SCIP *scip, SCIP_PTRARRAY *ptrarray)
void * SCIPgetPtrarrayVal(SCIP *scip, SCIP_PTRARRAY *ptrarray, int idx)
SCIP_RETCODE SCIPfreePtrarray(SCIP *scip, SCIP_PTRARRAY **ptrarray)
int SCIPgetPtrarrayMaxIdx(SCIP *scip, SCIP_PTRARRAY *ptrarray)
SCIP_RETCODE SCIPcreatePtrarray(SCIP *scip, SCIP_PTRARRAY **ptrarray)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
SCIP_IMPLINTTYPE SCIPeventGetNewImpltype(SCIP_EVENT *event)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_SOL * SCIPeventGetSol(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
const char * SCIPexprhdlrGetName(SCIP_EXPRHDLR *exprhdlr)
SCIP_Bool SCIPexprhdlrHasGetSymData(SCIP_EXPRHDLR *exprhdlr)
SCIP_Bool SCIPexprhdlrHasMonotonicity(SCIP_EXPRHDLR *exprhdlr)
SCIP_Bool SCIPexprhdlrHasReverseProp(SCIP_EXPRHDLR *exprhdlr)
void SCIPexprSetActivity(SCIP_EXPR *expr, SCIP_INTERVAL activity, SCIP_Longint activitytag)
SCIP_RETCODE SCIPcreateExprQuadratic(SCIP *scip, SCIP_EXPR **expr, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_IMPLINTTYPE SCIPexprGetIntegrality(SCIP_EXPR *expr)
SCIP_RETCODE SCIPgetSymDataExpr(SCIP *scip, SCIP_EXPR *expr, SYM_EXPRDATA **symdata)
SCIP_RETCODE SCIPevalExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_SOL *sol, SCIP_Longint soltag)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
void SCIPexprGetQuadraticBilinTerm(SCIP_EXPR *expr, int termidx, SCIP_EXPR **expr1, SCIP_EXPR **expr2, SCIP_Real *coef, int *pos2, SCIP_EXPR **prodexpr)
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)
SCIP_Longint SCIPgetExprNewSoltag(SCIP *scip)
SCIP_EXPR * SCIPexpriterSkipDFS(SCIP_EXPRITER *iterator)
SCIP_EXPR_OWNERDATA * SCIPexprGetOwnerData(SCIP_EXPR *expr)
SCIP_Real SCIPexprGetDerivative(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPgetExprNVars(SCIP *scip, SCIP_EXPR *expr, int *nvars)
SCIP_Longint SCIPexprGetEvalTag(SCIP_EXPR *expr)
SCIP_Bool SCIPexprIsIntegral(SCIP_EXPR *expr)
SCIP_Bool SCIPexprAreQuadraticExprsVariables(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_EXPRITER_USERDATA SCIPexpriterGetCurrentUserData(SCIP_EXPRITER *iterator)
SCIP_Bool SCIPisExprValue(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPgetCoefExprProduct(SCIP_EXPR *expr)
void SCIPfreeExprQuadratic(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
SCIP_EXPR * SCIPexpriterGetCurrent(SCIP_EXPRITER *iterator)
void SCIPexpriterSetStagesDFS(SCIP_EXPRITER *iterator, SCIP_EXPRITER_STAGE stopstages)
SCIP_Bool SCIPisExprVar(SCIP *scip, 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_EXPR * SCIPexpriterRestartDFS(SCIP_EXPRITER *iterator, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExpriter(SCIP *scip, SCIP_EXPRITER **iterator)
SCIP_RETCODE SCIPprintExpr(SCIP *scip, SCIP_EXPR *expr, FILE *file)
SCIP_EXPR * SCIPexpriterGetParentDFS(SCIP_EXPRITER *iterator)
SCIP_Real SCIPgetValueExprValue(SCIP_EXPR *expr)
void SCIPexpriterSetCurrentUserData(SCIP_EXPRITER *iterator, SCIP_EXPRITER_USERDATA userdata)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPexprGetEvalValue(SCIP_EXPR *expr)
SCIP_Longint SCIPexprGetActivityTag(SCIP_EXPR *expr)
SCIP_RETCODE SCIPreplaceCommonSubexpressions(SCIP *scip, SCIP_EXPR **exprs, int nexprs, SCIP_Bool *replacedroot)
SCIP_EXPR * SCIPexpriterGetNext(SCIP_EXPRITER *iterator)
SCIP_RETCODE SCIPcheckExprQuadratic(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool *isquadratic)
SCIP_Real SCIPexprGetBardot(SCIP_EXPR *expr)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetConstantExprSum(SCIP_EXPR *expr)
SCIP_RETCODE SCIPcopyExpr(SCIP *sourcescip, SCIP *targetscip, SCIP_EXPR *expr, SCIP_EXPR **copyexpr, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *valid)
SCIP_VAR * SCIPgetVarExprVar(SCIP_EXPR *expr)
void SCIPexpriterSetChildUserData(SCIP_EXPRITER *iterator, SCIP_EXPRITER_USERDATA userdata)
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)
SCIP_EXPRITER_STAGE SCIPexpriterGetStageDFS(SCIP_EXPRITER *iterator)
void SCIPexprSetIntegrality(SCIP_EXPR *expr, SCIP_IMPLINTTYPE integrality)
SCIP_RETCODE SCIPduplicateExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR **copyexpr, SCIP_DECL_EXPR_MAPEXPR((*mapexpr)), void *mapexprdata, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
void SCIPcaptureExpr(SCIP_EXPR *expr)
SCIP_RETCODE SCIPexpriterInit(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_TYPE type, SCIP_Bool allowrevisit)
int SCIPexprGetNUses(SCIP_EXPR *expr)
SCIP_RETCODE SCIPgetExprVarExprs(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR **varexprs, int *nvarexprs)
SCIP_Longint SCIPexprGetDiffTag(SCIP_EXPR *expr)
SCIP_RETCODE SCIPsimplifyExpr(SCIP *scip, SCIP_EXPR *rootexpr, SCIP_EXPR **simplified, SCIP_Bool *changed, SCIP_Bool *infeasible, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPevalExprActivity(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPRHDLR * SCIPexprGetHdlr(SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetChildExprDFS(SCIP_EXPRITER *iterator)
SCIP_HEUR * SCIPfindHeur(SCIP *scip, const char *name)
const char * SCIPheurGetName(SCIP_HEUR *heur)
void SCIPintervalIntersectEps(SCIP_INTERVAL *resultant, SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Bool SCIPintervalIsEntire(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSetEntire(SCIP_Real infinity, SCIP_INTERVAL *resultant)
SCIP_Bool SCIPintervalIsSubsetEQ(SCIP_Real infinity, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
struct SCIP_Interval SCIP_INTERVAL
void SCIPintervalSetEmpty(SCIP_INTERVAL *resultant)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
void SCIPsetLPFeastol(SCIP *scip, SCIP_Real newfeastol)
SCIP_Real SCIPgetLPFeastol(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBlockMemory(scip, ptr)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize)
BMS_BUFMEM * SCIPbuffer(SCIP *scip)
#define SCIPallocClearBufferArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPdelNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
void SCIPenableNLP(SCIP *scip)
SCIP_RETCODE SCIPsetNlRowExpr(SCIP *scip, SCIP_NLROW *nlrow, SCIP_EXPR *expr)
SCIP_RETCODE SCIPaddLinearCoefToNlRow(SCIP *scip, SCIP_NLROW *nlrow, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_RETCODE SCIPchgNlRowConstant(SCIP *scip, SCIP_NLROW *nlrow, SCIP_Real constant)
void SCIPsetNlRowCurvature(SCIP *scip, SCIP_NLROW *nlrow, SCIP_EXPRCURV curvature)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
const char * SCIPnlhdlrGetDesc(SCIP_NLHDLR *nlhdlr)
SCIP_NLHDLR ** SCIPgetNlhdlrsNonlinear(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPnlhdlrHasIntEval(SCIP_NLHDLR *nlhdlr)
int SCIPnlhdlrGetDetectPriority(SCIP_NLHDLR *nlhdlr)
SCIP_NLHDLREXPRDATA * SCIPgetNlhdlrExprDataNonlinear(SCIP_NLHDLR *nlhdlr, SCIP_EXPR *expr)
SCIP_Bool SCIPnlhdlrIsEnabled(SCIP_NLHDLR *nlhdlr)
int SCIPgetNNlhdlrsNonlinear(SCIP_CONSHDLR *conshdlr)
const char * SCIPnlhdlrGetName(SCIP_NLHDLR *nlhdlr)
SCIP_NLHDLR * SCIPfindNlhdlrNonlinear(SCIP_CONSHDLR *conshdlr, const char *name)
SCIP_Bool SCIPnlhdlrHasEstimate(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_Bool SCIPnlhdlrHasInitSepa(SCIP_NLHDLR *nlhdlr)
int SCIPnlhdlrGetEnfoPriority(SCIP_NLHDLR *nlhdlr)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_CONSHDLR * SCIProwGetOriginConshdlr(SCIP_ROW *row)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
void SCIPmarkRowNotRemovableLocal(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_Real SCIPgetSepaMinEfficacy(SCIP *scip)
SCIP_SOLORIGIN SCIPsolGetOrigin(SCIP_SOL *sol)
SCIP_RETCODE SCIPcreateSolCopy(SCIP *scip, SCIP_SOL **sol, SCIP_SOL *sourcesol)
SCIP_HEUR * SCIPsolGetHeur(SCIP_SOL *sol)
SCIP_RETCODE SCIPcreateLPSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
SCIP_RETCODE SCIPunlinkSol(SCIP *scip, SCIP_SOL *sol)
SCIP_RETCODE SCIPincSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real incval)
void SCIPupdateSolConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
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_Real SCIPgetSolTransObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_Real SCIPgetAvgPseudocostCount(SCIP *scip, SCIP_BRANCHDIR dir)
SCIP_TABLE * SCIPfindTable(SCIP *scip, const char *name)
SCIP_RETCODE SCIPincludeTable(SCIP *scip, const char *name, const char *desc, SCIP_Bool active, SCIP_DECL_TABLECOPY((*tablecopy)), SCIP_DECL_TABLEFREE((*tablefree)), SCIP_DECL_TABLEINIT((*tableinit)), SCIP_DECL_TABLEEXIT((*tableexit)), SCIP_DECL_TABLEINITSOL((*tableinitsol)), SCIP_DECL_TABLEEXITSOL((*tableexitsol)), SCIP_DECL_TABLEOUTPUT((*tableoutput)), SCIP_DECL_TABLECOLLECT((*tablecollect)), SCIP_TABLEDATA *tabledata, int position, SCIP_STAGE earlieststage)
SCIP_RETCODE SCIPcreateClock(SCIP *scip, SCIP_CLOCK **clck)
SCIP_RETCODE SCIPresetClock(SCIP *scip, SCIP_CLOCK *clck)
SCIP_RETCODE SCIPstopClock(SCIP *scip, SCIP_CLOCK *clck)
SCIP_RETCODE SCIPfreeClock(SCIP *scip, SCIP_CLOCK **clck)
SCIP_Real SCIPgetClockTime(SCIP *scip, SCIP_CLOCK *clck)
SCIP_RETCODE SCIPstartClock(SCIP *scip, SCIP_CLOCK *clck)
SCIP_Bool SCIPisRelEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisUbBetter(SCIP *scip, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLbBetter(SCIP *scip, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisHugeValue(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisSumLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPround(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeastol(SCIP *scip)
SCIP_Real SCIPgetHugeValue(SCIP *scip)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
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_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPparseReal(SCIP *scip, const char *str, SCIP_Real *value, char **endptr)
int SCIPgetDepth(SCIP *scip)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_Real SCIPgetVarPseudocostCountCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNonimpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
void SCIPvarMarkRelaxationOnly(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarImplType(SCIP *scip, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateVarImpl(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_IMPLINTTYPE impltype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Real SCIPgetVarPseudocostVal(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_IMPLINTTYPE SCIPvarGetImplType(SCIP_VAR *var)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
void SCIPqueueFree(SCIP_QUEUE **queue)
SCIP_RETCODE SCIPqueueCreate(SCIP_QUEUE **queue, int initsize, SCIP_Real sizefac)
SCIP_RETCODE SCIPqueueInsert(SCIP_QUEUE *queue, void *elem)
SCIP_Bool SCIPqueueIsEmpty(SCIP_QUEUE *queue)
void * SCIPqueueRemove(SCIP_QUEUE *queue)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
int SCIPrandomGetInt(SCIP_RANDNUMGEN *randnumgen, int minrandval, int maxrandval)
SCIP_VAR ** SCIProwprepGetVars(SCIP_ROWPREP *rowprep)
SCIP_RETCODE SCIPcleanupRowprep2(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Real maxcoefbound, SCIP_Bool *success)
int SCIProwprepGetNModifiedVars(SCIP_ROWPREP *rowprep)
SCIP_Real SCIPgetRowprepViolation(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Bool *reliable)
SCIP_Real * SCIProwprepGetCoefs(SCIP_ROWPREP *rowprep)
SCIP_VAR ** SCIProwprepGetModifiedVars(SCIP_ROWPREP *rowprep)
char * SCIProwprepGetName(SCIP_ROWPREP *rowprep)
SCIP_SIDETYPE SCIProwprepGetSidetype(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)
int SCIProwprepGetNVars(SCIP_ROWPREP *rowprep)
void SCIProwprepRecordModifications(SCIP_ROWPREP *rowprep)
SCIP_RETCODE SCIPcleanupRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Real minviol, SCIP_Real *viol, SCIP_Bool *success)
void SCIPfreeRowprep(SCIP *scip, SCIP_ROWPREP **rowprep)
void SCIPprintRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, FILE *file)
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
void SCIPsortDown(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
void SCIPsortDownIntPtr(int *intarray, void **ptrarray, int len)
void SCIPsort(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPskipSpace(char **s)
SCIP_RETCODE SCIPaddSymgraphEdge(SCIP *scip, SYM_GRAPH *graph, int first, int second, SCIP_Bool hasval, SCIP_Real val)
SCIP_RETCODE SCIPaddSymgraphOpnode(SCIP *scip, SYM_GRAPH *graph, int op, int *nodeidx)
SCIP_RETCODE SCIPgetSymActiveVariables(SCIP *scip, SYM_SYMTYPE symtype, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
SCIP_RETCODE SCIPaddSymgraphValnode(SCIP *scip, SYM_GRAPH *graph, SCIP_Real val, int *nodeidx)
int SCIPgetSymgraphVarnodeidx(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR *var)
SCIP_RETCODE SCIPaddSymgraphConsnode(SCIP *scip, SYM_GRAPH *graph, SCIP_CONS *cons, SCIP_Real lhs, SCIP_Real rhs, int *nodeidx)
SCIP_RETCODE SCIPaddSymgraphVarAggregation(SCIP *scip, SYM_GRAPH *graph, int rootidx, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real constant)
int SCIPgetSymExprdataNConstants(SYM_EXPRDATA *symdata)
int SCIPgetSymgraphNegatedVarnodeidx(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR *var)
SCIP_RETCODE SCIPfreeSymDataExpr(SCIP *scip, SYM_EXPRDATA **symdata)
int SCIPgetSymgraphNNodes(SYM_GRAPH *graph)
SCIP_Real * SCIPgetSymExprdataConstants(SYM_EXPRDATA *symdata)
SCIP_RETCODE SCIPgetCoefSymData(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR *parentexpr, SCIP_Real *coef, SCIP_Bool *success)
SCIPfreeSol(scip, &heurdata->sol))
SCIPfreeRandom(scip, &heurdata->randnumgen)
SCIPcreateRandom(scip, &heurdata->randnumgen, DEFAULT_RANDSEED, TRUE))
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
NLP local search primal heuristic using sub-SCIPs.
primal heuristic that tries a given solution
SCIP_Bool SCIPcliqueHasVar(SCIP_CLIQUE *clique, SCIP_VAR *var, SCIP_Bool value)
static volatile int nterms
SCIP_Bool SCIPlapackIsAvailable(void)
SCIP_RETCODE SCIPlapackSolveLinearEquations(BMS_BUFMEM *bufmem, int n, SCIP_Real *A, SCIP_Real *b, SCIP_Real *x, SCIP_Bool *success)
interface methods for lapack functions
static const char * paramname[]
#define BMSclearMemoryArray(ptr, num)
SCIP_RETCODE SCIPnlhdlrFree(SCIP *scip, SCIP_NLHDLR **nlhdlr)
SCIP_RETCODE SCIPnlhdlrCreate(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)
void SCIPnlhdlrPrintStatistics(SCIP *scip, SCIP_NLHDLR **nlhdlrs, int nnlhdlrs, FILE *file)
SCIP_RETCODE SCIPnlhdlrCollectStatistics(SCIP *scip, SCIP_NLHDLR **nlhdlrs, int nnlhdlrs, SCIP_DATATREE *datatree)
private functions of nonlinear handlers of nonlinear constraints
#define SCIPnlhdlrIncrementNSeparated(nlhdlr)
#define SCIPnlhdlrResetNDetectionslast(nlhdlr)
#define SCIPnlhdlrIncrementNCutoffs(nlhdlr)
nonlinear handlers for convex and concave expressions, respectively
SCIP_RETCODE SCIPgetSymOpNodeType(SCIP *scip, const char *opnodename, int *nodetype)
propagator for symmetry handling
#define SCIPdebugPrintCons(x, y, z)
methods for sorting joint arrays of various types
public methods for data tree structure
public functions to work with algebraic expressions
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
SCIP_DECL_NONLINCONSUPGD((*consupgd))
SCIP_NLHDLR_METHOD nlhdlrparticipation
SCIP_Bool sepaaboveusesactivity
SCIP_Bool sepabelowusesactivity
SCIP_NLHDLREXPRDATA * nlhdlrexprdata
SCIP_CONSNONLINEAR_AUXEXPR ** exprs
union SCIP_ConsNonlinear_BilinTerm::@055261256347130033265073212045155110332303333345 aux
structs for symmetry computations
methods for dealing with symmetry detection graphs
struct SCIP_Clock SCIP_CLOCK
#define SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(x)
#define SCIP_DECL_CONSGETPERMSYMGRAPH(x)
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSINITPRE(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSEXIT(x)
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSINITSOL(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
#define SCIP_DECL_CONSDISABLE(x)
struct SYM_Graph SYM_GRAPH
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSGETDIVEBDCHGS(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
#define SCIP_DECL_CONSACTIVE(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSENABLE(x)
#define SCIP_DECL_CONSINITLP(x)
#define SCIP_DECL_CONSEXITPRE(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
#define SCIP_DECL_CONSINIT(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
#define SCIP_DECL_CONSDELVARS(x)
struct SCIP_Dialog SCIP_DIALOG
#define SCIP_DECL_DIALOGEXEC(x)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
#define SCIP_EVENTTYPE_BOUNDCHANGED
#define SCIP_EVENTTYPE_TYPECHANGED
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_VARFIXED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_BESTSOLFOUND
#define SCIP_EVENTTYPE_FORMAT
#define SCIP_EVENTTYPE_BOUNDRELAXED
#define SCIP_EVENTTYPE_SOLFOUND
#define SCIP_EVENTTYPE_IMPLTYPECHANGED
#define SCIP_EVENTTYPE_BOUNDTIGHTENED
struct SCIP_Expr SCIP_EXPR
struct SCIP_ExprIter SCIP_EXPRITER
#define SCIP_DECL_EXPR_OWNERCREATE(x)
#define SCIP_EXPRITER_VISITINGCHILD
#define SCIP_DECL_EXPR_OWNERPRINT(x)
struct SCIP_Expr_OwnerData SCIP_EXPR_OWNERDATA
#define SCIP_DECL_EXPR_INTEVALVAR(x)
@ SCIP_EXPRITER_RTOPOLOGIC
struct SYM_ExprData SYM_EXPRDATA
#define SCIP_DECL_EXPR_MAPEXPR(x)
#define SCIP_DECL_EXPR_OWNERFREE(x)
#define SCIP_EXPRITER_LEAVEEXPR
#define SCIP_DECL_EXPR_OWNEREVALACTIVITY(x)
#define SCIP_EXPRITER_ENTEREXPR
struct SCIP_Heur SCIP_HEUR
@ SCIP_BRANCHDIR_DOWNWARDS
struct SCIP_Clique SCIP_CLIQUE
enum SCIP_BoundType SCIP_BOUNDTYPE
@ SCIP_LPSOLSTAT_UNBOUNDEDRAY
struct SCIP_RowPrep SCIP_ROWPREP
struct SCIP_HashMap SCIP_HASHMAP
#define SCIP_DECL_SORTPTRCOMP(x)
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_SORTINDCOMP(x)
struct SCIP_RandNumGen SCIP_RANDNUMGEN
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
struct SCIP_PtrArray SCIP_PTRARRAY
struct SCIP_HashSet SCIP_HASHSET
struct SCIP_HashTable SCIP_HASHTABLE
struct SCIP_Queue SCIP_QUEUE
#define SCIP_NLHDLR_METHOD_SEPAABOVE
#define SCIP_DECL_NLHDLREVALAUX(x)
struct SCIP_NlhdlrData SCIP_NLHDLRDATA
#define SCIP_NLHDLR_METHOD_SEPABOTH
#define SCIP_NLHDLR_METHOD_ACTIVITY
unsigned int SCIP_NLHDLR_METHOD
#define SCIP_DECL_NLHDLRDETECT(x)
#define SCIP_NLHDLR_METHOD_NONE
struct SCIP_Nlhdlr SCIP_NLHDLR
struct SCIP_NlhdlrExprData SCIP_NLHDLREXPRDATA
#define SCIP_NLHDLR_METHOD_ALL
#define SCIP_NLHDLR_METHOD_SEPABELOW
struct SCIP_NlRow SCIP_NLROW
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_INITPRESOLVE
@ SCIP_STAGE_EXITPRESOLVE
enum SYM_Symtype SYM_SYMTYPE
#define SCIP_DECL_TABLEOUTPUT(x)
#define SCIP_DECL_TABLECOLLECT(x)
#define SCIP_PRESOLTIMING_ALWAYS
#define SCIP_PRESOLTIMING_MEDIUM
unsigned int SCIP_PRESOLTIMING
#define SCIP_PRESOLTIMING_EXHAUSTIVE
struct SCIP_Node SCIP_NODE
enum SCIP_ImplintType SCIP_IMPLINTTYPE
@ SCIP_IMPLINTTYPE_STRONG
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_MULTAGGR