87#define CONSHDLR_NAME "orbitope_full"
88#define CONSHDLR_DESC "symmetry breaking constraint handler relying on full orbitopes"
89#define CONSHDLR_SEPAPRIORITY +40100
90#define CONSHDLR_ENFOPRIORITY -1005200
91#define CONSHDLR_CHECKPRIORITY -1005200
92#define CONSHDLR_SEPAFREQ -1
93#define CONSHDLR_PROPFREQ 1
94#define CONSHDLR_EAGERFREQ -1
96#define CONSHDLR_MAXPREROUNDS -1
97#define CONSHDLR_DELAYSEPA FALSE
98#define CONSHDLR_DELAYPROP FALSE
99#define CONSHDLR_NEEDSCONS TRUE
101#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
102#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_MEDIUM
104#define DEFAULT_FORCECONSCOPY FALSE
111struct SCIP_ConshdlrData
146 nrows = (*consdata)->nrows;
147 ncols = (*consdata)->ncols;
148 for (
i = 0;
i < nrows; ++
i)
151 for (j = 0; j < ncols; ++j)
189 for (
i = 0;
i < nrows; ++
i)
194 (*consdata)->nrows = nrows;
195 (*consdata)->ncols = ncols;
196 (*consdata)->resolveprop = resolveprop;
197 (*consdata)->ismodelcons = ismodelcons;
202 for (
i = 0;
i < nrows; ++
i)
207 for (j = 0; j < ncols; ++j)
216 for (
i = 0;
i < nrows; ++
i)
218 for (j = 0; j < ncols; ++j)
234 int* minfixedrowlexmin,
248 assert( !resprop || minfixedrowlexmin !=
NULL );
256 for (j = ncols - 2; j >= 0; --j)
258 int maxdiscriminating;
261 maxdiscriminating = nrows;
264 for (
i = 0;
i < nrows; ++
i)
267 if ( minfixed == -1 && lexminfixes[
i][j] != 0 && lexminfixes[
i][j + 1] != 1 )
269 assert( lexminfixes[
i][j + 1] == 0 );
271 maxdiscriminating =
i;
275 if ( minfixed == -1 && lexminfixes[
i][j] != lexminfixes[
i][j + 1] && lexminfixes[
i][j] != 2 )
277 assert( lexminfixes[
i][j + 1] != 2 );
282 if ( maxdiscriminating > minfixed )
292 for (
i = 0;
i < nrows; ++
i)
294 if ( lexminfixes[
i][j] == 2 )
296 if (
i < maxdiscriminating || minfixed == -1 )
297 lexminfixes[
i][j] = lexminfixes[
i][j + 1];
298 else if (
i == maxdiscriminating )
299 lexminfixes[
i][j] = 1;
301 lexminfixes[
i][j] = 0;
310 if ( minfixed == -1 )
311 minfixedrowlexmin[j] = nrows - 1;
313 minfixedrowlexmin[j] = minfixed;
317 if ( minfixedrowlexmin[j + 1] < minfixedrowlexmin[j] )
318 minfixedrowlexmin[j + 1] = minfixedrowlexmin[j];
331 int* minfixedrowlexmax,
345 assert( !resprop || minfixedrowlexmax !=
NULL );
350 for (j = 1; j < ncols; ++j)
352 int maxdiscriminating;
355 maxdiscriminating = nrows;
358 for (
i = 0;
i < nrows; ++
i)
361 if ( minfixed == -1 && lexmaxfixes[
i][j - 1] != 0 && lexmaxfixes[
i][j] != 1 )
363 assert( lexmaxfixes[
i][j - 1] == 1 );
365 maxdiscriminating =
i;
369 if ( minfixed == -1 && lexmaxfixes[
i][j - 1] != lexmaxfixes[
i][j] && lexmaxfixes[
i][j] != 2 )
371 assert( lexmaxfixes[
i][j - 1] != 2 );
376 if ( maxdiscriminating > minfixed )
386 for (
i = 0;
i < nrows; ++
i)
388 if ( lexmaxfixes[
i][j] == 2 )
390 if (
i < maxdiscriminating || minfixed == -1 )
391 lexmaxfixes[
i][j] = lexmaxfixes[
i][j - 1];
392 else if (
i == maxdiscriminating )
393 lexmaxfixes[
i][j] = 0;
395 lexmaxfixes[
i][j] = 1;
404 if ( minfixed == -1 )
405 minfixedrowlexmax[j] = nrows - 1;
407 minfixedrowlexmax[j] = minfixed;
411 if ( minfixedrowlexmax[j - 1] < minfixedrowlexmax[j] )
412 minfixedrowlexmax[j - 1] = minfixedrowlexmax[j];
453 assert( consdata->nrows > 0 );
454 assert( consdata->ncols > 0 );
457 nrows = consdata->nrows;
458 ncols = consdata->ncols;
459 vars = consdata->vars;
465 for (
i = 0;
i < nrows; ++
i)
470 for (
i = 0;
i < nrows; ++
i)
472 for (j = 0; j < ncols; ++j)
475 lexminfixes[
i][j] = 1;
477 lexminfixes[
i][j] = 0;
479 lexminfixes[
i][j] = 2;
486 if ( *infeasible ==
TRUE )
493 for (
i = 0;
i < nrows; ++
i)
498 for (
i = 0;
i < nrows; ++
i)
500 for (j = 0; j < ncols; ++j)
503 lexmaxfixes[
i][j] = 0;
505 lexmaxfixes[
i][j] = 1;
507 lexmaxfixes[
i][j] = 2;
520 for (j = 0; j < ncols; ++j)
522 for (
i = 0;
i < nrows; ++
i)
524 if ( lexminfixes[
i][j] != lexmaxfixes[
i][j] )
532 cons, 0, infeasible, &success) );
541 for (
i = nrows - 1;
i >= 0; --
i)
546 for (
i = nrows - 1;
i >= 0; --
i)
578 int* minfixedrowlexmin;
579 int* minfixedrowlexmax;
595 assert( consdata->nrows > 0 );
596 assert( consdata->ncols > 0 );
599 nrows = consdata->nrows;
600 ncols = consdata->ncols;
601 vars = consdata->vars;
603 assert( inferinfo <= consdata->nrows );
609 for (
i = 0;
i < nrows; ++
i)
616 minfixedrowlexmin[ncols - 1] = -1;
618 for (
i = 0;
i < nrows; ++
i)
620 for (j = 0; j < ncols; ++j)
623 lexminfixes[
i][j] = 1;
625 lexminfixes[
i][j] = 0;
627 lexminfixes[
i][j] = 2;
641 for (
i = 0;
i < nrows; ++
i)
648 minfixedrowlexmax[0] = -1;
650 for (
i = 0;
i < nrows; ++
i)
652 for (j = 0; j < ncols; ++j)
655 lexmaxfixes[
i][j] = 0;
657 lexmaxfixes[
i][j] = 1;
659 lexmaxfixes[
i][j] = 2;
672 for (j = 0; j < ncols; ++j)
674 int ub =
MAX(minfixedrowlexmin[j], minfixedrowlexmax[j]);
676 for (
i = 0;
i <= ub; ++
i)
689 for (
i = nrows - 1;
i >= 0; --
i)
695 for (
i = nrows - 1;
i >= 0; --
i)
730 assert( consdata->nrows > 0 );
731 assert( consdata->ncols > 0 );
732 assert( ! consdata->ismodelcons );
734 vars = consdata->vars;
735 nrows = consdata->nrows;
736 ncols = consdata->ncols;
744 for (j = 1; j < ncols && *feasible; ++j)
746 for (
i = 0;
i < nrows; ++
i)
748 vars1[
i] =
vars[
i][j - 1];
795 vars = consdata->vars;
796 nrows = consdata->nrows;
797 ncols = consdata->ncols;
804 for (j = 0; j < ncols - 1 && ! *infeasible; ++j)
808 for (
i = 0;
i < nrows; ++
i)
827 for (k = 0; k <=
i; ++k)
914 for (
c = 0;
c < nconss && ! infeasible;
c++)
930 if ( enforce && !consdata->ismodelcons )
937 if (
c >= nusefulconss && ncuts > 0 )
946 else if ( ncuts > 0 )
984 assert( consdata->nrows > 0 );
985 assert( consdata->ncols > 0 );
987 vars = consdata->vars;
988 nrows = consdata->nrows;
989 ncols = consdata->ncols;
992 for (
i = 0;
i < nrows; ++
i)
994 for (j = 0; j < ncols; ++j)
1026 assert( consdata->nrows > 0 );
1027 assert( consdata->ncols > 0 );
1029 vars = consdata->vars;
1030 nrows = consdata->nrows;
1031 ncols = consdata->ncols;
1034 for (
i = 0;
i < nrows; ++
i)
1036 for (j = 0; j < ncols; ++j)
1134 sourcedata->resolveprop, sourcedata->ismodelcons) );
1153 SCIPdebugMsg(
scip,
"Separation of full orbitope constraint handler <%s> for LP solution.\n",
1177 SCIPdebugMsg(
scip,
"Separation of full orbitope constraint handler <%s> for primal solution.\n",
1198 SCIPdebugMsg(
scip,
"Enforcement for full orbitope constraint handler <%s> for LP solution.\n",
1216 SCIPdebugMsg(
scip,
"Enforcement for full orbitope constraint handler <%s> for relaxation solution.\n",
1240 if ( objinfeasible || solinfeasible )
1255 if ( !consdata->ismodelcons )
1293 if ( !consdata->ismodelcons )
1332 for (
c = 0;
c < nusefulconss && !infeasible; ++
c)
1340 nfixedvars += nfixed;
1347 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing proved node to be infeasible.\n");
1349 else if ( nfixedvars > 0 )
1352 SCIPdebugMsg(
scip,
"Propagated %d variables via orbitopal fixing.\n", nfixedvars);
1354 else if ( nusefulconss > 0 )
1357 SCIPdebugMsg(
scip,
"Propagation via orbitopal fixing did not find anything.\n");
1380 noldfixedvars = *nfixedvars;
1386 for (
c = 0;
c < nconss && !infeasible; ++
c)
1396 *nfixedvars += nfixed;
1404 SCIPdebugMsg(
scip,
"Full orbitope constraint <%s> is redundant: it does not contain active variables\n",
1419 else if ( *nfixedvars > noldfixedvars )
1423 else if ( nconss > 0 )
1426 SCIPdebugMsg(
scip,
"Presolving via orbitopal fixing did not find anything.\n");
1460 for (
c = 0;
c < nconss; ++
c)
1489 assert( consdata->nrows > 0 );
1490 assert( consdata->ncols > 0 );
1493 SCIPdebugMsg(
scip,
"Locking method for full orbitope constraint handler\n");
1495 nrows = consdata->nrows;
1496 ncols = consdata->ncols;
1497 vars = consdata->vars;
1500 for (
i = 0;
i < nrows; ++
i)
1502 for (j = 0; j < ncols; ++j)
1531 assert( consdata->nrows > 0 );
1532 assert( consdata->ncols > 0 );
1535 nrows = consdata->nrows;
1536 ncols = consdata->ncols;
1537 vars = consdata->vars;
1539 SCIPdebugMsg(
scip,
"Printing method for full orbitope constraint handler\n");
1543 for (
i = 0;
i < nrows; ++
i)
1545 for (j = 0; j < ncols; ++j)
1551 if (
i < nrows - 1 )
1586 SCIPdebugMsg(
scip,
"Copying method for full orbitope constraint handler.\n");
1590 assert( sourcedata->nrows > 0 );
1591 assert( sourcedata->ncols > 0 );
1598 if ( !sourcedata->ismodelcons && !conshdlrdata->forceconscopy )
1605 nrows = sourcedata->nrows;
1606 ncols = sourcedata->ncols;
1607 sourcevars = sourcedata->vars;
1610 for (
i = 0;
i < nrows && *
valid; ++
i)
1614 for (j = 0; j < ncols && *
valid; ++j)
1629 sourcedata->resolveprop, sourcedata->ismodelcons,
1630 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
1635 for (k =
i - 1; k >= 0; --k)
1666 if( strncmp(s,
"fullOrbitope(", 13) != 0 )
1690 endptr = strchr(endptr,
')');
1692 if( endptr ==
NULL || j > 0 )
1712 if( nrows > maxnrows )
1716 assert( nrows <= maxnrows );
1727 if( *s ==
'.' || *s ==
')' )
1729 else if( ncols > maxncols )
1733 assert( ncols <= maxncols );
1736 else if( ( j < ncols-1 ) == ( *s ==
'.' || *s ==
')' ) )
1751 if( *s ==
',' || *s ==
'.' )
1759 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
1762 for( k = nrows - 1; k >= 0; --k )
1783 if ( varssize < consdata->ncols * consdata->nrows )
1791 for (
i = 0;
i < consdata->nrows; ++
i)
1793 for (j = 0; j < consdata->ncols; ++j)
1794 vars[cnt++] = consdata->vars[
i][j];
1814 *
nvars = consdata->ncols * consdata->nrows;
1840 consEnfolpOrbitopeFull, consEnfopsOrbitopeFull, consCheckOrbitopeFull, consLockOrbitopeFull,
1864 "Whether orbitope constraints should be forced to be copied to sub SCIPs.",
1914 if ( conshdlr ==
NULL )
1929 for (
i = 0;
i < nrows; ++
i)
1933 for (j = 0; j < ncols; ++j)
1972 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
1973 local, modifiable, dynamic, removable, stickingatnode) );
1997 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
constraint handler for orbisack constraints
static SCIP_RETCODE checkRedundantCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *redundant)
static SCIP_RETCODE checkFullOrbitopeSolution(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool *feasible)
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 propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, int *nfixedvars)
static SCIP_RETCODE resolvePropagationFullOrbitope(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons, int inferinfo, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
static SCIP_RETCODE findLexMaxFace(SCIP_VAR ***vars, int **lexmaxfixes, int *minfixedrowlexmax, SCIP_Bool *infeasible, int nrows, int ncols, SCIP_Bool resprop)
static SCIP_RETCODE separateCoversOrbisack(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, int *ngen, SCIP_Bool *infeasible)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
static SCIP_RETCODE findLexMinFace(SCIP_VAR ***vars, int **lexminfixes, int *minfixedrowlexmin, SCIP_Bool *infeasible, int nrows, int ncols, SCIP_Bool resprop)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, SCIP_VAR ***vars, int nrows, int ncols, SCIP_Bool resolveprop, SCIP_Bool ismodelcons)
static SCIP_RETCODE replaceAggregatedVarsOrbitopeFull(SCIP *scip, SCIP_CONS *cons)
constraint handler for full 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 SCIPcheckSolutionOrbisack(SCIP *scip, SCIP_SOL *sol, SCIP_VAR **vars1, SCIP_VAR **vars2, int nrows, SCIP_Bool printreason, SCIP_Bool *feasible)
SCIP_RETCODE SCIPcreateConsBasicOrbitopeFull(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, int nrows, int ncols, SCIP_Bool resolveprop, SCIP_Bool ismodelcons)
SCIP_RETCODE SCIPcreateConsOrbitopeFull(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, 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 SCIPincludeConshdlrOrbitopeFull(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 SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
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_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
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)
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_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)
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
#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
struct SCIP_BdChgIdx SCIP_BDCHGIDX
@ SCIP_VARSTATUS_MULTAGGR