103#define CONSHDLR_NAME "orbitope_pp"
104#define CONSHDLR_DESC "symmetry breaking constraint handler relying on partitioning/packing orbitopes"
105#define CONSHDLR_SEPAPRIORITY +40100
106#define CONSHDLR_ENFOPRIORITY -1005200
107#define CONSHDLR_CHECKPRIORITY -1005200
108#define CONSHDLR_SEPAFREQ -1
109#define CONSHDLR_PROPFREQ 1
110#define CONSHDLR_EAGERFREQ -1
112#define CONSHDLR_MAXPREROUNDS -1
113#define CONSHDLR_DELAYSEPA FALSE
114#define CONSHDLR_DELAYPROP FALSE
115#define CONSHDLR_NEEDSCONS TRUE
117#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
118#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_MEDIUM
120#define DEFAULT_FORCECONSCOPY FALSE
127struct SCIP_ConshdlrData
169 nrows = (*consdata)->nrows;
170 ncols = (*consdata)->ncols;
171 for (
i = 0;
i < nrows; ++
i)
174 for (j = 0; j < ncols; ++j)
225 for (
i = 0;
i < nrows; ++
i)
232 (*consdata)->tmpvals =
NULL;
233 (*consdata)->tmpvars =
NULL;
234 (*consdata)->nrows = nrows;
235 (*consdata)->ncols = ncols;
236 (*consdata)->orbitopetype = orbitopetype;
237 (*consdata)->resolveprop = resolveprop;
238 (*consdata)->istrianglefixed =
FALSE;
239 (*consdata)->ismodelcons = ismodelcons;
247 for (
i = 0;
i < nrows; ++
i)
252 for (j = 0; j < ncols; ++j)
261 for (
i = 0;
i < nrows; ++
i)
263 for (j = 0; j < ncols; ++j)
286 assert( consdata->nrows > 0 );
287 assert( consdata->ncols > 0 );
290 for (j = 0; j < consdata->ncols; ++j)
294 for (
i = 0;
i < consdata->nrows; ++
i)
296 for (j = 0; j < consdata->ncols; ++j)
305 for (j = 0; j < consdata->ncols; ++j)
331 for (k = 0; k < nrows; ++k)
334 for (l = 0; l < ncols; ++l)
339 for (l = j; l < ncols; ++l)
350 assert( cases[p1][p2] != -1 );
352 assert( p2 >= 0 && p2 < j );
355 if ( cases[p1][p2] == 1 )
360 assert( cases[p1][p2] == 2 || cases[p1][p2] == 3 );
363 if ( cases[p1][p2] == 3 )
369 assert( cases[p1][p2] == 3 );
372 for (l = 0; l < ncols; ++l)
376 for (k = 0; k < nrows; ++k)
378 for (l = 0; l < ncols; ++l)
396 SCIPerrorMessage(
"unexpected matrix entry <%d>: should be -1, 0 or +1\n", M[k][l]);
404 for (l = 0; l < ncols; ++l)
408 for (k = 0; k < nrows; ++k)
430 assert( consdata->nrows > 0 );
431 assert( consdata->ncols > 0 );
435 for (
i = 0;
i < consdata->nrows; ++
i)
437 for (j = 0; j < consdata->ncols; ++j)
475 for (
i = 0;
i < nrows; ++
i)
477 for (j = 0; j < ncols; ++j)
481 weights[
i][j] = -1.0;
489 minvalue = vals[0][0];
490 weights[0][0] = minvalue;
498 for (j = 1; j < diagsize; ++j)
503 minvalue = vals[j][j];
508 weights[j][j] = minvalue;
512 for (
i = 1;
i < nrows; ++
i)
514 weights[
i][0] = weights[
i-1][0] + vals[
i][0];
519 for (
i = 2;
i < nrows; ++
i)
521 for (j = 1; j < ncols && j <
i; ++j)
527 assert( cases[
i-1][j-1] != -1 );
529 weightleft = weights[
i-1][j-1];
530 weightright = vals[
i][j] + weights[
i-1][j];
535 weights[
i][j] = weightleft;
540 weights[
i][j] = weightright;
574 assert( consdata->nrows > 0 );
575 assert( consdata->ncols > 0 );
581 if ( consdata->istrianglefixed )
584 nrows = consdata->nrows;
585 ncols = consdata->ncols;
586 vars = consdata->vars;
595 for (
i = 0;
i < diagsize; ++
i)
597 for (j =
i+1; j < ncols; ++j)
604 SCIPdebugMsg(
scip,
"The problem is infeasible: some variable in the upper right triangle is fixed to 1.\n");
615 if ( *nfixedvars > 0 )
617 SCIPdebugMsg(
scip,
"<%s>: %s fixed upper right triangle to 0 (fixed vars: %d).\n",
618 SCIPconsGetName(cons), fixedglobal ?
"globally" :
"locally", *nfixedvars);
626 consdata->istrianglefixed =
TRUE;
664 assert( consdata->nrows > 0 );
665 assert( consdata->ncols > 0 );
677 nrows = consdata->nrows;
678 ncols = consdata->ncols;
679 vars = consdata->vars;
680 vals = consdata->vals;
681 tmpvars = consdata->tmpvars;
682 tmpvals = consdata->tmpvals;
683 weights = consdata->weights;
684 cases = consdata->cases;
687 if ( ! consdata->istrianglefixed )
692 if ( *nfixedvars > 0 )
700 for (
i = 1;
i < nrows && ! (*infeasible); ++
i)
706 lastcolumn = ncols - 1;
707 if ( lastcolumn >
i )
712 for (j = lastcolumn; j > 0; --j)
735 for (l = j; l <= lastcolumn; ++l)
738 tmpvals[
nvars] = 1.0;
745 assert( cases[p1][p2] != -1 );
747 assert( p2 >= 0 && p2 < j );
750 if (cases[p1][p2] == 1)
755 assert( cases[p1][p2] == 2 || cases[p1][p2] == 3 );
757 tmpvals[
nvars] = -1.0;
760 weight += vals[p1][p2];
762 if ( cases[p1][p2] == 3 )
768 assert( cases[p1][p2] == 3 );
833 assert( consdata->nrows > 0 );
834 assert( consdata->ncols > 0 );
837 nrows = consdata->nrows;
838 ncols = consdata->ncols;
839 vars = consdata->vars;
840 orbitopetype = consdata->orbitopetype;
845 if ( ! consdata->istrianglefixed )
849 *nfixedvars += nfixed;
859 printMatrix(
scip, consdata);
877 for (
i = 1;
i < nrows; ++
i)
880 int firstnonzeroinrow;
885 lastcolumn = ncols - 1;
886 if ( lastcolumn >
i )
890 firstnonzeroinrow = -1;
891 for (j = 0; j <= lastcolumn; ++j)
898 firstnonzeroinrow = j;
907 firstnonzeroinrow = j;
915 SCIPdebugMsg(
scip,
" -> Infeasible node: all variables in row %d are fixed to 0.\n",
i);
920 firstnonzeros[
i] = firstnonzeroinrow;
922 assert( -1 <= firstnonzeroinrow && firstnonzeroinrow <= lastcolumn );
926 assert( lastoneprevrow <= lastcolumn );
930 assert( lastoneprevrow + 1 >= 0 );
932 lastoneinrow = lastoneprevrow;
935 lastoneinrow = lastoneprevrow + 1;
936 frontiersteps[nsteps++] =
i;
942 assert( lastoneinrow <= lastcolumn );
943 lastones[
i] = lastoneinrow;
946 if ( firstnonzeroinrow > lastoneinrow )
953 SCIPdebugMsg(
scip,
" -> Infeasible node: row %d, leftmost nonzero at %d, rightmost 1 at %d\n",
954 i, firstnonzeroinrow, lastoneinrow);
958 SCIPdebugMsg(
scip,
" -> Infeasible node: row %d, 1 at %d, rightmost position for 1 at %d\n",
959 i, firstnonzeroinrow, lastoneinrow);
975 for (j = 0; j <= lastcolumn; ++j)
988 if ( lastones[0] == -1 )
1000 for (k = 1; k <
i; ++k)
1003 l = lastones[k] + 1;
1006 if ( l <= ncols-1 && l <= k && lastones[k-1] == lastones[k] )
1020 for (j = lastoneinrow+1; j <= lastcolumn; ++j)
1033 inferInfo =
i * ncols + lastoneinrow + 1;
1042 SCIPdebugMsg(
scip,
" -> Infeasible node: row %d, 1 in column %d beyond rightmost position %d\n",
i, j, lastoneinrow);
1065 for (k = 1; k <
i; ++k)
1068 l = lastones[k] + 1;
1071 if ( l <= ncols-1 && l <= k && lastones[k-1] == lastones[k] )
1087 lastoneprevrow = lastoneinrow;
1091 for (j = 0; j < nsteps; ++j)
1096 s = frontiersteps[j];
1097 lastoneinrow = lastones[s];
1099 assert( 0 <= lastoneinrow && lastoneinrow < ncols );
1105 betaprev = lastoneinrow - 1;
1108 for (
i = s+1;
i < nrows; ++
i)
1112 assert( betaprev + 1 >= 0 );
1116 beta = betaprev + 1;
1117 assert( -1 <= beta && beta < ncols );
1119 if ( firstnonzeros[
i] > beta )
1131 inferInfo = ncols * nrows +
i * ncols + firstnonzeros[
i];
1134 assert( !(*infeasible) );
1199 assert( consdata->nrows > 0 );
1200 assert( consdata->ncols > 0 );
1205 assert( consdata->istrianglefixed );
1208 if ( ! consdata->resolveprop )
1211 nrows = consdata->nrows;
1212 ncols = consdata->ncols;
1213 vars = consdata->vars;
1214 vals = consdata->vals;
1215 weights = consdata->weights;
1216 orbitopetype = consdata->orbitopetype;
1217 cases = consdata->cases;
1219 SCIPdebugMsg(
scip,
"Propagation resolution method of orbitope constraint using orbitopal fixing\n");
1222 for (
i = 0;
i < nrows; ++
i)
1227 lastcolumn = ncols - 1;
1228 if ( lastcolumn >
i )
1230 for (j = 0; j <= lastcolumn; ++j)
1248 printMatrix(
scip, consdata);
1252 assert( consdata->istrianglefixed );
1256 assert( inferinfo >= 0 && inferinfo < 2 * nrows * ncols );
1257 if ( inferinfo < nrows * ncols )
1266 i = (int) (inferinfo / ncols);
1267 j = inferinfo % ncols;
1269 assert( 0 <= j && j < ncols );
1272 assert( weights[
i-1][j-1] < 0.5 );
1274 SCIPdebugMsg(
scip,
" -> reason for x[%d][%d] = ... = x[%d][%d] = 0 was the following SC:\n",
i, j,
i,
MIN(
i,ncols));
1283 assert( cases[p1][p2] != -1 );
1285 assert( p2 >= 0 && p2 < j );
1288 if ( cases[p1][p2] == 1 )
1293 assert( cases[p1][p2] == 2 || cases[p1][p2] == 3 );
1303 if ( cases[p1][p2] == 3 )
1309 assert( cases[p1][p2] == 3 );
1330 inferinfo -= nrows * ncols;
1331 i = (int) inferinfo / ncols;
1332 j = inferinfo % ncols;
1334 assert( 0 <= j && j < ncols );
1339 if ( weights[
i-1][j-1] > 0.5 && weights[
i-1][j-1] < 1.5 )
1341 SCIPdebugMsg(
scip,
" -> reason for x[%d][%d] = 1 was the following SC:\n",
i, j);
1354 assert( cases[p1][p2] != -1 );
1356 assert( p2 >= 0 && p2 < j );
1359 if ( cases[p1][p2] == 1 )
1364 assert( cases[p1][p2] == 2 || cases[p1][p2] == 3 );
1379 assert( pos1 == -1 && pos2 == -1 );
1384 if ( cases[p1][p2] == 3 )
1390 assert( cases[p1][p2] == 3 );
1391 assert( pos1 >= 0 && pos2 >= 0 );
1402 for (k = 0; k < j; ++k)
1423 lastcolumn = ncols - 1;
1424 if ( lastcolumn >
i )
1428 for (k = j; k <= lastcolumn; ++k)
1472 assert( consdata->nrows > 0 );
1473 assert( consdata->ncols > 0 );
1479 if ( ! consdata->istrianglefixed )
1490 if ( nfixedvars > 0 )
1497 nrows = consdata->nrows;
1498 ncols = consdata->ncols;
1499 vals = consdata->vals;
1500 weights = consdata->weights;
1501 cases = consdata->cases;
1508 assert( consdata->istrianglefixed );
1512 for (
i = 1;
i < nrows; ++
i)
1517 lastcolumn = ncols - 1;
1520 if ( lastcolumn >
i )
1524 for (j = lastcolumn; j > 0; --j)
1567 assert( consdata->nrows > 0 );
1568 assert( consdata->ncols > 0 );
1574 nrows = consdata->nrows;
1575 ncols = consdata->ncols;
1576 vars = consdata->vars;
1577 vals = consdata->vals;
1578 weights = consdata->weights;
1579 cases = consdata->cases;
1587 if ( ! consdata->istrianglefixed )
1594 if ( nrows < ncols )
1598 for (
i = 0;
i < diagsize; ++
i)
1600 for (j =
i+1; j < ncols; ++j)
1618 for (
i = 1;
i < nrows; ++
i)
1623 lastcolumn = ncols - 1;
1626 if ( lastcolumn >
i )
1630 for (j = lastcolumn; j > 0; --j)
1650 for (l = j; l < ncols; ++l)
1660 assert( cases[p1][p2] != -1 );
1662 assert( p2 >= 0 && p2 < j );
1665 if (cases[p1][p2] == 1)
1670 assert( cases[p1][p2] == 2 || cases[p1][p2] == 3 );
1672 if ( cases[p1][p2] == 3 )
1678 assert( cases[p1][p2] == 3 );
1717 for (
c = 0;
c < nconss && ! infeasible;
c++)
1720 int nconsfixedvars = 0;
1734 if ( enforce && !consdata->ismodelcons )
1742 nfixedvars += nconsfixedvars;
1746 if (
c >= nusefulconss && (ncuts > 0 || nfixedvars > 0) )
1755 else if ( nfixedvars > 0 )
1760 else if ( ncuts > 0 )
1798 assert( consdata->nrows > 0 );
1799 assert( consdata->ncols > 0 );
1801 vars = consdata->vars;
1802 nrows = consdata->nrows;
1803 ncols = consdata->ncols;
1806 for (
i = 0;
i < nrows; ++
i)
1808 for (j = 0; j < ncols; ++j)
1839 assert( consdata->nrows > 0 );
1840 assert( consdata->ncols > 0 );
1842 vars = consdata->vars;
1843 nrows = consdata->nrows;
1844 ncols = consdata->ncols;
1847 for (
i = 0;
i < nrows; ++
i)
1849 for (j = 0; j < ncols; ++j)
1947 sourcedata->orbitopetype, sourcedata->resolveprop, sourcedata->ismodelcons) );
1966 SCIPdebugMsg(
scip,
"Separation of packing/partitioning orbitope constraint handler <%s> for LP solution.\n",
1990 SCIPdebugMsg(
scip,
"Separation of packing/partitioning orbitope constraint handler <%s> for primal solution.\n",
2012 SCIPdebugMsg(
scip,
"Enforcement for packing/partitioning orbitope constraint handler <%s> for LP solution.\n",
2032 "Enforcement for packing/partitioning orbitope constraint handler <%s> for relaxation solution.\n",
2057 if ( objinfeasible || solinfeasible )
2061 for (
c = 0;
c < nconss; ++
c)
2074 if ( ! consdata->ismodelcons )
2111 if ( !consdata->ismodelcons )
2147 for (
c = 0;
c < nusefulconss && !infeasible; ++
c)
2153 SCIPdebugMsg(
scip,
"Propagation of packing/partitioning orbitope constraint <%s> ...\n",
2157 nfixedvars += nfixed;
2164 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing proved node to be infeasible.\n");
2166 else if ( nfixedvars > 0 )
2169 SCIPdebugMsg(
scip,
"Propagated %d variables via orbitopal fixing.\n", nfixedvars);
2171 else if ( nusefulconss > 0 )
2174 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing did not find anything.\n");
2197 noldfixedvars = *nfixedvars;
2203 for (
c = 0;
c < nconss && !infeasible; ++
c)
2209 SCIPdebugMsg(
scip,
"Presolving of packing/partitioning orbitope constraint <%s> ...\n",
2214 *nfixedvars += nfixed;
2223 "Packing/Partitioning orbitope constraint <%s> is redundant: it does not contain active variables\n",
2238 else if ( *nfixedvars > noldfixedvars )
2242 else if ( nconss > 0 )
2245 SCIPdebugMsg(
scip,
"Presolving via orbitopal fixing did not find anything.\n");
2279 for (
c = 0;
c < nconss; ++
c)
2308 assert( consdata->nrows > 0 );
2309 assert( consdata->ncols > 0 );
2312 SCIPdebugMsg(
scip,
"Locking method for packing/partitioning orbitope constraint handler\n");
2314 nrows = consdata->nrows;
2315 ncols = consdata->ncols;
2316 vars = consdata->vars;
2319 for (
i = 0;
i < nrows; ++
i)
2321 for (j = 0; j < ncols; ++j)
2349 assert( consdata->nrows > 0 );
2350 assert( consdata->ncols > 0 );
2353 nrows = consdata->nrows;
2354 ncols = consdata->ncols;
2355 vars = consdata->vars;
2356 orbitopetype = consdata->orbitopetype;
2358 SCIPdebugMsg(
scip,
"Printing method for packing/partitioning orbitope constraint handler\n");
2360 switch ( orbitopetype )
2372 for (
i = 0;
i < nrows; ++
i)
2374 for (j = 0; j < ncols; ++j)
2415 SCIPdebugMsg(
scip,
"Copying method for packing/partOrbitope orbitope constraint handler.\n");
2419 assert( sourcedata->nrows > 0 );
2420 assert( sourcedata->ncols > 0 );
2427 if ( !sourcedata->ismodelcons && !conshdlrdata->forceconscopy )
2434 nrows = sourcedata->nrows;
2435 ncols = sourcedata->ncols;
2436 sourcevars = sourcedata->vars;
2439 for (
i = 0;
i < nrows && *
valid; ++
i)
2443 for (j = 0; j < ncols && *
valid; ++j)
2458 sourcedata->orbitopetype, nrows, ncols, sourcedata->resolveprop, sourcedata->ismodelcons,
2460 local, modifiable, dynamic, removable, stickingatnode) );
2465 for (k =
i - 1; k >= 0; --k)
2497 if( strncmp(s,
"partOrbitope(", 13) == 0 )
2501 if( strncmp(s,
"packOrbitope(", 13) != 0 )
2503 SCIPerrorMessage(
"Syntax error - expected \"partOrbitope\" or \"packOrbitope\": %s\n", s);
2527 endptr = strchr(endptr,
')');
2529 if( endptr ==
NULL || j > 0 )
2549 if( nrows > maxnrows )
2553 assert( nrows <= maxnrows );
2564 if( *s ==
'.' || *s ==
')' )
2566 else if( ncols > maxncols )
2570 assert( ncols <= maxncols );
2573 else if( ( j < ncols-1 ) == ( *s ==
'.' || *s ==
')' ) )
2588 if( *s ==
',' || *s ==
'.' )
2596 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
2599 for( k = nrows - 1; k >= 0; --k )
2620 if ( varssize < consdata->ncols * consdata->nrows )
2628 for (
i = 0;
i < consdata->nrows; ++
i)
2630 for (j = 0; j < consdata->ncols; ++j)
2631 vars[cnt++] = consdata->vars[
i][j];
2651 *
nvars = consdata->ncols * consdata->nrows;
2677 consEnfolpOrbitopePP, consEnfopsOrbitopePP, consCheckOrbitopePP, consLockOrbitopePP,
2700 "Whether orbitope constraints should be forced to be copied to sub SCIPs.",
2755 if ( conshdlr ==
NULL )
2757 SCIPerrorMessage(
"packing/partitioning orbitope constraint handler not found\n");
2769 for (
i = 0;
i < nrows; ++
i)
2773 for (j = 0; j < ncols; ++j)
2812 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
2813 local, modifiable, dynamic, removable, stickingatnode) );
2838 resolveprop, ismodelcons,
TRUE,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE) );
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define CONSHDLR_SEPAPRIORITY
#define CONSHDLR_PROPFREQ
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
#define DEFAULT_FORCECONSCOPY
static SCIP_RETCODE checkRedundantCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *redundant)
static SCIP_RETCODE replaceAggregatedVarsOrbitopePP(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE enfopsPackingPartitioningOrbitopeSolution(SCIP *scip, SCIP_CONS *cons, SCIP_RESULT *result)
static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_CONS *cons, int inferinfo, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
static SCIP_RETCODE separateConstraints(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result, SCIP_Bool enforce)
static SCIP_RETCODE checkPackingPartitioningOrbitopeSolution(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_RESULT *result, SCIP_Bool printreason)
static SCIP_RETCODE separateSCIs(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool *infeasible, int *nfixedvars, int *ncuts)
static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
static void computeSCTable(SCIP *scip, int nrows, int ncols, SCIP_Real **weights, int **cases, SCIP_Real **vals)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
static SCIP_RETCODE fixTriangle(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, SCIP_VAR ***vars, int nrows, int ncols, SCIP_ORBITOPETYPE orbitopetype, SCIP_Bool resolveprop, SCIP_Bool ismodelcons)
static void copyValues(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol)
constraint handler for partitioning/packing orbitope constraints w.r.t. the full symmetric group
Constraint handler for the set partitioning / packing / covering constraints .
#define SCIP_STRINGEQ(name, reference, retcode)
SCIP_RETCODE SCIPcreateConsOrbitopePP(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, SCIP_ORBITOPETYPE orbitopetype, int nrows, int ncols, SCIP_Bool resolveprop, SCIP_Bool ismodelcons, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcreateConsBasicOrbitopePP(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, SCIP_ORBITOPETYPE orbitopetype, int nrows, int ncols, SCIP_Bool resolveprop, SCIP_Bool ismodelcons)
SCIP_RETCODE SCIPincludeConshdlrOrbitopePP(SCIP *scip)
int SCIPgetSubscipDepth(SCIP *scip)
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_Bool SCIPisTransformed(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
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)
int SCIPgetNLPBranchCands(SCIP *scip)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_Bool SCIPisEfficacious(SCIP *scip, SCIP_Real efficacy)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPcreateEmptyRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisSumEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPparseVarName(SCIP *scip, const char *str, SCIP_VAR **var, char **endptr)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_RETCODE SCIPinferBinvarCons(SCIP *scip, SCIP_VAR *var, SCIP_Bool fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
SCIP_RETCODE SCIPgetBinvarRepresentative(SCIP *scip, SCIP_VAR *var, SCIP_VAR **repvar, SCIP_Bool *negated)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPskipSpace(char **s)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
memory allocation routines
public methods for managing constraints
public methods for message output
public methods for problem variables
public methods for branching rule plugins and branching
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for cuts and aggregation rows
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for the probing mode
public methods for solutions
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
methods for handling symmetries
@ SCIP_CONFTYPE_PROPAGATION
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSEXITPRE(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_TRANSFORMING
type definitions for symmetry computations
@ SCIP_ORBITOPETYPE_PACKING
@ SCIP_ORBITOPETYPE_PARTITIONING
enum SCIP_OrbitopeType SCIP_ORBITOPETYPE
struct SCIP_BdChgIdx SCIP_BDCHGIDX
@ SCIP_VARSTATUS_MULTAGGR