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 );
1716 for (
c = 0;
c < nconss && ! infeasible;
c++)
1719 int nconsfixedvars = 0;
1733 if ( enforce && !consdata->ismodelcons )
1741 nfixedvars += nconsfixedvars;
1745 if (
c >= nusefulconss && (ncuts > 0 || nfixedvars > 0) )
1754 else if ( nfixedvars > 0 )
1759 else if ( ncuts > 0 )
1797 assert( consdata->nrows > 0 );
1798 assert( consdata->ncols > 0 );
1800 vars = consdata->vars;
1801 nrows = consdata->nrows;
1802 ncols = consdata->ncols;
1805 for (
i = 0;
i < nrows; ++
i)
1807 for (j = 0; j < ncols; ++j)
1838 assert( consdata->nrows > 0 );
1839 assert( consdata->ncols > 0 );
1841 vars = consdata->vars;
1842 nrows = consdata->nrows;
1843 ncols = consdata->ncols;
1846 for (
i = 0;
i < nrows; ++
i)
1848 for (j = 0; j < ncols; ++j)
1940 sourcedata->orbitopetype, sourcedata->resolveprop, sourcedata->ismodelcons) );
1959 SCIPdebugMsg(
scip,
"Separation of packing/partitioning orbitope constraint handler <%s> for LP solution.\n",
1983 SCIPdebugMsg(
scip,
"Separation of packing/partitioning orbitope constraint handler <%s> for primal solution.\n",
2005 SCIPdebugMsg(
scip,
"Enforcement for packing/partitioning orbitope constraint handler <%s> for LP solution.\n",
2025 "Enforcement for packing/partitioning orbitope constraint handler <%s> for relaxation solution.\n",
2049 if ( objinfeasible || solinfeasible )
2053 for (
c = 0;
c < nconss; ++
c)
2066 if ( ! consdata->ismodelcons )
2102 if ( !consdata->ismodelcons )
2137 for (
c = 0;
c < nusefulconss && !infeasible; ++
c)
2143 SCIPdebugMsg(
scip,
"Propagation of packing/partitioning orbitope constraint <%s> ...\n",
2147 nfixedvars += nfixed;
2154 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing proved node to be infeasible.\n");
2156 else if ( nfixedvars > 0 )
2159 SCIPdebugMsg(
scip,
"Propagated %d variables via orbitopal fixing.\n", nfixedvars);
2161 else if ( nusefulconss > 0 )
2164 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing did not find anything.\n");
2186 noldfixedvars = *nfixedvars;
2192 for (
c = 0;
c < nconss && !infeasible; ++
c)
2198 SCIPdebugMsg(
scip,
"Presolving of packing/partitioning orbitope constraint <%s> ...\n",
2203 *nfixedvars += nfixed;
2212 "Packing/Partitioning orbitope constraint <%s> is redundant: it does not contain active variables\n",
2227 else if ( *nfixedvars > noldfixedvars )
2231 else if ( nconss > 0 )
2234 SCIPdebugMsg(
scip,
"Presolving via orbitopal fixing did not find anything.\n");
2267 for (
c = 0;
c < nconss; ++
c)
2295 assert( consdata->nrows > 0 );
2296 assert( consdata->ncols > 0 );
2299 SCIPdebugMsg(
scip,
"Locking method for packing/partitioning orbitope constraint handler\n");
2301 nrows = consdata->nrows;
2302 ncols = consdata->ncols;
2303 vars = consdata->vars;
2306 for (
i = 0;
i < nrows; ++
i)
2308 for (j = 0; j < ncols; ++j)
2335 assert( consdata->nrows > 0 );
2336 assert( consdata->ncols > 0 );
2339 nrows = consdata->nrows;
2340 ncols = consdata->ncols;
2341 vars = consdata->vars;
2342 orbitopetype = consdata->orbitopetype;
2344 SCIPdebugMsg(
scip,
"Printing method for packing/partitioning orbitope constraint handler\n");
2346 switch ( orbitopetype )
2358 for (
i = 0;
i < nrows; ++
i)
2360 for (j = 0; j < ncols; ++j)
2400 SCIPdebugMsg(
scip,
"Copying method for packing/partOrbitope orbitope constraint handler.\n");
2404 assert( sourcedata->nrows > 0 );
2405 assert( sourcedata->ncols > 0 );
2412 if ( !sourcedata->ismodelcons && !conshdlrdata->forceconscopy )
2419 nrows = sourcedata->nrows;
2420 ncols = sourcedata->ncols;
2421 sourcevars = sourcedata->vars;
2424 for (
i = 0;
i < nrows && *
valid; ++
i)
2428 for (j = 0; j < ncols && *
valid; ++j)
2443 sourcedata->orbitopetype, nrows, ncols, sourcedata->resolveprop, sourcedata->ismodelcons,
2445 local, modifiable, dynamic, removable, stickingatnode) );
2450 for (k =
i - 1; k >= 0; --k)
2482 if( strncmp(s,
"partOrbitope(", 13) == 0 )
2486 if( strncmp(s,
"packOrbitope(", 13) != 0 )
2488 SCIPerrorMessage(
"Syntax error - expected \"partOrbitope\" or \"packOrbitope\": %s\n", s);
2512 endptr = strchr(endptr,
')');
2514 if( endptr ==
NULL || j > 0 )
2534 if( nrows > maxnrows )
2538 assert( nrows <= maxnrows );
2549 if( *s ==
'.' || *s ==
')' )
2551 else if( ncols > maxncols )
2555 assert( ncols <= maxncols );
2558 else if( ( j < ncols-1 ) == ( *s ==
'.' || *s ==
')' ) )
2573 if( *s ==
',' || *s ==
'.' )
2581 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
2584 for( k = nrows - 1; k >= 0; --k )
2605 if ( varssize < consdata->ncols * consdata->nrows )
2613 for (
i = 0;
i < consdata->nrows; ++
i)
2615 for (j = 0; j < consdata->ncols; ++j)
2616 vars[cnt++] = consdata->vars[
i][j];
2636 *
nvars = consdata->ncols * consdata->nrows;
2662 consEnfolpOrbitopePP, consEnfopsOrbitopePP, consCheckOrbitopePP, consLockOrbitopePP,
2685 "Whether orbitope constraints should be forced to be copied to sub SCIPs.",
2740 if ( conshdlr ==
NULL )
2742 SCIPerrorMessage(
"packing/partitioning orbitope constraint handler not found\n");
2754 for (
i = 0;
i < nrows; ++
i)
2758 for (j = 0; j < ncols; ++j)
2797 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
2798 local, modifiable, dynamic, removable, stickingatnode) );
2823 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 .
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_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_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