51 #define CONSHDLR_NAME "orbisack" 52 #define CONSHDLR_DESC "symmetry breaking constraint handler for orbisacks" 53 #define CONSHDLR_SEPAPRIORITY +40100 54 #define CONSHDLR_ENFOPRIORITY -1005200 55 #define CONSHDLR_CHECKPRIORITY -1005200 56 #define CONSHDLR_SEPAFREQ 5 57 #define CONSHDLR_PROPFREQ 5 58 #define CONSHDLR_EAGERFREQ -1 60 #define CONSHDLR_MAXPREROUNDS -1 61 #define CONSHDLR_DELAYSEPA FALSE 62 #define CONSHDLR_DELAYPROP FALSE 63 #define CONSHDLR_NEEDSCONS TRUE 65 #define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP 66 #define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_EXHAUSTIVE 69 #define DEFAULT_ORBISEPARATION FALSE 70 #define DEFAULT_COVERSEPARATION TRUE 73 #define DEFAULT_COEFFBOUND 1000000.0 75 #define DEFAULT_PPORBISACK TRUE 76 #define DEFAULT_CHECKALWAYSFEAS TRUE 84 struct SCIP_ConshdlrData
115 assert( consdata != NULL );
116 assert( *consdata != NULL );
118 nrows = (*consdata)->nrows;
140 assert( consdata != NULL );
149 for (i = 0; i < nrows; ++i)
157 (*consdata)->nrows = nrows;
164 for (i = 0; i < nrows; ++i)
196 assert( scip != NULL );
197 assert( vars1 != NULL );
198 assert( vars2 != NULL );
199 assert( success != NULL );
200 assert( isparttype != NULL );
206 if ( setppcconshdlr == NULL )
208 SCIPwarningMessage(scip,
"Check for upgrading orbisacks to packing/partitioning orbisacks not possible - setppc constraint handler not found.\n");
215 if ( nsetppcconss == 0 )
217 assert( setppcconss != NULL );
223 for (i = 0; i < nrows; ++i)
226 for (c = 0; c < nsetppcconss; ++c)
242 assert( nsetppcvars > 0 );
245 if ( nsetppcvars != 2 )
247 assert( nsetppcvars == 2 );
250 assert( setppcvars != NULL );
268 rowcovered[i] =
TRUE;
274 if ( c >= nsetppcconss )
290 for (i = 0; i < nrows; ++i)
297 for (c = 0; c < nsetppcconss; ++c)
314 assert( nsetppcvars > 0 );
317 assert( setppcvars != NULL );
320 for (j = 0; j < nsetppcvars && nfound < 2; ++j)
338 if ( c >= nsetppcconss )
370 assert( scip != NULL );
371 assert( cons != NULL );
372 assert( infeasible != NULL );
377 assert( consdata != 0 );
378 assert( consdata->nrows > 0 );
379 assert( consdata->vars1 != NULL );
380 assert( consdata->vars2 != NULL );
382 vars1 = consdata->vars1;
383 vars2 = consdata->vars2;
385 tmpvars[0] = vars1[0];
386 tmpvars[1] = vars2[0];
419 assert( scip != NULL );
420 assert( cons != NULL );
421 assert( vars1 != NULL );
422 assert( vars2 != NULL );
423 assert( coeffs1 != NULL );
424 assert( coeffs2 != NULL );
425 assert( infeasible != NULL );
431 for (i = 0; i < nrows; ++i)
474 assert( scip != NULL );
475 assert( cons != NULL );
477 assert( vars1 != NULL );
478 assert( vars2 != NULL );
479 assert( infeasible != NULL );
480 assert( ngen != NULL );
490 for (i = 0; i < nrows; ++i)
497 for (i = 0; i < nrows; ++i)
521 lhs = lhs - vals1[i];
534 lhs = lhs + vals2[i];
571 assert( scip != NULL );
572 assert( cons != NULL );
573 assert( vars1 != NULL );
574 assert( vars2 != NULL );
575 assert( coeffs1 != NULL );
576 assert( coeffs2 != NULL );
577 assert( infeasible != NULL );
584 for (i = 0; i < nrows; ++i)
637 assert( scip != NULL );
638 assert( cons != NULL );
640 assert( vars1 != NULL );
641 assert( vars2 != NULL );
642 assert( coeffbound >= 0.0 );
643 assert( ngen != NULL );
644 assert( infeasible != NULL );
660 for (i = 2; i < nrows; ++i)
668 lhs = - vals1[0] + vals2[0];
674 lhs += - vals1[1] + vals2[1];
686 while ( basement < nrows - 1 && ! *infeasible )
688 valueA = lhs + vals1[basement] - vals1[basement + 1] + vals2[basement + 1] - rhs - 1.0;
689 valueB = lhs - vals2[basement] - vals1[basement + 1] + vals2[basement + 1] - rhs;
690 valueC = 2.0 * lhs + vals1[basement] - vals2[basement] - vals1[basement + 1] + vals2[basement + 1] - 2.0 * rhs;
693 if ( valueA >= valueB && valueA >= valueC )
696 coeff1[basement] = 0.0;
697 lhs += vals1[basement++];
698 coeff1[basement] = -1.0;
699 coeff2[basement] = 1.0;
700 lhs += - vals1[basement] + vals2[basement];
702 else if ( valueB >= valueA && valueB >= valueC )
704 coeff2[basement] = 0.0;
705 lhs -= vals2[basement++];
706 coeff1[basement] = -1.0;
707 coeff2[basement] = 1.0;
708 lhs += - vals1[basement] + vals2[basement];
714 for (i = 0; i < basement; ++i)
716 coeff1[i] = 2.0 * coeff1[i];
717 coeff2[i] = 2.0 * coeff2[i];
718 lhs += coeff1[i] * vals1[i] + coeff2[i] * vals2[i];
720 coeff1[basement] = -1.0;
721 coeff2[basement] = 1.0;
722 lhs -= vals1[basement];
723 lhs += vals2[basement++];
724 coeff1[basement] = -1.0;
725 coeff2[basement] = 1.0;
726 lhs -= vals1[basement];
727 lhs += vals2[basement];
731 if ( rhs > coeffbound || -coeff1[0] > coeffbound || coeff2[0] > coeffbound )
734 if ( ! coverseparation )
784 assert( scip != NULL );
785 assert( cons != NULL );
786 assert( infeasible != NULL );
787 assert( ngen != NULL );
788 assert( found != NULL );
798 assert( consdata != NULL );
799 assert( consdata->vars1 != NULL );
800 assert( consdata->vars2 != NULL );
801 assert( consdata->nrows > 0 );
803 nrows = consdata->nrows;
804 vars1 = consdata->vars1;
805 vars2 = consdata->vars2;
811 for (i = 0; i < nrows; ++i)
851 for (i = 0; i < nrows; ++i)
856 assert( var1 != NULL );
857 assert( var2 != NULL );
864 SCIPdebugMsg(scip,
"Check variable pair (%d,0) and (%d,1).\n", i, i);
868 for (r = 0; r < i; ++r)
870 if ( (solu1[r] == 1 && solu2[r] == 0) || solu1[r] == 2 || solu2[r] == 2 )
879 SCIPdebugMsg(scip,
" -> node infeasible (row was fixed to 0,1 but there was no critical row above).\n");
886 for (r = 0; r <= i; ++r)
909 SCIPdebugMsg(scip,
"Check variable pair (%d,0) and (%d,1).\n", i, i);
914 for (r = 0; r < i; ++r)
916 if ( solu1[r] == 2 || solu2[r] == 2 || solu1[r] != solu2[r] )
928 assert( ! *infeasible );
930 *found = *found || tightened;
963 assert( scip != NULL );
964 assert( result != NULL );
965 assert( cons != NULL );
966 assert( vars1 != NULL );
967 assert( vars2 != NULL );
968 assert( vals1 != NULL );
969 assert( vals2 != NULL );
972 assert( conshdlrdata != NULL );
974 if ( conshdlrdata->orbiseparation )
976 SCIP_CALL(
separateOrbisack(scip, cons, nrows, vars1, vars2, vals1, vals2,
FALSE, conshdlrdata->coeffbound, &ngen1, &infeasible) );
979 if ( ! infeasible && conshdlrdata->coverseparation )
990 if ( ngen1 + ngen2 > 0 )
1005 assert( scip != 0 );
1006 assert( conshdlr != 0 );
1007 assert( consdata != 0 );
1022 assert( scip != 0 );
1023 assert( conshdlr != 0 );
1027 assert( conshdlrdata != NULL );
1043 assert( scip != NULL );
1044 assert( conshdlr != NULL );
1046 assert( sourcecons != NULL );
1047 assert( targetcons != NULL );
1053 assert( sourcedata != NULL );
1054 assert( sourcedata->nrows > 0 );
1055 assert( sourcedata->vars1 != NULL );
1056 assert( sourcedata->vars2 != NULL );
1059 nrows = sourcedata->nrows;
1063 consdata->nrows = nrows;
1089 assert( infeasible != NULL );
1090 *infeasible =
FALSE;
1092 assert( scip != 0 );
1093 assert( conshdlr != 0 );
1097 for (c = 0; c < nconss; ++c)
1100 assert( conss[c] != 0 );
1108 SCIPdebugMsg(scip,
"Generated initial orbisack cut.\n");
1124 assert( scip != NULL );
1125 assert( conshdlr != NULL );
1127 assert( result != NULL );
1129 SCIPdebugMsg(scip,
"Separation method for orbisack constraints.\n");
1139 for (c = 0; c < nconss; ++c)
1142 assert( conss[c] != NULL );
1177 assert( scip != NULL );
1178 assert( conshdlr != NULL );
1180 assert( result != NULL );
1182 SCIPdebugMsg(scip,
"Separation method for orbisack constraints\n");
1195 for (c = 0; c < nconss; ++c)
1198 assert( conss[c] != NULL );
1202 assert( consdata->nrows <= nvals );
1235 assert( scip != 0 );
1236 assert( conshdlr != 0 );
1238 assert( result != 0 );
1240 SCIPdebugMsg(scip,
"Enfolp method for orbisack constraints\n");
1256 for (c = 0; c < nconss; ++c)
1259 assert( conss[c] != 0 );
1263 assert( consdata->nrows <= nvals );
1302 assert( scip != NULL );
1303 assert( conshdlr != NULL );
1305 assert( result != NULL );
1307 SCIPdebugMsg(scip,
"Enforcing method for orbisack constraints (pseudo solutions) ...\n");
1311 if ( objinfeasible || solinfeasible )
1315 for (c = 0; c < nconss; ++c)
1318 assert( conss[c] != NULL );
1320 assert( consdata != NULL);
1321 assert( consdata->nrows > 0 );
1322 assert( consdata->vars1 != NULL );
1323 assert( consdata->vars2 != NULL );
1349 assert( scip != 0 );
1350 assert( conshdlr != 0 );
1352 assert( result != 0 );
1354 SCIPdebugMsg(scip,
"Enforelax method for orbisack constraints.\n");
1370 for (c = 0; c < nconss; ++c)
1373 assert( conss[c] != 0 );
1377 assert( consdata->nrows <= nvals );
1417 assert( scip != NULL );
1418 assert( conshdlr != NULL );
1420 assert( result != NULL );
1425 assert( conshdlrdata != NULL );
1427 if ( conshdlrdata->checkalwaysfeas )
1431 for (c = 0; c < nconss; ++c)
1434 assert( conss[c] != NULL );
1436 assert( consdata != NULL);
1437 assert( consdata->nrows > 0 );
1438 assert( consdata->vars1 != NULL );
1439 assert( consdata->vars2 != NULL );
1466 assert( scip != NULL );
1467 assert( conshdlr != NULL );
1469 assert( result != NULL );
1473 SCIPdebugMsg(scip,
"Propagation method of orbisack constraint handler.\n");
1476 for (c = 0; c < nconss; ++c)
1482 assert( conss[c] != NULL );
1507 assert( scip != NULL );
1508 assert( conshdlr != NULL );
1510 assert( result != NULL );
1512 SCIPdebugMsg(scip,
"Presolving method of orbisack constraint handler. Propagating orbisack inequalities.\n");
1517 for (c = 0; c < nconss; ++c)
1523 assert( conss[c] != NULL );
1537 *nfixedvars += ngen;
1554 assert( scip != NULL );
1555 assert( conshdlr != NULL );
1557 assert( cons != NULL );
1558 assert( infervar != NULL );
1559 assert( bdchgidx != NULL );
1560 assert( result != NULL );
1562 SCIPdebugMsg(scip,
"Propagation resolution method of orbisack constraint handler.\n");
1567 assert( consdata != NULL);
1568 assert( consdata->nrows > 0 );
1569 assert( consdata->vars1 != NULL );
1570 assert( consdata->vars2 != NULL );
1572 vars1 = consdata->vars1;
1573 vars2 = consdata->vars2;
1575 assert( 0 <= inferinfo && inferinfo < consdata->nrows );
1577 assert( vars2[inferinfo] == infervar );
1582 SCIPdebugMsg(scip,
" -> reason for setting x[%d][1] = 0 was fixing x[%d][0] to 0 and each row above is fixed to the same value.\n",
1583 inferinfo, inferinfo);
1585 for (i = 0; i < inferinfo; ++i)
1619 assert( scip != NULL );
1620 assert( conshdlr != NULL );
1622 assert( cons != NULL );
1624 SCIPdebugMsg(scip,
"Locking method for orbisack constraint handler.\n");
1628 assert( consdata != NULL);
1629 assert( consdata->nrows > 0 );
1630 assert( consdata->vars1 != NULL );
1631 assert( consdata->vars2 != NULL );
1633 nrows = consdata->nrows;
1634 vars1 = consdata->vars1;
1635 vars2 = consdata->vars2;
1637 for (i = 0; i < nrows; ++i)
1660 assert( scip != NULL );
1661 assert( conshdlr != NULL );
1663 assert( cons != NULL );
1666 assert( consdata != NULL );
1667 assert( consdata->vars1 != NULL );
1668 assert( consdata->vars2 != NULL );
1669 assert( consdata->nrows > 0 );
1671 vars1 = consdata->vars1;
1672 vars2 = consdata->vars2;
1673 nrows = consdata->nrows;
1675 SCIPdebugMsg(scip,
"Printing method for orbisack constraint handler\n");
1679 for (i = 0; i < nrows; ++i)
1705 assert( scip != NULL );
1706 assert( vars1 != NULL );
1707 assert( vars2 != NULL );
1708 assert( nrows > 0 );
1709 assert( feasible != NULL );
1714 for (i = 0; i < nrows; ++i)
1727 else if ( val1 == 1 )
1729 assert( val2 == 0 );
1735 SCIPinfoMessage(scip, NULL,
"First non-constant row %d is fixed to (0,1).\n", i);
1767 assert( scip != NULL );
1768 assert( vars1 != NULL );
1769 assert( vars2 != NULL );
1770 assert( nrows > 0 );
1771 assert( infeasible != NULL );
1772 assert( ngen != NULL );
1774 *infeasible =
FALSE;
1784 for (i = 0; i < nrows; ++i)
1793 for (i = 0; i < nrows; ++i)
1805 for (j = 0; j < nrows; ++j)
1831 lhs = lhs - solvals1[i];
1837 lhs = lhs + solvals2[i];
1858 assert( cons != NULL );
1859 assert( success != NULL );
1860 assert( vars != NULL );
1863 assert( consdata != NULL );
1865 if ( varssize < 2 * consdata->nrows )
1872 for (i = 0; i < consdata->nrows; ++i)
1874 vars[cnt++] = consdata->vars1[i];
1875 vars[cnt++] = consdata->vars2[i];
1890 assert( cons != NULL );
1893 assert( consdata != NULL );
1895 (*nvars) = 2 * consdata->nrows;
1916 consEnfolpOrbisack, consEnfopsOrbisack, consCheckOrbisack, consLockOrbisack,
1918 assert( conshdlr != NULL );
1936 "Separate cover inequalities for orbisacks?",
1940 "Separate orbisack inequalities?",
1944 "Maximum size of coefficients for orbisack inequalities",
1949 "Upgrade orbisack constraints to packing/partioning orbisacks?",
1953 "Whether check routine returns always SCIP_FEASIBLE.",
2012 if ( conshdlr == NULL )
2018 assert( nrows > 0 );
2022 if ( ! ispporbisack && conshdlrdata->checkpporbisack )
2027 ispporbisack =
TRUE;
2035 for (i = 0; i < nrows; ++i)
2038 vars[i][0] = vars1[i];
2039 vars[i][1] = vars2[i];
2047 SCIP_CALL(
SCIPcreateConsOrbitope(scip, cons,
"pporbisack", vars, orbitopetype, nrows, 2,
TRUE, initial, separate, enforce, check, propagate,
2048 local, modifiable, dynamic, removable, stickingatnode) );
2050 for (i = 0; i < nrows; ++i)
2059 SCIP_CALL(
SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
2060 local, modifiable, dynamic, removable, stickingatnode) );
enum SCIP_Result SCIP_RESULT
SCIP_RETCODE SCIPcreateConsOrbitope(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR ***vars, SCIP_ORBITOPETYPE orbitopetype, int nspcons, int nblocks, SCIP_Bool resolveprop, 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 SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete)))
static SCIP_DECL_CONSENFOPS(consEnfopsOrbisack)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans)))
static SCIP_RETCODE packingUpgrade(SCIP *scip, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, int nrows, SCIP_Bool *success, SCIP_Bool *isparttype)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
int SCIPgetNVarsSetppc(SCIP *scip, SCIP_CONS *cons)
#define SCIPallocClearBufferArray(scip, ptr, num)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars)))
static SCIP_DECL_CONSRESPROP(consRespropOrbisack)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPincludeConshdlrOrbisack(SCIP *scip)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
#define DEFAULT_COEFFBOUND
static SCIP_DECL_CONSGETVARS(consGetVarsOrbisack)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
static SCIP_DECL_CONSSEPALP(consSepalpOrbisack)
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)
constraint handler for orbisack constraints
SCIP_Real SCIPinfinity(SCIP *scip)
static SCIP_RETCODE addOrbisackCover(SCIP *scip, SCIP_CONS *cons, int nrows, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, SCIP_Real *coeffs1, SCIP_Real *coeffs2, SCIP_Real rhs, SCIP_Bool *infeasible)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
#define CONSHDLR_NEEDSCONS
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
int SCIPvarGetProbindex(SCIP_VAR *var)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
#define SCIPfreeBlockMemory(scip, ptr)
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 separateOrbisack(SCIP *scip, SCIP_CONS *cons, int nrows, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, SCIP_Real *vals1, SCIP_Real *vals2, SCIP_Bool coverseparation, SCIP_Real coeffbound, int *ngen, SCIP_Bool *infeasible)
#define SCIPfreeBufferArray(scip, ptr)
Constraint handler for the set partitioning / packing / covering constraints .
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Bool SCIPisTransformed(SCIP *scip)
int SCIPgetNLPBranchCands(SCIP *scip)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp)))
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
#define DEFAULT_ORBISEPARATION
SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars)
SCIP_RETCODE SCIPseparateCoversOrbisack(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_VAR **vars1, SCIP_VAR **vars2, int nrows, SCIP_Bool *infeasible, int *ngen)
static SCIP_RETCODE initLP(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
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)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
static SCIP_DECL_CONSTRANS(consTransOrbisack)
SCIP_RETCODE SCIPcreateConsOrbisack(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, int nrows, SCIP_Bool ispporbisack, SCIP_Bool isparttype, 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_RETCODE addOrbisackInequality(SCIP *scip, SCIP_CONS *cons, int nrows, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, SCIP_Real *coeffs1, SCIP_Real *coeffs2, SCIP_Real rhs, SCIP_Bool *infeasible)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
constraint handler for (partitioning/packing/full) orbitope constraints w.r.t. the full symmetric gro...
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
#define CONSHDLR_DELAYPROP
static SCIP_DECL_CONSPRINT(consPrintOrbisack)
static SCIP_DECL_CONSCHECK(consCheckOrbisack)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, int nrows)
SCIP_RETCODE SCIPgetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
#define CONSHDLR_SEPAFREQ
SCIP_Bool SCIPisEfficacious(SCIP *scip, SCIP_Real efficacy)
SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree)))
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
#define CONSHDLR_PROP_TIMING
enum SCIP_OrbitopeType SCIP_ORBITOPETYPE
static SCIP_DECL_CONSPROP(consPropOrbisack)
#define CONSHDLR_CHECKPRIORITY
#define DEFAULT_CHECKALWAYSFEAS
#define DEFAULT_PPORBISACK
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
static SCIP_RETCODE propVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible, SCIP_Bool *found, int *ngen)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop)))
struct SCIP_ConsData SCIP_CONSDATA
#define CONSHDLR_SEPAPRIORITY
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
static SCIP_DECL_CONSGETNVARS(consGetNVarsOrbisack)
#define SCIPallocBufferArray(scip, ptr, num)
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)
SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
#define CONSHDLR_ENFOPRIORITY
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint)))
static SCIP_DECL_CONSDELETE(consDeleteOrbisack)
static SCIP_RETCODE separateInequalities(SCIP *scip, SCIP_RESULT *result, SCIP_CONS *cons, int nrows, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, SCIP_Real *vals1, SCIP_Real *vals2)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVars(SCIP *scip)
static SCIP_RETCODE separateOrbisackCovers(SCIP *scip, SCIP_CONS *cons, int nrows, SCIP_VAR *const *vars1, SCIP_VAR *const *vars2, SCIP_Real *vals1, SCIP_Real *vals2, int *ngen, SCIP_Bool *infeasible)
static SCIP_DECL_CONSENFOLP(consEnfolpOrbisack)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
static SCIP_DECL_CONSSEPASOL(consSepasolOrbisack)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
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 SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars)))
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
#define CONSHDLR_MAXPREROUNDS
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
#define CONSHDLR_PRESOLTIMING
static SCIP_DECL_CONSPRESOL(consPresolOrbisack)
static SCIP_DECL_CONSLOCK(consLockOrbisack)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
static SCIP_DECL_CONSFREE(consFreeOrbisack)
#define CONSHDLR_DELAYSEPA
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicOrbisack(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR **vars1, SCIP_VAR **vars2, int nrows, SCIP_Bool ispporbisack, SCIP_Bool isparttype)
#define CONSHDLR_PROPFREQ
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
static SCIP_DECL_CONSENFORELAX(consEnforelaxOrbisack)
#define CONSHDLR_EAGERFREQ
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPcheckSolutionOrbisack(SCIP *scip, SCIP_SOL *sol, SCIP_VAR **vars1, SCIP_VAR **vars2, int nrows, SCIP_Bool printreason, SCIP_Bool *feasible)
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)
#define DEFAULT_COVERSEPARATION
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
static SCIP_DECL_CONSINITLP(consInitlpOrbisack)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)