251#define CONSHDLR_NAME "indicator"
252#define CONSHDLR_DESC "indicator constraint handler"
253#define CONSHDLR_SEPAPRIORITY 10
254#define CONSHDLR_ENFOPRIORITY -100
255#define CONSHDLR_CHECKPRIORITY -6000000
256#define CONSHDLR_SEPAFREQ 10
257#define CONSHDLR_PROPFREQ 1
258#define CONSHDLR_EAGERFREQ 100
260#define CONSHDLR_MAXPREROUNDS -1
261#define CONSHDLR_DELAYSEPA FALSE
262#define CONSHDLR_DELAYPROP FALSE
263#define CONSHDLR_NEEDSCONS TRUE
265#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST
266#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
270#define EVENTHDLR_BOUND_NAME "indicatorbound"
271#define EVENTHDLR_BOUND_DESC "bound change event handler for indicator constraints"
273#define EVENTHDLR_LINCONSBOUND_NAME "indicatorlinconsbound"
274#define EVENTHDLR_LINCONSBOUND_DESC "bound change event handler for lincons of indicator constraints"
276#define EVENTHDLR_RESTART_NAME "indicatorrestart"
277#define EVENTHDLR_RESTART_DESC "force restart if absolute gap is 1 or enough binary variables have been fixed"
281#define CONFLICTHDLR_NAME "indicatorconflict"
282#define CONFLICTHDLR_DESC "replace slack variables and generate logicor constraints"
283#define CONFLICTHDLR_PRIORITY 200000
286#define LINCONSUPGD_PRIORITY +100000
289#define DEFAULT_BRANCHINDICATORS FALSE
290#define DEFAULT_GENLOGICOR FALSE
291#define DEFAULT_ADDCOUPLING TRUE
292#define DEFAULT_MAXCOUPLINGVALUE 1e4
293#define DEFAULT_ADDCOUPLINGCONS FALSE
294#define DEFAULT_SEPACOUPLINGCUTS TRUE
295#define DEFAULT_SEPACOUPLINGLOCAL FALSE
296#define DEFAULT_SEPACOUPLINGVALUE 1e4
297#define DEFAULT_SEPAALTERNATIVELP FALSE
298#define DEFAULT_SEPAPERSPECTIVE FALSE
299#define DEFAULT_SEPAPERSPLOCAL TRUE
300#define DEFAULT_MAXSEPANONVIOLATED 3
301#define DEFAULT_TRYSOLFROMCOVER FALSE
302#define DEFAULT_UPGRADELINEAR FALSE
303#define DEFAULT_USEOTHERCONSS FALSE
304#define DEFAULT_USEOBJECTIVECUT FALSE
305#define DEFAULT_UPDATEBOUNDS FALSE
306#define DEFAULT_MAXCONDITIONALTLP 0.0
307#define DEFAULT_MAXSEPACUTS 100
308#define DEFAULT_MAXSEPACUTSROOT 2000
309#define DEFAULT_REMOVEINDICATORS FALSE
310#define DEFAULT_GENERATEBILINEAR FALSE
311#define DEFAULT_SCALESLACKVAR FALSE
312#define DEFAULT_NOLINCONSCONT FALSE
313#define DEFAULT_TRYSOLUTIONS TRUE
314#define DEFAULT_ENFORCECUTS FALSE
315#define DEFAULT_DUALREDUCTIONS TRUE
316#define DEFAULT_ADDOPPOSITE FALSE
317#define DEFAULT_CONFLICTSUPGRADE FALSE
318#define DEFAULT_FORCERESTART FALSE
319#define DEFAULT_RESTARTFRAC 0.9
320#define DEFAULT_USESAMESLACKVAR FALSE
324#define OBJEPSILON 0.001
325#define SEPAALTTHRESHOLD 10
326#define MAXROUNDINGROUNDS 1
342 unsigned int linconsactive:1;
343 unsigned int implicationadded:1;
344 unsigned int slacktypechecked:1;
349struct SCIP_ConshdlrData
378 int maxroundingrounds;
402 int maxsepanonviolated;
431struct SCIP_ConflicthdlrData
452#define SCIP_CALL_PARAM(x) do \
454 SCIP_RETCODE _restat_; \
455 if ( (_restat_ = (x)) != SCIP_OKAY && (_restat_ != SCIP_PARAMETERUNKNOWN) ) \
457 SCIPerrorMessage("[%s:%d] Error <%d> in function call\n", __FILE__, __LINE__, _restat_); \
498 lincons = consdata->lincons;
513 nlocvars = nvarslincons;
533 vars[0] = consdata->binvar;
549 else if( nlocvars == 1 )
570 vars[0] = consdata->slackvar;
586 else if( nlocvars == 1 )
627 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
628 assert( consdata->linconsactive );
645 ++(consdata->nfixednonzero);
646#ifdef SCIP_MORE_DEBUG
647 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
657 ++(consdata->nfixednonzero);
658#ifdef SCIP_MORE_DEBUG
659 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
669 --(consdata->nfixednonzero);
670#ifdef SCIP_MORE_DEBUG
671 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
681 --(consdata->nfixednonzero);
682#ifdef SCIP_MORE_DEBUG
683 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
694 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
697 conshdlrdata->boundhaschanged =
TRUE;
717#ifdef SCIP_MORE_DEBUG
725 conshdlrdata->linconsboundschanged =
TRUE;
753 assert( conshdlrdata->forcerestart );
777 if ( conshdlrdata->performedrestart )
781 ++(conshdlrdata->nbinvarszero);
789 if ( conshdlrdata->nbinvarszero > (
int) ((
SCIP_Real) conshdlrdata->ninitconss * conshdlrdata->restartfrac) )
792 "Forcing restart, since %d binary variables among %d have been fixed.\n", conshdlrdata->nbinvarszero, conshdlrdata->ninitconss);
796 if ( conshdlrdata->objindicatoronly )
800 conshdlrdata->performedrestart =
TRUE;
812 if ( ! conshdlrdata->objindicatoronly )
829 conshdlrdata->performedrestart =
TRUE;
879 assert( bdchginfos !=
NULL || nbdchginfos == 0 );
902 for (
i = 0;
i < nbdchginfos; ++
i)
930 if ( haveslack &&
i == nbdchginfos )
937 SCIPdebugMsg(
scip,
"Found conflict involving slack variables that can be remodelled.\n");
947 for (
i = 0;
i < nbdchginfos; ++
i)
963 for (j = 0; j < nconss; ++j)
970 if ( slackvar ==
var )
998 if (
i == nbdchginfos )
1054 if ( *value == newvalue )
1109#ifdef SCIP_ENABLE_IISCHECK
1152 for (
c = 0;
c < nconss; ++
c)
1179 lincons = consdata->lincons;
1184 slackvar = consdata->slackvar;
1206 linvals[0] = scalar;
1236 for (v = 0; v < nlinvars; ++v)
1243 if (
var == slackvar )
1256 newvars[nnewvars++] =
var;
1274 for (v = 0; v < nnewvars; ++v)
1288 for (v = nnewvars - 1; v >= 0; --v)
1300 for (v = 0; v < nlinvars; ++v)
1307 if (
var == slackvar )
1312 matval[cnt] = sign * linvals[v];
1337 if ( conshdlrdata->useotherconss )
1344 for (
c = 0;
c < nconss; ++
c)
1388 for (v = 0; v < nlinvars; ++v)
1404 newvars[nnewvars++] =
var;
1422 for (v = 0; v < nnewvars; ++v)
1436 for (v = nnewvars - 1; v >= 0; --v)
1447 for (v = 0; v < nlinvars; ++v)
1455 matval[cnt] = linvals[v];
1533 assert( conshdlrdata->naddlincons <= conshdlrdata->maxaddlincons );
1535 if ( num > conshdlrdata->maxaddlincons )
1541 conshdlrdata->maxaddlincons = newsize;
1543 assert( num <= conshdlrdata->maxaddlincons );
1589 conshdlrdata->nrows = 1;
1631 for (j = 0; j < nCols; ++j)
1636 for (j = 0; j < nconss; ++j)
1644 ind = consdata->colindex;
1649 covered[ind] =
TRUE;
1658 for (j = 0; j < nCols; ++j)
1697 int* indices =
NULL;
1707 for (j = 0; j < nconss; ++j)
1715 if ( consdata->colindex >= 0 )
1721 obj[cnt] = 1.0 - val;
1722 indices[cnt++] = consdata->colindex;
1749 int* indices =
NULL;
1759 for (j = 0; j < nconss; ++j)
1767 if ( consdata->colindex >= 0 )
1770 indices[cnt++] = consdata->colindex;
1798 int* indices =
NULL;
1811 for (j = 0; j < nconss; ++j)
1819 if ( consdata->colindex >= 0 )
1823 indices[cnt] = consdata->colindex;
1890 int* indices =
NULL;
1903 for (j = 0; j < nconss; ++j)
1913 if ( consdata->colindex >= 0 )
1915 indices[cnt] = consdata->colindex;
1955 altlp = conshdlrdata->altlp;
1956 lbhash = conshdlrdata->lbhash;
1957 ubhash = conshdlrdata->ubhash;
1965 for (v = 0; v <
nvars; ++v)
1991 conshdlrdata->scaled =
FALSE;
2019 altlp = conshdlrdata->altlp;
2020 lbhash = conshdlrdata->lbhash;
2021 ubhash = conshdlrdata->ubhash;
2029 for (v = 0; v <
nvars; ++v)
2091 lbhash = conshdlrdata->lbhash;
2092 ubhash = conshdlrdata->ubhash;
2100 for (v = 0; v <
nvars; ++v)
2114 assert( 0 <= col && col < nCols );
2132 assert( 0 <= col && col < nCols );
2161 if ( ! conshdlrdata->scaled )
2172 altlp = conshdlrdata->altlp;
2182 for (j = 0; j < cnt; ++j)
2186 sum = -
REALABS(sum) / ((double) cnt);
2194 conshdlrdata->scaled =
TRUE;
2247 if ( conshdlrdata->altlp ==
NULL )
2261 assert( nrows == conshdlrdata->nrows );
2284 matval[cnt++] = sign * rhscoef;
2288 for (v = 0; v <
nvars; ++v)
2299 if (
var != slackvar )
2305 if ( ind < INT_MAX )
2313 matind[cnt] = (conshdlrdata->nrows)++;
2316 newrowsslack[nnewrows++] =
TRUE;
2319 matval[cnt++] = sign * vals[v];
2333 matind[cnt] = (conshdlrdata->nrows)++;
2336 newrowsslack[nnewrows++] =
FALSE;
2337 newvars[nnewvars++] =
var;
2340 matval[cnt++] = sign * vals[v];
2353 for (
i = 0;
i < nnewrows; ++
i)
2355 if ( newrowsslack[
i] )
2385 for (v = 0; v < nnewvars; ++v)
2394 matbeg[nnewcols] = cnt;
2398 matval[cnt++] = -val;
2403 matval[cnt++] = -1.0;
2404 obj[nnewcols] = 0.0;
2407 ++conshdlrdata->nlbbounds;
2411 SCIPdebugMsg(
scip,
"Added column for lower bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2420 matbeg[nnewcols] = cnt;
2424 matval[cnt++] = val;
2429 matval[cnt++] = 1.0;
2430 obj[nnewcols] = 0.0;
2433 ++conshdlrdata->nubbounds;
2437 SCIPdebugMsg(
scip,
"Added column for upper bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2451 assert( cnt == ncols + nnewcols + 1 );
2463 conshdlrdata->scaled =
FALSE;
2517 SCIPdebugMsg(
scip,
"Slack variable is aggregated (scalar: %f, constant: %f).\n", scalar, constant);
2527 linvals[0] = scalar;
2550 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
TRUE, colindex) );
2555 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
FALSE, colindex) );
2561 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linlhs, objcoef, -1.0,
FALSE, colindex) );
2620 for (j = 0; j < nrowcols; ++j)
2630 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
TRUE, colindex) );
2635 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
FALSE, colindex) );
2641 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowlhs, objcoef, -1.0,
FALSE, colindex) );
2673 if ( conshdlrdata->objcutindex >= 0 )
2677 if ( ! conshdlrdata->objothervarsonly )
2681 SCIPdebugMsg(
scip,
"Add objective cut to alternative LP (obj. bound: %g).\n", conshdlrdata->objupperbound);
2688 for (v = 0; v <
nvars; ++v)
2700 objvars[nobjvars] =
var;
2701 objvals[nobjvars++] =
objval;
2706 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nobjvars, objvars, objvals, conshdlrdata->objupperbound, 0.0, 1.0,
FALSE, &conshdlrdata->objcutindex) );
2707 assert( conshdlrdata->objcutindex >= 0 );
2708 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2738 if ( conshdlrdata->altlp !=
NULL )
2745 if ( consdata->colindex >= 0 )
2749 consdata->colindex = -1;
2753 conshdlrdata->scaled =
FALSE;
2772 if ( ! conshdlrdata->useobjectivecut )
2775 if ( conshdlrdata->altlp ==
NULL )
2787 if (
SCIPisLT(
scip, objbnd, conshdlrdata->objupperbound) )
2788 conshdlrdata->objupperbound = objbnd;
2795 if (
SCIPisLT(
scip, conshdlrdata->objupperbound, conshdlrdata->objaltlpbound) )
2797 SCIPdebugMsg(
scip,
"Update objective bound to %g.\n", conshdlrdata->objupperbound);
2800 if ( conshdlrdata->objcutindex < 0 )
2814 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2894 if ( maxcondition > 0.0 )
2898 if ( condition !=
SCIP_INVALID && condition > maxcondition )
2900 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix (%e) exceeds maximal allowance (%e).\n", condition, maxcondition);
2908 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix (%e) is below maximal allowance (%e).\n", condition, maxcondition);
2912 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix not available.\n");
2970 *infeasible =
FALSE;
3007 int nnonviolated = 0;
3027 assert( nconss <= nCols );
3058 SCIPdebugMsg(
scip,
" size: %4d produced possible cover with indicator variable objective value %f.\n", *size, *value);
3061 if ( conshdlrdata->trysolfromcover )
3071 if ( heurindicator ==
NULL )
3088 for (j = 0; j < nconss; ++j)
3095 ind = consdata->colindex;
3112 if ( val < candval )
3124 if ( candidate < 0 )
3130 assert( candidate >= 0 );
3131 assert( ! S[candidate] );
3135 switch ( conshdlrdata->normtype )
3150 SCIPerrorMessage(
"Invalid efficacy norm parameter '%c'.\n", conshdlrdata->normtype);
3155 SCIPdebugMsg(
scip,
" size: %4d, add var. %4d (obj: %-6g, alt-LP sol: %-8.4f); IIS size: %4d, eff.: %g.\n",
3159 S[candidate] =
TRUE;
3171#ifdef SCIP_ENABLE_IISCHECK
3177 if ( conshdlrdata->updatebounds )
3192 for (j = 0; j < nconss; ++j)
3198 ind = consdata->colindex;
3214 assert( cnt == sizeIIS );
3218 SCIP_CALL(
SCIPcreateConsLogicor(
scip, &cons, name, cnt,
vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
3220 SCIP_CALL(
SCIPcreateConsLogicor(
scip, &cons,
"", cnt,
vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
3229 switch ( enfosepatype )
3272 for (j = 0; j < nconss; ++j)
3278 ind = consdata->colindex;
3319 if ( nnonviolated > conshdlrdata->maxsepanonviolated )
3321 SCIPdebugMsg(
scip,
"Stop separation after %d non violated IISs.\n", nnonviolated);
3325 while (step < nconss);
3341 const char* consname,
3362 if ( activeone || binvar ==
NULL )
3363 binvarinternal = binvar;
3372 (*consdata)->nfixednonzero = 0;
3373 (*consdata)->colindex = -1;
3374 (*consdata)->linconsactive = linconsactive;
3375 (*consdata)->binvar = binvarinternal;
3376 (*consdata)->slackvar = slackvar;
3377 (*consdata)->activeone = activeone;
3378 (*consdata)->lessthanineq = lessthanineq;
3379 (*consdata)->lincons = lincons;
3380 (*consdata)->implicationadded =
FALSE;
3381 (*consdata)->slacktypechecked =
FALSE;
3382 (*consdata)->varswithevents =
NULL;
3383 (*consdata)->eventtypes =
NULL;
3384 (*consdata)->nevents = 0;
3392 if ( binvarinternal !=
NULL )
3396 (*consdata)->binvar =
var;
3411 if ( conshdlrdata->forcerestart )
3419 ++((*consdata)->nfixednonzero);
3425 (*consdata)->slackvar =
var;
3428 if ( linconsactive )
3432 ++((*consdata)->nfixednonzero);
3443 SCIPdebugMsg(
scip,
"Added column for <%s> to alternative LP with column index %d.\n", consname, (*consdata)->colindex);
3451 if ( (*consdata)->nfixednonzero > 0 )
3453 SCIPdebugMsg(
scip,
"Constraint <%s> has %d variables fixed to be nonzero.\n", consname, (*consdata)->nfixednonzero);
3482 for (
c = 0;
c < nconss; ++
c)
3494 if ( ub <= conshdlrdata->maxcouplingvalue )
3511 !conshdlrdata->removeindicators, !conshdlrdata->removeindicators,
FALSE) );
3517 if ( conshdlrdata->removeindicators )
3570 SCIPdebugMsg(
scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3611 SCIPdebugMsg(
scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3617 SCIPdebugMsg(
scip,
"Fix binary variable to 0 and delete indicator constraint.\n");
3635 if ( dualreductions )
3641 binvar = consdata->binvar;
3701 var = consdata->binvar;
3706 if (
var != consdata->binvar && ! negated )
3711 assert( conshdlrdata->eventhdlrbound !=
NULL );
3718 if ( conshdlrdata->forcerestart )
3720 assert( conshdlrdata->eventhdlrrestart !=
NULL );
3722 conshdlrdata->eventhdlrrestart, (
SCIP_EVENTDATA*) conshdlrdata, -1) );
3733 consdata->binvar =
var;
3744 if (
var == consdata->slackvar )
3763 var = consdata->slackvar;
3776 assert( conshdlrdata->eventhdlrbound !=
NULL );
3787 consdata->slackvar =
var;
3789 else if (
var == consdata->binvar )
3797 SCIPdebugMsg(
scip,
"Slack variable <%s> is aggregated to negated indicator variable <%s> -> constraint redundant.\n",
3811 SCIPdebugMsg(
scip,
"Slack variable <%s> is aggregated to the indicator variable <%s> -> fix indicator variable to 0.\n",
3866 if ( ! consdata->linconsactive )
3880 if ( consdata->nfixednonzero > 1 )
3882 SCIPdebugMsg(
scip,
"The node is infeasible, both the slack variable and the binary variable are fixed to be nonzero.\n");
3907 if ( consdata->nfixednonzero == 1 )
3917 SCIPdebugMsg(
scip,
"Binary variable <%s> is fixed to be nonzero, fixing slack variable <%s> to 0.\n",
3934 SCIPdebugMsg(
scip,
"Slack variable <%s> is fixed to be nonzero, fixing binary variable <%s> to 0.\n",
3958 if ( addopposite && consdata->linconsactive )
3995 slackvar = consdata->slackvar;
4002 for (j = 0; j < nlinvars; ++j)
4004 if ( linvars[j] != slackvar )
4007 allintegral =
FALSE;
4010 vals[
nvars++] = linvals[j];
4054 if ( dualreductions )
4060 binvar = consdata->binvar;
4148 for (j = 0; j < nlinconsvars; ++j)
4154 val = linconsvals[j];
4157 var = linconsvars[j];
4161 if (
var == consdata->slackvar )
4178 maxactivity += val *
bound;
4190 newub = (maxactivity - rhs) / (-1.0 * coeffslack);
4199 SCIPdebugMsg(
scip,
"Adjusting upper bound of slack variable <%s> to %g for indicator constraint <%s>.\n",
4261 lp = conshdlrdata->altlp;
4269 if ( conshdlrdata->updatebounds )
4284 for (j = 0; j < nconss; ++j)
4308 SCIP_CALL(
extendToCover(
scip, conshdlr, conshdlrdata, lp,
sol, enfosepatype, conshdlrdata->removable, genlogicor, nconss, conss, S, &size, &value, &error,
cutoff, &nCuts) );
4312 if ( nCuts == 0 && error )
4378 for (
c = 0;
c < nconss; ++
c)
4390 if ( ! consdata->linconsactive )
4392 someLinconsNotActive =
TRUE;
4412 binvar = consdata->binvar;
4420 if ( valSlack > maxSlack )
4422 maxSlack = valSlack;
4437 if ( (someLinconsNotActive || conshdlrdata->enforcecuts) && conshdlrdata->sepaalternativelp )
4445 conshdlrdata->niiscutsgen += ngen;
4452 conshdlrdata->niiscutsgen += ngen;
4478 if ( ! conshdlrdata->branchindicators )
4488 binvar = consdata->binvar;
4489 slackvar = consdata->slackvar;
4553 if ( *nGen >= maxsepacuts )
4561 lp = conshdlrdata->altlp;
4571 if ( conshdlrdata->updatebounds )
4589 for (threshold = conshdlrdata->roundingmaxthres;
4590 rounds < conshdlrdata->maxroundingrounds && threshold >= conshdlrdata->roundingminthres && *nGen < maxsepacuts && ! (*
cutoff);
4591 threshold -= conshdlrdata->roundingoffset )
4606 for (j = 0; j < nconss; ++j)
4635 if ( binvarval > binvarnegval )
4653 if ( size == nconss )
4660 if ( size == oldsize )
4662 SCIPdebugMsg(
scip,
"Skipping computation: size support has not changed.\n");
4668 SCIPdebugMsg(
scip,
" Vars with value 1: %d 0: %d and fractional: %d.\n", nvarsone, nvarszero, nvarsfrac);
4676 nconss, conss, S, &size, &value, &error,
cutoff, &nCuts) );
4756 if ( *nGen >= maxsepacuts )
4767 for (
c = 0;
c < nconss; ++
c)
4778 slackvar = consdata->slackvar;
4780 lincons = consdata->lincons;
4783 binvar = consdata->binvar;
4818 cutval = binval * ypart;
4820 for (j = 0; j < nlinvars; ++j)
4830 if ( linvars[j] == slackvar )
4833 if ( conshdlrdata->sepapersplocal )
4852 finitebound =
FALSE;
4857 linval = signfactor * linvals[j];
4861 dout += linval * lb;
4866 dout += linval * ub;
4870 xpart = linval * xval;
4873 if (
SCIPisGT(
scip, binval * din, binval * dout + xpart) )
4876 cutval += binval * din;
4884 cutval += binval * dout + xpart;
4886 cutvars[cnt] = linvars[j];
4887 cutvals[cnt++] = linval;
4891 if ( ! finitebound )
4901 cutvars[cnt] = binvar;
4902 cutvals[cnt] = ypart;
4906 (void)
SCIPsnprintf(name, 50,
"persp%d", conshdlrdata->nperspcutsgen + *nGen);
4919 if ( *nGen >= maxsepacuts )
4967 maxsepacuts = conshdlrdata->maxsepacutsroot;
4969 maxsepacuts = conshdlrdata->maxsepacuts;
4972 if ( conshdlrdata->sepacouplingcuts )
4979 for (
c = 0;
c < nusefulconss && ncuts < maxsepacuts; ++
c)
4994 if ( conshdlrdata->sepacouplinglocal )
5005 if ( ub <= conshdlrdata->sepacouplingvalue )
5043 SCIPdebugMsg(
scip,
"Number of separated coupling inequalities: %d.\n", ncuts);
5052 SCIPdebugMsg(
scip,
"Separating inequalities for indicator constraints.\n");
5060 SCIPdebugMsg(
scip,
"Separated %d cuts from indicator constraints.\n", ncuts - noldcuts);
5064 else if ( ncuts > noldcuts )
5066 conshdlrdata->niiscutsgen += ncuts;
5069 if ( conshdlrdata->genlogicor )
5081 SCIPdebugMsg(
scip,
"Separating inequalities based on perspective formulation.\n");
5089 SCIPdebugMsg(
scip,
"Separated %d cuts from perspective formulation.\n", ncuts - noldcuts);
5091 if ( ncuts > noldcuts )
5093 conshdlrdata->nperspcutsgen += ncuts;
5113 conshdlrdata->linconsevents =
FALSE;
5114 conshdlrdata->linconsboundschanged =
TRUE;
5115 conshdlrdata->boundhaschanged =
TRUE;
5116 conshdlrdata->removable =
TRUE;
5117 conshdlrdata->scaled =
FALSE;
5118 conshdlrdata->altlp =
NULL;
5119 conshdlrdata->nrows = 0;
5120 conshdlrdata->varhash =
NULL;
5121 conshdlrdata->slackhash =
NULL;
5122 conshdlrdata->lbhash =
NULL;
5123 conshdlrdata->ubhash =
NULL;
5124 conshdlrdata->nlbbounds = 0;
5125 conshdlrdata->nubbounds = 0;
5126 conshdlrdata->nslackvars = 0;
5127 conshdlrdata->objcutindex = -1;
5130 conshdlrdata->roundingminthres = 0.1;
5131 conshdlrdata->roundingmaxthres = 0.6;
5133 conshdlrdata->roundingoffset = 0.1;
5134 conshdlrdata->addedcouplingcons =
FALSE;
5135 conshdlrdata->ninitconss = 0;
5136 conshdlrdata->nbinvarszero = 0;
5137 conshdlrdata->performedrestart =
FALSE;
5138 conshdlrdata->objindicatoronly =
FALSE;
5139 conshdlrdata->objothervarsonly =
FALSE;
5140 conshdlrdata->minabsobj = 0.0;
5141 conshdlrdata->normtype =
'e';
5142 conshdlrdata->niiscutsgen = 0;
5143 conshdlrdata->nperspcutsgen = 0;
5168 int maxabsvalidx = -1;
5190 if ( ! conshdlrdata->upgradelinear )
5194 for (j = 0; j <
nvars; ++j)
5210 secabsval = maxabsval;
5234 minactivity += val * lb;
5243 maxactivity += val * ub;
5247 assert( maxabsval >= 0.0 );
5248 assert( 0 <= maxabsvalidx && maxabsvalidx <
nvars );
5263 for (j = 0; j <
nvars; ++j)
5313 if ( upgdlhs || upgdrhs )
5319 assert( ! upgdlhs || ! upgdrhs );
5326 for (l = 0; l <
nvars; ++l)
5328 if (
vars[l] == indvar )
5330 indconsvars[cnt] =
vars[l];
5332 indconsvals[cnt] = -vals[l];
5334 indconsvals[cnt] = vals[l];
5338 if ( indneglhs || indnegrhs )
5421 if ( conshdlrdata->trysolutions && conshdlrdata->heurtrysol ==
NULL )
5445 if ( conshdlrdata->binvarhash !=
NULL )
5448 if ( conshdlrdata->binslackvarhash !=
NULL )
5452 for (
i = 0;
i < nconss;
i++)
5457 if ( consdata->varswithevents !=
NULL )
5462 for (j = 0; j < consdata->nevents; ++j)
5469 consdata->nevents = 0;
5476 conshdlrdata->maxaddlincons = 0;
5477 conshdlrdata->naddlincons = 0;
5478 conshdlrdata->nrows = 0;
5502 if ( conshdlrdata->maxaddlincons > 0 )
5508 conshdlrdata->naddlincons = 0;
5509 conshdlrdata->maxaddlincons = 0;
5538 conshdlrdata->boundhaschanged =
TRUE;
5542 if ( conshdlrdata->sepaalternativelp )
5549 for (
c = 0;
c < nconss; ++
c)
5565 ++conshdlrdata->nslackvars;
5568 if ( conshdlrdata->genlogicor )
5571 int logicorsepafreq;
5576 if ( logicorconshdlr ==
NULL )
5578 SCIPerrorMessage(
"Logicor constraint handler not included, cannot generate constraints.\n");
5583 if ( (sepafreq != -1 || conshdlrdata->enforcecuts) && logicorsepafreq != 1 )
5585 SCIPwarningMessage(
scip,
"For better performance set parameter 'constraints/logicor/sepafreq' to 1 if 'constraints/included/genlogicor' is true.\n");
5591 conshdlrdata->objothervarsonly =
TRUE;
5592 for (
c = 0;
c < nconss; ++
c)
5608 conshdlrdata->objothervarsonly =
FALSE;
5611 if ( ! consdata->linconsactive )
5618 if ( conshdlrdata->sepaalternativelp && consdata->colindex < 0 )
5645 SCIP_CALL(
SCIPcreateNlRow(
scip, &nlrow,
SCIPconsGetName(conss[
c]), 0.0, 0,
NULL,
NULL, quadexpr, 0.0, 0.0,
SCIP_EXPRCURV_UNKNOWN) );
5660 if ( conshdlrdata->sepaalternativelp )
5667 if ( conshdlrdata->naddlincons > 0 )
5669 for (
c = 0;
c < conshdlrdata->naddlincons; ++
c)
5671 cons = conshdlrdata->addlincons[
c];
5690 SCIPdebugMsg(
scip,
"Added %d additional columns to alternative LP.\n", cnt);
5697 if ( conshdlrdata->useotherconss )
5699 const char* conshdlrname;
5707 for (
c = 0;
c < nallconss; ++
c)
5729 SCIPdebugMsg(
scip,
"Added %d additional columns from linear constraints to alternative LP.\n", cnt);
5735 if ( conshdlrdata->forcerestart )
5742 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5748 conshdlrdata->nbinvarszero = 0;
5754 conshdlrdata->objindicatoronly =
FALSE;
5759 for (j = 0; j <
nvars; ++j)
5763 for (
c = 0;
c < nconss; ++
c)
5788 if ( probindex < 0 )
5792 covered[probindex] =
TRUE;
5796 for (j = 0; j <
nvars; ++j)
5807 if (
REALABS(
obj) < conshdlrdata->minabsobj )
5821 conshdlrdata->objindicatoronly =
TRUE;
5823 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5849 if ( conshdlrdata->sepaalternativelp )
5851 if ( conshdlrdata->slackhash !=
NULL )
5860 if ( conshdlrdata->altlp !=
NULL )
5882 for (
c = 0;
c < nconss; ++
c)
5891 consdata->colindex = -1;
5917#ifdef SCIP_MORE_DEBUG
5932 if ( conshdlrdata->binslackvarhash !=
NULL )
5945 if ( conshdlrdata->sepaalternativelp )
5956 if ( (*consdata)->linconsactive )
5958 assert( conshdlrdata->eventhdlrbound !=
NULL );
5964 if ( conshdlrdata->forcerestart )
5966 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5972 if ( conshdlrdata->linconsevents && (*consdata)->linconsactive && (*consdata)->varswithevents !=
NULL )
5979 for (j = 0; j < (*consdata)->nevents; ++j)
5987 (*consdata)->nevents = 0;
5988 assert( (*consdata)->varswithevents ==
NULL );
6005 if( (*consdata)->binvar !=
NULL )
6036 assert( conshdlrdata->eventhdlrbound !=
NULL );
6038#ifdef SCIP_MORE_DEBUG
6048 if ( sourcedata->slackvar ==
NULL )
6055 if ( sourcedata->lincons ==
NULL )
6067 sourcedata->binvar,
TRUE, sourcedata->lessthanineq, sourcedata->slackvar, sourcedata->lincons, sourcedata->linconsactive) );
6068 consdata->activeone = sourcedata->activeone;
6086 if ( sourcedata->linconsactive )
6094 if ( conshdlrdata->sepaalternativelp )
6096 if ( conshdlrdata->binvarhash ==
NULL )
6130 for (
c = 0;
c < nconss; ++
c)
6155 consdata->lincons = translincons;
6163 conshdlrdata->addedcouplingcons =
FALSE;
6185 SCIPdebug(
int oldnfixedvars = *nfixedvars; )
6186 SCIPdebug(
int oldndelconss = *ndelconss; )
6203 if ( nrounds == 0 || nnewfixedvars > 0 || nnewchgbds > 0 || nnewaggrvars > 0 )
6208 for (
c = 0;
c < nconss; ++
c)
6223#ifdef SCIP_MORE_DEBUG
6228 if ( ! consdata->linconsactive )
6237 if ( ! consdata->implicationadded )
6246 consdata->implicationadded =
TRUE;
6255 if ( !consdata->slacktypechecked )
6257 consdata->slacktypechecked =
TRUE;
6271 slackvar = consdata->slackvar;
6274 for (j = 0; j <
nvars; ++j)
6276 if (
vars[j] == slackvar )
6277 foundslackvar =
TRUE;
6285 if ( j ==
nvars && foundslackvar )
6304 SCIPdebugMsg(
scip,
"Cannot declare slack variable (<%s>) weakly implied integral, since global bound is non-integral: (%g, %g).\n",
6326 noReductions = nnewfixedvars == 0 && nnewaggrvars == 0 && nnewchgvartypes == 0 && nnewchgbds == 0
6327 && nnewdelconss == 0 && nnewchgcoefs == 0 && nnewchgsides == 0;
6330 if ( noReductions && *
result !=
SCIP_SUCCESS && conshdlrdata->addcouplingcons && ! conshdlrdata->addedcouplingcons )
6340 *nupgdconss += ngen;
6341 if ( conshdlrdata->removeindicators )
6344 conshdlrdata->addedcouplingcons =
TRUE;
6347 SCIPdebug(
SCIPdebugMsg(
scip,
"Presolved %d constraints (fixed %d variables, removed 0 variables, and deleted %d constraints).\n",
6348 nconss, *nfixedvars - oldnfixedvars, *ndelconss - oldndelconss); )
6373 *infeasible =
FALSE;
6376 if ( ! conshdlrdata->addcoupling )
6380 if ( conshdlrdata->addcouplingcons && conshdlrdata->addedcouplingcons )
6383 SCIPdebugMsg(
scip,
"Handle initial rows for %d indicator constraints.\n", nconss);
6386 for (
c = 0;
c < nconss && !(*infeasible); ++
c)
6397 if ( ! consdata->linconsactive )
6405 if ( ub <= conshdlrdata->maxcouplingvalue )
6416 if ( conshdlrdata->addcouplingcons )
6420 assert( ! conshdlrdata->addedcouplingcons );
6501 if ( solinfeasible )
6529 if ( solinfeasible )
6555 if ( solinfeasible )
6561 if ( objinfeasible )
6604 someLinconsNotActive =
FALSE;
6605 for (
c = 0;
c < nconss; ++
c)
6615 if ( ! consdata->linconsactive )
6617 someLinconsNotActive =
TRUE;
6647 if ( trysol !=
NULL )
6651 changedSol = changedSol || changed;
6663 if ( trysol !=
NULL )
6667 changedSol = changedSol || changed;
6673 if ( someLinconsNotActive )
6680 lp = conshdlrdata->altlp;
6681 assert( conshdlrdata->sepaalternativelp );
6691 if ( conshdlrdata->updatebounds )
6705 for (
c = 0;
c < nconss; ++
c)
6750 if ( trysol !=
NULL && changedSol )
6757 if ( trysol !=
NULL )
6806 if ( !conshdlrdata->linconsevents )
6808 for (
c = 0;
c < nconss; ++
c)
6821 if ( ! consdata->linconsactive )
6843 for (j = 0; j <
nvars; ++j)
6845 if (
vars[j] == consdata->slackvar )
6849 if ( vals[j] > 0.0 )
6852 consdata->varswithevents[consdata->nevents] =
vars[j];
6854 consdata->nevents++;
6859 consdata->varswithevents[consdata->nevents] =
vars[j];
6861 consdata->nevents++;
6866 conshdlrdata->linconsevents =
TRUE;
6870 conshdlrdata->boundhaschanged =
FALSE;
6871 conshdlrdata->linconsboundschanged =
FALSE;
6876 for (
c = 0;
c < nconss; ++
c)
6890#ifdef SCIP_MORE_DEBUG
6935 assert( inferinfo == 0 || inferinfo == 1 || inferinfo == 2 || inferinfo == 3 );
6936 assert( consdata->linconsactive );
6939 if ( inferinfo == 0 )
6942 assert( infervar != consdata->binvar );
6946 else if ( inferinfo == 1 )
6949 assert( infervar != consdata->slackvar );
6955 else if ( inferinfo == 2 )
6968 assert( inferinfo == 3 );
6975 for (j = 0; j < nlinconsvars; ++j)
6977 if ( linconsvals[j] > 0.0 )
7015#ifdef SCIP_MORE_DEBUG
7021 if ( consdata->linconsactive )
7045 for (j = 0; j < nlinvars; ++j)
7094 binvar = consdata->binvar;
7122 const char* consname;
7136#ifdef SCIP_MORE_DEBUG
7151 sourcelincons = sourceconsdata->lincons;
7180 sourceconsdata->lincons = translincons;
7181 sourcelincons = translincons;
7195 sourcebinvar = sourceconsdata->binvar;
7206 sourceslackvar = sourceconsdata->slackvar;
7222 initial,
separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode) );
7230 if ( targetlincons !=
NULL )
7243 char binvarname[1024];
7244 char slackvarname[1024];
7245 char linconsname[1024];
7256 nargs = sscanf(str,
" <%1023[^>]> = %d -> <%1023[^>]> = 0 (<%1023[^>]>)", binvarname, &zeroone, slackvarname, linconsname);
7259 if ( nargs != 3 && nargs != 4 )
7266 if ( zeroone != 0 && zeroone != 1 )
7275 if ( binvar ==
NULL )
7287 if ( slackvar ==
NULL )
7298 if ( lincons ==
NULL )
7319 posstr = strstr(slackvarname,
"indslack");
7320 if ( posstr ==
NULL )
7328 (void)
SCIPsnprintf(binvarname, 1023,
"indlin%s", posstr+8);
7331 if ( lincons ==
NULL )
7337 if ( lincons ==
NULL )
7340 (void)
SCIPsnprintf(binvarname, 1023,
"%s", posstr+16);
7343 if( lincons ==
NULL )
7346 name, posstr+8, posstr+9, posstr+16);
7365 initial,
separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode) );
7383#ifdef SCIP_MORE_DEBUG
7393 if ( conshdlrdata->altlp !=
NULL )
7395 assert( conshdlrdata->sepaalternativelp );
7397 if ( consdata->colindex >= 0 )
7418#ifdef SCIP_MORE_DEBUG
7425 if ( conshdlrdata->altlp !=
NULL )
7431 assert( conshdlrdata->sepaalternativelp );
7433 if ( consdata->colindex >= 0 )
7469 if ( consdata->binvar !=
NULL )
7474 if ( consdata->slackvar !=
NULL )
7513 if ( consdata->binvar !=
NULL )
7515 if ( consdata->slackvar !=
NULL )
7553 *infeasible =
FALSE;
7559 for (
c = 0;
c < nindconss; ++
c)
7580 if ( score > bestscore )
7637 conshdlrdata->eventhdlrbound =
NULL;
7639 eventExecIndicatorBound,
NULL) );
7640 assert(conshdlrdata->eventhdlrbound !=
NULL);
7643 conshdlrdata->eventhdlrlinconsbound =
NULL;
7645 eventExecIndicatorLinconsBound,
NULL) );
7646 assert(conshdlrdata->eventhdlrlinconsbound !=
NULL);
7649 conshdlrdata->eventhdlrrestart =
NULL;
7651 eventExecIndicatorRestart,
NULL) );
7652 assert( conshdlrdata->eventhdlrrestart !=
NULL );
7654 conshdlrdata->heurtrysol =
NULL;
7658 conshdlrdata->binvarhash =
NULL;
7659 conshdlrdata->binslackvarhash =
NULL;
7667 conshdlrdata->addlincons =
NULL;
7668 conshdlrdata->naddlincons = 0;
7669 conshdlrdata->maxaddlincons = 0;
7674 consEnfolpIndicator, consEnfopsIndicator, consCheckIndicator, consLockIndicator,
7716 conflicthdlrdata->conshdlrdata = conshdlrdata;
7717 conflicthdlrdata->conshdlr = conshdlr;
7718 assert( conflicthdlrdata->conshdlr !=
NULL );
7722 conflictExecIndicator, conflicthdlrdata) );
7728 "constraints/indicator/branchindicators",
7729 "Branch on indicator constraints in enforcing?",
7733 "constraints/indicator/genlogicor",
7734 "Generate logicor constraints instead of cuts?",
7738 "constraints/indicator/addcoupling",
7739 "Add coupling constraints or rows if big-M is small enough?",
7743 "constraints/indicator/maxcouplingvalue",
7744 "maximum coefficient for binary variable in coupling constraint",
7748 "constraints/indicator/addcouplingcons",
7749 "Add initial variable upper bound constraints, if 'addcoupling' is true?",
7753 "constraints/indicator/sepacouplingcuts",
7754 "Should the coupling inequalities be separated dynamically?",
7758 "constraints/indicator/sepacouplinglocal",
7759 "Allow to use local bounds in order to separate coupling inequalities?",
7763 "constraints/indicator/sepacouplingvalue",
7764 "maximum coefficient for binary variable in separated coupling constraint",
7768 "constraints/indicator/sepaperspective",
7769 "Separate cuts based on perspective formulation?",
7773 "constraints/indicator/sepapersplocal",
7774 "Allow to use local bounds in order to separate perspective cuts?",
7778 "constraints/indicator/maxsepanonviolated",
7779 "maximal number of separated non violated IISs, before separation is stopped",
7783 "constraints/indicator/updatebounds",
7784 "Update bounds of original variables for separation?",
7788 "constraints/indicator/maxconditionaltlp",
7789 "maximum estimated condition of the solution basis matrix of the alternative LP to be trustworthy (0.0 to disable check)",
7793 "constraints/indicator/maxsepacuts",
7794 "maximal number of cuts separated per separation round",
7798 "constraints/indicator/maxsepacutsroot",
7799 "maximal number of cuts separated per separation round in the root node",
7803 "constraints/indicator/removeindicators",
7804 "Remove indicator constraint if corresponding variable bound constraint has been added?",
7808 "constraints/indicator/generatebilinear",
7809 "Do not generate indicator constraint, but a bilinear constraint instead?",
7813 "constraints/indicator/scaleslackvar",
7814 "Scale slack variable coefficient at construction time?",
7818 "constraints/indicator/trysolutions",
7819 "Try to make solutions feasible by setting indicator variables?",
7823 "constraints/indicator/enforcecuts",
7824 "In enforcing try to generate cuts (only if sepaalternativelp is true)?",
7828 "constraints/indicator/dualreductions",
7829 "Should dual reduction steps be performed?",
7833 "constraints/indicator/addopposite",
7834 "Add opposite inequality in nodes in which the binary variable has been fixed to 0?",
7838 "constraints/indicator/conflictsupgrade",
7839 "Try to upgrade bounddisjunction conflicts by replacing slack variables?",
7843 "constraints/indicator/restartfrac",
7844 "fraction of binary variables that need to be fixed before restart occurs (in forcerestart)",
7848 "constraints/indicator/useotherconss",
7849 "Collect other constraints to alternative LP?",
7853 "constraints/indicator/useobjectivecut",
7854 "Use objective cut with current best solution to alternative LP?",
7858 "constraints/indicator/trysolfromcover",
7859 "Try to construct a feasible solution from a cover?",
7863 "constraints/indicator/upgradelinear",
7864 "Try to upgrade linear constraints to indicator constraints?",
7868 "constraints/indicator/usesameslackvar",
7869 "Use same slack variable for indicator constraints with common binary variable?",
7874 "constraints/indicator/sepaalternativelp",
7875 "Separate using the alternative LP?",
7879 "constraints/indicator/forcerestart",
7880 "Force restart if absolute gap is 1 or enough binary variables have been fixed?",
7884 "constraints/indicator/nolinconscont",
7885 "Decompose problem (do not generate linear constraint if all variables are continuous)?",
7928 return SCIPcreateConsIndicatorGeneric(
scip, cons, name, binvar,
nvars,
vars, vals, rhs,
TRUE,
TRUE, initial,
7929 separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode);
7987 SCIPerrorMessage(
"Indicator constraint <%s> needs nonnegative number of variables in linear constraint.\n", name);
7993 if ( conshdlr ==
NULL )
8002 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8004 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8008 if ( conshdlrdata->nolinconscont && conshdlrdata->generatebilinear )
8021 for ( v = 0; v <
nvars; ++v )
8022 valscopy[v] = -vals[v];
8028 linconsactive = !conshdlrdata->nolinconscont;
8029 for ( v = 0; v <
nvars; ++v )
8031 if ( conshdlrdata->scaleslackvar )
8032 absvalsum +=
REALABS(valscopy[v]);
8035 linconsactive =
TRUE;
8036 if ( !conshdlrdata->scaleslackvar && !integral )
8041 if ( !conshdlrdata->scaleslackvar )
8048 if ( !conshdlrdata->scaleslackvar && linconsactive )
8054 if ( activeone || binvar ==
NULL )
8055 binvarinternal = binvar;
8064 if ( binvarinternal !=
NULL )
8067 if ( conshdlrdata->usesameslackvar && conshdlrdata->binslackvarhash ==
NULL )
8072 if ( conshdlrdata->binslackvarhash !=
NULL &&
SCIPhashmapExists(conshdlrdata->binslackvarhash, (
void*) binvarinternal) )
8102 if ( conshdlrdata->binslackvarhash !=
NULL )
8127 if ( linconsactive )
8140 if ( ! lessthanineq )
8148 if ( conshdlrdata->scaleslackvar &&
nvars > 0 )
8164 if ( conshdlrdata->generatebilinear )
8171 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8178 binvar, activeone, lessthanineq, slackvar, lincons, linconsactive) );
8182 if( consdata->binvar !=
NULL )
8188 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8189 local, modifiable, dynamic, removable, stickingatnode) );
8194 if ( linconsactive )
8201 if ( conshdlrdata->sepaalternativelp )
8203 if ( conshdlrdata->binvarhash ==
NULL )
8315 if ( conshdlr ==
NULL )
8324 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8326 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8333 linconsactive = ! conshdlrdata->nolinconscont;
8334 for ( v = 0; v <
nvars && ! linconsactive; ++v )
8336 if (
vars[v] == slackvar )
8340 linconsactive =
TRUE;
8354 if ( conshdlrdata->generatebilinear )
8363 binvarinternal = binvar;
8371 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8378 binvar, activeone,
TRUE, slackvar, lincons, linconsactive) );
8382 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8383 local, modifiable, dynamic, removable, stickingatnode) );
8394 if( consdata !=
NULL )
8443 enforce, check,
propagate, local, dynamic, removable, stickingatnode);
8553 if ( conshdlr ==
NULL )
8562 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8564 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8580 linconsactive = !conshdlrdata->nolinconscont;
8581 for ( v = 0; v <
nvars; ++v )
8585 linconsactive =
TRUE;
8607 binvarinternal = binvar;
8616 if ( conshdlrdata->usesameslackvar && conshdlrdata->binslackvarhash ==
NULL )
8621 if ( conshdlrdata->binslackvarhash !=
NULL &&
SCIPhashmapExists(conshdlrdata->binslackvarhash, (
void*) binvarinternal) )
8652 if ( conshdlrdata->binslackvarhash !=
NULL )
8672 if ( conshdlrdata->generatebilinear )
8679 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8686 binvar, activeone,
TRUE, slackvar, lincons, linconsactive) );
8690 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8691 local, modifiable, dynamic, removable, stickingatnode) );
8702 if( consdata !=
NULL )
8749 enforce, check,
propagate, local, dynamic, removable, stickingatnode);
8770 if ( !consdata->lessthanineq )
8803 return consdata->lincons;
8840 consdata->lincons = lincons;
8841 consdata->linconsactive = !conshdlrdata->nolinconscont;
8845 if ( !consdata->linconsactive )
8851 for ( v = 0; v <
nvars; ++v )
8855 consdata->linconsactive =
TRUE;
8877 return consdata->activeone;
8894 return consdata->binvar;
8910 binvar = consdata->binvar;
8912 if ( ! consdata->activeone )
8943 if ( consdata->binvar !=
NULL )
8961 if ( ! consdata->activeone )
8965 consdata->binvar =
var;
8972 assert( conshdlrdata->eventhdlrbound !=
NULL );
8973 assert( conshdlrdata->eventhdlrrestart !=
NULL );
8976 if ( consdata->linconsactive )
8982 if ( conshdlrdata->forcerestart )
8989 ++(consdata->nfixednonzero);
8993 if ( ! consdata->activeone )
8997 consdata->binvar = binvar;
9016 return consdata->slackvar;
9072 if ( consdata->linconsactive )
9146 if ( ! consdata->linconsactive )
9149 lincons = consdata->lincons;
9155 slackvar = consdata->slackvar;
9156 binvar = consdata->binvar;
9167 for (v = 0; v < nlinvars; ++v)
9171 if (
var != slackvar )
9174 slackcoef = linvals[v];
9182 assert( slackcoef != 0.0 );
9195 val = (val - sum)/slackcoef;
9198 if ( slackcoef < 0 )
9310 for (
c = 0;
c < nconss; ++
c)
9320 if ( ! consdata->linconsactive )
9324 *changed = *changed || chg;
9351 assert( conshdlrdata->naddlincons+1 <= conshdlrdata->maxaddlincons );
9353 conshdlrdata->addlincons[conshdlrdata->naddlincons++] = lincons;
9384 if ( ! conshdlrdata->sepaalternativelp )
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define CONSHDLR_SEPAPRIORITY
#define CONSHDLR_PROPFREQ
#define DEFAULT_ENFORCECUTS
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
#define CONFLICTHDLR_PRIORITY
#define CONFLICTHDLR_NAME
#define CONFLICTHDLR_DESC
static SCIP_RETCODE branchCons(SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
#define DEFAULT_MAXSEPACUTSROOT
#define DEFAULT_MAXSEPACUTS
#define DEFAULT_FORCERESTART
#define DEFAULT_TRYSOLUTIONS
#define EVENTHDLR_RESTART_NAME
static SCIP_RETCODE addAltLPRow(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row, SCIP_Real objcoef, int *colindex)
#define SCIP_CALL_PARAM(x)
#define DEFAULT_ADDCOUPLINGCONS
#define MAXROUNDINGROUNDS
#define DEFAULT_ADDOPPOSITE
static SCIP_RETCODE checkLPBoundsClean(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss)
static SCIP_RETCODE propIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Bool dualreductions, SCIP_Bool addopposite, SCIP_Bool *cutoff, int *nGen)
static SCIP_RETCODE updateFirstRowGlobal(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE fixAltLPVariables(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S)
static SCIP_RETCODE createVarUbs(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS **conss, int nconss, int *ngen)
#define DEFAULT_USEOBJECTIVECUT
static SCIP_RETCODE addAltLPConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Real objcoef, int *colindex)
static SCIP_RETCODE extendToCover(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_LPI *lp, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_Bool removable, SCIP_Bool genlogicor, int nconss, SCIP_CONS **conss, SCIP_Bool *S, int *size, SCIP_Real *value, SCIP_Bool *error, SCIP_Bool *cutoff, int *nGen)
static SCIP_RETCODE scaleFirstRow(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE separateIISRounding(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, int nconss, SCIP_CONS **conss, int maxsepacuts, SCIP_Bool *cutoff, int *nGen)
static SCIP_Real varGetObjDelta(SCIP_VAR *var)
static SCIP_RETCODE addAltLPColumn(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_VAR *slackvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhscoef, SCIP_Real objcoef, SCIP_Real sign, SCIP_Bool colfree, int *colindex)
#define DEFAULT_MAXCONDITIONALTLP
static SCIP_RETCODE presolRoundIndicator(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool dualreductions, SCIP_Bool *cutoff, SCIP_Bool *success, int *ndelconss, int *nfixedvars)
#define DEFAULT_SCALESLACKVAR
static SCIP_RETCODE checkAltLPInfeasible(SCIP *scip, SCIP_LPI *lp, SCIP_Real maxcondition, SCIP_Bool primal, SCIP_Bool *infeasible, SCIP_Bool *error)
static SCIP_RETCODE setAltLPObj(SCIP *scip, SCIP_LPI *lp, SCIP_SOL *sol, int nconss, SCIP_CONS **conss)
static SCIP_RETCODE checkIISlocal(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Real *vector, SCIP_Bool *isLocal)
#define DEFAULT_USESAMESLACKVAR
#define DEFAULT_SEPAPERSPLOCAL
static SCIP_RETCODE unfixAltLPVariables(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S)
static SCIP_RETCODE separatePerspective(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, int nconss, SCIP_CONS **conss, int maxsepacuts, int *nGen)
#define DEFAULT_SEPAPERSPECTIVE
static SCIP_RETCODE enforceCuts(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_Bool genlogicor, SCIP_Bool *cutoff, int *nGen)
#define DEFAULT_CONFLICTSUPGRADE
static SCIP_RETCODE initAlternativeLP(SCIP *scip, SCIP_CONSHDLR *conshdlr)
#define DEFAULT_MAXCOUPLINGVALUE
#define DEFAULT_SEPACOUPLINGVALUE
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
#define DEFAULT_REMOVEINDICATORS
#define DEFAULT_UPGRADELINEAR
#define EVENTHDLR_LINCONSBOUND_DESC
static SCIP_RETCODE updateObjUpperbound(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE checkTransferBoolParam(SCIP *scip, SCIP_PARAM *param, const char *name, SCIP_Bool newvalue, SCIP_Bool *value)
#define EVENTHDLR_BOUND_DESC
static SCIP_RETCODE separateIndicators(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, int nusefulconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_RESULT *result)
static SCIP_RETCODE fixAltLPVariable(SCIP_LPI *lp, int ind)
enum SCIP_enfosepatype SCIP_ENFOSEPATYPE
#define DEFAULT_SEPACOUPLINGLOCAL
#define EVENTHDLR_LINCONSBOUND_NAME
#define DEFAULT_UPDATEBOUNDS
#define DEFAULT_RESTARTFRAC
static SCIP_RETCODE enforceIndicators(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_Bool genlogicor, SCIP_RESULT *result)
#define DEFAULT_SEPAALTERNATIVELP
static void initConshdlrData(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
static SCIP_RETCODE unfixAltLPVariable(SCIP_LPI *lp, int ind)
static SCIP_RETCODE consdataEnsureAddLinConsSize(SCIP *scip, SCIP_CONSHDLR *conshdlr, int num)
static SCIP_RETCODE setAltLPObjZero(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss)
#define EVENTHDLR_BOUND_NAME
#define DEFAULT_BRANCHINDICATORS
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, const char *consname, SCIP_CONSDATA **consdata, SCIP_EVENTHDLR *eventhdlrrestart, SCIP_VAR *binvar, SCIP_Bool activeone, SCIP_Bool lessthanineq, SCIP_VAR *slackvar, SCIP_CONS *lincons, SCIP_Bool linconsactive)
#define DEFAULT_USEOTHERCONSS
#define DEFAULT_DUALREDUCTIONS
static SCIP_RETCODE deleteAltLPConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
#define LINCONSUPGD_PRIORITY
#define DEFAULT_GENERATEBILINEAR
static SCIP_RETCODE addObjcut(SCIP *scip, SCIP_CONSHDLR *conshdlr)
#define DEFAULT_GENLOGICOR
#define DEFAULT_TRYSOLFROMCOVER
#define EVENTHDLR_RESTART_DESC
#define DEFAULT_MAXSEPANONVIOLATED
#define DEFAULT_ADDCOUPLING
#define DEFAULT_SEPACOUPLINGCUTS
static SCIP_RETCODE updateFirstRow(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
#define DEFAULT_NOLINCONSCONT
constraint handler for indicator constraints
Constraint handler for linear constraints in their most general form, .
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
constraint handler for nonlinear constraints specified by algebraic expressions
Constraint handler for variable bound constraints .
#define SCIP_LONGINT_FORMAT
product expression handler
variable expression handler
SCIP_RETCODE SCIPcreateConsIndicatorGenericLinConsPure(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_Bool activeone, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsIndicatorLinCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
SCIP_RETCODE SCIPcreateConsBasicIndicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs)
SCIP_VAR * SCIPgetBinaryVarIndicatorGeneric(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetSlackVarUb(SCIP *scip, SCIP_CONS *cons, SCIP_Real ub)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPaddRowIndicator(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsIndicatorGeneric(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool activeone, SCIP_Bool lessthanineq, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddLinearConsIndicator(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons)
SCIP_RETCODE SCIPsetLinearConsIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_CONS *lincons)
SCIP_RETCODE SCIPcreateConsIndicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsIndicatorGenericLinCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Bool activeone, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsBasicIndicatorLinCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar)
SCIP_RETCODE SCIPmakeIndicatorsFeasible(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_Bool *changed)
SCIP_VAR * SCIPgetBinaryVarIndicator(SCIP_CONS *cons)
#define SCIP_DECL_LINCONSUPGD(x)
SCIP_VAR * SCIPgetSlackVarIndicator(SCIP_CONS *cons)
SCIP_CONS * SCIPgetLinearConsIndicator(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, 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_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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 SCIPsetBinaryVarIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *binvar)
SCIP_RETCODE SCIPmakeIndicatorFeasible(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *changed)
SCIP_RETCODE SCIPcreateConsVarbound(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *var, SCIP_VAR *vbdvar, SCIP_Real vbdcoef, 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_Bool stickingatnode)
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 SCIPcreateConsIndicatorLinConsPure(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Bool SCIPisViolatedIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
SCIP_RETCODE SCIPaddVarIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_Bool SCIPgetActiveOnIndicator(SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeConshdlrIndicator(SCIP *scip)
SCIP_RETCODE SCIPgetConsCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_CONS *sourcecons, SCIP_CONS **targetcons, SCIP_CONSHDLR *sourceconshdlr, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *name, 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 global, SCIP_Bool *valid)
SCIP_RETCODE SCIPgetVarCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR *sourcevar, SCIP_VAR **targetvar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *success)
SCIP_RETCODE SCIPcreateExprVar(SCIP *scip, SCIP_EXPR **expr, SCIP_VAR *var, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPcreateExprProduct(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real coefficient, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
int SCIPgetNIntVars(SCIP *scip)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNConss(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNOrigVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
SCIP_Bool SCIPisObjIntegral(SCIP *scip)
SCIP_VAR * SCIPfindVar(SCIP *scip, const char *name)
SCIP_CONS * SCIPfindCons(SCIP *scip, const char *name)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void SCIPhashmapPrintStatistics(SCIP_HASHMAP *hashmap, SCIP_MESSAGEHDLR *messagehdlr)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
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 SCIPhashmapSetImageInt(SCIP_HASHMAP *hashmap, void *origin, int image)
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_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
SCIP_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, 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 SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
SCIP_RETCODE SCIPlpiGetRows(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhs, SCIP_Real *rhs, int *nnonz, int *beg, int *ind, SCIP_Real *val)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
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_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS **cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPheurPassSolTrySol(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *sol)
SCIP_RETCODE SCIPheurPassIndicator(SCIP *scip, SCIP_HEUR *heur, int nindconss, SCIP_CONS **indconss, SCIP_Bool *solcand, SCIP_Real obj)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
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 SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPchgBoolParam(SCIP *scip, SCIP_PARAM *param, SCIP_Bool value)
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)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
SCIP_Real SCIPcalcChildEstimate(SCIP *scip, SCIP_VAR *var, SCIP_Real targetvalue)
SCIP_RETCODE SCIPcreateChild(SCIP *scip, SCIP_NODE **node, SCIP_Real nodeselprio, SCIP_Real estimate)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_CONFLICTHDLRDATA * SCIPconflicthdlrGetData(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_RETCODE SCIPsetConflicthdlrFree(SCIP *scip, SCIP_CONFLICTHDLR *conflicthdlr,)
SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrEnable(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrGetDiveBdChgs(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDisable(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetSepaFreq(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPgetConsNVars(SCIP *scip, SCIP_CONS *cons, int *nvars, SCIP_Bool *success)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_RETCODE SCIPenfopsCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool solinfeasible, SCIP_Bool objinfeasible, SCIP_RESULT *result)
void SCIPconsAddUpgradeLocks(SCIP_CONS *cons, int nlocks)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPenfolpCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool solinfeasible, SCIP_RESULT *result)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_RETCODE SCIPsepalpCons(SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_RETCODE SCIPgetConsVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **vars, int varssize, SCIP_Bool *success)
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)
SCIP_RETCODE SCIPdisableCons(SCIP *scip, SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPgetTransformedCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **transcons)
SCIP_RETCODE SCIPenforelaxCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool solinfeasible, SCIP_RESULT *result)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_RETCODE SCIPsepasolCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_RESULT *result)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPcaptureCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPincConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIPisEfficacious(SCIP *scip, SCIP_Real efficacy)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
SCIP_EVENTTYPE SCIPeventGetType(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_Real SCIPeventGetOldbound(SCIP_EVENT *event)
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_Real SCIPeventGetNewbound(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)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
SCIP_HEUR * SCIPfindHeur(SCIP *scip, const char *name)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
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)
SCIP_RETCODE SCIPgetDivesetScore(SCIP *scip, SCIP_DIVESET *diveset, SCIP_DIVETYPE divetype, SCIP_VAR *divecand, SCIP_Real divecandsol, SCIP_Real divecandfrac, SCIP_Real *candscore, SCIP_Bool *roundup)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPaddDiveBoundChange(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIPcreateEmptyRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_RETCODE SCIPcreateSolCopy(SCIP *scip, SCIP_SOL **sol, SCIP_SOL *sourcesol)
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_RETCODE SCIPrestartSolve(SCIP *scip)
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_Real SCIPgetDualbound(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPcutoffbounddelta(SCIP *scip)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPinRepropagation(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_RETCODE SCIPvarGetProbvarBound(SCIP_VAR **var, SCIP_Real *bound, SCIP_BOUNDTYPE *boundtype)
SCIP_Bool SCIPvarIsDeleted(SCIP_VAR *var)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
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 SCIPdoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPinferVarUbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_Real SCIPvarGetAggrScalar(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarImplType(SCIP *scip, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype, SCIP_Bool *infeasible)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
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)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_VAR * SCIPbdchginfoGetVar(SCIP_BDCHGINFO *bdchginfo)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
SCIP_Real SCIPgetVarSol(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
SCIP_RETCODE SCIPaddVarImplication(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_RETCODE SCIPinferVarLbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPvarGetProbvarBinary(SCIP_VAR **var, SCIP_Bool *negated)
SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPallowWeakDualReds(SCIP *scip)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
SCIP_VAR * SCIPvarGetAggrVar(SCIP_VAR *var)
int SCIPsnprintf(char *t, int len, const 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)
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 SCIPgetSymgraphNegatedVarnodeidx(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR *var)
SCIPfreeSol(scip, &heurdata->sol))
static SCIP_DIVESET * diveset
handle partial solutions for linear problems with indicators and otherwise continuous variables
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
primal heuristic that tries a given solution
interface methods for specific LP solvers
static const char * paramname[]
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
const char * SCIPparamGetName(SCIP_PARAM *param)
SCIP_PARAMTYPE SCIPparamGetType(SCIP_PARAM *param)
public methods for conflict analysis handlers
public methods for managing constraints
public methods for managing events
public methods for LP management
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
public methods for handling parameter settings
public methods for problem variables
public methods for branching rule plugins and branching
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for cuts and aggregation rows
public methods for event handler plugins and event handlers
public methods for primal heuristic plugins and divesets
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for nonlinear relaxation
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for the probing mode
public methods for solutions
public methods for querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
structs for symmetry computations
methods for dealing with symmetry detection graphs
struct SCIP_Conflicthdlr SCIP_CONFLICTHDLR
#define SCIP_DECL_CONFLICTEXEC(x)
#define SCIP_DECL_CONFLICTFREE(x)
@ SCIP_CONFTYPE_PROPAGATION
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
#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_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSENABLE(x)
#define SCIP_DECL_CONSINITLP(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)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
#define SCIP_EVENTTYPE_BOUNDCHANGED
#define SCIP_EVENTTYPE_GUBCHANGED
#define SCIP_EVENTTYPE_GBDCHANGED
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_UBTIGHTENED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_LBRELAXED
#define SCIP_EVENTTYPE_BESTSOLFOUND
#define SCIP_EVENTTYPE_GLBCHANGED
#define SCIP_EVENTTYPE_LBTIGHTENED
#define SCIP_EVENTTYPE_UBRELAXED
struct SCIP_Expr SCIP_EXPR
struct SCIP_Heur SCIP_HEUR
#define SCIP_DIVETYPE_INTEGRALITY
@ SCIP_BRANCHDIR_DOWNWARDS
enum SCIP_BoundType SCIP_BOUNDTYPE
type definitions for specific LP solvers interface
@ SCIP_LPSOLQUALITY_ESTIMCONDITION
struct SCIP_HashMap SCIP_HASHMAP
struct SCIP_NlRow SCIP_NLROW
struct SCIP_Param SCIP_PARAM
#define SCIP_DECL_PARAMCHGD(x)
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_INITPRESOLVE
@ SCIP_STAGE_TRANSFORMING
enum SYM_Symtype SYM_SYMTYPE
struct SCIP_Node SCIP_NODE
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED