208 #define CONSHDLR_NAME "indicator" 209 #define CONSHDLR_DESC "indicator constraint handler" 210 #define CONSHDLR_SEPAPRIORITY 10 211 #define CONSHDLR_ENFOPRIORITY -100 212 #define CONSHDLR_CHECKPRIORITY -6000000 213 #define CONSHDLR_SEPAFREQ 10 214 #define CONSHDLR_PROPFREQ 1 215 #define CONSHDLR_EAGERFREQ 100 217 #define CONSHDLR_MAXPREROUNDS -1 218 #define CONSHDLR_DELAYSEPA FALSE 219 #define CONSHDLR_DELAYPROP FALSE 220 #define CONSHDLR_NEEDSCONS TRUE 222 #define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST 223 #define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP 227 #define EVENTHDLR_BOUND_NAME "indicatorbound" 228 #define EVENTHDLR_BOUND_DESC "bound change event handler for indicator constraints" 230 #define EVENTHDLR_RESTART_NAME "indicatorrestart" 231 #define EVENTHDLR_RESTART_DESC "force restart if absolute gap is 1 or enough binary variables have been fixed" 235 #define CONFLICTHDLR_NAME "indicatorconflict" 236 #define CONFLICTHDLR_DESC "replace slack variables and generate logicor constraints" 237 #define CONFLICTHDLR_PRIORITY 200000 240 #define LINCONSUPGD_PRIORITY +100000 243 #define DEFAULT_BRANCHINDICATORS FALSE 244 #define DEFAULT_GENLOGICOR FALSE 245 #define DEFAULT_ADDCOUPLING TRUE 246 #define DEFAULT_MAXCOUPLINGVALUE 1e4 247 #define DEFAULT_ADDCOUPLINGCONS FALSE 248 #define DEFAULT_SEPACOUPLINGCUTS TRUE 249 #define DEFAULT_SEPACOUPLINGLOCAL FALSE 250 #define DEFAULT_SEPACOUPLINGVALUE 1e4 251 #define DEFAULT_SEPAALTERNATIVELP FALSE 252 #define DEFAULT_SEPAPERSPECTIVE FALSE 253 #define DEFAULT_SEPAPERSPLOCAL TRUE 254 #define DEFAULT_MAXSEPANONVIOLATED 3 255 #define DEFAULT_TRYSOLFROMCOVER FALSE 256 #define DEFAULT_UPGRADELINEAR FALSE 257 #define DEFAULT_USEOTHERCONSS FALSE 258 #define DEFAULT_USEOBJECTIVECUT FALSE 259 #define DEFAULT_UPDATEBOUNDS FALSE 260 #define DEFAULT_MAXCONDITIONALTLP 0.0 261 #define DEFAULT_MAXSEPACUTS 100 262 #define DEFAULT_MAXSEPACUTSROOT 2000 263 #define DEFAULT_REMOVEINDICATORS FALSE 264 #define DEFAULT_GENERATEBILINEAR FALSE 265 #define DEFAULT_SCALESLACKVAR FALSE 266 #define DEFAULT_NOLINCONSCONT FALSE 267 #define DEFAULT_TRYSOLUTIONS TRUE 268 #define DEFAULT_ENFORCECUTS FALSE 269 #define DEFAULT_DUALREDUCTIONS TRUE 270 #define DEFAULT_ADDOPPOSITE FALSE 271 #define DEFAULT_CONFLICTSUPGRADE FALSE 272 #define DEFAULT_FORCERESTART FALSE 273 #define DEFAULT_RESTARTFRAC 0.9 277 #define OBJEPSILON 0.001 278 #define SEPAALTTHRESHOLD 10 279 #define MAXROUNDINGROUNDS 1 290 unsigned int linconsactive:1;
291 unsigned int implicationadded:1;
292 unsigned int slacktypechecked:1;
297 struct SCIP_ConshdlrData
321 int maxroundingrounds;
345 int maxsepanonviolated;
373 struct SCIP_ConflicthdlrData
381 #define SCIP_CALL_PARAM(x) do \ 383 SCIP_RETCODE _restat_; \ 384 if ( (_restat_ = (x)) != SCIP_OKAY && (_restat_ != SCIP_PARAMETERUNKNOWN) ) \ 386 SCIPerrorMessage("[%s:%d] Error <%d> in function call\n", __FILE__, __LINE__, _restat_); \ 408 assert( eventhdlr != NULL );
409 assert( eventdata != NULL );
411 assert( event != NULL );
414 assert( consdata != NULL );
415 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
416 assert( consdata->linconsactive );
427 ++(consdata->nfixednonzero);
428 #ifdef SCIP_MORE_DEBUG 429 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
437 ++(consdata->nfixednonzero);
438 #ifdef SCIP_MORE_DEBUG 439 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
447 --(consdata->nfixednonzero);
448 #ifdef SCIP_MORE_DEBUG 449 SCIPdebugMsg(
scip,
"Changed lower bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
457 --(consdata->nfixednonzero);
458 #ifdef SCIP_MORE_DEBUG 459 SCIPdebugMsg(
scip,
"Changed upper bound of variable <%s> from %g to %g (nfixednonzero: %d).\n",
469 assert( 0 <= consdata->nfixednonzero && consdata->nfixednonzero <= 2 );
490 assert(
scip != NULL );
491 assert( eventhdlr != NULL );
492 assert( eventdata != NULL );
494 assert( event != NULL );
497 assert( conshdlrdata != NULL );
498 assert( conshdlrdata->forcerestart );
521 if ( conshdlrdata->performedrestart )
525 ++(conshdlrdata->nbinvarszero);
533 if ( conshdlrdata->nbinvarszero > (
int) ((
SCIP_Real) conshdlrdata->ninitconss * conshdlrdata->restartfrac) )
536 "Forcing restart, since %d binary variables among %d have been fixed.\n", conshdlrdata->nbinvarszero, conshdlrdata->ninitconss);
540 if ( conshdlrdata->objindicatoronly )
544 conshdlrdata->performedrestart =
TRUE;
551 assert(
SCIPisGE(
scip, conshdlrdata->minabsobj, 1.0 ) );
556 if ( ! conshdlrdata->objindicatoronly )
573 conshdlrdata->performedrestart =
TRUE;
595 assert(
scip != NULL );
596 assert( conflicthdlr != NULL );
621 assert( conflicthdlr != NULL );
623 assert( bdchginfos != NULL || nbdchginfos == 0 );
624 assert( result != NULL );
636 assert( conflicthdlrdata != NULL );
646 for (i = 0; i < nbdchginfos; ++i)
648 assert( bdchginfos != NULL );
649 assert( bdchginfos[i] != NULL );
678 if ( haveslack && i == nbdchginfos )
685 SCIPdebugMsg(
scip,
"Found conflict involving slack variables that can be remodelled.\n");
687 assert( conflicthdlrdata->conshdlr != NULL );
695 for (i = 0; i < nbdchginfos; ++i)
697 assert( bdchginfos != NULL );
698 assert( bdchginfos[i] != NULL );
711 for (j = 0; j < nconss; ++j)
713 assert( conss[j] != NULL );
715 assert( slackvar != NULL );
718 if ( slackvar == var )
746 if ( i == nbdchginfos )
792 const char* paramname;
794 assert( scip != NULL );
795 assert( param != NULL );
796 assert( name != NULL );
797 assert( value != NULL );
802 if ( *value == newvalue )
806 assert( paramname != NULL );
809 if ( strcmp(paramname, name) == 0 )
814 SCIPwarningMessage(scip,
"Cannot change parameter <%s> stage %d - reset to old value %s.\n", name,
SCIPgetStage(scip), *value ?
"true" :
"false");
836 assert( scip != NULL );
837 assert( param != NULL );
841 assert( conshdlr != NULL );
845 assert( conshdlrdata != NULL );
847 SCIP_CALL(
checkTransferBoolParam(scip, param,
"constraints/indicator/sepaalternativelp", conshdlrdata->sepaalternativelp_, &conshdlrdata->sepaalternativelp) );
857 #ifdef SCIP_ENABLE_IISCHECK 878 assert( scip != NULL );
879 assert( vector != NULL );
885 assert( conshdlr != NULL );
888 assert( conshdlrdata != NULL );
900 for (c = 0; c < nconss; ++c)
904 assert( consdata != NULL );
927 lincons = consdata->lincons;
928 assert( lincons != NULL );
932 slackvar = consdata->slackvar;
933 assert( slackvar != NULL );
984 for (v = 0; v < nlinvars; ++v)
988 assert( var != NULL );
991 if ( var == slackvar )
1004 newvars[nnewvars++] = var;
1022 for (v = 0; v < nnewvars; ++v)
1036 for (v = nnewvars - 1; v >= 0; --v)
1048 for (v = 0; v < nlinvars; ++v)
1052 assert( var != NULL );
1055 if ( var == slackvar )
1060 matval[cnt] = sign * linvals[v];
1075 assert( slackvar != NULL );
1085 if ( conshdlrdata->useotherconss )
1092 for (c = 0; c < nconss; ++c)
1109 assert( cons != NULL );
1136 for (v = 0; v < nlinvars; ++v)
1140 assert( var != NULL );
1152 newvars[nnewvars++] = var;
1170 for (v = 0; v < nnewvars; ++v)
1184 for (v = nnewvars - 1; v >= 0; --v)
1195 for (v = 0; v < nlinvars; ++v)
1199 assert( var != NULL );
1203 matval[cnt] = linvals[v];
1275 assert( scip != NULL );
1276 assert( conshdlr != NULL );
1280 assert( conshdlrdata != NULL );
1281 assert( conshdlrdata->naddlincons <= conshdlrdata->maxaddlincons );
1283 if ( num > conshdlrdata->maxaddlincons )
1289 conshdlrdata->maxaddlincons = newsize;
1291 assert( num <= conshdlrdata->maxaddlincons );
1316 assert( scip != NULL );
1320 assert( conshdlrdata != NULL );
1321 assert( conshdlrdata->altlp == NULL );
1322 assert( conshdlrdata->varhash == NULL );
1323 assert( conshdlrdata->lbhash == NULL );
1324 assert( conshdlrdata->ubhash == NULL );
1325 assert( conshdlrdata->slackhash != NULL );
1337 conshdlrdata->nrows = 1;
1370 assert( scip != NULL );
1371 assert( lp != NULL );
1379 for (j = 0; j < nCols; ++j)
1384 for (j = 0; j < nconss; ++j)
1389 assert( conss[j] != NULL );
1391 assert( consdata != NULL );
1392 ind = consdata->colindex;
1396 assert( ind < nCols );
1397 covered[ind] =
TRUE;
1406 for (j = 0; j < nCols; ++j)
1445 int* indices = NULL;
1448 assert( scip != NULL );
1449 assert( lp != NULL );
1450 assert( conss != NULL );
1455 for (j = 0; j < nconss; ++j)
1459 assert( conss[j] != NULL );
1461 assert( consdata != NULL );
1463 if ( consdata->colindex >= 0 )
1469 obj[cnt] = 1.0 - val;
1470 indices[cnt++] = consdata->colindex;
1497 int* indices = NULL;
1500 assert( scip != NULL );
1501 assert( lp != NULL );
1502 assert( conss != NULL );
1507 for (j = 0; j < nconss; ++j)
1511 assert( conss[j] != NULL );
1513 assert( consdata != NULL );
1515 if ( consdata->colindex >= 0 )
1518 indices[cnt++] = consdata->colindex;
1546 int* indices = NULL;
1550 assert( scip != NULL );
1551 assert( lp != NULL );
1552 assert( conss != NULL );
1559 for (j = 0; j < nconss; ++j)
1563 assert( conss[j] != NULL );
1565 assert( consdata != NULL );
1567 if ( consdata->colindex >= 0 )
1571 indices[cnt] = consdata->colindex;
1638 int* indices = NULL;
1642 assert( scip != NULL );
1643 assert( lp != NULL );
1644 assert( conss != NULL );
1651 for (j = 0; j < nconss; ++j)
1657 assert( conss[j] != NULL );
1659 assert( consdata != NULL );
1661 if ( consdata->colindex >= 0 )
1663 indices[cnt] = consdata->colindex;
1700 assert( scip != NULL );
1701 assert( conshdlrdata != NULL );
1703 altlp = conshdlrdata->altlp;
1704 lbhash = conshdlrdata->lbhash;
1705 ubhash = conshdlrdata->ubhash;
1706 assert( lbhash != NULL && ubhash != NULL );
1713 for (v = 0; v < nvars; ++v)
1739 conshdlrdata->scaled =
FALSE;
1742 SCIPdebugMsg(scip,
"Updated bounds of original variables: %d.\n", cnt);
1764 assert( scip != NULL );
1765 assert( conshdlrdata != NULL );
1767 altlp = conshdlrdata->altlp;
1768 lbhash = conshdlrdata->lbhash;
1769 ubhash = conshdlrdata->ubhash;
1770 assert( lbhash != NULL && ubhash != NULL );
1777 for (v = 0; v < nvars; ++v)
1800 SCIPdebugMsg(scip,
"Updated bounds of original variables: %d.\n", cnt);
1828 assert( scip != NULL );
1829 assert( conshdlrdata != NULL );
1830 assert( vector != NULL );
1831 assert( isLocal != NULL );
1839 lbhash = conshdlrdata->lbhash;
1840 ubhash = conshdlrdata->ubhash;
1841 assert( lbhash != NULL && ubhash != NULL );
1848 for (v = 0; v < nvars; ++v)
1862 assert( 0 <= col && col < nCols );
1880 assert( 0 <= col && col < nCols );
1907 assert( scip != NULL );
1908 assert( conshdlrdata != NULL );
1910 if ( ! conshdlrdata->scaled )
1921 altlp = conshdlrdata->altlp;
1931 for (j = 0; j < cnt; ++j)
1935 sum = -
REALABS(sum) / ((double) cnt);
1943 conshdlrdata->scaled =
TRUE;
1986 assert( scip != NULL );
1987 assert( conshdlrdata != NULL );
1988 assert( vars != NULL );
1989 assert( vals != NULL );
1992 assert( colindex != NULL );
1996 if ( conshdlrdata->altlp == NULL )
2000 assert( conshdlrdata->altlp != NULL );
2001 assert( conshdlrdata->varhash != NULL );
2002 assert( conshdlrdata->lbhash != NULL );
2003 assert( conshdlrdata->ubhash != NULL );
2004 assert( conshdlrdata->slackhash != NULL );
2010 assert( nrows == conshdlrdata->nrows );
2032 matval[cnt++] =
sign * rhscoef;
2036 for (v = 0; v < nvars; ++v)
2041 assert( var != NULL );
2047 if ( var != slackvar )
2053 if ( ind < INT_MAX )
2059 assert( conshdlrdata->nrows == (
int) (
size_t)
SCIPhashmapGetImage(conshdlrdata->slackhash, var) );
2061 matind[cnt] = (conshdlrdata->nrows)++;
2064 newrowsslack[nnewrows++] =
TRUE;
2066 assert( conshdlrdata->nrows >= (
int) (
size_t)
SCIPhashmapGetImage(conshdlrdata->slackhash, var) );
2067 matval[cnt++] =
sign * vals[v];
2079 assert( conshdlrdata->nrows == (
int) (
size_t)
SCIPhashmapGetImage(conshdlrdata->varhash, var) );
2081 matind[cnt] = (conshdlrdata->nrows)++;
2084 newrowsslack[nnewrows++] =
FALSE;
2085 newvars[nnewvars++] = var;
2088 matval[cnt++] =
sign * vals[v];
2101 for (i = 0; i < nnewrows; ++i)
2103 if ( newrowsslack[i] )
2121 assert( slackvar == NULL );
2133 for (v = 0; v < nnewvars; ++v)
2136 assert( var != NULL );
2142 matbeg[nnewcols] = cnt;
2146 matval[cnt++] = -val;
2151 matval[cnt++] = -1.0;
2152 obj[nnewcols] = 0.0;
2155 ++conshdlrdata->nlbbounds;
2159 SCIPdebugMsg(scip,
"Added column for lower bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2168 matbeg[nnewcols] = cnt;
2172 matval[cnt++] = val;
2177 matval[cnt++] = 1.0;
2178 obj[nnewcols] = 0.0;
2181 ++conshdlrdata->nubbounds;
2185 SCIPdebugMsg(scip,
"Added column for upper bound (%f) of variable <%s> to alternative polyhedron (col: %d).\n",
2199 assert( cnt == ncols + nnewcols + 1 );
2211 conshdlrdata->scaled =
FALSE;
2242 assert( scip != NULL );
2243 assert( conshdlr != NULL );
2244 assert( lincons != NULL );
2245 assert( colindex != NULL );
2251 assert( conshdlrdata != NULL );
2265 SCIPdebugMsg(scip,
"Slack variable is aggregated (scalar: %f, constant: %f).\n", scalar, constant);
2275 linvals[0] = scalar;
2295 if (
SCIPisEQ(scip, linlhs, linrhs) )
2298 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
TRUE, colindex) );
2303 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linrhs, objcoef, 1.0,
FALSE, colindex) );
2309 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, slackvar, nlinvars, linvars, linvals, linlhs, objcoef, -1.0,
FALSE, colindex) );
2344 assert( scip != NULL );
2345 assert( conshdlr != NULL );
2346 assert( row != NULL );
2347 assert( colindex != NULL );
2358 assert( conshdlrdata != NULL );
2368 for (j = 0; j < nrowcols; ++j)
2371 assert( rowvars[j] != NULL );
2375 if (
SCIPisEQ(scip, rowlhs, rowrhs) )
2378 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
TRUE, colindex) );
2383 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, NULL, nrowcols, rowvars, rowvals, rowrhs, objcoef, 1.0,
FALSE, colindex) );
2389 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, NULL, nrowcols, rowvars, rowvals, rowlhs, objcoef, -1.0,
FALSE, colindex) );
2413 assert( scip != NULL );
2414 assert( conshdlr != NULL );
2418 assert( conshdlrdata != NULL );
2421 if ( conshdlrdata->objcutindex >= 0 )
2425 if ( ! conshdlrdata->objothervarsonly )
2429 SCIPdebugMsg(scip,
"Add objective cut to alternative LP (obj. bound: %g).\n", conshdlrdata->objupperbound);
2436 for (v = 0; v < nvars; ++v)
2442 assert( var != NULL );
2448 objvars[nobjvars] = var;
2449 objvals[nobjvars++] = objval;
2454 SCIP_CALL(
addAltLPColumn(scip, conshdlr, conshdlrdata, NULL, nobjvars, objvars, objvals, conshdlrdata->objupperbound, 0.0, 1.0,
FALSE, &conshdlrdata->objcutindex) );
2455 assert( conshdlrdata->objcutindex >= 0 );
2456 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2478 assert( scip != NULL );
2479 assert( conshdlr != NULL );
2480 assert( cons != NULL );
2484 assert( conshdlrdata != NULL );
2486 if ( conshdlrdata->altlp != NULL )
2491 assert( consdata != NULL );
2493 if ( consdata->colindex >= 0 )
2497 consdata->colindex = -1;
2499 SCIPdebugMsg(scip,
"Fixed variable for column %d (constraint: <%s>) from alternative LP to 0.\n", consdata->colindex,
SCIPconsGetName(cons));
2501 conshdlrdata->scaled =
FALSE;
2517 assert( scip != NULL );
2518 assert( conshdlrdata != NULL );
2520 if ( ! conshdlrdata->useobjectivecut )
2523 if ( conshdlrdata->altlp == NULL )
2535 if (
SCIPisLT(scip, objbnd, conshdlrdata->objupperbound) )
2536 conshdlrdata->objupperbound = objbnd;
2543 if (
SCIPisLT(scip, conshdlrdata->objupperbound, conshdlrdata->objaltlpbound) )
2545 SCIPdebugMsg(scip,
"Update objective bound to %g.\n", conshdlrdata->objupperbound);
2548 if ( conshdlrdata->objcutindex < 0 )
2557 assert(
SCIPisEQ(scip, oldbnd, conshdlrdata->objaltlpbound) );
2562 conshdlrdata->objaltlpbound = conshdlrdata->objupperbound;
2597 assert( scip != NULL );
2598 assert( lp != NULL );
2599 assert( infeasible != NULL );
2600 assert( error != NULL );
2642 if ( maxcondition > 0.0 )
2646 if ( condition !=
SCIP_INVALID && condition > maxcondition )
2648 SCIPdebugMsg(scip,
"Estimated condition number of basis matrix (%e) exceeds maximal allowance (%e).\n", condition, maxcondition);
2656 SCIPdebugMsg(scip,
"Estimated condition number of basis matrix (%e) is below maximal allowance (%e).\n", condition, maxcondition);
2660 SCIPdebugMsg(scip,
"Estimated condition number of basis matrix not available.\n");
2675 SCIPwarningMessage(scip,
"The dual simplex produced a primal ray. Retrying with primal ...\n");
2718 *infeasible =
FALSE;
2754 int nnonviolated = 0;
2758 assert( scip != NULL );
2759 assert( lp != NULL );
2760 assert( conss != NULL );
2761 assert( S != NULL );
2762 assert( size != NULL );
2763 assert( value != NULL );
2764 assert( error != NULL );
2765 assert( cutoff != NULL );
2766 assert( nGen != NULL );
2774 assert( nconss <= nCols );
2805 SCIPdebugMsg(scip,
" size: %4d produced possible cover with indicator variable objective value %f.\n", *size, *value);
2808 if ( conshdlrdata->trysolfromcover )
2818 if ( heurindicator == NULL )
2825 SCIPdebugMsg(scip,
"Passed feasible solution to indicator heuristic.\n");
2835 for (j = 0; j < nconss; ++j)
2841 assert( consdata != NULL );
2842 ind = consdata->colindex;
2846 assert( ind < nCols );
2859 if ( val < candval )
2871 if ( candidate < 0 )
2877 assert( candidate >= 0 );
2878 assert( ! S[candidate] );
2879 assert( sizeIIS > 0 );
2882 switch ( conshdlrdata->normtype )
2897 SCIPerrorMessage(
"Invalid efficacy norm parameter '%c'.\n", conshdlrdata->normtype);
2902 SCIPdebugMsg(scip,
" size: %4d, add var. %4d (obj: %-6g, alt-LP sol: %-8.4f); IIS size: %4d, eff.: %g.\n",
2903 *size, candidate, candobj, primsol[
SCIPconsGetData(conss[candidate])->colindex], sizeIIS, (sum - (
SCIP_Real) (sizeIIS - 1))/norm);
2906 S[candidate] =
TRUE;
2918 #ifdef SCIP_ENABLE_IISCHECK 2920 SCIP_CALL( checkIIS(scip, nconss, conss, primsol) );
2924 if ( conshdlrdata->updatebounds )
2938 for (j = 0; j < nconss; ++j)
2944 ind = consdata->colindex;
2948 assert( ind < nCols );
2949 assert( consdata->binvar != NULL );
2960 assert( cnt == sizeIIS );
2964 SCIP_CALL(
SCIPcreateConsLogicor(scip, &cons, name, cnt, vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
2966 SCIP_CALL(
SCIPcreateConsLogicor(scip, &cons,
"", cnt, vars,
FALSE,
TRUE,
TRUE,
TRUE,
TRUE, isLocal,
FALSE,
TRUE, removable,
FALSE) );
2994 for (j = 0; j < nconss; ++j)
3000 ind = consdata->colindex;
3004 assert( ind < nCols );
3005 assert( consdata->binvar != NULL );
3041 if ( nnonviolated > conshdlrdata->maxsepanonviolated )
3043 SCIPdebugMsg(scip,
"Stop separation after %d non violated IISs.\n", nnonviolated);
3047 while (step < nconss);
3063 const char* consname,
3073 assert( scip != NULL );
3074 assert( conshdlr != NULL );
3075 assert( conshdlrdata != NULL );
3076 assert( consdata != NULL );
3077 assert( slackvar != NULL );
3078 assert( eventhdlrbound != NULL );
3079 assert( eventhdlrrestart != NULL );
3083 (*consdata)->nfixednonzero = 0;
3084 (*consdata)->colindex = -1;
3085 (*consdata)->linconsactive = linconsactive;
3086 (*consdata)->binvar = binvar;
3087 (*consdata)->slackvar = slackvar;
3088 (*consdata)->lincons = lincons;
3089 (*consdata)->implicationadded =
FALSE;
3090 (*consdata)->slacktypechecked =
FALSE;
3098 if ( binvar != NULL )
3101 assert( var != NULL );
3102 (*consdata)->binvar = var;
3112 if ( linconsactive )
3118 if ( conshdlrdata->forcerestart )
3126 ++((*consdata)->nfixednonzero);
3131 assert( var != NULL );
3132 (*consdata)->slackvar = var;
3135 if ( linconsactive )
3141 ++((*consdata)->nfixednonzero);
3147 assert( lincons != NULL );
3148 assert( consname != NULL );
3152 SCIPdebugMsg(scip,
"Added column for <%s> to alternative LP with column index %d.\n", consname, (*consdata)->colindex);
3160 if ( (*consdata)->nfixednonzero > 0 )
3162 SCIPdebugMsg(scip,
"Constraint <%s> has %d variables fixed to be nonzero.\n", consname, (*consdata)->nfixednonzero);
3188 assert( scip != NULL );
3189 assert( conshdlrdata != NULL );
3190 assert( ngen != NULL );
3195 for (c = 0; c < nconss; ++c)
3201 assert( consdata != NULL );
3207 if ( ub <= conshdlrdata->maxcouplingvalue )
3217 SCIPdebugMsg(scip,
"Insert coupling varbound constraint for indicator constraint <%s> (coeff: %f).\n",
SCIPconsGetName(conss[c]), ub);
3226 !conshdlrdata->removeindicators, !conshdlrdata->removeindicators,
FALSE) );
3232 if ( conshdlrdata->removeindicators )
3272 assert( scip != NULL );
3273 assert( cons != NULL );
3274 assert( consdata != NULL );
3275 assert( cutoff != NULL );
3276 assert( success != NULL );
3277 assert( ndelconss != NULL );
3278 assert( nfixedvars != NULL );
3279 assert( consdata->binvar != NULL );
3280 assert( consdata->slackvar != NULL );
3293 SCIPdebugMsg(scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3299 SCIPdebugMsg(scip,
"Fix slack variable to 0 and delete constraint.\n");
3301 assert( ! infeasible );
3348 SCIPdebugMsg(scip,
"The problem is infeasible: binary and slack variable are fixed to be nonzero.\n");
3354 SCIPdebugMsg(scip,
"Fix binary variable to 0 and delete indicator constraint.\n");
3356 assert( ! infeasible );
3379 if ( dualreductions )
3385 binvar = consdata->binvar;
3399 SCIPdebugMsg(scip,
"Presolving <%s> - dual reduction: Slack variable fixed to 0, fix binary variable to 1.\n",
SCIPconsGetName(cons));
3401 assert( ! infeasible );
3417 SCIPdebugMsg(scip,
"Presolving <%s> - dual reduction: Slack variable fixed to 0, fix binary variable to 0.\n",
SCIPconsGetName(cons));
3419 assert( ! infeasible );
3427 SCIPdebugMsg(scip,
"Presolving <%s>: Slack variable fixed to zero, delete redundant indicator constraint.\n",
SCIPconsGetName(cons));
3451 var = consdata->binvar;
3456 if ( var != consdata->binvar && ! negated )
3461 assert( conshdlrdata->eventhdlrbound != NULL );
3469 consdata->binvar = var;
3477 assert( var != NULL );
3480 if ( var == consdata->slackvar )
3499 var = consdata->slackvar;
3503 assert( var != consdata->slackvar );
3512 assert( conshdlrdata->eventhdlrbound != NULL );
3523 consdata->slackvar = var;
3525 else if ( var == consdata->binvar )
3533 SCIPdebugMsg(scip,
"Slack variable <%s> is aggregated to negated indicator variable <%s> -> constraint redundant.\n",
3535 assert(
SCIPisEQ(scip, bound, 1.0) );
3547 SCIPdebugMsg(scip,
"Slack variable <%s> is aggregated to the indicator variable <%s> -> fix indicator variable to 0.\n",
3550 assert(
SCIPisEQ(scip, bound, 0.0) );
3553 assert( ! infeasible );
3591 assert( scip != NULL );
3592 assert( cons != NULL );
3593 assert( consdata != NULL );
3594 assert( cutoff != NULL );
3595 assert( nGen != NULL );
3601 if ( ! consdata->linconsactive )
3604 assert( consdata->slackvar != NULL );
3605 assert( consdata->binvar != NULL );
3609 if ( consdata->nfixednonzero > 1 )
3611 SCIPdebugMsg(scip,
"The node is infeasible, both the slack variable and the binary variable are fixed to be nonzero.\n");
3636 if ( consdata->nfixednonzero == 1 )
3650 SCIPdebugMsg(scip,
"Binary variable <%s> is fixed to be nonzero, fixing slack variable <%s> to 0.\n",
3655 assert( ! infeasible );
3667 SCIPdebugMsg(scip,
"Slack variable <%s> is fixed to be nonzero, fixing binary variable <%s> to 0.\n",
3672 assert( ! infeasible );
3698 if ( addopposite && consdata->linconsactive )
3731 assert( consdata->lincons != NULL );
3735 slackvar = consdata->slackvar;
3736 assert( slackvar != NULL );
3742 for (j = 0; j < nlinvars; ++j)
3744 if ( linvars[j] != slackvar )
3747 allintegral =
FALSE;
3749 vars[nvars] = linvars[j];
3750 vals[nvars++] = linvals[j];
3753 assert( nlinvars == nvars + 1 );
3769 SCIPdebugMsg(scip,
"Binary variable <%s> fixed to 0. Adding opposite linear inequality.\n",
SCIPvarGetName(consdata->binvar));
3789 if ( dualreductions )
3795 binvar = consdata->binvar;
3809 SCIPdebugMsg(scip,
"Propagating <%s> - dual reduction: Slack variable fixed to 0, fix binary variable to 1.\n",
SCIPconsGetName(cons));
3811 assert( ! infeasible );
3827 SCIPdebugMsg(scip,
"Propagating <%s> - dual reduction: Slack variable fixed to 0, fix binary variable to 0.\n",
SCIPconsGetName(cons));
3829 assert( ! infeasible );
3890 assert( scip != NULL );
3891 assert( conshdlr != NULL );
3892 assert( conss != NULL );
3893 assert( cutoff != NULL );
3894 assert( nGen != NULL );
3901 assert( conshdlrdata != NULL );
3902 lp = conshdlrdata->altlp;
3903 assert( lp != NULL );
3910 if ( conshdlrdata->updatebounds )
3925 for (j = 0; j < nconss; ++j)
3929 assert( conss[j] != NULL );
3931 assert( consdata != NULL );
3949 SCIP_CALL(
extendToCover(scip, conshdlr, conshdlrdata, lp, sol, conshdlrdata->removable, genlogicor, nconss, conss, S, &size, &value, &error, cutoff, &nCuts) );
3953 if ( nCuts == 0 && error )
4001 assert( scip != NULL );
4002 assert( conshdlr != NULL );
4003 assert( conss != NULL );
4004 assert( result != NULL );
4012 assert( conshdlrdata != NULL );
4019 for (c = 0; c < nconss; ++c)
4025 assert( conss[c] != NULL );
4027 assert( consdata != NULL );
4028 assert( consdata->lincons != NULL );
4031 if ( ! consdata->linconsactive )
4033 someLinconsNotActive =
TRUE;
4039 conshdlrdata->dualreductions &&
SCIPallowDualReds(scip), conshdlrdata->addopposite,
4055 binvar = consdata->binvar;
4063 if ( valSlack > maxSlack )
4065 maxSlack = valSlack;
4066 branchCons = conss[c];
4080 if ( (someLinconsNotActive || conshdlrdata->enforcecuts) && conshdlrdata->sepaalternativelp )
4088 conshdlrdata->niiscutsgen += ngen;
4095 conshdlrdata->niiscutsgen += ngen;
4098 SCIPdebugMsg(scip,
"Generated %d constraints.\n", ngen);
4110 assert( ! someLinconsNotActive || branchCons == NULL );
4114 if ( branchCons == NULL )
4116 SCIPdebugMsg(scip,
"All indicator constraints are feasible.\n");
4121 if ( ! conshdlrdata->branchindicators )
4130 assert( consdata != NULL );
4131 binvar = consdata->binvar;
4132 slackvar = consdata->slackvar;
4190 assert( scip != NULL );
4191 assert( conshdlr != NULL );
4192 assert( conss != NULL );
4193 assert( cutoff != NULL );
4194 assert( nGen != NULL );
4196 if ( *nGen >= maxsepacuts )
4203 assert( conshdlrdata != NULL );
4204 lp = conshdlrdata->altlp;
4205 assert( lp != NULL );
4208 SCIPdebugMsg(scip,
"Separating IIS-cuts by rounding ...\n");
4215 if ( conshdlrdata->updatebounds )
4233 for (threshold = conshdlrdata->roundingmaxthres;
4234 rounds < conshdlrdata->maxroundingrounds && threshold >= conshdlrdata->roundingminthres && *nGen < maxsepacuts && ! (*cutoff);
4235 threshold -= conshdlrdata->roundingoffset )
4250 for (j = 0; j < nconss; ++j)
4256 assert( conss[j] != NULL );
4258 assert( consdata != NULL );
4273 assert( binvarneg != NULL );
4276 assert( conshdlrdata->binvarhash != NULL );
4282 if ( binvarval > binvarnegval )
4300 if ( size == nconss )
4302 SCIPdebugMsg(scip,
"All variables in the set. Continue ...\n");
4307 if ( size == oldsize )
4309 SCIPdebugMsg(scip,
"Skipping computation: size support has not changed.\n");
4315 SCIPdebugMsg(scip,
" Vars with value 1: %d 0: %d and fractional: %d.\n", nvarsone, nvarszero, nvarsfrac);
4322 SCIP_CALL(
extendToCover(scip, conshdlr, conshdlrdata, lp, sol, conshdlrdata->removable, conshdlrdata->genlogicor, nconss, conss, S, &size, &value, &error, cutoff, &nCuts) );
4339 SCIPdebugMsg(scip,
"Generated %d IISs.\n", *nGen - nGenOld);
4397 assert( scip != NULL );
4398 assert( conshdlr != NULL );
4399 assert( conss != NULL );
4400 assert( nGen != NULL );
4402 if ( *nGen >= maxsepacuts )
4410 assert( conshdlrdata != NULL );
4413 for (c = 0; c < nconss; ++c)
4421 assert( conss[c] != NULL );
4423 assert( consdata != NULL );
4424 slackvar = consdata->slackvar;
4426 lincons = consdata->lincons;
4427 assert( lincons != NULL );
4429 binvar = consdata->binvar;
4430 assert( binvar != NULL );
4464 cutval = binval * ypart;
4466 for (j = 0; j < nlinvars; ++j)
4476 if ( linvars[j] == slackvar )
4479 if ( conshdlrdata->sepapersplocal )
4498 finitebound =
FALSE;
4503 linval = signfactor * linvals[j];
4507 dout += linval * lb;
4512 dout += linval * ub;
4516 xpart = linval * xval;
4519 if (
SCIPisGT(scip, binval * din, binval * dout + xpart) )
4522 cutval += binval * din;
4530 cutval += binval * dout + xpart;
4532 cutvars[cnt] = linvars[j];
4533 cutvals[cnt++] = linval;
4537 if ( ! finitebound )
4547 cutvars[cnt] = binvar;
4548 cutvals[cnt] = ypart;
4551 SCIPdebugMsg(scip,
"Found cut of lhs value %f > %f.\n", cutval, cutrhs);
4552 (void)
SCIPsnprintf(name, 50,
"persp%d", conshdlrdata->nperspcutsgen + *nGen);
4559 assert( ! infeasible );
4565 if ( *nGen >= maxsepacuts )
4596 assert( scip != NULL );
4597 assert( conshdlr != NULL );
4598 assert( conss != NULL );
4599 assert( result != NULL );
4607 assert( conshdlrdata != NULL );
4612 maxsepacuts = conshdlrdata->maxsepacutsroot;
4614 maxsepacuts = conshdlrdata->maxsepacuts;
4617 if ( conshdlrdata->sepacouplingcuts )
4624 for (c = 0; c < nusefulconss && ncuts < maxsepacuts; ++c)
4630 assert( conss != NULL );
4631 assert( conss[c] != NULL );
4633 assert( consdata != NULL );
4634 assert( consdata->slackvar != NULL );
4635 assert( consdata->binvar != NULL );
4639 if ( conshdlrdata->sepacouplinglocal )
4650 if ( ub <= conshdlrdata->sepacouplingvalue )
4678 assert( ! infeasible );
4688 SCIPdebugMsg(scip,
"Number of separated coupling inequalities: %d.\n", ncuts);
4697 SCIPdebugMsg(scip,
"Separating inequalities for indicator constraints.\n");
4705 SCIPdebugMsg(scip,
"Separated %d cuts from indicator constraints.\n", ncuts - noldcuts);
4709 else if ( ncuts > noldcuts )
4711 conshdlrdata->niiscutsgen += ncuts;
4714 if ( conshdlrdata->genlogicor )
4726 SCIPdebugMsg(scip,
"Separating inequalities based on perspective formulation.\n");
4734 SCIPdebugMsg(scip,
"Separated %d cuts from perspective formulation.\n", ncuts - noldcuts);
4736 if ( ncuts > noldcuts )
4738 conshdlrdata->nperspcutsgen += ncuts;
4756 assert( conshdlrdata != NULL );
4758 conshdlrdata->removable =
TRUE;
4759 conshdlrdata->scaled =
FALSE;
4760 conshdlrdata->altlp = NULL;
4761 conshdlrdata->nrows = 0;
4762 conshdlrdata->varhash = NULL;
4763 conshdlrdata->slackhash = NULL;
4764 conshdlrdata->lbhash = NULL;
4765 conshdlrdata->ubhash = NULL;
4766 conshdlrdata->nlbbounds = 0;
4767 conshdlrdata->nubbounds = 0;
4768 conshdlrdata->nslackvars = 0;
4769 conshdlrdata->objcutindex = -1;
4772 conshdlrdata->roundingminthres = 0.1;
4773 conshdlrdata->roundingmaxthres = 0.6;
4775 conshdlrdata->roundingoffset = 0.1;
4776 conshdlrdata->addedcouplingcons =
FALSE;
4777 conshdlrdata->ninitconss = 0;
4778 conshdlrdata->nbinvarszero = 0;
4779 conshdlrdata->performedrestart =
FALSE;
4780 conshdlrdata->objindicatoronly =
FALSE;
4781 conshdlrdata->objothervarsonly =
FALSE;
4782 conshdlrdata->minabsobj = 0.0;
4783 conshdlrdata->normtype =
'e';
4784 conshdlrdata->niiscutsgen = 0;
4785 conshdlrdata->nperspcutsgen = 0;
4810 int maxabsvalidx = -1;
4813 assert( scip != NULL );
4814 assert( upgdcons != NULL );
4828 assert( conshdlr != NULL );
4830 assert( conshdlrdata != NULL );
4832 if ( ! conshdlrdata->upgradelinear )
4836 for (j = 0; j < nvars; ++j)
4847 assert( var != NULL );
4852 secabsval = maxabsval;
4874 minactivity += val * lb;
4883 maxactivity += val * ub;
4886 assert( maxabsval >= 0.0 );
4887 assert( 0 <= maxabsvalidx && maxabsvalidx < nvars );
4894 if (
SCIPisEQ(scip, secabsval, maxabsval) )
4902 for (j = 0; j < nvars; ++j)
4925 if (
SCIPisGE(scip, minactivity, lhs) )
4929 if (
SCIPisGE(scip, minactivity + indval, lhs) )
4940 if (
SCIPisLE(scip, maxactivity, rhs) )
4947 if (
SCIPisLE(scip, maxactivity - indval, rhs) )
4952 if ( upgdlhs || upgdrhs )
4958 assert( ! upgdlhs || ! upgdrhs );
4965 for (l = 0; l < nvars; ++l)
4967 if ( vars[l] == indvar )
4969 indconsvars[cnt] = vars[l];
4971 indconsvals[cnt] = -vals[l];
4973 indconsvals[cnt] = vals[l];
4977 if ( indneglhs || indnegrhs )
5010 SCIPinfoMessage(scip, NULL,
" (minact: %f, maxact: %f)\n", minactivity, maxactivity);
5030 assert( scip != NULL );
5031 assert( conshdlr != NULL );
5033 assert( valid != NULL );
5050 assert( scip != NULL );
5051 assert( conshdlr != NULL );
5055 assert( conshdlrdata != NULL );
5060 if ( conshdlrdata->trysolutions && conshdlrdata->heurtrysol == NULL )
5062 conshdlrdata->heurtrysol =
SCIPfindHeur(scip,
"trysol");
5075 assert( scip != NULL );
5076 assert( conshdlr != NULL );
5081 if ( conshdlrdata->binvarhash != NULL )
5085 conshdlrdata->maxaddlincons = 0;
5086 conshdlrdata->naddlincons = 0;
5087 conshdlrdata->nrows = 0;
5099 assert( scip != NULL );
5100 assert( conshdlr != NULL );
5104 assert( conshdlrdata != NULL );
5105 assert( conshdlrdata->altlp == NULL );
5106 assert( conshdlrdata->varhash == NULL );
5107 assert( conshdlrdata->lbhash == NULL );
5108 assert( conshdlrdata->ubhash == NULL );
5109 assert( conshdlrdata->slackhash == NULL );
5111 if ( conshdlrdata->maxaddlincons > 0 )
5116 assert( conshdlrdata->addlincons == NULL );
5117 conshdlrdata->naddlincons = 0;
5118 conshdlrdata->maxaddlincons = 0;
5133 assert( scip != NULL );
5134 assert( conshdlr != NULL );
5141 SCIPdebugMsg(scip,
"Initsol for indicator constraints.\n");
5144 assert( conshdlrdata != NULL );
5145 assert( conshdlrdata->slackhash == NULL );
5149 if ( conshdlrdata->sepaalternativelp )
5153 assert( conshdlrdata->slackhash != NULL );
5156 for (c = 0; c < nconss; ++c)
5160 assert( conss != NULL );
5161 assert( conss[c] != NULL );
5165 assert( consdata != NULL );
5167 assert( consdata->slackvar != NULL );
5172 ++conshdlrdata->nslackvars;
5175 if ( conshdlrdata->genlogicor )
5178 int logicorsepafreq;
5183 if ( logicorconshdlr == NULL )
5185 SCIPerrorMessage(
"Logicor constraint handler not included, cannot generate constraints.\n");
5190 if ( sepafreq != -1 && ((logicorsepafreq == 0 && sepafreq > 0) || sepafreq < logicorsepafreq) )
5199 conshdlrdata->objothervarsonly =
TRUE;
5200 for (c = 0; c < nconss; ++c)
5204 assert( conss != NULL );
5205 assert( conss[c] != NULL );
5209 assert( consdata != NULL );
5210 assert( consdata->binvar != NULL );
5211 assert( consdata->slackvar != NULL );
5216 conshdlrdata->objothervarsonly =
FALSE;
5219 if ( ! consdata->linconsactive )
5226 if ( conshdlrdata->sepaalternativelp && consdata->colindex < 0 )
5229 SCIPdebugMsg(scip,
"Added column for <%s> to alternative LP with column index %d.\n",
SCIPconsGetName(conss[c]),consdata->colindex);
5249 quadvars[0] = consdata->binvar;
5250 quadvars[1] = consdata->slackvar;
5253 quadelem.
coef = 1.0;
5255 SCIP_CALL(
SCIPcreateNlRow(scip, &nlrow,
SCIPconsGetName(conss[c]), 0.0, 0, NULL, NULL, 2, quadvars, 1,
5264 SCIPdebugMsg(scip,
"Initialized %d indicator constraints.\n", nconss);
5267 if ( conshdlrdata->sepaalternativelp )
5274 if ( conshdlrdata->naddlincons > 0 )
5276 for (c = 0; c < conshdlrdata->naddlincons; ++c)
5278 cons = conshdlrdata->addlincons[c];
5297 SCIPdebugMsg(scip,
"Added %d additional columns to alternative LP.\n", cnt);
5304 if ( conshdlrdata->useotherconss )
5306 const char* conshdlrname;
5314 for (c = 0; c < nallconss; ++c)
5318 assert( cons != NULL );
5325 if ( strcmp(conshdlrname,
"linear") == 0 )
5331 SCIPdebugMsg(scip,
"Added column for linear constraint <%s> to alternative LP with column index %d.\n",
SCIPconsGetName(cons), colindex);
5336 SCIPdebugMsg(scip,
"Added %d additional columns from linear constraints to alternative LP.\n", cnt);
5342 if ( conshdlrdata->forcerestart )
5349 assert( conshdlrdata->eventhdlrrestart != NULL );
5355 conshdlrdata->nbinvarszero = 0;
5361 conshdlrdata->objindicatoronly =
FALSE;
5366 for (j = 0; j < nvars; ++j)
5370 for (c = 0; c < nconss; ++c)
5375 assert( conss != NULL );
5376 assert( conss[c] != NULL );
5383 assert( consdata != NULL );
5384 assert( consdata->binvar != NULL );
5395 if ( probindex < 0 )
5398 assert( 0 <= probindex && probindex < nvars );
5399 covered[probindex] =
TRUE;
5403 for (j = 0; j < nvars; ++j)
5414 if (
REALABS(obj) < conshdlrdata->minabsobj )
5415 conshdlrdata->minabsobj =
REALABS(obj);
5426 assert(
SCIPisGE(scip, conshdlrdata->minabsobj, 1.0) );
5428 conshdlrdata->objindicatoronly =
TRUE;
5430 assert( conshdlrdata->eventhdlrrestart != NULL );
5449 assert( scip != NULL );
5450 assert( conshdlr != NULL );
5454 assert( conshdlrdata != NULL );
5456 if ( conshdlrdata->sepaalternativelp )
5458 if ( conshdlrdata->slackhash != NULL )
5461 SCIPinfoMessage(scip, NULL,
"\nStatistics for cons_indicator slack hash:\n");
5467 if ( conshdlrdata->altlp != NULL )
5469 assert( conshdlrdata->varhash != NULL );
5470 assert( conshdlrdata->lbhash != NULL );
5471 assert( conshdlrdata->ubhash != NULL );
5474 SCIPinfoMessage(scip, NULL,
"\nStatistics for cons_indicator var hash:\n");
5476 SCIPinfoMessage(scip, NULL,
"\nStatistics for cons_indicator lower bound hash:\n");
5478 SCIPinfoMessage(scip, NULL,
"\nStatistics for cons_indicator upper bound hash:\n");
5489 for (c = 0; c < nconss; ++c)
5493 assert( conss != NULL );
5494 assert( conss[c] != NULL );
5497 assert( consdata != NULL );
5498 consdata->colindex = -1;
5504 assert( conshdlrdata->slackhash == NULL );
5505 assert( conshdlrdata->varhash == NULL );
5506 assert( conshdlrdata->lbhash == NULL );
5507 assert( conshdlrdata->ubhash == NULL );
5518 assert( scip != NULL );
5519 assert( conshdlr != NULL );
5520 assert( cons != NULL );
5521 assert( consdata != NULL );
5524 #ifdef SCIP_MORE_DEBUG 5535 assert( conshdlrdata != NULL );
5537 if ( conshdlrdata->sepaalternativelp )
5542 assert( (*consdata)->slackvar != NULL );
5543 assert( (*consdata)->binvar != NULL );
5548 if ( (*consdata)->linconsactive )
5550 assert( conshdlrdata->eventhdlrbound != NULL );
5556 if ( conshdlrdata->forcerestart )
5558 assert( conshdlrdata->eventhdlrrestart != NULL );
5566 assert( (*consdata)->lincons != NULL );
5587 assert( scip != NULL );
5588 assert( conshdlr != NULL );
5590 assert( sourcecons != NULL );
5591 assert( targetcons != NULL );
5595 assert( conshdlrdata != NULL );
5596 assert( conshdlrdata->eventhdlrbound != NULL );
5598 #ifdef SCIP_MORE_DEBUG 5604 assert( sourcedata != NULL );
5605 assert( sourcedata->binvar != NULL );
5608 if ( sourcedata->slackvar == NULL )
5615 if ( sourcedata->lincons == NULL )
5620 assert( sourcedata->lincons != NULL );
5621 assert( sourcedata->slackvar != NULL );
5626 conshdlrdata->eventhdlrrestart, sourcedata->binvar, sourcedata->slackvar, sourcedata->lincons, sourcedata->linconsactive) );
5627 assert( consdata != NULL );
5639 if ( conshdlrdata->sepaalternativelp )
5641 if ( conshdlrdata->binvarhash == NULL )
5647 assert( conshdlrdata->binvarhash != NULL );
5665 assert( scip != NULL );
5666 assert( conshdlr != NULL );
5672 SCIPdebugMsg(scip,
"Initpre method for indicator constraints.\n");
5675 for (c = 0; c < nconss; ++c)
5679 assert( conss != NULL );
5680 assert( conss[c] != NULL );
5684 assert( consdata != NULL );
5687 assert( consdata->lincons != NULL );
5696 assert( translincons != NULL );
5700 consdata->lincons = translincons;
5705 assert( conshdlrdata != NULL );
5708 conshdlrdata->addedcouplingcons =
FALSE;
5732 int removedvars = 0;
5735 assert( scip != NULL );
5736 assert( conshdlr != NULL );
5738 assert( result != NULL );
5741 SCIPdebug( oldnfixedvars = *nfixedvars; )
5745 assert( conshdlrdata != NULL );
5747 SCIPdebugMsg(scip,
"Presolving indicator constraints.\n");
5750 if ( nrounds == 0 || nnewfixedvars > 0 || nnewchgbds > 0 || nnewaggrvars > 0 )
5755 for (c = 0; c < nconss; ++c)
5762 assert( conss != NULL );
5763 assert( conss[c] != NULL );
5766 assert( consdata != NULL );
5767 assert( consdata->binvar != NULL );
5770 #ifdef SCIP_MORE_DEBUG 5775 if ( ! consdata->linconsactive )
5778 assert( consdata->lincons != NULL );
5779 assert( consdata->slackvar != NULL );
5784 if ( ! consdata->implicationadded )
5793 consdata->implicationadded =
TRUE;
5802 if ( ! consdata->slacktypechecked )
5804 consdata->slacktypechecked =
TRUE;
5815 assert( consdata->lincons != NULL );
5819 slackvar = consdata->slackvar;
5820 assert( slackvar != NULL );
5822 for (j = 0; j < nvars; ++j)
5824 if ( vars[j] == slackvar )
5825 foundslackvar =
TRUE;
5833 if ( j == nvars && foundslackvar )
5851 SCIPdebugMsg(scip,
"Cannot change type of slack variable (<%s>) to IMPLINT, since global bound is non-integral: (%g, %g).\n",
5860 conshdlrdata->dualreductions &&
SCIPallowDualReds(scip), &cutoff, &success, ndelconss, nfixedvars) );
5873 noReductions = nnewfixedvars == 0 && nnewaggrvars == 0 && nnewchgvartypes == 0 && nnewchgbds == 0
5874 && nnewdelconss == 0 && nnewchgcoefs == 0 && nnewchgsides == 0;
5877 if ( noReductions && *result !=
SCIP_SUCCESS && conshdlrdata->addcouplingcons && ! conshdlrdata->addedcouplingcons )
5887 *nupgdconss += ngen;
5888 if ( conshdlrdata->removeindicators )
5891 conshdlrdata->addedcouplingcons =
TRUE;
5894 SCIPdebugMsg(scip,
"Presolved %d constraints (fixed %d variables, removed %d variables, and deleted %d constraints).\n",
5895 nconss, *nfixedvars - oldnfixedvars, removedvars, *ndelconss - oldndelconss);
5913 assert( scip != NULL );
5914 assert( conshdlr != NULL );
5918 assert( conshdlrdata != NULL );
5920 *infeasible =
FALSE;
5923 if ( ! conshdlrdata->addcoupling )
5927 if ( conshdlrdata->addcouplingcons && conshdlrdata->addedcouplingcons )
5930 SCIPdebugMsg(scip,
"Handle initial rows for %d indicator constraints.\n", nconss);
5933 for (c = 0; c < nconss && !(*infeasible); ++c)
5938 assert( conss != NULL );
5939 assert( conss[c] != NULL );
5941 assert( consdata != NULL );
5944 if ( ! consdata->linconsactive )
5952 if ( ub <= conshdlrdata->maxcouplingvalue )
5963 if ( conshdlrdata->addcouplingcons )
5967 assert( ! conshdlrdata->addedcouplingcons );
5969 SCIPdebugMsg(scip,
"Insert coupling varbound constraint for indicator constraint <%s> (coeff: %f).\n",
SCIPconsGetName(conss[c]), ub);
6006 assert( scip != NULL );
6007 assert( conshdlr != NULL );
6008 assert( conss != NULL );
6010 assert( result != NULL );
6023 assert( scip != NULL );
6024 assert( conshdlr != NULL );
6025 assert( conss != NULL );
6027 assert( result != NULL );
6042 assert( scip != NULL );
6043 assert( conshdlr != NULL );
6044 assert( conss != NULL );
6046 assert( result != NULL );
6048 if ( solinfeasible )
6056 assert( conshdlrdata != NULL );
6070 assert( scip != NULL );
6071 assert( conshdlr != NULL );
6072 assert( conss != NULL );
6074 assert( result != NULL );
6076 if ( solinfeasible )
6084 assert( conshdlrdata != NULL );
6096 assert( scip != NULL );
6097 assert( conshdlr != NULL );
6098 assert( conss != NULL );
6100 assert( result != NULL );
6102 if ( solinfeasible )
6108 if ( objinfeasible )
6130 assert( scip != NULL );
6131 assert( conshdlr != NULL );
6132 assert( conss != NULL );
6134 assert( result != NULL );
6139 assert( conshdlrdata != NULL );
6145 assert( trysol != NULL );
6151 someLinconsNotActive =
FALSE;
6152 for (c = 0; c < nconss; ++c)
6156 assert( conss[c] != NULL );
6158 assert( consdata != NULL );
6159 assert( consdata->binvar != NULL );
6162 if ( ! consdata->linconsactive )
6164 someLinconsNotActive =
TRUE;
6168 assert( consdata->slackvar != NULL );
6187 SCIPinfoMessage(scip, NULL,
";\nviolation: <%s> = %g and <%s> = %.15g\n",
6193 if ( trysol != NULL )
6197 changedSol = changedSol || changed;
6209 if ( trysol != NULL )
6213 changedSol = changedSol || changed;
6219 if ( someLinconsNotActive )
6226 lp = conshdlrdata->altlp;
6227 assert( conshdlrdata->sepaalternativelp );
6237 if ( conshdlrdata->updatebounds )
6251 for (c = 0; c < nconss; ++c)
6255 assert( conss[c] != NULL );
6257 assert( consdata != NULL );
6296 if ( trysol != NULL && changedSol )
6298 assert( conshdlrdata->heurtrysol != NULL );
6303 if ( trysol != NULL )
6308 SCIPdebugMsg(scip,
"Indicator constraints are not feasible.\n");
6313 SCIPdebugMsg(scip,
"Indicator constraints are feasible.\n");
6327 assert( scip != NULL );
6328 assert( conshdlr != NULL );
6329 assert( conss != NULL );
6331 assert( result != NULL );
6341 assert( conshdlrdata != NULL );
6344 for (c = 0; c < nconss; ++c)
6352 assert( conss[c] != NULL );
6355 assert( consdata != NULL );
6357 #ifdef SCIP_MORE_DEBUG 6364 conshdlrdata->addopposite, &cutoff, &cnt) );
6392 assert( scip != NULL );
6393 assert( cons != NULL );
6395 assert( infervar != NULL );
6396 assert( bdchgidx != NULL );
6397 assert( result != NULL );
6403 assert( consdata != NULL );
6404 assert( inferinfo == 0 || inferinfo == 1 || inferinfo == 2 );
6405 assert( consdata->linconsactive );
6408 if ( inferinfo == 0 )
6411 assert( infervar != consdata->binvar );
6415 else if ( inferinfo == 1 )
6418 assert( infervar != consdata->slackvar );
6426 assert( inferinfo == 2 );
6448 assert( scip != NULL );
6449 assert( conshdlr != NULL );
6450 assert( cons != NULL );
6453 assert( consdata != NULL );
6454 assert( consdata->binvar != NULL );
6456 #ifdef SCIP_MORE_DEBUG 6462 if ( consdata->linconsactive )
6464 assert( consdata->slackvar != NULL );
6476 assert( consdata->lincons != NULL );
6477 assert( consdata->slackvar == NULL );
6485 for (j = 0; j < nlinvars; ++j)
6525 assert( scip != NULL );
6526 assert( conshdlr != NULL );
6527 assert( cons != NULL );
6531 assert( consdata != NULL );
6532 assert( consdata->binvar != NULL );
6534 binvar = consdata->binvar;
6543 assert( consdata->slackvar != NULL );
6544 assert( consdata->lincons != NULL );
6561 const char* consname;
6563 assert( scip != NULL );
6564 assert( sourcescip != NULL );
6565 assert( sourcecons != NULL );
6575 #ifdef SCIP_MORE_DEBUG 6576 SCIPdebugMsg(scip,
"Copying indicator constraint <%s> ...\n", consname);
6587 assert( sourceconsdata != NULL );
6590 sourcelincons = sourceconsdata->lincons;
6595 SCIPdebugMsg(scip,
"Linear constraint <%s> deleted! Create empty linear constraint.\n",
SCIPconsGetName(sourceconsdata->lincons));
6604 assert( sourcelincons != NULL );
6606 assert( conshdlrlinear != NULL );
6616 assert( translincons != NULL );
6619 sourceconsdata->lincons = translincons;
6620 sourcelincons = translincons;
6634 sourcebinvar = sourceconsdata->binvar;
6635 assert( sourcebinvar != NULL );
6645 sourceslackvar = sourceconsdata->slackvar;
6646 assert( sourceslackvar != NULL );
6648 SCIP_CALL(
SCIPgetVarCopy(sourcescip, scip, sourceslackvar, &targetslackvar, varmap, consmap, global, valid) );
6654 assert( targetlincons != NULL );
6655 assert( targetbinvar != NULL );
6656 assert( targetslackvar != NULL );
6660 initial, separate, enforce, check, propagate, local, dynamic, removable, stickingatnode) );
6668 if ( targetlincons != NULL )
6681 char binvarname[1024];
6682 char slackvarname[1024];
6693 nargs = sscanf(str,
" <%1023[^>]> = %d -> <%1023[^>]> = 0", binvarname, &zeroone, slackvarname);
6702 if ( zeroone != 0 && zeroone != 1 )
6711 if ( binvar == NULL )
6723 if ( slackvar == NULL )
6731 posstr = strstr(slackvarname,
"indslack");
6732 if ( posstr == NULL )
6740 (void)
SCIPsnprintf(binvarname, 1023,
"indlin%s", posstr+8);
6743 if ( lincons == NULL )
6749 if ( lincons == NULL )
6752 name, binvarname, binvarname);
6768 initial, separate, enforce, check, propagate, local, dynamic, removable, stickingatnode) );
6781 assert( scip != NULL );
6782 assert( conshdlr != NULL );
6783 assert( cons != NULL );
6786 #ifdef SCIP_MORE_DEBUG 6791 assert( conshdlrdata != NULL );
6794 assert( consdata != NULL );
6796 if ( conshdlrdata->altlp != NULL )
6798 assert( conshdlrdata->sepaalternativelp );
6800 if ( consdata->colindex >= 0 )
6816 assert( scip != NULL );
6817 assert( conshdlr != NULL );
6818 assert( cons != NULL );
6821 #ifdef SCIP_MORE_DEBUG 6826 assert( conshdlrdata != NULL );
6828 if ( conshdlrdata->altlp != NULL )
6833 assert( consdata != NULL );
6834 assert( conshdlrdata->sepaalternativelp );
6836 if ( consdata->colindex >= 0 )
6853 assert( scip != NULL );
6854 assert( cons != NULL );
6855 assert( vars != NULL );
6856 assert( varssize >= 0 );
6857 assert( success != NULL );
6869 assert( consdata != NULL );
6870 assert( consdata->lincons != NULL );
6872 if ( consdata->binvar != NULL )
6874 assert( varssize > 0 );
6875 vars[nvars++] = consdata->binvar;
6877 if ( consdata->slackvar != NULL )
6879 assert( varssize > nvars );
6880 vars[nvars++] = consdata->slackvar;
6900 assert( scip != NULL );
6901 assert( cons != NULL );
6902 assert( nvars != NULL );
6903 assert( success != NULL );
6913 assert( consdata != NULL );
6914 assert( consdata->lincons != NULL );
6916 if ( consdata->binvar != NULL )
6918 if ( consdata->slackvar != NULL )
6929 assert( nlinvars >= 0 );
6948 assert(scip != NULL);
6949 assert(conshdlr != NULL);
6951 assert(diveset != NULL);
6952 assert(success != NULL);
6953 assert(infeasible != NULL);
6956 *infeasible =
FALSE;
6962 for (c = 0; c < nindconss; ++c)
6980 &score, &roundup) );
6983 if( score > bestscore )
6988 bestvarroundup = roundup;
6994 assert(! *success || bestvar != NULL);
7022 conshdlrdata->eventhdlrbound = NULL;
7024 eventExecIndicatorBound, NULL) );
7025 assert(conshdlrdata->eventhdlrbound != NULL);
7028 conshdlrdata->eventhdlrrestart = NULL;
7030 eventExecIndicatorRestart, NULL) );
7031 assert( conshdlrdata->eventhdlrrestart != NULL );
7033 conshdlrdata->heurtrysol = NULL;
7037 conshdlrdata->binvarhash = NULL;
7045 conshdlrdata->addlincons = NULL;
7046 conshdlrdata->naddlincons = 0;
7047 conshdlrdata->maxaddlincons = 0;
7052 consEnfolpIndicator, consEnfopsIndicator, consCheckIndicator, consLockIndicator,
7055 assert( conshdlr != NULL );
7092 conflicthdlrdata->conshdlrdata = conshdlrdata;
7093 conflicthdlrdata->conshdlr = conshdlr;
7094 assert( conflicthdlrdata->conshdlr != NULL );
7098 conflictExecIndicator, conflicthdlrdata) );
7104 "constraints/indicator/branchindicators",
7105 "Branch on indicator constraints in enforcing?",
7109 "constraints/indicator/genlogicor",
7110 "Generate logicor constraints instead of cuts?",
7114 "constraints/indicator/addcoupling",
7115 "Add coupling constraints or rows if big-M is small enough?",
7119 "constraints/indicator/maxcouplingvalue",
7120 "maximum coefficient for binary variable in coupling constraint",
7124 "constraints/indicator/addcouplingcons",
7125 "Add initial variable upper bound constraints, if 'addcoupling' is true?",
7129 "constraints/indicator/sepacouplingcuts",
7130 "Should the coupling inequalities be separated dynamically?",
7134 "constraints/indicator/sepacouplinglocal",
7135 "Allow to use local bounds in order to separate coupling inequalities?",
7139 "constraints/indicator/sepacouplingvalue",
7140 "maximum coefficient for binary variable in separated coupling constraint",
7144 "constraints/indicator/sepaperspective",
7145 "Separate cuts based on perspective formulation?",
7149 "constraints/indicator/sepapersplocal",
7150 "Allow to use local bounds in order to separate perspective cuts?",
7154 "constraints/indicator/maxsepanonviolated",
7155 "maximal number of separated non violated IISs, before separation is stopped",
7159 "constraints/indicator/updatebounds",
7160 "Update bounds of original variables for separation?",
7164 "constraints/indicator/maxconditionaltlp",
7165 "maximum estimated condition of the solution basis matrix of the alternative LP to be trustworthy (0.0 to disable check)",
7169 "constraints/indicator/maxsepacuts",
7170 "maximal number of cuts separated per separation round",
7174 "constraints/indicator/maxsepacutsroot",
7175 "maximal number of cuts separated per separation round in the root node",
7179 "constraints/indicator/removeindicators",
7180 "Remove indicator constraint if corresponding variable bound constraint has been added?",
7184 "constraints/indicator/generatebilinear",
7185 "Do not generate indicator constraint, but a bilinear constraint instead?",
7189 "constraints/indicator/scaleslackvar",
7190 "Scale slack variable coefficient at construction time?",
7194 "constraints/indicator/trysolutions",
7195 "Try to make solutions feasible by setting indicator variables?",
7199 "constraints/indicator/enforcecuts",
7200 "In enforcing try to generate cuts (only if sepaalternativelp is true)?",
7204 "constraints/indicator/dualreductions",
7205 "Should dual reduction steps be performed?",
7209 "constraints/indicator/addopposite",
7210 "Add opposite inequality in nodes in which the binary variable has been fixed to 0?",
7214 "constraints/indicator/conflictsupgrade",
7215 "Try to upgrade bounddisjunction conflicts by replacing slack variables?",
7219 "constraints/indicator/restartfrac",
7220 "fraction of binary variables that need to be fixed before restart occurs (in forcerestart)",
7224 "constraints/indicator/useotherconss",
7225 "Collect other constraints to alternative LP?",
7229 "constraints/indicator/useobjectivecut",
7230 "Use objective cut with current best solution to alternative LP?",
7234 "constraints/indicator/trysolfromcover",
7235 "Try to construct a feasible solution from a cover?",
7239 "constraints/indicator/upgradelinear",
7240 "Try to upgrade linear constraints to indicator constraints?",
7245 "constraints/indicator/sepaalternativelp",
7246 "Separate using the alternative LP?",
7250 "constraints/indicator/forcerestart",
7251 "Force restart if absolute gap is 1 or enough binary variables have been fixed?",
7255 "constraints/indicator/nolinconscont",
7256 "Decompose problem (do not generate linear constraint if all variables are continuous)?",
7314 SCIPerrorMessage(
"Indicator constraint <%s> needs nonnegative number of variables in linear constraint.\n", name);
7320 if ( conshdlr == NULL )
7327 assert( conshdlrdata != NULL );
7329 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
7331 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
7335 if ( conshdlrdata->nolinconscont && conshdlrdata->generatebilinear )
7343 for (j = 0; j < nvars; ++j)
7345 if ( conshdlrdata->scaleslackvar )
7346 absvalsum +=
REALABS(vals[j]);
7350 if ( ! conshdlrdata->scaleslackvar )
7358 NULL, NULL, NULL, NULL, NULL) );
7366 linconsactive =
TRUE;
7367 if ( conshdlrdata->nolinconscont )
7371 assert( ! conshdlrdata->generatebilinear );
7374 for (j = 0; j < nvars; ++j)
7387 linconsactive =
FALSE;
7394 if ( linconsactive )
7412 if ( conshdlrdata->scaleslackvar && nvars > 0 )
7414 absvalsum = absvalsum/((
SCIP_Real) nvars);
7416 absvalsum =
SCIPceil(scip, absvalsum);
7428 if ( conshdlrdata->generatebilinear )
7433 SCIP_CALL(
SCIPcreateConsQuadratic(scip, cons, name, 0, NULL, NULL, 1, &binvar, &slackvar, &val, 0.0, 0.0,
7440 SCIP_CALL(
consdataCreate(scip, conshdlr, conshdlrdata, name, &consdata, conshdlrdata->eventhdlrbound, conshdlrdata->eventhdlrrestart,
7441 binvar, slackvar, lincons, linconsactive) );
7442 assert( consdata != NULL );
7445 SCIP_CALL(
SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
7446 local, modifiable, dynamic, removable, stickingatnode) );
7451 if ( conshdlrdata->sepaalternativelp )
7453 if ( conshdlrdata->binvarhash == NULL )
7459 assert( conshdlrdata->binvarhash != NULL );
7494 assert( scip != NULL );
7546 assert( scip != NULL );
7547 assert( lincons != NULL );
7548 assert( slackvar != NULL );
7560 if ( conshdlr == NULL )
7567 assert( conshdlrdata != NULL );
7569 if ( conshdlrdata->nolinconscont && ! conshdlrdata->sepaalternativelp )
7571 SCIPerrorMessage(
"constraint handler <%s>: need parameter <sepaalternativelp> to be true if parameter <nolinconscont> is true.\n",
CONSHDLR_NAME);
7579 if ( conshdlrdata->nolinconscont )
7590 for (v = 0; v < nvars; ++v)
7603 linconsactive =
FALSE;
7611 if ( conshdlrdata->generatebilinear )
7616 SCIP_CALL(
SCIPcreateConsQuadratic(scip, cons, name, 0, NULL, NULL, 1, &binvar, &slackvar, &val, 0.0, 0.0,
7622 SCIP_CALL(
consdataCreate(scip, conshdlr, conshdlrdata, name, &consdata, conshdlrdata->eventhdlrbound, conshdlrdata->eventhdlrrestart,
7623 binvar, slackvar, lincons, linconsactive) );
7624 assert( consdata != NULL );
7627 SCIP_CALL(
SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
7628 local, modifiable, dynamic, removable, stickingatnode) );
7659 assert( scip != NULL );
7678 assert( cons != NULL );
7682 assert( consdata != NULL );
7692 assert( ! infeasible );
7706 assert( cons != NULL );
7710 assert( consdata != NULL );
7712 return consdata->lincons;
7733 assert( cons != NULL );
7738 assert( conshdlrdata != NULL );
7741 assert( consdata != NULL );
7744 assert( consdata->lincons != NULL );
7748 assert( lincons != NULL );
7749 consdata->lincons = lincons;
7750 consdata->linconsactive =
TRUE;
7754 if ( conshdlrdata->nolinconscont )
7764 assert( vars != NULL );
7767 for (v = 0; v < nvars; ++v)
7780 consdata->linconsactive =
FALSE;
7794 assert( cons != NULL );
7798 assert( consdata != NULL );
7800 return consdata->binvar;
7813 assert( cons != NULL );
7814 assert( binvar != NULL );
7818 assert( consdata != NULL );
7828 if ( consdata->binvar != NULL )
7844 assert( var != NULL );
7845 consdata->binvar = var;
7848 assert( conshdlr != NULL );
7851 assert( conshdlrdata != NULL );
7852 assert( conshdlrdata->eventhdlrbound != NULL );
7853 assert( conshdlrdata->eventhdlrrestart != NULL );
7856 if ( consdata->linconsactive )
7862 if ( conshdlrdata->forcerestart )
7869 ++(consdata->nfixednonzero);
7872 consdata->binvar = binvar;
7885 assert( cons != NULL );
7889 assert( consdata != NULL );
7891 return consdata->slackvar;
7912 assert( scip != NULL );
7913 assert( cons != NULL );
7917 assert( consdata != NULL );
7922 assert( consdata->slackvar != NULL );
7938 assert( cons != NULL );
7945 assert( consdata != NULL );
7947 if ( consdata->linconsactive )
7949 assert( consdata->slackvar != NULL );
7950 assert( consdata->binvar != NULL );
8005 assert( cons != NULL );
8007 assert( sol != NULL );
8008 assert( changed != NULL );
8016 assert( cons != NULL );
8018 assert( consdata != NULL );
8021 if ( ! consdata->linconsactive )
8024 lincons = consdata->lincons;
8025 assert( lincons != NULL );
8030 slackvar = consdata->slackvar;
8031 binvar = consdata->binvar;
8032 assert( slackvar != NULL );
8033 assert( binvar != NULL );
8042 for (v = 0; v < nlinvars; ++v)
8046 if ( var != slackvar )
8049 slackcoef = linvals[v];
8057 assert( slackcoef != 0.0 );
8070 val = (val - sum)/slackcoef;
8073 if ( slackcoef < 0 )
8170 assert( conshdlr != NULL );
8172 assert( sol != NULL );
8173 assert( changed != NULL );
8184 for (c = 0; c < nconss; ++c)
8188 assert( conss[c] != NULL );
8191 assert( consdata != NULL );
8194 if ( ! consdata->linconsactive )
8198 *changed = *changed || chg;
8212 assert( scip != NULL );
8214 assert( lincons != NULL );
8222 assert( conshdlrdata != NULL );
8225 assert( conshdlrdata->naddlincons+1 <= conshdlrdata->maxaddlincons );
8227 conshdlrdata->addlincons[conshdlrdata->naddlincons++] = lincons;
8244 assert( scip != NULL );
8246 assert( row != NULL );
8255 assert( conshdlrdata != NULL );
8258 if ( ! conshdlrdata->sepaalternativelp )
enum SCIP_Result SCIP_RESULT
static SCIP_RETCODE checkLPBoundsClean(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss)
#define EVENTHDLR_BOUND_DESC
enum SCIP_BoundType SCIP_BOUNDTYPE
int SCIPgetNIntVars(SCIP *scip)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPincConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisViolatedIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
SCIP_RETCODE SCIPgetCharParam(SCIP *scip, const char *name, char *value)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete)))
SCIP_Bool SCIPinRepropagation(SCIP *scip)
#define DEFAULT_UPGRADELINEAR
static SCIP_DECL_CONSRESPROP(consRespropIndicator)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
primal heuristic that tries a given solution
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
static SCIP_DECL_CONSINITLP(consInitlpIndicator)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
#define DEFAULT_SEPACOUPLINGCUTS
#define CONFLICTHDLR_DESC
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans)))
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Constraint handler for variable bound constraints .
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
static SCIP_DECL_CONSINIT(consInitIndicator)
static SCIP_RETCODE consdataEnsureAddLinConsSize(SCIP *scip, SCIP_CONSHDLR *conshdlr, int num)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPheurPassIndicator(SCIP *scip, SCIP_HEUR *heur, int nindconss, SCIP_CONS **indconss, SCIP_Bool *solcand, SCIP_Real obj)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
#define DEFAULT_TRYSOLUTIONS
SCIP_VAR * SCIPbdchginfoGetVar(SCIP_BDCHGINFO *bdchginfo)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
static SCIP_DECL_CONSINITPRE(consInitpreIndicator)
#define DEFAULT_SEPAPERSPLOCAL
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars)))
SCIP_RETCODE SCIPvarGetProbvarBinary(SCIP_VAR **var, SCIP_Bool *negated)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
#define CONSHDLR_CHECKPRIORITY
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
SCIP_RETCODE SCIPaddVarIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE addAltLPRow(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row, SCIP_Real objcoef, int *colindex)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
int SCIPgetNOrigVars(SCIP *scip)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
static SCIP_DECL_EVENTEXEC(eventExecIndicatorBound)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITPRE((*consinitpre)))
constraint handler for indicator constraints
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPsetSlackVarUb(SCIP *scip, SCIP_CONS *cons, SCIP_Real ub)
#define DEFAULT_MAXCONDITIONALTLP
static SCIP_RETCODE unfixAltLPVariable(SCIP_LPI *lp, int ind)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define CONSHDLR_PRESOLTIMING
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE addObjcut(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)
#define MAXROUNDINGROUNDS
static SCIP_DECL_CONFLICTEXEC(conflictExecIndicator)
#define EVENTHDLR_RESTART_DESC
SCIP_Real SCIPinfinity(SCIP *scip)
static SCIP_RETCODE separateIndicators(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, int nusefulconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_RESULT *result)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
static SCIP_RETCODE checkAltLPInfeasible(SCIP *scip, SCIP_LPI *lp, SCIP_Real maxcondition, SCIP_Bool primal, SCIP_Bool *infeasible, SCIP_Bool *error)
SCIP_RETCODE SCIPsetLinearConsIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_CONS *lincons)
static SCIP_RETCODE updateFirstRow(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
SCIP_RETCODE SCIPmakeIndicatorFeasible(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *changed)
int SCIPvarGetProbindex(SCIP_VAR *var)
#define CONSHDLR_NEEDSCONS
const char * SCIPparamGetName(SCIP_PARAM *param)
#define SCIP_EVENTTYPE_GLBCHANGED
SCIP_Real SCIPvarGetAggrScalar(SCIP_VAR *var)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
static SCIP_DECL_CONSEXITSOL(consExitsolIndicator)
SCIP_RETCODE SCIPaddDiveBoundChange(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
#define SCIPfreeBlockMemory(scip, ptr)
#define CONSHDLR_PROP_TIMING
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
static SCIP_RETCODE propIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool dualreductions, SCIP_Bool addopposite, SCIP_Bool *cutoff, int *nGen)
SCIP_RETCODE SCIPlpiGetBounds(SCIP_LPI *lpi, int firstcol, int lastcol, SCIP_Real *lbs, SCIP_Real *ubs)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
#define DEFAULT_ENFORCECUTS
static SCIP_DECL_CONSSEPASOL(consSepasolIndicator)
SCIP_RETCODE SCIPlpiGetRealSolQuality(SCIP_LPI *lpi, SCIP_LPSOLQUALITY qualityindicator, SCIP_Real *quality)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
int SCIPconshdlrGetSepaFreq(SCIP_CONSHDLR *conshdlr)
static SCIP_DECL_CONSGETNVARS(consGetNVarsIndicator)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE checkIISlocal(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Real *vector, SCIP_Bool *isLocal)
#define SCIPfreeBufferArray(scip, ptr)
SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
#define DEFAULT_SEPAALTERNATIVELP
#define SCIPallocBlockMemory(scip, ptr)
static SCIP_RETCODE setAltLPObjZero(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss)
#define SCIPdebugPrintCons(x, y, z)
SCIP_Bool SCIPisTransformed(SCIP *scip)
#define DEFAULT_DUALREDUCTIONS
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
#define SCIP_EVENTTYPE_BOUNDCHANGED
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp)))
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
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_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse)))
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
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)
static SCIP_DECL_CONSCHECK(consCheckIndicator)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
#define DEFAULT_MAXSEPANONVIOLATED
#define DEFAULT_BRANCHINDICATORS
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_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsQuadratic(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_Bool SCIPlpiIsPrimalUnbounded(SCIP_LPI *lpi)
#define CONSHDLR_SEPAFREQ
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)
#define DEFAULT_ADDOPPOSITE
int SCIPlpiGetInternalStatus(SCIP_LPI *lpi)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
#define DEFAULT_CONFLICTSUPGRADE
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
#define SCIP_EVENTTYPE_LBRELAXED
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPheurPassSolTrySol(SCIP *scip, SCIP_HEUR *heur, SCIP_SOL *sol)
SCIP_VAR * SCIPgetSlackVarIndicator(SCIP_CONS *cons)
SCIP_VAR * SCIPfindVar(SCIP *scip, const char *name)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
static SCIP_DECL_CONSENABLE(consEnableIndicator)
SCIP_Bool SCIPlpiIsStable(SCIP_LPI *lpi)
static SCIP_DECL_CONSCOPY(consCopyIndicator)
static SCIP_DECL_CONSINITSOL(consInitsolIndicator)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITSOL((*consinitsol)))
static SCIP_DECL_CONSENFORELAX(consEnforelaxIndicator)
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_Real SCIPeventGetNewbound(SCIP_EVENT *event)
SCIP_RETCODE SCIPsetConshdlrGetDiveBdChgs(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)))
static SCIP_DECL_CONSGETDIVEBDCHGS(consGetDiveBdChgsIndicator)
SCIP_RETCODE SCIPcreateSolCopy(SCIP *scip, SCIP_SOL **sol, SCIP_SOL *sourcesol)
#define CONFLICTHDLR_NAME
SCIP_RETCODE SCIPlpiWriteLP(SCIP_LPI *lpi, const char *fname)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy)))
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_HEUR * SCIPfindHeur(SCIP *scip, const char *name)
static SCIP_DECL_CONSPROP(consPropIndicator)
SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype)
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)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
void SCIPhashmapPrintStatistics(SCIP_HASHMAP *hashmap, SCIP_MESSAGEHDLR *messagehdlr)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPgetConsNVars(SCIP *scip, SCIP_CONS *cons, int *nvars, SCIP_Bool *success)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
static SCIP_DECL_CONSPRESOL(consPresolIndicator)
SCIP_RETCODE SCIPdelConsLocal(SCIP *scip, SCIP_CONS *cons)
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_Real SCIPgetDualbound(SCIP *scip)
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIPInterval sqrt(const SCIPInterval &x)
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)
static SCIP_DECL_CONSFREE(consFreeIndicator)
#define CONFLICTHDLR_PRIORITY
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_Bool SCIPisEfficacious(SCIP *scip, SCIP_Real efficacy)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define DEFAULT_NOLINCONSCONT
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIPInterval sign(const SCIPInterval &x)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
static SCIP_DECL_CONSPARSE(consParseIndicator)
struct SCIP_EventData SCIP_EVENTDATA
const char * SCIPvarGetName(SCIP_VAR *var)
#define DEFAULT_MAXCOUPLINGVALUE
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree)))
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
constraint handler for quadratic constraints
#define DEFAULT_FORCERESTART
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_CONS * SCIPfindCons(SCIP *scip, const char *name)
#define DEFAULT_SEPACOUPLINGLOCAL
static SCIP_RETCODE setAltLPObj(SCIP *scip, SCIP_LPI *lp, SCIP_SOL *sol, int nconss, SCIP_CONS **conss)
#define SCIP_EVENTTYPE_UBRELAXED
SCIP_RETCODE SCIPcreateChild(SCIP *scip, SCIP_NODE **node, SCIP_Real nodeselprio, SCIP_Real estimate)
SCIP_RETCODE SCIPsetConflicthdlrFree(SCIP *scip, SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
handle partial solutions for linear problems with indicators and otherwise continuous variables ...
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
#define SCIP_EVENTTYPE_LBTIGHTENED
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
#define DEFAULT_USEOBJECTIVECUT
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
static SCIP_DECL_CONSDELETE(consDeleteIndicator)
static SCIP_RETCODE enforceIndicators(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_Bool genlogicor, SCIP_RESULT *result)
static SCIP_DECL_CONSDISABLE(consDisableIndicator)
SCIP_RETCODE SCIPgetTransformedCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **transcons)
SCIP_RETCODE SCIPcaptureCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop)))
struct SCIP_ConsData SCIP_CONSDATA
SCIP_RETCODE SCIPdisableCons(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE separateIISRounding(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, int nconss, SCIP_CONS **conss, int maxsepacuts, SCIP_Bool *cutoff, int *nGen)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_RETCODE SCIPgetConsVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **vars, int varssize, SCIP_Bool *success)
static SCIP_RETCODE fixAltLPVariable(SCIP_LPI *lp, int ind)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
static SCIP_DECL_CONSENFOLP(consEnfolpIndicator)
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_Bool SCIPlpiExistsPrimalRay(SCIP_LPI *lpi)
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
SCIP_PARAMTYPE SCIPparamGetType(SCIP_PARAM *param)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
public data structures and miscellaneous methods
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_RETCODE SCIPaddLinearConsIndicator(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
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)
#define DEFAULT_ADDCOUPLING
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPwriteTransProblem(SCIP *scip, const char *filename, const char *extension, SCIP_Bool genericnames)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiChgCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real newval)
static SCIP_RETCODE deleteAltLPConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateEmptyRowCons(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)
int SCIPgetDepth(SCIP *scip)
static SCIP_DECL_CONSPRINT(consPrintIndicator)
static SCIP_RETCODE unfixAltLPVariables(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S)
#define DEFAULT_SEPACOUPLINGVALUE
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
#define DEFAULT_SEPAPERSPECTIVE
int SCIPvarGetNLocksUp(SCIP_VAR *var)
static SCIP_RETCODE createVarUbs(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS **conss, int nconss, int *ngen)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
static SCIP_DECL_CONFLICTFREE(conflictFreeIndicator)
SCIP_RETCODE SCIPsetConshdlrDisable(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDISABLE((*consdisable)))
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
#define DEFAULT_MAXSEPACUTS
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
SCIP_VAR * SCIPvarGetAggrVar(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, 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)
static SCIP_DECL_LINCONSUPGD(linconsUpgdIndicator)
#define DEFAULT_REMOVEINDICATORS
#define DEFAULT_TRYSOLFROMCOVER
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyIndicator)
int SCIPgetNRuns(SCIP *scip)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint)))
#define SCIP_EVENTTYPE_UBTIGHTENED
Constraint handler for linear constraints in their most general form, .
SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
#define DEFAULT_RESTARTFRAC
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)
#define SCIP_EVENTTYPE_GBDCHANGED
SCIP_VAR * SCIPgetBinaryVarIndicator(SCIP_CONS *cons)
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
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_RETCODE SCIPsetConshdlrEnable(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENABLE((*consenable)))
SCIP_Real SCIPcalcChildEstimate(SCIP *scip, SCIP_VAR *var, SCIP_Real targetvalue)
#define DEFAULT_ADDCOUPLINGCONS
int SCIPgetNBinVars(SCIP *scip)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_RETCODE SCIPvarGetProbvarBound(SCIP_VAR **var, SCIP_Real *bound, SCIP_BOUNDTYPE *boundtype)
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
int SCIPgetNVars(SCIP *scip)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
SCIP_RETCODE SCIPincludeConshdlrIndicator(SCIP *scip)
SCIP_RETCODE SCIPsetBinaryVarIndicator(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *binvar)
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)
static SCIP_RETCODE scaleFirstRow(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
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_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)
#define DEFAULT_UPDATEBOUNDS
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Bool SCIPisObjIntegral(SCIP *scip)
#define SCIP_EVENTTYPE_BESTSOLFOUND
int SCIPvarGetNLocksDown(SCIP_VAR *var)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define CONSHDLR_ENFOPRIORITY
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
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 SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
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)
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 SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit)))
#define CONSHDLR_DELAYSEPA
SCIP_RETCODE SCIPrestartSolve(SCIP *scip)
static SCIP_RETCODE extendToCover(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_LPI *lp, SCIP_SOL *sol, 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)
SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXIT((*consexit)))
int SCIPgetNConss(SCIP *scip)
static SCIP_DECL_CONSLOCK(consLockIndicator)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
#define LINCONSUPGD_PRIORITY
static SCIP_DECL_CONSENFOPS(consEnfopsIndicator)
#define DEFAULT_SCALESLACKVAR
SCIP_Bool SCIPallowDualReds(SCIP *scip)
static void initConshdlrData(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
void SCIPupdateSolConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
static SCIP_RETCODE branchCons(SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
#define EVENTHDLR_BOUND_NAME
SCIP_Real SCIPeventGetOldbound(SCIP_EVENT *event)
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
#define DEFAULT_GENLOGICOR
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_RETCODE SCIPhashmapSetImage(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
static SCIP_RETCODE initAlternativeLP(SCIP *scip, SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPaddRowIndicator(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars)))
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
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_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_Real SCIPcutoffbounddelta(SCIP *scip)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
static SCIP_RETCODE addAltLPConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Real objcoef, int *colindex)
static SCIP_DECL_PARAMCHGD(paramChangedIndicator)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
static SCIP_DECL_CONSSEPALP(consSepalpIndicator)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
#define CONSHDLR_SEPAPRIORITY
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
enum SCIP_Vartype SCIP_VARTYPE
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
SCIP_Real SCIPgetVarSol(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define CONSHDLR_EAGERFREQ
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 SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
#define DEFAULT_GENERATEBILINEAR
#define EVENTHDLR_RESTART_NAME
void SCIPconsAddUpgradeLocks(SCIP_CONS *cons, int nlocks)
SCIP_RETCODE SCIPlpiGetCoef(SCIP_LPI *lpi, int row, int col, SCIP_Real *val)
#define CONSHDLR_PROPFREQ
SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
static SCIP_DECL_CONSTRANS(consTransIndicator)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadvars, SCIP_VAR **quadvars, int nquadelems, SCIP_QUADELEM *quadelems, SCIP_EXPRTREE *expression, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
#define CONSHDLR_MAXPREROUNDS
static SCIP_RETCODE updateObjUpperbound(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
#define SCIP_EVENTTYPE_GUBCHANGED
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS *cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
#define DEFAULT_USEOTHERCONSS
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
#define SCIP_DIVETYPE_INTEGRALITY
SCIP_CONFLICTHDLRDATA * SCIPconflicthdlrGetData(SCIP_CONFLICTHDLR *conflicthdlr)
static SCIP_DECL_CONSGETVARS(consGetVarsIndicator)
SCIP_CONS * SCIPgetLinearConsIndicator(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITSOL((*consexitsol)))
static SCIP_DECL_CONSEXIT(consExitIndicator)
static SCIP_RETCODE separatePerspective(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, int nconss, SCIP_CONS **conss, int maxsepacuts, int *nGen)
static SCIP_RETCODE checkTransferBoolParam(SCIP *scip, SCIP_PARAM *param, const char *name, SCIP_Bool newvalue, SCIP_Bool *value)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, const char *consname, SCIP_CONSDATA **consdata, SCIP_EVENTHDLR *eventhdlrbound, SCIP_EVENTHDLR *eventhdlrrestart, SCIP_VAR *binvar, SCIP_VAR *slackvar, SCIP_CONS *lincons, SCIP_Bool linconsactive)
SCIP_RETCODE SCIPchgBoolParam(SCIP *scip, SCIP_PARAM *param, SCIP_Bool value)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
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)
#define SCIP_CALL_PARAM(x)
static SCIP_RETCODE updateFirstRowGlobal(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata)
#define CONSHDLR_DELAYPROP
SCIP_Bool SCIPallowObjProp(SCIP *scip)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
static SCIP_RETCODE fixAltLPVariables(SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S)
static SCIP_RETCODE enforceCuts(SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_Bool genlogicor, SCIP_Bool *cutoff, int *nGen)
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_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
#define DEFAULT_MAXSEPACUTSROOT
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
static SCIP_Real varGetObjDelta(SCIP_VAR *var)