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 )
628 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
629 assert( consdata->linconsactive );
646 ++(consdata->nfixednonzero);
647#ifdef SCIP_MORE_DEBUG
648 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
658 ++(consdata->nfixednonzero);
659#ifdef SCIP_MORE_DEBUG
660 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
670 --(consdata->nfixednonzero);
671#ifdef SCIP_MORE_DEBUG
672 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
682 --(consdata->nfixednonzero);
683#ifdef SCIP_MORE_DEBUG
684 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
695 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
698 conshdlrdata->boundhaschanged =
TRUE;
719#ifdef SCIP_MORE_DEBUG
727 conshdlrdata->linconsboundschanged =
TRUE;
756 assert( conshdlrdata->forcerestart );
780 if ( conshdlrdata->performedrestart )
784 ++(conshdlrdata->nbinvarszero);
792 if ( conshdlrdata->nbinvarszero > (
int) ((
SCIP_Real) conshdlrdata->ninitconss * conshdlrdata->restartfrac) )
795 "Forcing restart, since %d binary variables among %d have been fixed.\n", conshdlrdata->nbinvarszero, conshdlrdata->ninitconss);
799 if ( conshdlrdata->objindicatoronly )
803 conshdlrdata->performedrestart =
TRUE;
815 if ( ! conshdlrdata->objindicatoronly )
832 conshdlrdata->performedrestart =
TRUE;
882 assert( bdchginfos !=
NULL || nbdchginfos == 0 );
907 for (
i = 0;
i < nbdchginfos; ++
i)
935 if ( haveslack &&
i == nbdchginfos )
942 SCIPdebugMsg(
scip,
"Found conflict involving slack variables that can be remodelled.\n");
953 for (
i = 0;
i < nbdchginfos; ++
i)
969 for (j = 0; j < nconss; ++j)
976 if ( slackvar ==
var )
1004 if (
i == nbdchginfos )
1060 if ( *value == newvalue )
1115#ifdef SCIP_ENABLE_IISCHECK
1158 for (
c = 0;
c < nconss; ++
c)
1185 lincons = consdata->lincons;
1190 slackvar = consdata->slackvar;
1212 linvals[0] = scalar;
1242 for (v = 0; v < nlinvars; ++v)
1249 if (
var == slackvar )
1262 newvars[nnewvars++] =
var;
1280 for (v = 0; v < nnewvars; ++v)
1294 for (v = nnewvars - 1; v >= 0; --v)
1306 for (v = 0; v < nlinvars; ++v)
1313 if (
var == slackvar )
1318 matval[cnt] = sign * linvals[v];
1343 if ( conshdlrdata->useotherconss )
1350 for (
c = 0;
c < nconss; ++
c)
1394 for (v = 0; v < nlinvars; ++v)
1410 newvars[nnewvars++] =
var;
1428 for (v = 0; v < nnewvars; ++v)
1442 for (v = nnewvars - 1; v >= 0; --v)
1453 for (v = 0; v < nlinvars; ++v)
1461 matval[cnt] = linvals[v];
1540 assert( conshdlrdata->naddlincons <= conshdlrdata->maxaddlincons );
1542 if ( num > conshdlrdata->maxaddlincons )
1548 conshdlrdata->maxaddlincons = newsize;
1550 assert( num <= conshdlrdata->maxaddlincons );
1597 conshdlrdata->nrows = 1;
1639 for (j = 0; j < nCols; ++j)
1644 for (j = 0; j < nconss; ++j)
1652 ind = consdata->colindex;
1657 covered[ind] =
TRUE;
1666 for (j = 0; j < nCols; ++j)
1705 int* indices =
NULL;
1715 for (j = 0; j < nconss; ++j)
1723 if ( consdata->colindex >= 0 )
1729 obj[cnt] = 1.0 - val;
1730 indices[cnt++] = consdata->colindex;
1757 int* indices =
NULL;
1767 for (j = 0; j < nconss; ++j)
1775 if ( consdata->colindex >= 0 )
1778 indices[cnt++] = consdata->colindex;
1806 int* indices =
NULL;
1819 for (j = 0; j < nconss; ++j)
1827 if ( consdata->colindex >= 0 )
1831 indices[cnt] = consdata->colindex;
1898 int* indices =
NULL;
1911 for (j = 0; j < nconss; ++j)
1921 if ( consdata->colindex >= 0 )
1923 indices[cnt] = consdata->colindex;
1963 altlp = conshdlrdata->altlp;
1964 lbhash = conshdlrdata->lbhash;
1965 ubhash = conshdlrdata->ubhash;
1973 for (v = 0; v <
nvars; ++v)
1999 conshdlrdata->scaled =
FALSE;
2027 altlp = conshdlrdata->altlp;
2028 lbhash = conshdlrdata->lbhash;
2029 ubhash = conshdlrdata->ubhash;
2037 for (v = 0; v <
nvars; ++v)
2099 lbhash = conshdlrdata->lbhash;
2100 ubhash = conshdlrdata->ubhash;
2108 for (v = 0; v <
nvars; ++v)
2122 assert( 0 <= col && col < nCols );
2140 assert( 0 <= col && col < nCols );
2169 if ( ! conshdlrdata->scaled )
2180 altlp = conshdlrdata->altlp;
2190 for (j = 0; j < cnt; ++j)
2194 sum = -
REALABS(sum) / ((double) cnt);
2202 conshdlrdata->scaled =
TRUE;
2255 if ( conshdlrdata->altlp ==
NULL )
2269 assert( nrows == conshdlrdata->nrows );
2292 matval[cnt++] = sign * rhscoef;
2296 for (v = 0; v <
nvars; ++v)
2307 if (
var != slackvar )
2313 if ( ind < INT_MAX )
2321 matind[cnt] = (conshdlrdata->nrows)++;
2324 newrowsslack[nnewrows++] =
TRUE;
2327 matval[cnt++] = sign * vals[v];
2341 matind[cnt] = (conshdlrdata->nrows)++;
2344 newrowsslack[nnewrows++] =
FALSE;
2345 newvars[nnewvars++] =
var;
2348 matval[cnt++] = sign * vals[v];
2361 for (
i = 0;
i < nnewrows; ++
i)
2363 if ( newrowsslack[
i] )
2393 for (v = 0; v < nnewvars; ++v)
2402 matbeg[nnewcols] = cnt;
2406 matval[cnt++] = -val;
2411 matval[cnt++] = -1.0;
2412 obj[nnewcols] = 0.0;
2415 ++conshdlrdata->nlbbounds;
2419 SCIPdebugMsg(
scip,
"Added column for lower bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2428 matbeg[nnewcols] = cnt;
2432 matval[cnt++] = val;
2437 matval[cnt++] = 1.0;
2438 obj[nnewcols] = 0.0;
2441 ++conshdlrdata->nubbounds;
2445 SCIPdebugMsg(
scip,
"Added column for upper bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2459 assert( cnt == ncols + nnewcols + 1 );
2471 conshdlrdata->scaled =
FALSE;
2526 SCIPdebugMsg(
scip,
"Slack variable is aggregated (scalar: %f, constant: %f).\n", scalar, constant);
2536 linvals[0] = scalar;
2559 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
TRUE, colindex) );
2564 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
FALSE, colindex) );
2570 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linlhs, objcoef, -1.0,
FALSE, colindex) );
2630 for (j = 0; j < nrowcols; ++j)
2640 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
TRUE, colindex) );
2645 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
FALSE, colindex) );
2651 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nrowcols, rowvars, rowvals, rowlhs, objcoef, -1.0,
FALSE, colindex) );
2684 if ( conshdlrdata->objcutindex >= 0 )
2688 if ( ! conshdlrdata->objothervarsonly )
2692 SCIPdebugMsg(
scip,
"Add objective cut to alternative LP (obj. bound: %g).\n", conshdlrdata->objupperbound);
2699 for (v = 0; v <
nvars; ++v)
2711 objvars[nobjvars] =
var;
2712 objvals[nobjvars++] =
objval;
2717 SCIP_CALL(
addAltLPColumn(
scip, conshdlr, conshdlrdata,
NULL, nobjvars, objvars, objvals, conshdlrdata->objupperbound, 0.0, 1.0,
FALSE, &conshdlrdata->objcutindex) );
2718 assert( conshdlrdata->objcutindex >= 0 );
2719 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2750 if ( conshdlrdata->altlp !=
NULL )
2757 if ( consdata->colindex >= 0 )
2761 consdata->colindex = -1;
2765 conshdlrdata->scaled =
FALSE;
2784 if ( ! conshdlrdata->useobjectivecut )
2787 if ( conshdlrdata->altlp ==
NULL )
2799 if (
SCIPisLT(
scip, objbnd, conshdlrdata->objupperbound) )
2800 conshdlrdata->objupperbound = objbnd;
2807 if (
SCIPisLT(
scip, conshdlrdata->objupperbound, conshdlrdata->objaltlpbound) )
2809 SCIPdebugMsg(
scip,
"Update objective bound to %g.\n", conshdlrdata->objupperbound);
2812 if ( conshdlrdata->objcutindex < 0 )
2826 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2906 if ( maxcondition > 0.0 )
2910 if ( condition !=
SCIP_INVALID && condition > maxcondition )
2912 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix (%e) exceeds maximal allowance (%e).\n", condition, maxcondition);
2920 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix (%e) is below maximal allowance (%e).\n", condition, maxcondition);
2924 SCIPdebugMsg(
scip,
"Estimated condition number of basis matrix not available.\n");
2982 *infeasible =
FALSE;
3019 int nnonviolated = 0;
3039 assert( nconss <= nCols );
3070 SCIPdebugMsg(
scip,
" size: %4d produced possible cover with indicator variable objective value %f.\n", *size, *value);
3073 if ( conshdlrdata->trysolfromcover )
3083 if ( heurindicator ==
NULL )
3100 for (j = 0; j < nconss; ++j)
3107 ind = consdata->colindex;
3124 if ( val < candval )
3136 if ( candidate < 0 )
3142 assert( candidate >= 0 );
3143 assert( ! S[candidate] );
3147 switch ( conshdlrdata->normtype )
3162 SCIPerrorMessage(
"Invalid efficacy norm parameter '%c'.\n", conshdlrdata->normtype);
3167 SCIPdebugMsg(
scip,
" size: %4d, add var. %4d (obj: %-6g, alt-LP sol: %-8.4f); IIS size: %4d, eff.: %g.\n",
3171 S[candidate] =
TRUE;
3183#ifdef SCIP_ENABLE_IISCHECK
3189 if ( conshdlrdata->updatebounds )
3204 for (j = 0; j < nconss; ++j)
3210 ind = consdata->colindex;
3226 assert( cnt == sizeIIS );
3230 SCIP_CALL(
SCIPcreateConsLogicor(
scip, &cons, name, cnt,
vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
3232 SCIP_CALL(
SCIPcreateConsLogicor(
scip, &cons,
"", cnt,
vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
3241 switch ( enfosepatype )
3284 for (j = 0; j < nconss; ++j)
3290 ind = consdata->colindex;
3331 if ( nnonviolated > conshdlrdata->maxsepanonviolated )
3333 SCIPdebugMsg(
scip,
"Stop separation after %d non violated IISs.\n", nnonviolated);
3337 while (step < nconss);
3353 const char* consname,
3374 if ( activeone || binvar ==
NULL )
3375 binvarinternal = binvar;
3384 (*consdata)->nfixednonzero = 0;
3385 (*consdata)->colindex = -1;
3386 (*consdata)->linconsactive = linconsactive;
3387 (*consdata)->binvar = binvarinternal;
3388 (*consdata)->slackvar = slackvar;
3389 (*consdata)->activeone = activeone;
3390 (*consdata)->lessthanineq = lessthanineq;
3391 (*consdata)->lincons = lincons;
3392 (*consdata)->implicationadded =
FALSE;
3393 (*consdata)->slacktypechecked =
FALSE;
3394 (*consdata)->varswithevents =
NULL;
3395 (*consdata)->eventtypes =
NULL;
3396 (*consdata)->nevents = 0;
3404 if ( binvarinternal !=
NULL )
3408 (*consdata)->binvar =
var;
3423 if ( conshdlrdata->forcerestart )
3431 ++((*consdata)->nfixednonzero);
3437 (*consdata)->slackvar =
var;
3440 if ( linconsactive )
3444 ++((*consdata)->nfixednonzero);
3455 SCIPdebugMsg(
scip,
"Added column for <%s> to alternative LP with column index %d.\n", consname, (*consdata)->colindex);
3463 if ( (*consdata)->nfixednonzero > 0 )
3465 SCIPdebugMsg(
scip,
"Constraint <%s> has %d variables fixed to be nonzero.\n", consname, (*consdata)->nfixednonzero);
3494 for (
c = 0;
c < nconss; ++
c)
3506 if ( ub <= conshdlrdata->maxcouplingvalue )
3523 !conshdlrdata->removeindicators, !conshdlrdata->removeindicators,
FALSE) );
3529 if ( conshdlrdata->removeindicators )
3582 SCIPdebugMsg(
scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3623 SCIPdebugMsg(
scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3629 SCIPdebugMsg(
scip,
"Fix binary variable to 0 and delete indicator constraint.\n");
3647 if ( dualreductions )
3653 binvar = consdata->binvar;
3713 var = consdata->binvar;
3718 if (
var != consdata->binvar && ! negated )
3723 assert( conshdlrdata->eventhdlrbound !=
NULL );
3730 if ( conshdlrdata->forcerestart )
3732 assert( conshdlrdata->eventhdlrrestart !=
NULL );
3734 conshdlrdata->eventhdlrrestart, (
SCIP_EVENTDATA*) conshdlrdata, -1) );
3745 consdata->binvar =
var;
3756 if (
var == consdata->slackvar )
3775 var = consdata->slackvar;
3788 assert( conshdlrdata->eventhdlrbound !=
NULL );
3799 consdata->slackvar =
var;
3801 else if (
var == consdata->binvar )
3809 SCIPdebugMsg(
scip,
"Slack variable <%s> is aggregated to negated indicator variable <%s> -> constraint redundant.\n",
3823 SCIPdebugMsg(
scip,
"Slack variable <%s> is aggregated to the indicator variable <%s> -> fix indicator variable to 0.\n",
3878 if ( ! consdata->linconsactive )
3892 if ( consdata->nfixednonzero > 1 )
3894 SCIPdebugMsg(
scip,
"The node is infeasible, both the slack variable and the binary variable are fixed to be nonzero.\n");
3919 if ( consdata->nfixednonzero == 1 )
3929 SCIPdebugMsg(
scip,
"Binary variable <%s> is fixed to be nonzero, fixing slack variable <%s> to 0.\n",
3946 SCIPdebugMsg(
scip,
"Slack variable <%s> is fixed to be nonzero, fixing binary variable <%s> to 0.\n",
3970 if ( addopposite && consdata->linconsactive )
4007 slackvar = consdata->slackvar;
4014 for (j = 0; j < nlinvars; ++j)
4016 if ( linvars[j] != slackvar )
4019 allintegral =
FALSE;
4022 vals[
nvars++] = linvals[j];
4066 if ( dualreductions )
4072 binvar = consdata->binvar;
4160 for (j = 0; j < nlinconsvars; ++j)
4166 val = linconsvals[j];
4169 var = linconsvars[j];
4173 if (
var == consdata->slackvar )
4190 maxactivity += val *
bound;
4202 newub = (maxactivity - rhs) / (-1.0 * coeffslack);
4211 SCIPdebugMsg(
scip,
"Adjusting upper bound of slack variable <%s> to %g for indicator constraint <%s>.\n",
4273 lp = conshdlrdata->altlp;
4281 if ( conshdlrdata->updatebounds )
4296 for (j = 0; j < nconss; ++j)
4320 SCIP_CALL(
extendToCover(
scip, conshdlr, conshdlrdata, lp,
sol, enfosepatype, conshdlrdata->removable, genlogicor, nconss, conss, S, &size, &value, &error,
cutoff, &nCuts) );
4324 if ( nCuts == 0 && error )
4390 for (
c = 0;
c < nconss; ++
c)
4402 if ( ! consdata->linconsactive )
4404 someLinconsNotActive =
TRUE;
4424 binvar = consdata->binvar;
4432 if ( valSlack > maxSlack )
4434 maxSlack = valSlack;
4449 if ( (someLinconsNotActive || conshdlrdata->enforcecuts) && conshdlrdata->sepaalternativelp )
4457 conshdlrdata->niiscutsgen += ngen;
4464 conshdlrdata->niiscutsgen += ngen;
4490 if ( ! conshdlrdata->branchindicators )
4500 binvar = consdata->binvar;
4501 slackvar = consdata->slackvar;
4565 if ( *nGen >= maxsepacuts )
4573 lp = conshdlrdata->altlp;
4583 if ( conshdlrdata->updatebounds )
4601 for (threshold = conshdlrdata->roundingmaxthres;
4602 rounds < conshdlrdata->maxroundingrounds && threshold >= conshdlrdata->roundingminthres && *nGen < maxsepacuts && ! (*
cutoff);
4603 threshold -= conshdlrdata->roundingoffset )
4618 for (j = 0; j < nconss; ++j)
4647 if ( binvarval > binvarnegval )
4665 if ( size == nconss )
4672 if ( size == oldsize )
4674 SCIPdebugMsg(
scip,
"Skipping computation: size support has not changed.\n");
4680 SCIPdebugMsg(
scip,
" Vars with value 1: %d 0: %d and fractional: %d.\n", nvarsone, nvarszero, nvarsfrac);
4688 nconss, conss, S, &size, &value, &error,
cutoff, &nCuts) );
4768 if ( *nGen >= maxsepacuts )
4779 for (
c = 0;
c < nconss; ++
c)
4790 slackvar = consdata->slackvar;
4792 lincons = consdata->lincons;
4795 binvar = consdata->binvar;
4830 cutval = binval * ypart;
4832 for (j = 0; j < nlinvars; ++j)
4842 if ( linvars[j] == slackvar )
4845 if ( conshdlrdata->sepapersplocal )
4864 finitebound =
FALSE;
4869 linval = signfactor * linvals[j];
4873 dout += linval * lb;
4878 dout += linval * ub;
4882 xpart = linval * xval;
4885 if (
SCIPisGT(
scip, binval * din, binval * dout + xpart) )
4888 cutval += binval * din;
4896 cutval += binval * dout + xpart;
4898 cutvars[cnt] = linvars[j];
4899 cutvals[cnt++] = linval;
4903 if ( ! finitebound )
4913 cutvars[cnt] = binvar;
4914 cutvals[cnt] = ypart;
4918 (void)
SCIPsnprintf(name, 50,
"persp%d", conshdlrdata->nperspcutsgen + *nGen);
4931 if ( *nGen >= maxsepacuts )
4979 maxsepacuts = conshdlrdata->maxsepacutsroot;
4981 maxsepacuts = conshdlrdata->maxsepacuts;
4984 if ( conshdlrdata->sepacouplingcuts )
4991 for (
c = 0;
c < nusefulconss && ncuts < maxsepacuts; ++
c)
5006 if ( conshdlrdata->sepacouplinglocal )
5017 if ( ub <= conshdlrdata->sepacouplingvalue )
5055 SCIPdebugMsg(
scip,
"Number of separated coupling inequalities: %d.\n", ncuts);
5064 SCIPdebugMsg(
scip,
"Separating inequalities for indicator constraints.\n");
5072 SCIPdebugMsg(
scip,
"Separated %d cuts from indicator constraints.\n", ncuts - noldcuts);
5076 else if ( ncuts > noldcuts )
5078 conshdlrdata->niiscutsgen += ncuts;
5081 if ( conshdlrdata->genlogicor )
5093 SCIPdebugMsg(
scip,
"Separating inequalities based on perspective formulation.\n");
5101 SCIPdebugMsg(
scip,
"Separated %d cuts from perspective formulation.\n", ncuts - noldcuts);
5103 if ( ncuts > noldcuts )
5105 conshdlrdata->nperspcutsgen += ncuts;
5125 conshdlrdata->linconsevents =
FALSE;
5126 conshdlrdata->linconsboundschanged =
TRUE;
5127 conshdlrdata->boundhaschanged =
TRUE;
5128 conshdlrdata->removable =
TRUE;
5129 conshdlrdata->scaled =
FALSE;
5130 conshdlrdata->altlp =
NULL;
5131 conshdlrdata->nrows = 0;
5132 conshdlrdata->varhash =
NULL;
5133 conshdlrdata->slackhash =
NULL;
5134 conshdlrdata->lbhash =
NULL;
5135 conshdlrdata->ubhash =
NULL;
5136 conshdlrdata->nlbbounds = 0;
5137 conshdlrdata->nubbounds = 0;
5138 conshdlrdata->nslackvars = 0;
5139 conshdlrdata->objcutindex = -1;
5142 conshdlrdata->roundingminthres = 0.1;
5143 conshdlrdata->roundingmaxthres = 0.6;
5145 conshdlrdata->roundingoffset = 0.1;
5146 conshdlrdata->addedcouplingcons =
FALSE;
5147 conshdlrdata->ninitconss = 0;
5148 conshdlrdata->nbinvarszero = 0;
5149 conshdlrdata->performedrestart =
FALSE;
5150 conshdlrdata->objindicatoronly =
FALSE;
5151 conshdlrdata->objothervarsonly =
FALSE;
5152 conshdlrdata->minabsobj = 0.0;
5153 conshdlrdata->normtype =
'e';
5154 conshdlrdata->niiscutsgen = 0;
5155 conshdlrdata->nperspcutsgen = 0;
5180 int maxabsvalidx = -1;
5203 if ( ! conshdlrdata->upgradelinear )
5207 for (j = 0; j <
nvars; ++j)
5223 secabsval = maxabsval;
5247 minactivity += val * lb;
5256 maxactivity += val * ub;
5260 assert( maxabsval >= 0.0 );
5261 assert( 0 <= maxabsvalidx && maxabsvalidx <
nvars );
5276 for (j = 0; j <
nvars; ++j)
5326 if ( upgdlhs || upgdrhs )
5332 assert( ! upgdlhs || ! upgdrhs );
5339 for (l = 0; l <
nvars; ++l)
5341 if (
vars[l] == indvar )
5343 indconsvars[cnt] =
vars[l];
5345 indconsvals[cnt] = -vals[l];
5347 indconsvals[cnt] = vals[l];
5351 if ( indneglhs || indnegrhs )
5436 if ( conshdlrdata->trysolutions && conshdlrdata->heurtrysol ==
NULL )
5461 if ( conshdlrdata->binvarhash !=
NULL )
5464 if ( conshdlrdata->binslackvarhash !=
NULL )
5468 for (
i = 0;
i < nconss;
i++)
5473 if ( consdata->varswithevents !=
NULL )
5478 for (j = 0; j < consdata->nevents; ++j)
5485 consdata->nevents = 0;
5492 conshdlrdata->maxaddlincons = 0;
5493 conshdlrdata->naddlincons = 0;
5494 conshdlrdata->nrows = 0;
5519 if ( conshdlrdata->maxaddlincons > 0 )
5525 conshdlrdata->naddlincons = 0;
5526 conshdlrdata->maxaddlincons = 0;
5556 conshdlrdata->boundhaschanged =
TRUE;
5560 if ( conshdlrdata->sepaalternativelp )
5567 for (
c = 0;
c < nconss; ++
c)
5583 ++conshdlrdata->nslackvars;
5586 if ( conshdlrdata->genlogicor )
5589 int logicorsepafreq;
5594 if ( logicorconshdlr ==
NULL )
5596 SCIPerrorMessage(
"Logicor constraint handler not included, cannot generate constraints.\n");
5601 if ( (sepafreq != -1 || conshdlrdata->enforcecuts) && logicorsepafreq != 1 )
5603 SCIPwarningMessage(
scip,
"For better performance set parameter 'constraints/logicor/sepafreq' to 1 if 'constraints/included/genlogicor' is true.\n");
5609 conshdlrdata->objothervarsonly =
TRUE;
5610 for (
c = 0;
c < nconss; ++
c)
5626 conshdlrdata->objothervarsonly =
FALSE;
5629 if ( ! consdata->linconsactive )
5636 if ( conshdlrdata->sepaalternativelp && consdata->colindex < 0 )
5663 SCIP_CALL(
SCIPcreateNlRow(
scip, &nlrow,
SCIPconsGetName(conss[
c]), 0.0, 0,
NULL,
NULL, quadexpr, 0.0, 0.0,
SCIP_EXPRCURV_UNKNOWN) );
5678 if ( conshdlrdata->sepaalternativelp )
5685 if ( conshdlrdata->naddlincons > 0 )
5687 for (
c = 0;
c < conshdlrdata->naddlincons; ++
c)
5689 cons = conshdlrdata->addlincons[
c];
5708 SCIPdebugMsg(
scip,
"Added %d additional columns to alternative LP.\n", cnt);
5715 if ( conshdlrdata->useotherconss )
5717 const char* conshdlrname;
5725 for (
c = 0;
c < nallconss; ++
c)
5747 SCIPdebugMsg(
scip,
"Added %d additional columns from linear constraints to alternative LP.\n", cnt);
5753 if ( conshdlrdata->forcerestart )
5760 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5766 conshdlrdata->nbinvarszero = 0;
5772 conshdlrdata->objindicatoronly =
FALSE;
5777 for (j = 0; j <
nvars; ++j)
5781 for (
c = 0;
c < nconss; ++
c)
5806 if ( probindex < 0 )
5810 covered[probindex] =
TRUE;
5814 for (j = 0; j <
nvars; ++j)
5825 if (
REALABS(
obj) < conshdlrdata->minabsobj )
5839 conshdlrdata->objindicatoronly =
TRUE;
5841 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5868 if ( conshdlrdata->sepaalternativelp )
5870 if ( conshdlrdata->slackhash !=
NULL )
5879 if ( conshdlrdata->altlp !=
NULL )
5901 for (
c = 0;
c < nconss; ++
c)
5910 consdata->colindex = -1;
5937#ifdef SCIP_MORE_DEBUG
5952 if ( conshdlrdata->binslackvarhash !=
NULL )
5965 if ( conshdlrdata->sepaalternativelp )
5976 if ( (*consdata)->linconsactive )
5978 assert( conshdlrdata->eventhdlrbound !=
NULL );
5984 if ( conshdlrdata->forcerestart )
5986 assert( conshdlrdata->eventhdlrrestart !=
NULL );
5992 if ( conshdlrdata->linconsevents && (*consdata)->linconsactive && (*consdata)->varswithevents !=
NULL )
5999 for (j = 0; j < (*consdata)->nevents; ++j)
6007 (*consdata)->nevents = 0;
6008 assert( (*consdata)->varswithevents ==
NULL );
6025 if( (*consdata)->binvar !=
NULL )
6057 assert( conshdlrdata->eventhdlrbound !=
NULL );
6059#ifdef SCIP_MORE_DEBUG
6069 if ( sourcedata->slackvar ==
NULL )
6076 if ( sourcedata->lincons ==
NULL )
6088 sourcedata->binvar,
TRUE, sourcedata->lessthanineq, sourcedata->slackvar, sourcedata->lincons, sourcedata->linconsactive) );
6089 consdata->activeone = sourcedata->activeone;
6107 if ( sourcedata->linconsactive )
6115 if ( conshdlrdata->sepaalternativelp )
6117 if ( conshdlrdata->binvarhash ==
NULL )
6152 for (
c = 0;
c < nconss; ++
c)
6178 consdata->lincons = translincons;
6186 conshdlrdata->addedcouplingcons =
FALSE;
6208 SCIPdebug(
int oldnfixedvars = *nfixedvars; )
6209 SCIPdebug(
int oldndelconss = *ndelconss; )
6227 if ( nrounds == 0 || nnewfixedvars > 0 || nnewchgbds > 0 || nnewaggrvars > 0 )
6232 for (
c = 0;
c < nconss; ++
c)
6247#ifdef SCIP_MORE_DEBUG
6252 if ( ! consdata->linconsactive )
6262 if ( ! consdata->implicationadded )
6271 consdata->implicationadded =
TRUE;
6280 if ( !consdata->slacktypechecked )
6282 consdata->slacktypechecked =
TRUE;
6296 slackvar = consdata->slackvar;
6299 for (j = 0; j <
nvars; ++j)
6301 if (
vars[j] == slackvar )
6302 foundslackvar =
TRUE;
6310 if ( j ==
nvars && foundslackvar )
6329 SCIPdebugMsg(
scip,
"Cannot declare slack variable (<%s>) weakly implied integral, since global bound is non-integral: (%g, %g).\n",
6351 noReductions = nnewfixedvars == 0 && nnewaggrvars == 0 && nnewchgvartypes == 0 && nnewchgbds == 0
6352 && nnewdelconss == 0 && nnewchgcoefs == 0 && nnewchgsides == 0;
6355 if ( noReductions && *
result !=
SCIP_SUCCESS && conshdlrdata->addcouplingcons && ! conshdlrdata->addedcouplingcons )
6365 *nupgdconss += ngen;
6366 if ( conshdlrdata->removeindicators )
6369 conshdlrdata->addedcouplingcons =
TRUE;
6372 SCIPdebug(
SCIPdebugMsg(
scip,
"Presolved %d constraints (fixed %d variables, removed 0 variables, and deleted %d constraints).\n",
6373 nconss, *nfixedvars - oldnfixedvars, *ndelconss - oldndelconss); )
6399 *infeasible =
FALSE;
6402 if ( ! conshdlrdata->addcoupling )
6406 if ( conshdlrdata->addcouplingcons && conshdlrdata->addedcouplingcons )
6409 SCIPdebugMsg(
scip,
"Handle initial rows for %d indicator constraints.\n", nconss);
6412 for (
c = 0;
c < nconss && !(*infeasible); ++
c)
6423 if ( ! consdata->linconsactive )
6431 if ( ub <= conshdlrdata->maxcouplingvalue )
6442 if ( conshdlrdata->addcouplingcons )
6446 assert( ! conshdlrdata->addedcouplingcons );
6530 if ( solinfeasible )
6559 if ( solinfeasible )
6586 if ( solinfeasible )
6592 if ( objinfeasible )
6636 someLinconsNotActive =
FALSE;
6637 for (
c = 0;
c < nconss; ++
c)
6647 if ( ! consdata->linconsactive )
6649 someLinconsNotActive =
TRUE;
6679 if ( trysol !=
NULL )
6683 changedSol = changedSol || changed;
6695 if ( trysol !=
NULL )
6699 changedSol = changedSol || changed;
6705 if ( someLinconsNotActive )
6712 lp = conshdlrdata->altlp;
6713 assert( conshdlrdata->sepaalternativelp );
6723 if ( conshdlrdata->updatebounds )
6737 for (
c = 0;
c < nconss; ++
c)
6782 if ( trysol !=
NULL && changedSol )
6789 if ( trysol !=
NULL )
6839 if ( !conshdlrdata->linconsevents )
6841 for (
c = 0;
c < nconss; ++
c)
6854 if ( ! consdata->linconsactive )
6876 for (j = 0; j <
nvars; ++j)
6878 if (
vars[j] == consdata->slackvar )
6882 if ( vals[j] > 0.0 )
6885 consdata->varswithevents[consdata->nevents] =
vars[j];
6887 consdata->nevents++;
6892 consdata->varswithevents[consdata->nevents] =
vars[j];
6894 consdata->nevents++;
6899 conshdlrdata->linconsevents =
TRUE;
6903 conshdlrdata->boundhaschanged =
FALSE;
6904 conshdlrdata->linconsboundschanged =
FALSE;
6909 for (
c = 0;
c < nconss; ++
c)
6923#ifdef SCIP_MORE_DEBUG
6969 assert( inferinfo == 0 || inferinfo == 1 || inferinfo == 2 || inferinfo == 3 );
6970 assert( consdata->linconsactive );
6973 if ( inferinfo == 0 )
6976 assert( infervar != consdata->binvar );
6980 else if ( inferinfo == 1 )
6983 assert( infervar != consdata->slackvar );
6989 else if ( inferinfo == 2 )
7002 assert( inferinfo == 3 );
7009 for (j = 0; j < nlinconsvars; ++j)
7011 if ( linconsvals[j] > 0.0 )
7051#ifdef SCIP_MORE_DEBUG
7057 if ( consdata->linconsactive )
7081 for (j = 0; j < nlinvars; ++j)
7131 binvar = consdata->binvar;
7159 const char* consname;
7174#ifdef SCIP_MORE_DEBUG
7189 sourcelincons = sourceconsdata->lincons;
7218 sourceconsdata->lincons = translincons;
7219 sourcelincons = translincons;
7233 sourcebinvar = sourceconsdata->binvar;
7244 sourceslackvar = sourceconsdata->slackvar;
7260 initial,
separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode) );
7268 if ( targetlincons !=
NULL )
7281 char binvarname[1024];
7282 char slackvarname[1024];
7283 char linconsname[1024];
7294 nargs = sscanf(str,
" <%1023[^>]> = %d -> <%1023[^>]> = 0 (<%1023[^>]>)", binvarname, &zeroone, slackvarname, linconsname);
7297 if ( nargs != 3 && nargs != 4 )
7304 if ( zeroone != 0 && zeroone != 1 )
7313 if ( binvar ==
NULL )
7325 if ( slackvar ==
NULL )
7336 if ( lincons ==
NULL )
7357 posstr = strstr(slackvarname,
"indslack");
7358 if ( posstr ==
NULL )
7366 (void)
SCIPsnprintf(binvarname, 1023,
"indlin%s", posstr+8);
7369 if ( lincons ==
NULL )
7375 if ( lincons ==
NULL )
7378 (void)
SCIPsnprintf(binvarname, 1023,
"%s", posstr+16);
7381 if( lincons ==
NULL )
7384 name, posstr+8, posstr+9, posstr+16);
7403 initial,
separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode) );
7422#ifdef SCIP_MORE_DEBUG
7432 if ( conshdlrdata->altlp !=
NULL )
7434 assert( conshdlrdata->sepaalternativelp );
7436 if ( consdata->colindex >= 0 )
7458#ifdef SCIP_MORE_DEBUG
7465 if ( conshdlrdata->altlp !=
NULL )
7471 assert( conshdlrdata->sepaalternativelp );
7473 if ( consdata->colindex >= 0 )
7509 if ( consdata->binvar !=
NULL )
7514 if ( consdata->slackvar !=
NULL )
7553 if ( consdata->binvar !=
NULL )
7555 if ( consdata->slackvar !=
NULL )
7594 *infeasible =
FALSE;
7600 for (
c = 0;
c < nindconss; ++
c)
7621 if ( score > bestscore )
7678 conshdlrdata->eventhdlrbound =
NULL;
7680 eventExecIndicatorBound,
NULL) );
7681 assert(conshdlrdata->eventhdlrbound !=
NULL);
7684 conshdlrdata->eventhdlrlinconsbound =
NULL;
7686 eventExecIndicatorLinconsBound,
NULL) );
7687 assert(conshdlrdata->eventhdlrlinconsbound !=
NULL);
7690 conshdlrdata->eventhdlrrestart =
NULL;
7692 eventExecIndicatorRestart,
NULL) );
7693 assert( conshdlrdata->eventhdlrrestart !=
NULL );
7695 conshdlrdata->heurtrysol =
NULL;
7699 conshdlrdata->binvarhash =
NULL;
7700 conshdlrdata->binslackvarhash =
NULL;
7708 conshdlrdata->addlincons =
NULL;
7709 conshdlrdata->naddlincons = 0;
7710 conshdlrdata->maxaddlincons = 0;
7715 consEnfolpIndicator, consEnfopsIndicator, consCheckIndicator, consLockIndicator,
7757 conflicthdlrdata->conshdlrdata = conshdlrdata;
7758 conflicthdlrdata->conshdlr = conshdlr;
7759 assert( conflicthdlrdata->conshdlr !=
NULL );
7763 conflictExecIndicator, conflicthdlrdata) );
7769 "constraints/indicator/branchindicators",
7770 "Branch on indicator constraints in enforcing?",
7774 "constraints/indicator/genlogicor",
7775 "Generate logicor constraints instead of cuts?",
7779 "constraints/indicator/addcoupling",
7780 "Add coupling constraints or rows if big-M is small enough?",
7784 "constraints/indicator/maxcouplingvalue",
7785 "maximum coefficient for binary variable in coupling constraint",
7789 "constraints/indicator/addcouplingcons",
7790 "Add initial variable upper bound constraints, if 'addcoupling' is true?",
7794 "constraints/indicator/sepacouplingcuts",
7795 "Should the coupling inequalities be separated dynamically?",
7799 "constraints/indicator/sepacouplinglocal",
7800 "Allow to use local bounds in order to separate coupling inequalities?",
7804 "constraints/indicator/sepacouplingvalue",
7805 "maximum coefficient for binary variable in separated coupling constraint",
7809 "constraints/indicator/sepaperspective",
7810 "Separate cuts based on perspective formulation?",
7814 "constraints/indicator/sepapersplocal",
7815 "Allow to use local bounds in order to separate perspective cuts?",
7819 "constraints/indicator/maxsepanonviolated",
7820 "maximal number of separated non violated IISs, before separation is stopped",
7824 "constraints/indicator/updatebounds",
7825 "Update bounds of original variables for separation?",
7829 "constraints/indicator/maxconditionaltlp",
7830 "maximum estimated condition of the solution basis matrix of the alternative LP to be trustworthy (0.0 to disable check)",
7834 "constraints/indicator/maxsepacuts",
7835 "maximal number of cuts separated per separation round",
7839 "constraints/indicator/maxsepacutsroot",
7840 "maximal number of cuts separated per separation round in the root node",
7844 "constraints/indicator/removeindicators",
7845 "Remove indicator constraint if corresponding variable bound constraint has been added?",
7849 "constraints/indicator/generatebilinear",
7850 "Do not generate indicator constraint, but a bilinear constraint instead?",
7854 "constraints/indicator/scaleslackvar",
7855 "Scale slack variable coefficient at construction time?",
7859 "constraints/indicator/trysolutions",
7860 "Try to make solutions feasible by setting indicator variables?",
7864 "constraints/indicator/enforcecuts",
7865 "In enforcing try to generate cuts (only if sepaalternativelp is true)?",
7869 "constraints/indicator/dualreductions",
7870 "Should dual reduction steps be performed?",
7874 "constraints/indicator/addopposite",
7875 "Add opposite inequality in nodes in which the binary variable has been fixed to 0?",
7879 "constraints/indicator/conflictsupgrade",
7880 "Try to upgrade bounddisjunction conflicts by replacing slack variables?",
7884 "constraints/indicator/restartfrac",
7885 "fraction of binary variables that need to be fixed before restart occurs (in forcerestart)",
7889 "constraints/indicator/useotherconss",
7890 "Collect other constraints to alternative LP?",
7894 "constraints/indicator/useobjectivecut",
7895 "Use objective cut with current best solution to alternative LP?",
7899 "constraints/indicator/trysolfromcover",
7900 "Try to construct a feasible solution from a cover?",
7904 "constraints/indicator/upgradelinear",
7905 "Try to upgrade linear constraints to indicator constraints?",
7909 "constraints/indicator/usesameslackvar",
7910 "Use same slack variable for indicator constraints with common binary variable?",
7915 "constraints/indicator/sepaalternativelp",
7916 "Separate using the alternative LP?",
7920 "constraints/indicator/forcerestart",
7921 "Force restart if absolute gap is 1 or enough binary variables have been fixed?",
7925 "constraints/indicator/nolinconscont",
7926 "Decompose problem (do not generate linear constraint if all variables are continuous)?",
7969 return SCIPcreateConsIndicatorGeneric(
scip, cons, name, binvar,
nvars,
vars, vals, rhs,
TRUE,
TRUE, initial,
7970 separate, enforce, check,
propagate, local, dynamic, removable, stickingatnode);
8028 SCIPerrorMessage(
"Indicator constraint <%s> needs nonnegative number of variables in linear constraint.\n", name);
8034 if ( conshdlr ==
NULL )
8043 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8045 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8049 if ( conshdlrdata->nolinconscont && conshdlrdata->generatebilinear )
8062 for ( v = 0; v <
nvars; ++v )
8063 valscopy[v] = -vals[v];
8069 linconsactive = !conshdlrdata->nolinconscont;
8070 for ( v = 0; v <
nvars; ++v )
8072 if ( conshdlrdata->scaleslackvar )
8073 absvalsum +=
REALABS(valscopy[v]);
8076 linconsactive =
TRUE;
8077 if ( !conshdlrdata->scaleslackvar && !integral )
8082 if ( !conshdlrdata->scaleslackvar )
8089 if ( !conshdlrdata->scaleslackvar && linconsactive )
8095 if ( activeone || binvar ==
NULL )
8096 binvarinternal = binvar;
8105 if ( binvarinternal !=
NULL )
8108 if ( conshdlrdata->usesameslackvar && conshdlrdata->binslackvarhash ==
NULL )
8113 if ( conshdlrdata->binslackvarhash !=
NULL &&
SCIPhashmapExists(conshdlrdata->binslackvarhash, (
void*) binvarinternal) )
8143 if ( conshdlrdata->binslackvarhash !=
NULL )
8168 if ( linconsactive )
8181 if ( ! lessthanineq )
8189 if ( conshdlrdata->scaleslackvar &&
nvars > 0 )
8205 if ( conshdlrdata->generatebilinear )
8212 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8219 binvar, activeone, lessthanineq, slackvar, lincons, linconsactive) );
8223 if( consdata->binvar !=
NULL )
8229 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8230 local, modifiable, dynamic, removable, stickingatnode) );
8235 if ( linconsactive )
8242 if ( conshdlrdata->sepaalternativelp )
8244 if ( conshdlrdata->binvarhash ==
NULL )
8353 if ( conshdlr ==
NULL )
8362 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8364 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8371 linconsactive = ! conshdlrdata->nolinconscont;
8372 for ( v = 0; v <
nvars && ! linconsactive; ++v )
8374 if (
vars[v] == slackvar )
8378 linconsactive =
TRUE;
8392 if ( conshdlrdata->generatebilinear )
8401 binvarinternal = binvar;
8409 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8416 binvar, activeone,
TRUE, slackvar, lincons, linconsactive) );
8420 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8421 local, modifiable, dynamic, removable, stickingatnode) );
8432 if( consdata !=
NULL )
8481 enforce, check,
propagate, local, dynamic, removable, stickingatnode);
8588 if ( conshdlr ==
NULL )
8597 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
8599 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
8615 linconsactive = !conshdlrdata->nolinconscont;
8616 for ( v = 0; v <
nvars; ++v )
8620 linconsactive =
TRUE;
8642 binvarinternal = binvar;
8651 if ( conshdlrdata->usesameslackvar && conshdlrdata->binslackvarhash ==
NULL )
8656 if ( conshdlrdata->binslackvarhash !=
NULL &&
SCIPhashmapExists(conshdlrdata->binslackvarhash, (
void*) binvarinternal) )
8687 if ( conshdlrdata->binslackvarhash !=
NULL )
8707 if ( conshdlrdata->generatebilinear )
8714 SCIP_CALL(
SCIPcreateConsQuadraticNonlinear(
scip, cons, name, 0,
NULL,
NULL, 1, &binvarinternal, &slackvar, &val, 0.0, 0.0,
8721 binvar, activeone,
TRUE, slackvar, lincons, linconsactive) );
8725 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
8726 local, modifiable, dynamic, removable, stickingatnode) );
8737 if( consdata !=
NULL )
8784 enforce, check,
propagate, local, dynamic, removable, stickingatnode);
8806 if ( !consdata->lessthanineq )
8840 return consdata->lincons;
8878 consdata->lincons = lincons;
8879 consdata->linconsactive = !conshdlrdata->nolinconscont;
8883 if ( !consdata->linconsactive )
8889 for ( v = 0; v <
nvars; ++v )
8893 consdata->linconsactive =
TRUE;
8916 return consdata->activeone;
8934 return consdata->binvar;
8951 binvar = consdata->binvar;
8953 if ( ! consdata->activeone )
8985 if ( consdata->binvar !=
NULL )
9003 if ( ! consdata->activeone )
9007 consdata->binvar =
var;
9016 assert( conshdlrdata->eventhdlrbound !=
NULL );
9017 assert( conshdlrdata->eventhdlrrestart !=
NULL );
9020 if ( consdata->linconsactive )
9026 if ( conshdlrdata->forcerestart )
9033 ++(consdata->nfixednonzero);
9037 if ( ! consdata->activeone )
9041 consdata->binvar = binvar;
9061 return consdata->slackvar;
9118 if ( consdata->linconsactive )
9193 if ( ! consdata->linconsactive )
9196 lincons = consdata->lincons;
9202 slackvar = consdata->slackvar;
9203 binvar = consdata->binvar;
9214 for (v = 0; v < nlinvars; ++v)
9218 if (
var != slackvar )
9221 slackcoef = linvals[v];
9229 assert( slackcoef != 0.0 );
9242 val = (val - sum)/slackcoef;
9245 if ( slackcoef < 0 )
9358 for (
c = 0;
c < nconss; ++
c)
9368 if ( ! consdata->linconsactive )
9372 *changed = *changed || chg;
9400 assert( conshdlrdata->naddlincons+1 <= conshdlrdata->maxaddlincons );
9402 conshdlrdata->addlincons[conshdlrdata->naddlincons++] = lincons;
9434 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_STRINGEQ(name, reference, retcode)
#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