constraint handler for indicator constraints
An indicator constraint is given by a binary variable \(y\) and an inequality \(ax \leq b\). It states that if \(y = 1\) then \(ax \leq b\) holds.
This constraint is handled by adding a slack variable \(s:\; ax - s \leq b\) with \(s \geq 0\). The constraint is enforced by fixing \(s\) to 0 if \(y = 1\).
This constraint is equivalent to a linear constraint \(ax - s \leq b\) and an SOS1 constraint on \(y\) and \(s\) (at most one should be nonzero). In the indicator context we can, however, separate more inequalities.
The name indicator apparently comes from CPLEX.
We now explain the handling of indicator constraints in more detail. The indicator constraint handler adds an inequality for each indicator constraint. We assume that this system (with added slack variables) is \( Ax - s \leq b \), where \( x \) are the original variables and \( s \) are the slack variables added by the indicator constraint. Variables \( y \) are the binary variables corresponding to the indicator constraints.
We separate inequalities by using the so-called alternative polyhedron.
We now describe the separation method of the first method in more detail.
Consider the LP-relaxation of the current subproblem:
\[ \begin{array}{ll} min & c^T x + d^T z\\ & A x - s \leq b, \\ & D x + C z \leq f, \\ & l \leq x \leq u, \\ & u \leq z \leq v, \\ & 0 \leq s. \end{array} \]
As above \(Ax - s \leq b\) contains all inequalities corresponding to indicator constraints, while the system \(Dx + Cy \leq f\) contains all other inequalities (which are ignored in the following). Similarly, variables \(z\) not appearing in indicator constraints are ignored. Bounds for the variables \(x_j\) can be given, in particular, variables can be fixed. Note that \(s \leq 0\) renders the system infeasible.
To generate cuts, we construct the so-called alternative polyhedron:
\[ \begin{array}{ll} P = \{ (w,r,t) : & A^T w - r + t = 0,\\ & b^T w - l^T r + u^T t = -1,\\ & w, r, t \geq 0 \}. \end{array} \]
Here, \(r\) and \(t\) correspond to the lower and upper bounds on \(x\), respectively.
It turns out that the vertices of \(P\) correspond to minimal infeasible subsystems of \(A x \leq b\), \(l \leq x \leq u\). If \(I\) is the index set of such a system, it follows that not all \(s_i\) for \(i \in I\) can be 0, i.e., \(y_i\) can be 1. In other words, the following cut is valid:
\[ \sum_{i \in I} y_i \leq |I| - 1. \]
We separate the above inequalities by a heuristic described in
Branch-And-Cut for the Maximum Feasible Subsystem Problem,
Marc Pfetsch, SIAM Journal on Optimization 19, No.1, 21-38 (2008)
The first step in the separation heuristic is to apply the transformation \(\bar{y} = 1 - y\), which transforms the above inequality into the constraint
\[ \sum_{i \in I} \bar{y}_i \geq 1, \]
that is, it is a set covering constraint on the negated variables.
The basic idea is to use the current solution to the LP relaxation and use it as the objective, when optimizing of the alternative polyhedron. Since any vertex corresponds to such an inequality, we can check whether it is violated. To enlarge the chance that we find a violated inequality, we perform a fixing procedure, in which the variable corresponding to an arbitrary element of the last IIS \(I\) is fixed to zero, i.e., cannot be used in the next IISs. This is repeated until the corresponding alternative polyhedron is infeasible, i.e., we have obtained an IIS-cover. For more details see the paper above.
Since each indicator constraint adds a linear constraint to the formulation, preprocessing of the linear constraints change the above approach as follows.
The system as present in the formulation is the following (ignoring variables that are not contained in indicator constraints and the objective function):
\[ \begin{array}{ll} & A x - s \leq b, \\ & l \leq x \leq u, \\ & s \leq 0. \end{array} \]
Note again that the requirement \(s \leq 0\) leads to an infeasible system. Consider now the preprocessing of the linear constraint (aggregation, bound strengthening, etc.) and assume that this changes the above system to the following:
\[ \begin{array}{ll} & \tilde{A} x - \tilde{B} s \leq \tilde{b}, \\ & \tilde{l} \leq x \leq \tilde{u}, \\ & s \leq 0. \\ \end{array} \]
Note that we forbid multi-aggregation of the \(s\) variables in order to be able to change their bounds in propagation/branching. The corresponding alternative system is the following:
\[ \begin{array}{ll} & \tilde{A}^T w - r + t = 0,\\ & - \tilde{B}^T w + v = 0,\\ & b^T w - l^T r + u^T t = -1,\\ & w, v, r, t \geq 0 \end{array} \qquad \Leftrightarrow \qquad \begin{array}{ll} & \tilde{A}^T w - r + t = 0,\\ & \tilde{B}^T w \geq 0,\\ & b^T w - l^T r + u^T t = -1,\\ & w, r, t \geq 0, \end{array} \]
where the second form arises by substituting \(v \geq 0\). A closer look at this system reveals that it is not larger than the original one:
Taken together, these two observations yield the conclusion that the new system is roughly as large as the original one.
Definition in file cons_indicator.c.
#include <assert.h>
#include <string.h>
#include "scip/cons_indicator.h"
#include "scip/cons_linear.h"
#include "scip/cons_logicor.h"
#include "scip/cons_varbound.h"
#include "scip/cons_quadratic.h"
#include "scip/heur_trysol.h"
#include "scip/heur_indicator.h"
#include "scip/pub_misc.h"
Go to the source code of this file.
Functions | |
static | SCIP_DECL_EVENTEXEC (eventExecIndicatorBound) |
static | SCIP_DECL_EVENTEXEC (eventExecIndicatorRestart) |
static | SCIP_DECL_CONFLICTFREE (conflictFreeIndicator) |
static | SCIP_DECL_CONFLICTEXEC (conflictExecIndicator) |
static SCIP_RETCODE | checkTransferBoolParam (SCIP *scip, SCIP_PARAM *param, const char *name, SCIP_Bool newvalue, SCIP_Bool *value) |
static | SCIP_DECL_PARAMCHGD (paramChangedIndicator) |
static SCIP_Real | varGetObjDelta (SCIP_VAR *var) |
static SCIP_RETCODE | consdataEnsureAddLinConsSize (SCIP *scip, SCIP_CONSHDLR *conshdlr, int num) |
static SCIP_RETCODE | initAlternativeLP (SCIP *scip, SCIP_CONSHDLR *conshdlr) |
static SCIP_RETCODE | checkLPBoundsClean (SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss) |
static SCIP_RETCODE | setAltLPObj (SCIP *scip, SCIP_LPI *lp, SCIP_SOL *sol, int nconss, SCIP_CONS **conss) |
static SCIP_RETCODE | setAltLPObjZero (SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss) |
static SCIP_RETCODE | fixAltLPVariables (SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S) |
static SCIP_RETCODE | fixAltLPVariable (SCIP_LPI *lp, int ind) |
static SCIP_RETCODE | unfixAltLPVariable (SCIP_LPI *lp, int ind) |
static SCIP_RETCODE | unfixAltLPVariables (SCIP *scip, SCIP_LPI *lp, int nconss, SCIP_CONS **conss, SCIP_Bool *S) |
static SCIP_RETCODE | updateFirstRow (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata) |
static SCIP_RETCODE | updateFirstRowGlobal (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata) |
static SCIP_RETCODE | checkIISlocal (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Real *vector, SCIP_Bool *isLocal) |
static SCIP_RETCODE | scaleFirstRow (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata) |
static SCIP_RETCODE | addAltLPColumn (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_VAR *slackvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhscoef, SCIP_Real objcoef, SCIP_Real sign, SCIP_Bool colfree, int *colindex) |
static SCIP_RETCODE | addAltLPConstraint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Real objcoef, int *colindex) |
static SCIP_RETCODE | addAltLPRow (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row, SCIP_Real objcoef, int *colindex) |
static SCIP_RETCODE | addObjcut (SCIP *scip, SCIP_CONSHDLR *conshdlr) |
static SCIP_RETCODE | deleteAltLPConstraint (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *cons) |
static SCIP_RETCODE | updateObjUpperbound (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata) |
static SCIP_RETCODE | checkAltLPInfeasible (SCIP *scip, SCIP_LPI *lp, SCIP_Real maxcondition, SCIP_Bool primal, SCIP_Bool *infeasible, SCIP_Bool *error) |
static SCIP_RETCODE | extendToCover (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_LPI *lp, SCIP_SOL *sol, SCIP_Bool removable, SCIP_Bool genlogicor, int nconss, SCIP_CONS **conss, SCIP_Bool *S, int *size, SCIP_Real *value, SCIP_Bool *error, SCIP_Bool *cutoff, int *nGen) |
static SCIP_RETCODE | consdataCreate (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata, const char *consname, SCIP_CONSDATA **consdata, SCIP_EVENTHDLR *eventhdlrbound, SCIP_EVENTHDLR *eventhdlrrestart, SCIP_VAR *binvar, SCIP_VAR *slackvar, SCIP_CONS *lincons, SCIP_Bool linconsactive) |
static SCIP_RETCODE | createVarUbs (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS **conss, int nconss, int *ngen) |
static SCIP_RETCODE | presolRoundIndicator (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool dualreductions, SCIP_Bool *cutoff, SCIP_Bool *success, int *ndelconss, int *nfixedvars) |
static SCIP_RETCODE | propIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_CONSDATA *consdata, SCIP_Bool dualreductions, SCIP_Bool addopposite, SCIP_Bool *cutoff, int *nGen) |
static SCIP_RETCODE | enforceCuts (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_Bool genlogicor, SCIP_Bool *cutoff, int *nGen) |
static SCIP_RETCODE | enforceIndicators (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_Bool genlogicor, SCIP_RESULT *result) |
static SCIP_RETCODE | separateIISRounding (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, int nconss, SCIP_CONS **conss, int maxsepacuts, SCIP_Bool *cutoff, int *nGen) |
static SCIP_RETCODE | separatePerspective (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, int nconss, SCIP_CONS **conss, int maxsepacuts, int *nGen) |
static SCIP_RETCODE | separateIndicators (SCIP *scip, SCIP_CONSHDLR *conshdlr, int nconss, int nusefulconss, SCIP_CONS **conss, SCIP_SOL *sol, SCIP_RESULT *result) |
static void | initConshdlrData (SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata) |
static | SCIP_DECL_LINCONSUPGD (linconsUpgdIndicator) |
static | SCIP_DECL_CONSHDLRCOPY (conshdlrCopyIndicator) |
static | SCIP_DECL_CONSINIT (consInitIndicator) |
static | SCIP_DECL_CONSEXIT (consExitIndicator) |
static | SCIP_DECL_CONSFREE (consFreeIndicator) |
static | SCIP_DECL_CONSINITSOL (consInitsolIndicator) |
static | SCIP_DECL_CONSEXITSOL (consExitsolIndicator) |
static | SCIP_DECL_CONSDELETE (consDeleteIndicator) |
static | SCIP_DECL_CONSTRANS (consTransIndicator) |
static | SCIP_DECL_CONSINITPRE (consInitpreIndicator) |
static | SCIP_DECL_CONSPRESOL (consPresolIndicator) |
static | SCIP_DECL_CONSINITLP (consInitlpIndicator) |
static | SCIP_DECL_CONSSEPALP (consSepalpIndicator) |
static | SCIP_DECL_CONSSEPASOL (consSepasolIndicator) |
static | SCIP_DECL_CONSENFOLP (consEnfolpIndicator) |
static | SCIP_DECL_CONSENFORELAX (consEnforelaxIndicator) |
static | SCIP_DECL_CONSENFOPS (consEnfopsIndicator) |
static | SCIP_DECL_CONSCHECK (consCheckIndicator) |
static | SCIP_DECL_CONSPROP (consPropIndicator) |
static | SCIP_DECL_CONSRESPROP (consRespropIndicator) |
static | SCIP_DECL_CONSLOCK (consLockIndicator) |
static | SCIP_DECL_CONSPRINT (consPrintIndicator) |
static | SCIP_DECL_CONSCOPY (consCopyIndicator) |
static | SCIP_DECL_CONSPARSE (consParseIndicator) |
static | SCIP_DECL_CONSENABLE (consEnableIndicator) |
static | SCIP_DECL_CONSDISABLE (consDisableIndicator) |
static | SCIP_DECL_CONSGETVARS (consGetVarsIndicator) |
static | SCIP_DECL_CONSGETNVARS (consGetNVarsIndicator) |
static | SCIP_DECL_CONSGETDIVEBDCHGS (consGetDiveBdChgsIndicator) |
SCIP_RETCODE | SCIPincludeConshdlrIndicator (SCIP *scip) |
SCIP_RETCODE | SCIPcreateConsIndicator (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode) |
SCIP_RETCODE | SCIPcreateConsBasicIndicator (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs) |
SCIP_RETCODE | SCIPcreateConsIndicatorLinCons (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode) |
SCIP_RETCODE | SCIPcreateConsBasicIndicatorLinCons (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar) |
SCIP_RETCODE | SCIPaddVarIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) |
SCIP_CONS * | SCIPgetLinearConsIndicator (SCIP_CONS *cons) |
SCIP_RETCODE | SCIPsetLinearConsIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_CONS *lincons) |
SCIP_VAR * | SCIPgetBinaryVarIndicator (SCIP_CONS *cons) |
SCIP_RETCODE | SCIPsetBinaryVarIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *binvar) |
SCIP_VAR * | SCIPgetSlackVarIndicator (SCIP_CONS *cons) |
SCIP_Bool | SCIPisViolatedIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol) |
SCIP_RETCODE | SCIPmakeIndicatorFeasible (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *changed) |
SCIP_RETCODE | SCIPmakeIndicatorsFeasible (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_Bool *changed) |
SCIP_RETCODE | SCIPaddLinearConsIndicator (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS *lincons) |
SCIP_RETCODE | SCIPaddRowIndicator (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_ROW *row) |
#define CONSHDLR_NAME "indicator" |
Definition at line 208 of file cons_indicator.c.
Referenced by addAltLPConstraint(), addAltLPRow(), addObjcut(), consdataEnsureAddLinConsSize(), deleteAltLPConstraint(), initAlternativeLP(), SCIP_DECL_CONFLICTEXEC(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSDELETE(), SCIP_DECL_CONSDISABLE(), SCIP_DECL_CONSENABLE(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), SCIP_DECL_CONSENFORELAX(), SCIP_DECL_CONSEXIT(), SCIP_DECL_CONSEXITSOL(), SCIP_DECL_CONSFREE(), SCIP_DECL_CONSGETDIVEBDCHGS(), SCIP_DECL_CONSHDLRCOPY(), SCIP_DECL_CONSINIT(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSINITPRE(), SCIP_DECL_CONSINITSOL(), SCIP_DECL_CONSLOCK(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_CONSPRINT(), SCIP_DECL_CONSPROP(), SCIP_DECL_CONSRESPROP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_CONSTRANS(), SCIPaddLinearConsIndicator(), SCIPaddRowIndicator(), SCIPaddVarIndicator(), SCIPcreateConsIndicator(), SCIPcreateConsIndicatorLinCons(), SCIPgetBinaryVarIndicator(), SCIPgetLinearConsIndicator(), SCIPgetSlackVarIndicator(), SCIPincludeConshdlrIndicator(), SCIPmakeIndicatorFeasible(), SCIPmakeIndicatorsFeasible(), SCIPsetBinaryVarIndicator(), and SCIPsetLinearConsIndicator().
#define CONSHDLR_DESC "indicator constraint handler" |
Definition at line 209 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_SEPAPRIORITY 10 |
priority of the constraint handler for separation
Definition at line 210 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_ENFOPRIORITY -100 |
priority of the constraint handler for constraint enforcing
Definition at line 211 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_CHECKPRIORITY -1000000 |
priority of the constraint handler for checking feasibility
Definition at line 212 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_SEPAFREQ 10 |
frequency for separating cuts; zero means to separate only in the root node
Definition at line 213 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_PROPFREQ 1 |
frequency for propagating domains; zero means only preprocessing propagation
Definition at line 214 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_EAGERFREQ 100 |
frequency for using all instead of only the useful constraints in separation, propagation and enforcement, -1 for no eager evaluations, 0 for first only
Definition at line 215 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_MAXPREROUNDS -1 |
maximal number of presolving rounds the constraint handler participates in (-1: no limit)
Definition at line 218 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_DELAYSEPA FALSE |
Should separation method be delayed, if other separators found cuts?
Definition at line 219 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_DELAYPROP FALSE |
Should propagation method be delayed, if other propagators found reductions?
Definition at line 220 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_NEEDSCONS TRUE |
Should the constraint handler be skipped, if no constraints are available?
Definition at line 221 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST |
Definition at line 223 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP |
Definition at line 224 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define EVENTHDLR_BOUND_NAME "indicatorbound" |
Definition at line 228 of file cons_indicator.c.
Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrIndicator().
#define EVENTHDLR_BOUND_DESC "bound change event handler for indicator constraints" |
Definition at line 229 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define EVENTHDLR_RESTART_NAME "indicatorrestart" |
Definition at line 231 of file cons_indicator.c.
Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrIndicator().
#define EVENTHDLR_RESTART_DESC "force restart if absolute gap is 1 or enough binary variables have been fixed" |
Definition at line 232 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONFLICTHDLR_NAME "indicatorconflict" |
Definition at line 236 of file cons_indicator.c.
Referenced by SCIP_DECL_CONFLICTEXEC(), SCIP_DECL_CONFLICTFREE(), and SCIPincludeConshdlrIndicator().
#define CONFLICTHDLR_DESC "replace slack variables and generate logicor constraints" |
Definition at line 237 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define CONFLICTHDLR_PRIORITY 200000 |
Definition at line 238 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define LINCONSUPGD_PRIORITY +100000 |
priority of the constraint handler for upgrading of linear constraints
Definition at line 241 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_BRANCHINDICATORS FALSE |
Branch on indicator constraints in enforcing?
Definition at line 244 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_GENLOGICOR FALSE |
Generate logicor constraints instead of cuts?
Definition at line 245 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_ADDCOUPLING TRUE |
Add coupling constraints or rows if big-M is small enough?
Definition at line 246 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_MAXCOUPLINGVALUE 1e4 |
maximum coefficient for binary variable in coupling constraint
Definition at line 247 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_ADDCOUPLINGCONS FALSE |
Add initial variable upper bound constraints, if 'addcoupling' is true?
Definition at line 248 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPACOUPLINGCUTS TRUE |
Should the coupling inequalities be separated dynamically?
Definition at line 249 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPACOUPLINGLOCAL FALSE |
Allow to use local bounds in order to separate coupling inequalities?
Definition at line 250 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPACOUPLINGVALUE 1e4 |
maximum coefficient for binary variable in separated coupling constraint
Definition at line 251 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPAALTERNATIVELP FALSE |
Separate using the alternative LP?
Definition at line 252 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPAPERSPECTIVE FALSE |
Separate cuts based on perspective formulation?
Definition at line 253 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SEPAPERSPLOCAL TRUE |
Allow to use local bounds in order to separate perspectice cuts?
Definition at line 254 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_TRYSOLFROMCOVER FALSE |
Try to construct a feasible solution from a cover?
Definition at line 255 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_UPGRADELINEAR FALSE |
Try to upgrade linear constraints to indicator constraints?
Definition at line 256 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_USEOTHERCONSS FALSE |
Collect other constraints to alternative LP?
Definition at line 257 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_USEOBJECTIVECUT FALSE |
Use objective cut with current best solution to alternative LP?
Definition at line 258 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_UPDATEBOUNDS FALSE |
Update bounds of original variables for separation?
Definition at line 259 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_MAXCONDITIONALTLP 0.0 |
max. estimated condition of the solution basis matrix of the alt. LP to be trustworthy (0.0 to disable check)
Definition at line 260 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_MAXSEPACUTS 100 |
maximal number of cuts separated per separation round
Definition at line 261 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_MAXSEPACUTSROOT 2000 |
maximal number of cuts separated per separation round in the root node
Definition at line 262 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_REMOVEINDICATORS FALSE |
Remove indicator constraint if corresponding variable bound constraint has been added?
Definition at line 263 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_GENERATEBILINEAR FALSE |
Do not generate indicator constraint, but a bilinear constraint instead?
Definition at line 264 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_SCALESLACKVAR FALSE |
Scale slack variable coefficient at construction time?
Definition at line 265 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_NOLINCONSCONT FALSE |
Decompose problem (do not generate linear constraint if all variables are continuous)?
Definition at line 266 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_TRYSOLUTIONS TRUE |
Try to make solutions feasible by setting indicator variables?
Definition at line 267 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_ENFORCECUTS FALSE |
In enforcing try to generate cuts (only if sepaalternativelp is true)?
Definition at line 268 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_DUALREDUCTIONS TRUE |
Should dual reduction steps be performed?
Definition at line 269 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_ADDOPPOSITE FALSE |
Add opposite inequality in nodes in which the binary variable has been fixed to 0?
Definition at line 270 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_CONFLICTSUPGRADE FALSE |
Try to upgrade bounddisjunction conflicts by replacing slack variables?
Definition at line 271 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_FORCERESTART FALSE |
Force restart if absolute gap is 1 or enough binary variables have been fixed?
Definition at line 272 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define DEFAULT_RESTARTFRAC 0.9 |
fraction of binary variables that need to be fixed before restart occurs (in forcerestart)
Definition at line 273 of file cons_indicator.c.
Referenced by SCIPincludeConshdlrIndicator().
#define OBJEPSILON 0.001 |
value to add to objective in alt. LP if the binary variable is 1 to get small IISs
Definition at line 277 of file cons_indicator.c.
Referenced by setAltLPObj(), and setAltLPObjZero().
#define SEPAALTTHRESHOLD 10 |
only separate IIS cuts if the number of separated coupling cuts is less than this value
Definition at line 278 of file cons_indicator.c.
Referenced by separateIndicators().
#define MAXROUNDINGROUNDS 1 |
maximal number of rounds that produced cuts in separation
Definition at line 279 of file cons_indicator.c.
Referenced by initConshdlrData().
#define SCIP_CALL_PARAM | ( | x | ) |
Definition at line 380 of file cons_indicator.c.
Referenced by checkAltLPInfeasible(), extendToCover(), initAlternativeLP(), and SCIP_DECL_CONSCHECK().
|
static |
exec the event handler for getting variable bound changes
We update the number of variables fixed to be nonzero.
Definition at line 400 of file cons_indicator.c.
References EVENTHDLR_BOUND_NAME, NULL, SCIP_EVENTTYPE_LBRELAXED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPdebugMsg, SCIPerrorMessage, SCIPeventGetNewbound(), SCIPeventGetOldbound(), SCIPeventGetType(), SCIPeventGetVar(), SCIPeventhdlrGetName(), SCIPisFeasNegative(), SCIPisFeasPositive(), and SCIPvarGetName().
|
static |
exec the event handler for forcing a restart
There are two cases in which we perform a (user) restart:
Definition at line 484 of file cons_indicator.c.
References EVENTHDLR_RESTART_NAME, NULL, REALABS, SCIP_CALL, SCIP_DECL_CONFLICTFREE(), SCIP_EVENTTYPE_BESTSOLFOUND, SCIP_EVENTTYPE_GLBCHANGED, SCIP_EVENTTYPE_GUBCHANGED, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIP_STAGE_SOLVING, SCIP_VARTYPE_BINARY, SCIP_VERBLEVEL_NORMAL, SCIPABORT, SCIPdebugMsg, SCIPdropEvent(), SCIPerrorMessage, SCIPeventGetNewbound(), SCIPeventGetOldbound(), SCIPeventGetType(), SCIPeventGetVar(), SCIPeventhdlrGetName(), SCIPfindBranchrule(), SCIPgetDualbound(), SCIPgetPrimalbound(), SCIPgetStage(), SCIPisEQ(), SCIPisGE(), SCIPisIntegral(), SCIPisParamFixed(), SCIPisZero(), SCIPrestartSolve(), SCIPsetIntParam(), SCIPvarGetName(), SCIPvarGetType(), SCIPverbMessage(), and TRUE.
|
static |
destructor of conflict handler to free conflict handler data (called when SCIP is exiting)
Definition at line 590 of file cons_indicator.c.
References CONFLICTHDLR_NAME, NULL, SCIP_DECL_CONFLICTEXEC(), SCIP_OKAY, SCIPconflicthdlrGetData(), SCIPconflicthdlrGetName(), and SCIPfreeBlockMemory.
Referenced by SCIP_DECL_EVENTEXEC().
|
static |
conflict processing method of conflict handler (called when conflict was found)
In this conflict handler we try to replace slack variables by binary indicator variables and generate a logicor constraint if possible.
Definition at line 613 of file cons_indicator.c.
References checkTransferBoolParam(), CONFLICTHDLR_NAME, CONSHDLR_NAME, FALSE, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CONSADDED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_IMPLINT, SCIPaddConflict(), SCIPallocBufferArray, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPboundtypeOpposite(), SCIPconflicthdlrGetData(), SCIPconflicthdlrGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNConss(), SCIPcreateConsLogicor(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetBinaryVarIndicator(), SCIPgetNConflictConssApplied(), SCIPgetNegatedVar(), SCIPgetNRuns(), SCIPgetSlackVarIndicator(), SCIPinfoMessage(), SCIPisFeasZero(), SCIPprintCons(), SCIPsnprintf(), SCIPvarGetName(), SCIPvarGetType(), SCIPvarIsBinary(), and TRUE.
Referenced by SCIP_DECL_CONFLICTFREE().
|
static |
check whether we transfer a changed parameter to the given value
scip | SCIP data structure |
param | parameter |
name | parameter name to check |
newvalue | new value |
value | old and possibly changed value of parameter |
Definition at line 783 of file cons_indicator.c.
References NULL, paramname, SCIP_CALL, SCIP_DECL_PARAMCHGD(), SCIP_OKAY, SCIP_PARAMTYPE_BOOL, SCIP_STAGE_PROBLEM, SCIPchgBoolParam(), SCIPgetStage(), SCIPparamGetName(), SCIPparamGetType(), and SCIPwarningMessage().
Referenced by SCIP_DECL_CONFLICTEXEC(), and SCIP_DECL_PARAMCHGD().
|
static |
called after a parameter has been changed
Definition at line 830 of file cons_indicator.c.
References checkTransferBoolParam(), NULL, SCIP_CALL, SCIP_ERROR, SCIP_MAXSTRLEN, SCIP_OBJSEN_MINIMIZE, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_MULTAGGR, SCIPABORT, SCIPallocBufferArray, SCIPblkmem(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetConss(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconshdlrGetNConss(), SCIPconsIsActive(), SCIPconsIsEnabled(), SCIPconsIsLocal(), SCIPdebugMsg, SCIPerrorMessage, SCIPfindConshdlr(), SCIPfreeBufferArray, SCIPgetConss(), SCIPgetLhsLinear(), SCIPgetMessagehdlr(), SCIPgetNConss(), SCIPgetNVars(), SCIPgetNVarsLinear(), SCIPgetProbvarSum(), SCIPgetRhsLinear(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPhashmapCreate(), SCIPhashmapExists(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPhashmapInsert(), SCIPinfinity(), SCIPisFeasZero(), SCIPisInfinity(), SCIPisZero(), SCIPlpiAddCols(), SCIPlpiAddRows(), SCIPlpiCreate(), SCIPlpiFree(), SCIPlpiInfinity(), SCIPlpiIsPrimalInfeasible(), SCIPlpiSolvePrimal(), SCIPlpiWriteLP(), SCIPsnprintf(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), sign(), and varGetObjDelta().
Referenced by checkTransferBoolParam().
return objective contribution of variable
Special treatment of negated variables: return negative of objective of original variable. SCIPvarGetObj() would return 0 in these cases.
var | variable |
Definition at line 1245 of file cons_indicator.c.
References consdataEnsureAddLinConsSize(), NULL, SCIP_VARSTATUS_AGGREGATED, SCIPvarGetAggrScalar(), SCIPvarGetAggrVar(), SCIPvarGetNegatedVar(), SCIPvarGetObj(), SCIPvarGetStatus(), SCIPvarIsBinary(), and SCIPvarIsNegated().
Referenced by enforceCuts(), extendToCover(), presolRoundIndicator(), propIndicator(), SCIP_DECL_CONSINITSOL(), SCIP_DECL_PARAMCHGD(), SCIPmakeIndicatorFeasible(), and separateIISRounding().
|
static |
ensures that the addlincons array can store at least num entries
scip | SCIP data structure |
conshdlr | constraint handler |
num | minimum number of entries to store |
Definition at line 1266 of file cons_indicator.c.
References CONSHDLR_NAME, initAlternativeLP(), NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPreallocBlockMemoryArray.
Referenced by SCIPaddLinearConsIndicator(), and varGetObjDelta().
|
static |
initialize alternative LP
The alternative system is organized as follows:
scip | SCIP pointer |
conshdlr | constraint handler |
Definition at line 1306 of file cons_indicator.c.
References checkLPBoundsClean(), CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_CALL_PARAM, SCIP_LPPAR_FASTMIP, SCIP_LPPAR_FROMSCRATCH, SCIP_LPPAR_PRESOLVING, SCIP_LPPAR_SCALING, SCIP_OBJSEN_MINIMIZE, SCIP_OKAY, SCIP_Real, SCIPblkmem(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetMessagehdlr(), SCIPgetNVars(), SCIPhashmapCreate(), SCIPlpiAddRows(), SCIPlpiCreate(), SCIPlpiSetIntpar(), and TRUE.
Referenced by addAltLPColumn(), and consdataEnsureAddLinConsSize().
|
static |
check whether the bounds in given (alternative) LP are set correctly (for debugging)
scip | SCIP pointer |
lp | LP for which bounds should be checked |
nconss | number of constraints |
conss | constraints |
Definition at line 1356 of file cons_indicator.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPABORT, SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, SCIPisFeasZero(), SCIPlpiGetBounds(), SCIPlpiGetNCols(), SCIPlpiIsInfinity(), setAltLPObj(), and TRUE.
Referenced by enforceCuts(), initAlternativeLP(), SCIP_DECL_CONSCHECK(), and separateIISRounding().
|
static |
set the alternative system objective function
We assume that the objective function coefficients of the variables other than the binary indicators are always 0 and hence do not have to be changed.
We already use the tranformation \(y' = 1 - y\).
scip | SCIP pointer |
lp | alternative LP |
sol | solution to be dealt with |
nconss | number of constraints |
conss | indicator constraints |
Definition at line 1434 of file cons_indicator.c.
References NULL, OBJEPSILON, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, SCIPgetSolVal(), SCIPisFeasEQ(), SCIPlpiChgObj(), and setAltLPObjZero().
Referenced by checkLPBoundsClean(), and separateIISRounding().
|
static |
set the alternative system objective function to some small value
scip | SCIP pointer |
lp | alternative LP |
nconss | number of constraints |
conss | indicator constraints |
Definition at line 1487 of file cons_indicator.c.
References fixAltLPVariables(), NULL, OBJEPSILON, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, and SCIPlpiChgObj().
Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), and setAltLPObj().
|
static |
fix variable given by S to 0
scip | SCIP pointer |
lp | alternative LP |
nconss | number of constraints |
conss | indicator constraints |
S | bitset of variables |
Definition at line 1535 of file cons_indicator.c.
References fixAltLPVariable(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, and SCIPlpiChgBounds().
Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), separateIISRounding(), and setAltLPObjZero().
|
static |
fix variable ind to 0
lp | alternative LP |
ind | variable that should be fixed to 0 |
Definition at line 1594 of file cons_indicator.c.
References SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPlpiChgBounds(), and unfixAltLPVariable().
Referenced by deleteAltLPConstraint(), extendToCover(), fixAltLPVariables(), and SCIP_DECL_CONSDISABLE().
|
static |
unfix variable ind to 0
lp | alternative LP |
ind | variable that should be fixed to 0 |
Definition at line 1611 of file cons_indicator.c.
References SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPlpiChgBounds(), SCIPlpiInfinity(), and unfixAltLPVariables().
Referenced by fixAltLPVariable(), and SCIP_DECL_CONSENABLE().
|
static |
unfix variable given by S to 0
scip | SCIP pointer |
lp | alternative LP |
nconss | number of constraints |
conss | indicator constraints |
S | bitset of variables |
Definition at line 1627 of file cons_indicator.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, SCIPlpiChgBounds(), SCIPlpiInfinity(), and updateFirstRow().
Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), separateIISRounding(), and unfixAltLPVariable().
|
static |
update bounds in first row to the current ones
scip | SCIP pointer |
conshdlrdata | constraint handler |
Definition at line 1686 of file cons_indicator.c.
References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPdebugMsg, SCIPgetNVars(), SCIPgetVars(), SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPisEQ(), SCIPlpiChgCoef(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and updateFirstRowGlobal().
Referenced by separateIISRounding(), and unfixAltLPVariables().
|
static |
update bounds in first row to the global bounds
scip | SCIP pointer |
conshdlrdata | constraint handler |
Definition at line 1750 of file cons_indicator.c.
References checkIISlocal(), NULL, SCIP_CALL, SCIP_OKAY, SCIPdebugMsg, SCIPgetNVars(), SCIPgetVars(), SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPlpiChgCoef(), SCIPvarGetLbGlobal(), and SCIPvarGetUbGlobal().
Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), and updateFirstRow().
|
static |
check whether IIS defined by vector corresponds to a local cut
scip | SCIP pointer |
conshdlrdata | constraint handler |
vector | solution to alternative LP defining IIS |
isLocal | whether the IIS uses local bounds different from the global ones |
Definition at line 1811 of file cons_indicator.c.
References FALSE, NULL, scaleFirstRow(), SCIP_CALL, SCIP_OKAY, SCIPgetNVars(), SCIPgetVars(), SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPisEQ(), SCIPisFeasZero(), SCIPlpiGetNCols(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and TRUE.
Referenced by extendToCover(), and updateFirstRowGlobal().
|
static |
compute scaling for first row
If the coefficients in the first row are large, a right hand side of -1 might not be adequate. Here, we replace the right hand side by the sum of the coefficients divided by the number of nonzeros.
scip | SCIP pointer |
conshdlrdata | constraint handler |
Definition at line 1900 of file cons_indicator.c.
References addAltLPColumn(), NULL, REALABS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPlpiChgSides(), SCIPlpiGetNCols(), SCIPlpiGetRows(), and TRUE.
Referenced by checkIISlocal(), enforceCuts(), SCIP_DECL_CONSCHECK(), and separateIISRounding().
|
static |
add column to alternative LP
See the description at the top of the file for more information.
scip | SCIP pointer |
conshdlr | constraint handler |
conshdlrdata | data of constraint handler |
slackvar | slack variable or NULL |
nvars | number of variables in column |
vars | variables for column |
vals | values for column |
rhscoef | coefficient for first row |
objcoef | objective in alternative LP |
sign | sign (+1,-1) for column |
colfree | whether column should be free, e.g., for equations |
colindex | index of new column (return value) |
Definition at line 1953 of file cons_indicator.c.
References addAltLPConstraint(), FALSE, initAlternativeLP(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPdebugMsg, SCIPfreeBufferArray, SCIPhashmapExists(), SCIPhashmapGetImage(), SCIPhashmapInsert(), SCIPisEQ(), SCIPisFeasZero(), SCIPisInfinity(), SCIPisZero(), SCIPlpiAddCols(), SCIPlpiAddRows(), SCIPlpiGetNCols(), SCIPlpiGetNRows(), SCIPlpiInfinity(), SCIPlpiWriteLP(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), sign(), and TRUE.
Referenced by addAltLPConstraint(), addAltLPRow(), addObjcut(), and scaleFirstRow().
|
static |
add column corresponding to constraint to alternative LP
See the description at the top of the file for more information.
scip | SCIP pointer |
conshdlr | constraint handler |
lincons | linear constraint |
slackvar | slack variable or NULL |
objcoef | objective coefficient |
colindex | index of new column |
Definition at line 2223 of file cons_indicator.c.
References addAltLPColumn(), addAltLPRow(), CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_MULTAGGR, SCIPallocBufferArray, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsActive(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetLhsLinear(), SCIPgetNVarsLinear(), SCIPgetProbvarSum(), SCIPgetRhsLinear(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPinfinity(), SCIPisEQ(), SCIPisInfinity(), SCIPisZero(), SCIPvarGetStatus(), and TRUE.
Referenced by addAltLPColumn(), consdataCreate(), and SCIP_DECL_CONSINITSOL().
|
static |
add column corresponding to row to alternative LP
See the description at the top of the file for more information.
scip | SCIP pointer |
conshdlr | constraint handler |
row | row to add |
objcoef | objective coefficient |
colindex | index of new column |
Definition at line 2324 of file cons_indicator.c.
References addAltLPColumn(), addObjcut(), CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcolGetVar(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPfreeBufferArray, SCIPisEQ(), SCIPisInfinity(), SCIProwGetCols(), SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetNNonz(), SCIProwGetRhs(), SCIProwGetVals(), SCIProwIsLocal(), and TRUE.
Referenced by addAltLPConstraint(), and SCIPaddRowIndicator().
|
static |
try to add objective cut as column to alternative LP
scip | SCIP pointer |
conshdlr | constraint handler |
Definition at line 2397 of file cons_indicator.c.
References addAltLPColumn(), CONSHDLR_NAME, deleteAltLPConstraint(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetVarsData(), SCIPisInfinity(), SCIPisZero(), and SCIPvarGetObj().
Referenced by addAltLPRow(), and updateObjUpperbound().
|
static |
delete column corresponding to constraint in alternative LP
We currently just fix the corresponding variable to 0.
scip | SCIP pointer |
conshdlr | constraint handler |
cons | indicator constraint |
Definition at line 2467 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, fixAltLPVariable(), NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, and updateObjUpperbound().
Referenced by addObjcut(), and SCIP_DECL_CONSDELETE().
|
static |
update upper bound in alternative LP
scip | SCIP pointer |
conshdlr | constraint handler |
conshdlrdata | constraint handler data |
Definition at line 2506 of file cons_indicator.c.
References addObjcut(), checkAltLPInfeasible(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcutoffbounddelta(), SCIPdebugMsg, SCIPfeasCeil(), SCIPgetUpperbound(), SCIPisEQ(), SCIPisInfinity(), SCIPisLT(), SCIPisObjIntegral(), SCIPlpiChgCoef(), SCIPlpiGetCoef(), and SCIPlpiWriteLP().
Referenced by deleteAltLPConstraint(), enforceCuts(), and separateIISRounding().
|
static |
check whether the given LP is infeasible
If primal is false we assume that the problem is dual feasible, e.g., the problem was only changed by fixing bounds!
This is the workhorse for all methods that have to solve the alternative LP. We try in several ways to recover from possible stability problems.
scip | SCIP pointer |
lp | LP |
maxcondition | maximal allowed condition of LP solution basis matrix |
primal | whether we are using the primal or dual simplex |
infeasible | output: whether the LP is infeasible |
error | output: whether an error occurred |
Definition at line 2582 of file cons_indicator.c.
References extendToCover(), FALSE, NULL, SCIP_CALL, SCIP_CALL_PARAM, SCIP_INVALID, SCIP_LPERROR, SCIP_LPPAR_FROMSCRATCH, SCIP_LPPAR_PRESOLVING, SCIP_LPPAR_SCALING, SCIP_LPSOLQUALITY_ESTIMCONDITION, SCIP_OKAY, SCIP_Real, SCIPdebugMsg, SCIPlpiExistsPrimalRay(), SCIPlpiGetInternalStatus(), SCIPlpiGetRealSolQuality(), SCIPlpiIsOptimal(), SCIPlpiIsPrimalInfeasible(), SCIPlpiIsPrimalUnbounded(), SCIPlpiIsStable(), SCIPlpiSetIntpar(), SCIPlpiSolveDual(), SCIPlpiSolvePrimal(), SCIPwarningMessage(), and TRUE.
Referenced by extendToCover(), SCIP_DECL_CONSCHECK(), and updateObjUpperbound().
|
static |
tries to extend a given set of variables to a cover
At each step we include a variable which covers a new IIS. The corresponding IIS inequalities are added to the LP, if this not already happened.
xVal_
should contain the current LP solution.scip | SCIP pointer |
conshdlr | constraint handler |
conshdlrdata | constraint handler data |
lp | LP |
sol | solution to be separated |
removable | whether cuts should be removable |
genlogicor | should logicor constraints be generated? |
nconss | number of constraints |
conss | indicator constraints |
S | bitset of variables |
size | size of S |
value | objective value of S |
error | output: whether an error occurred |
cutoff | whether we detected a cutoff by an infeasible inequality |
nGen | number of generated cuts |
Definition at line 2731 of file cons_indicator.c.
References checkAltLPInfeasible(), checkIISlocal(), consdataCreate(), FALSE, fixAltLPVariable(), NULL, SCIP_Bool, SCIP_CALL, SCIP_CALL_PARAM, SCIP_LPPAR_FROMSCRATCH, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_PLUGINNOTFOUND, SCIP_Real, SCIPABORT, SCIPaddCons(), SCIPaddCut(), SCIPaddPoolCut(), SCIPaddVarToRow(), SCIPallocBufferArray, SCIPcacheRowExtensions(), SCIPconsGetData(), SCIPcreateConsLogicor(), SCIPcreateEmptyRowCons(), SCIPdebugMsg, SCIPerrorMessage, SCIPfindHeur(), SCIPflushRowExtensions(), SCIPfreeBufferArray, SCIPgetNBinVars(), SCIPgetNegatedVar(), SCIPgetNIntVars(), SCIPgetRowSolFeasibility(), SCIPgetSolVal(), SCIPheurPassIndicator(), SCIPinfinity(), SCIPinfoMessage(), SCIPisEfficacious(), SCIPisFeasNegative(), SCIPisFeasZero(), SCIPlpiGetNCols(), SCIPlpiGetSol(), SCIPlpiSetIntpar(), SCIPprintCons(), SCIPprintRow(), SCIPreleaseCons(), SCIPreleaseRow(), SCIPsnprintf(), sqrt(), TRUE, and varGetObjDelta().
Referenced by checkAltLPInfeasible(), enforceCuts(), and separateIISRounding().
|
static |
creates and initializes consdata
scip | SCIP data structure |
conshdlr | constraint handler |
conshdlrdata | constraint handler data |
consname | name of constraint (or NULL) |
consdata | pointer to linear constraint data |
eventhdlrbound | event handler for bound change events |
eventhdlrrestart | event handler for handling restarts |
binvar | binary variable (or NULL) |
slackvar | slack variable |
lincons | linear constraint (or NULL) |
linconsactive | whether the linear constraint is active |
Definition at line 3043 of file cons_indicator.c.
References addAltLPConstraint(), createVarUbs(), FALSE, NULL, SCIP_CALL, SCIP_ERROR, SCIP_EVENTTYPE_BOUNDCHANGED, SCIP_EVENTTYPE_GBDCHANGED, SCIP_OKAY, SCIP_STAGE_INITSOLVE, SCIP_VARTYPE_BINARY, SCIPallocBlockMemory, SCIPcaptureCons(), SCIPcaptureVar(), SCIPcatchVarEvent(), SCIPdebugMsg, SCIPerrorMessage, SCIPgetStage(), SCIPgetTransformedVar(), SCIPinfoMessage(), SCIPisFeasPositive(), SCIPisTransformed(), SCIPprintCons(), SCIPvarGetLbLocal(), SCIPvarGetName(), and SCIPvarGetType().
Referenced by extendToCover(), SCIP_DECL_CONSTRANS(), SCIPcreateConsIndicator(), and SCIPcreateConsIndicatorLinCons().
|
static |
create variable upper bounds for constraints
scip | SCIP pointer |
conshdlrdata | constraint handler data |
conss | constraints |
nconss | number of constraints |
ngen | number of successful operations |
Definition at line 3161 of file cons_indicator.c.
References FALSE, NULL, presolRoundIndicator(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddCons(), SCIPconsAddUpgradeLocks(), SCIPconsGetData(), SCIPconsGetName(), SCIPconsGetNUpgradeLocks(), SCIPconsIsActive(), SCIPconsIsModifiable(), SCIPcreateConsVarbound(), SCIPdebugMsg, SCIPdelCons(), SCIPinfinity(), SCIPisNegative(), SCIPreleaseCons(), SCIPsnprintf(), SCIPvarGetUbGlobal(), and TRUE.
Referenced by consdataCreate(), and SCIP_DECL_CONSPRESOL().
|
static |
perform one presolving round
scip | SCIP pointer |
conshdlrdata | constraint handler data |
cons | constraint |
consdata | constraint data |
dualreductions | should dual reductions be performed? |
cutoff | whether a cutoff happened |
success | whether we performed a successful reduction |
ndelconss | number of deleted constraints |
nfixedvars | number of fixed variables |
Definition at line 3241 of file cons_indicator.c.
References bound, FALSE, NULL, propIndicator(), SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_EVENTTYPE_BOUNDCHANGED, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_AGGREGATED, SCIP_VARSTATUS_NEGATED, SCIPaddVarLocks(), SCIPcaptureVar(), SCIPcatchVarEvent(), SCIPconsAddUpgradeLocks(), SCIPconsGetName(), SCIPconsGetNUpgradeLocks(), SCIPconsIsActive(), SCIPconsIsModifiable(), SCIPdebugMsg, SCIPdelCons(), SCIPdropVarEvent(), SCIPfixVar(), SCIPisEQ(), SCIPisFeasPositive(), SCIPisFeasZero(), SCIPisGE(), SCIPreleaseVar(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetNegatedVar(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), SCIPvarGetProbvarBinary(), SCIPvarGetProbvarBound(), SCIPvarGetStatus(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SCIPvarIsNegated(), TRUE, and varGetObjDelta().
Referenced by createVarUbs(), and SCIP_DECL_CONSPRESOL().
|
static |
propagate indicator constraint
scip | SCIP pointer |
cons | constraint |
consdata | constraint data |
dualreductions | should dual reductions be performed? |
addopposite | add opposite inequalities if binary var = 0? |
cutoff | whether a cutoff happened |
nGen | number of domain changes |
Definition at line 3562 of file cons_indicator.c.
References enforceCuts(), FALSE, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIP_STAGE_SOLVING, SCIP_VARSTATUS_MULTAGGR, SCIPaddConflictBinvar(), SCIPaddConflictLb(), SCIPaddCons(), SCIPallocBufferArray, SCIPanalyzeConflictCons(), SCIPconsAddUpgradeLocks(), SCIPconsGetName(), SCIPconsGetNUpgradeLocks(), SCIPconsIsActive(), SCIPconsIsModifiable(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPdebugPrintCons, SCIPdelConsLocal(), SCIPfreeBufferArray, SCIPgetDepth(), SCIPgetNVarsLinear(), SCIPgetRhsLinear(), SCIPgetStage(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPincConsAge(), SCIPinferVarLbCons(), SCIPinferVarUbCons(), SCIPinfinity(), SCIPinitConflictAnalysis(), SCIPinProbing(), SCIPinRepropagation(), SCIPisConflictAnalysisApplicable(), SCIPisEQ(), SCIPisFeasGE(), SCIPisFeasPositive(), SCIPisFeasZero(), SCIPisInfinity(), SCIPisIntegral(), SCIPisPositive(), SCIPisZero(), SCIPreleaseCons(), SCIPresetConsAge(), SCIPsnprintf(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), TRUE, and varGetObjDelta().
Referenced by enforceIndicators(), presolRoundIndicator(), and SCIP_DECL_CONSPROP().
|
static |
enforcement method that produces cuts if possible
This is a variant of the enforcement method that generates cuts/constraints via the alternative LP, if possible.
scip | SCIP pointer |
conshdlr | constraint handler |
nconss | number of constraints |
conss | indicator constraints |
sol | solution to be enforced |
genlogicor | whether logicor constraint should be generated |
cutoff | whether we detected a cutoff by an infeasible inequality |
nGen | number of cuts generated |
Definition at line 3854 of file cons_indicator.c.
References checkLPBoundsClean(), enforceIndicators(), extendToCover(), FALSE, fixAltLPVariables(), NULL, scaleFirstRow(), SCIP_Bool, SCIP_CALL, SCIP_LPERROR, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetSolVal(), SCIPisFeasIntegral(), SCIPisFeasZero(), setAltLPObjZero(), TRUE, unfixAltLPVariables(), updateFirstRowGlobal(), updateObjUpperbound(), and varGetObjDelta().
Referenced by enforceIndicators(), and propIndicator().
|
static |
enforcement method
We check whether the current solution is feasible, i.e., if binvar = 1 implies that slackvar = 0. If not, we branch as follows:
In one branch we fix binvar = 1 and slackvar = 0. In the other branch we fix binvar = 0 and leave slackvar unchanged.
scip | SCIP pointer |
conshdlr | constraint handler |
nconss | number of constraints |
conss | indicator constraints |
sol | solution to be enforced (NULL for LP solution) |
genlogicor | whether logicor constraint should be generated |
result | result |
Definition at line 3964 of file cons_indicator.c.
References branchCons(), enforceCuts(), FALSE, NULL, propIndicator(), SCIP_Bool, SCIP_BRANCHED, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIP_VARSTATUS_MULTAGGR, SCIPallowDualReds(), SCIPcalcChildEstimate(), SCIPchgVarLbNode(), SCIPchgVarUbNode(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPcreateChild(), SCIPdebugMsg, SCIPgetSolVal(), SCIPinfoMessage(), SCIPisFeasNegative(), SCIPisFeasZero(), SCIPprintCons(), SCIPresetConsAge(), SCIPvarGetLbLocal(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), SCIPwriteTransProblem(), separateIISRounding(), and TRUE.
Referenced by enforceCuts(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().
|
static |
separate IIS-cuts via rounding
scip | SCIP pointer |
conshdlr | constraint handler |
sol | solution to be separated |
nconss | number of constraints |
conss | indicator constraints |
maxsepacuts | maximal number of cuts to be generated |
cutoff | whether we detected a cutoff by an infeasible inequality |
nGen | number of domain changes |
Definition at line 4153 of file cons_indicator.c.
References checkLPBoundsClean(), extendToCover(), FALSE, fixAltLPVariables(), NULL, scaleFirstRow(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPdebug, SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetVarSol(), SCIPhashmapExists(), SCIPisFeasEQ(), SCIPisFeasLT(), SCIPisFeasZero(), SCIPvarGetNegatedVar(), separatePerspective(), setAltLPObj(), TRUE, unfixAltLPVariables(), updateFirstRow(), updateObjUpperbound(), and varGetObjDelta().
Referenced by enforceIndicators(), and separateIndicators().
|
static |
separate cuts based on perspective formulation
Hijazi, Bonami, and Ouorou (2014) introduced the following cuts: We consider an indicator constraint
\[ y = 1 \rightarrow \alpha^T x \leq \beta \]
and assume finite bounds \(\ell \leq x \leq u\). Then for \(I \subseteq \{1, \dots, n\}\) define
\[ \Sigma(I,x,y) = \sum_{i \notin I} \alpha_i x_i + y \Big(\sum_{i \in I, \alpha_i < 0} \alpha_i u_i + \sum_{i \in I, \alpha_i > 0} \alpha_i \ell_i + \sum_{i \notin I, \alpha_i < 0} \alpha_i \ell_i + \sum_{i \notin I, \alpha_i > 0} \alpha_i u_i - \beta\Big). \]
Then the cuts
\[ \Sigma(I,x,y) \leq \sum_{i \notin I, \alpha_i < 0} \alpha_i \ell_i + \sum_{i \notin I, \alpha_i > 0} \alpha_i u_i \]
are valid for the disjunction
\[ \{y = 0,\; \ell \leq x \leq u\} \cup \{y = 1,\; \ell \leq x \leq u,\; \alpha^T x \leq \beta\}. \]
These cuts can easily be separated for a given point \((x^*, y^*)\) by checking for each \(i \in \{1, \dots, n\}\) whether
\[ y^*(\alpha_i\, u_i\, [\alpha_i < 0] + \alpha_i\, \ell_i\, [\alpha_i > 0]) > \alpha_i x_i^* + y^* )\alpha_i \ell_i [\alpha_i < 0] + \alpha_i u_i [\alpha_i > 0]), \]
where \([C] = 1\) if condition \(C\) is satisfied, otherwise it is 0. If the above inequality holds, \(i\) is included in \(I\), otherwise not.
scip | SCIP pointer |
conshdlr | constraint handler |
sol | solution to be separated |
nconss | number of constraints |
conss | indicator constraints |
maxsepacuts | maximal number of cuts to be generated |
nGen | number of generated cuts |
Definition at line 4364 of file cons_indicator.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddCut(), SCIPaddVarsToRow(), SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetData(), SCIPconsIsActive(), SCIPcreateEmptyRowCons(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPgetLhsLinear(), SCIPgetNVars(), SCIPgetNVarsLinear(), SCIPgetRhsLinear(), SCIPgetSolVal(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPinfinity(), SCIPisEfficacious(), SCIPisGT(), SCIPisInfinity(), SCIPisNegative(), SCIPisPositive(), SCIPprintRow(), SCIPreleaseRow(), SCIPresetConsAge(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), separateIndicators(), and TRUE.
Referenced by separateIISRounding(), and separateIndicators().
|
static |
separation method
We first check whether coupling inequalities can be separated (if required). If not enough of these could be generated, we check whether IIS inequalities can be separated.
scip | SCIP pointer |
conshdlr | constraint handler |
nconss | number of constraints |
nusefulconss | number of useful constraints |
conss | indicator constraints |
sol | solution to be separated |
result | result |
Definition at line 4565 of file cons_indicator.c.
References FALSE, initConshdlrData(), NULL, SCIP_Bool, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_Real, SCIP_SEPARATED, SCIPaddCut(), SCIPaddVarToRow(), SCIPcacheRowExtensions(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPcreateEmptyRowCons(), SCIPdebugMsg, SCIPflushRowExtensions(), SCIPgetDepth(), SCIPgetSolVal(), SCIPinfinity(), SCIPisEfficacious(), SCIPisFeasNegative(), SCIPprintRow(), SCIPreleaseRow(), SCIPresetConsAge(), SCIPsnprintf(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SEPAALTTHRESHOLD, separateIISRounding(), separatePerspective(), and TRUE.
Referenced by SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), and separatePerspective().
|
static |
initializes the constraint handler data
scip | SCIP pointer |
conshdlrdata | constraint handler data |
Definition at line 4734 of file cons_indicator.c.
References FALSE, MAXROUNDINGROUNDS, NULL, SCIP_DECL_LINCONSUPGD(), SCIPinfinity(), and TRUE.
Referenced by SCIP_DECL_CONSINIT(), SCIPincludeConshdlrIndicator(), and separateIndicators().
|
static |
tries to upgrade a linear constraint into an indicator constraint
For some linear constraint of the form \(a^T x + \alpha\, y \geq \beta\) with \(y \in \{0,1\}\), we can upgrade it to an indicator constraint if for the residual value \(a^T x \geq \gamma\), we have \(\alpha + \gamma \geq \beta\): in this case, the constraint is always satisfied if \(y = 1\).
Similarly, for a linear constraint in the form \(a^T x + \alpha\, y \leq \beta\) with \(y \in \{0,1\}\), we can upgrade it to an indicator constraint if for the residual value \(a^T x \leq \gamma\), we have \(\alpha + \gamma \leq \beta\).
Definition at line 4785 of file cons_indicator.c.
References FALSE, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsIndicator(), SCIPdebugMsg, SCIPfindConshdlr(), SCIPfreeBufferArray, SCIPgetLinearConsIndicator(), SCIPgetNegatedVar(), SCIPinfinity(), SCIPinfoMessage(), SCIPisEQ(), SCIPisGE(), SCIPisInfinity(), SCIPisLE(), SCIPisZero(), SCIPprintCons(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), and TRUE.
Referenced by initConshdlrData().
|
static |
copy method for constraint handler plugins (called when SCIP copies plugins)
Definition at line 5011 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSINIT(), SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrIndicator(), and TRUE.
Referenced by SCIP_DECL_LINCONSUPGD().
|
static |
initialization method of constraint handler (called after problem was transformed)
Definition at line 5029 of file cons_indicator.c.
References CONSHDLR_NAME, initConshdlrData(), NULL, SCIP_DECL_CONSEXIT(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPfindHeur().
Referenced by SCIP_DECL_CONSHDLRCOPY().
|
static |
deinitialization method of constraint handler (called before transformed problem is freed)
Definition at line 5054 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_DECL_CONSFREE(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPfreeBlockMemoryArrayNull, and SCIPhashmapFree().
Referenced by SCIP_DECL_CONSINIT().
|
static |
destructor of constraint handler to free constraint handler data (called when SCIP is exiting)
Definition at line 5078 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_DECL_CONSINITSOL(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPfreeBlockMemory, and SCIPfreeBlockMemoryArrayNull.
Referenced by SCIP_DECL_CONSEXIT().
|
static |
solving process initialization method of constraint handler (called when branch and bound process is about to begin)
Definition at line 5111 of file cons_indicator.c.
References addAltLPConstraint(), SCIP_QuadElement::coef, CONSHDLR_NAME, FALSE, SCIP_QuadElement::idx1, SCIP_QuadElement::idx2, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSEXITSOL(), SCIP_ERROR, SCIP_EVENTTYPE_BESTSOLFOUND, SCIP_EXPRCURV_UNKNOWN, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIP_STATUS_INFEASIBLE, SCIP_STATUS_INFORUNBD, SCIP_STATUS_OPTIMAL, SCIP_STATUS_UNBOUNDED, SCIP_VERBLEVEL_MINIMAL, SCIPaddNlRow(), SCIPallocBufferArray, SCIPblkmem(), SCIPcatchEvent(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetNActiveConss(), SCIPconshdlrGetName(), SCIPconshdlrGetSepaFreq(), SCIPconsIsActive(), SCIPconsIsChecked(), SCIPconsIsTransformed(), SCIPcreateNlRow(), SCIPdebugMsg, SCIPdisableCons(), SCIPerrorMessage, SCIPfindConshdlr(), SCIPfreeBufferArray, SCIPgetCharParam(), SCIPgetConss(), SCIPgetNConss(), SCIPgetNVars(), SCIPgetStatus(), SCIPgetTransformedCons(), SCIPgetVars(), SCIPhashmapCreate(), SCIPhashmapExists(), SCIPhashmapInsert(), SCIPinfoMessage(), SCIPisGE(), SCIPisIntegral(), SCIPisNLPConstructed(), SCIPisZero(), SCIPprintCons(), SCIPreleaseNlRow(), SCIPsetIntParam(), SCIPvarGetNegatedVar(), SCIPvarGetObj(), SCIPvarGetProbindex(), SCIPvarIsNegated(), SCIPverbMessage(), TRUE, and varGetObjDelta().
Referenced by SCIP_DECL_CONSFREE().
|
static |
solving process deinitialization method of constraint handler (called before branch and bound process data is freed)
Definition at line 5427 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSDELETE(), SCIP_OKAY, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPgetMessagehdlr(), SCIPhashmapFree(), SCIPhashmapPrintStatistics(), SCIPinfoMessage(), and SCIPlpiFree().
Referenced by SCIP_DECL_CONSINITSOL().
|
static |
frees specific constraint data
Definition at line 5499 of file cons_indicator.c.
References CONSHDLR_NAME, deleteAltLPConstraint(), NULL, SCIP_CALL, SCIP_DECL_CONSTRANS(), SCIP_EVENTTYPE_BOUNDCHANGED, SCIP_EVENTTYPE_GBDCHANGED, SCIP_OKAY, SCIP_STAGE_SOLVED, SCIP_STAGE_TRANSFORMING, SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsTransformed(), SCIPdebugMsg, SCIPdropVarEvent(), SCIPfreeBlockMemory, SCIPgetStage(), SCIPreleaseCons(), and SCIPreleaseVar().
Referenced by SCIP_DECL_CONSEXITSOL().
|
static |
transforms constraint data into data belonging to the transformed problem
Definition at line 5563 of file cons_indicator.c.
References consdataCreate(), CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSINITPRE(), SCIP_INVALIDDATA, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPblkmem(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateCons(), SCIPdebugMsg, SCIPerrorMessage, SCIPgetNOrigVars(), SCIPhashmapCreate(), SCIPhashmapExists(), SCIPhashmapInsert(), and SCIPsnprintf().
Referenced by SCIP_DECL_CONSDELETE().
|
static |
presolving initialization method of constraint handler (called when presolving is about to begin)
Definition at line 5643 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSPRESOL(), SCIP_OKAY, SCIP_STATUS_UNKNOWN, SCIPcaptureCons(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsTransformed(), SCIPdebugMsg, SCIPgetStatus(), SCIPgetTransformedCons(), and SCIPreleaseCons().
Referenced by SCIP_DECL_CONSTRANS().
|
static |
presolving method of constraint handler
For an indicator constraint with binary variable \(y\) and slack variable \(s\) the coupling inequality \(s \le M (1-y)\) (equivalently: \(s + M y \le M\)) is inserted, where \(M\) is an upper bound on the value of \(s\). If \(M\) is too large the inequality is not inserted. Depending on the parameter addcouplingcons we add a variable upper bound or a row (in consInitlpIndicator()).
Definition at line 5709 of file cons_indicator.c.
References CONSHDLR_NAME, createVarUbs(), FALSE, NULL, presolRoundIndicator(), SCIP_Bool, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSINITLP(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_Real, SCIP_SUCCESS, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_IMPLINT, SCIPaddVarImplication(), SCIPallowDualReds(), SCIPchgVarType(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsModifiable(), SCIPconsIsTransformed(), SCIPdebug, SCIPdebugMsg, SCIPgetNVarsLinear(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPisInfinity(), SCIPisIntegral(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), and TRUE.
Referenced by SCIP_DECL_CONSINITPRE().
|
static |
LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved)
For an indicator constraint with binary variable \(y\) and slack variable \(s\) the coupling inequality \(s \le M (1-y)\) (equivalently: \(s + M y \le M\)) is inserted, where \(M\) is an upper bound on the value of \(s\). If \(M\) is too large the inequality is not inserted.
Definition at line 5891 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSSEPALP(), SCIP_OKAY, SCIP_Real, SCIPaddCons(), SCIPaddCut(), SCIPaddVarToRow(), SCIPcacheRowExtensions(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPcreateConsVarbound(), SCIPcreateEmptyRowCons(), SCIPdebugMsg, SCIPflushRowExtensions(), SCIPinfinity(), SCIPisNegative(), SCIPprintRow(), SCIPreleaseCons(), SCIPreleaseRow(), SCIPsnprintf(), SCIPvarGetUbGlobal(), and TRUE.
Referenced by SCIP_DECL_CONSPRESOL().
|
static |
separation method of constraint handler for LP solutions
Definition at line 5987 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSSEPASOL(), SCIP_OKAY, SCIPconshdlrGetName(), and separateIndicators().
Referenced by SCIP_DECL_CONSINITLP().
|
static |
separation method of constraint handler for arbitrary primal solutions
Definition at line 6004 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSENFOLP(), SCIP_OKAY, SCIPconshdlrGetName(), and separateIndicators().
Referenced by SCIP_DECL_CONSSEPALP().
|
static |
constraint enforcing method of constraint handler for LP solutions
Definition at line 6021 of file cons_indicator.c.
References CONSHDLR_NAME, enforceIndicators(), NULL, SCIP_CALL, SCIP_DECL_CONSENFORELAX(), SCIP_FEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), and SCIPconshdlrGetName().
Referenced by SCIP_DECL_CONSSEPASOL().
|
static |
constraint enforcing method of constraint handler for relaxation solutions
Definition at line 6049 of file cons_indicator.c.
References CONSHDLR_NAME, enforceIndicators(), NULL, SCIP_CALL, SCIP_DECL_CONSENFOPS(), SCIP_FEASIBLE, SCIP_OKAY, SCIPconshdlrGetData(), and SCIPconshdlrGetName().
Referenced by SCIP_DECL_CONSENFOLP().
|
static |
constraint enforcing method of constraint handler for pseudo solutions
Definition at line 6077 of file cons_indicator.c.
References CONSHDLR_NAME, enforceIndicators(), NULL, SCIP_CALL, SCIP_DECL_CONSCHECK(), SCIP_DIDNOTRUN, SCIP_FEASIBLE, SCIP_OKAY, SCIPconshdlrGetName(), and TRUE.
Referenced by SCIP_DECL_CONSENFORELAX().
|
static |
feasibility check method of constraint handler for integral solutions
Definition at line 6105 of file cons_indicator.c.
References checkAltLPInfeasible(), checkLPBoundsClean(), CONSHDLR_NAME, FALSE, fixAltLPVariables(), NULL, scaleFirstRow(), SCIP_Bool, SCIP_CALL, SCIP_CALL_PARAM, SCIP_DECL_CONSPROP(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_LPERROR, SCIP_LPPAR_FROMSCRATCH, SCIP_OKAY, SCIP_STAGE_PROBLEM, SCIP_STAGE_SOLVED, SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPcreateSolCopy(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeSol(), SCIPgetSolVal(), SCIPgetStage(), SCIPheurPassSolTrySol(), SCIPinfoMessage(), SCIPisFeasIntegral(), SCIPisFeasZero(), SCIPlpiSetIntpar(), SCIPmakeIndicatorFeasible(), SCIPprintCons(), SCIPresetConsAge(), SCIPvarGetName(), setAltLPObjZero(), TRUE, unfixAltLPVariables(), and updateFirstRowGlobal().
Referenced by SCIP_DECL_CONSENFOPS().
|
static |
domain propagation method of constraint handler
Definition at line 6299 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, propIndicator(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSRESPROP(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_REDUCEDDOM, SCIPallowDualReds(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, and SCIPisTransformed().
Referenced by SCIP_DECL_CONSCHECK().
|
static |
propagation conflict resolving method of constraint handler
We check which bound changes were the reason for infeasibility. We use that inferinfo is 0 if the binary variable has bounds that fix it to be nonzero (these bounds are the reason). Likewise inferinfo is 1 if the slack variable has bounds that fix it to be nonzero.
Definition at line 6366 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSLOCK(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SUCCESS, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPallowDualReds(), SCIPallowObjProp(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPisFeasZero(), and SCIPisPositive().
Referenced by SCIP_DECL_CONSPROP().
|
static |
variable rounding lock method of constraint handler
The up-rounding of the binary and slack variable may violate the constraint. If the linear constraint is not active, we lock all variables in the depending constraint - otherwise they will be fixed by dual presolving methods.
Definition at line 6422 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_OKAY, SCIP_Real, SCIPaddVarLocks(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetLhsLinear(), SCIPgetNVarsLinear(), SCIPgetRhsLinear(), SCIPgetValsLinear(), SCIPgetVarsLinear(), SCIPisInfinity(), SCIPisPositive(), and SCIPisZero().
Referenced by SCIP_DECL_CONSRESPROP().
|
static |
constraint display method of constraint handler
Definition at line 6497 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_DECL_CONSCOPY(), SCIP_OKAY, SCIP_VARSTATUS_NEGATED, SCIPconsGetData(), SCIPconshdlrGetName(), SCIPinfoMessage(), SCIPvarGetName(), SCIPvarGetNegatedVar(), and SCIPvarGetStatus().
Referenced by SCIP_DECL_CONSLOCK().
|
static |
constraint copying method of constraint handler
Definition at line 6531 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSPARSE(), SCIP_OKAY, SCIP_VERBLEVEL_MINIMAL, SCIPaddCons(), SCIPcaptureCons(), SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPconsIsChecked(), SCIPconsIsDeleted(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPconsIsTransformed(), SCIPcreateConsIndicatorLinCons(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPfindConshdlr(), SCIPgetConsCopy(), SCIPgetTransformedCons(), SCIPgetVarCopy(), SCIPinfinity(), SCIPisTransformed(), SCIPreleaseCons(), SCIPverbMessage(), SCIPwarningMessage(), and TRUE.
Referenced by SCIP_DECL_CONSPRINT().
|
static |
constraint parsing method of constraint handler
Definition at line 6657 of file cons_indicator.c.
References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSENABLE(), SCIP_OKAY, SCIP_VERBLEVEL_MINIMAL, SCIPcreateConsIndicatorLinCons(), SCIPfindCons(), SCIPfindVar(), SCIPgetLhsLinear(), SCIPgetNegatedVar(), SCIPgetRhsLinear(), SCIPisInfinity(), SCIPsnprintf(), SCIPverbMessage(), and TRUE.
Referenced by SCIP_DECL_CONSCOPY().
|
static |
constraint enabling notification method of constraint handler
Definition at line 6754 of file cons_indicator.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSDISABLE(), SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPdebugMsg, and unfixAltLPVariable().
Referenced by SCIP_DECL_CONSPARSE().
|
static |
constraint disabling notification method of constraint handler
Definition at line 6790 of file cons_indicator.c.
References CONSHDLR_NAME, fixAltLPVariable(), NULL, SCIP_CALL, SCIP_DECL_CONSGETVARS(), SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPdebugMsg.
Referenced by SCIP_DECL_CONSENABLE().
|
static |
constraint method of constraint handler which returns the variables (if possible)
Definition at line 6826 of file cons_indicator.c.
References NULL, SCIP_CALL, SCIP_DECL_CONSGETNVARS(), SCIP_INVALIDDATA, SCIP_OKAY, SCIPconsGetData(), SCIPconsIsDeleted(), SCIPgetConsVars(), and TRUE.
Referenced by SCIP_DECL_CONSDISABLE().
|
static |
constraint method of constraint handler which returns the number of variables (if possible)
Definition at line 6873 of file cons_indicator.c.
References NULL, SCIP_CALL, SCIP_DECL_CONSGETDIVEBDCHGS(), SCIP_OKAY, SCIPconsGetData(), SCIPconsIsDeleted(), SCIPgetConsNVars(), and TRUE.
Referenced by SCIP_DECL_CONSGETVARS().
|
static |
constraint handler method to suggest dive bound changes during the generic diving algorithm
Definition at line 6917 of file cons_indicator.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_Bool, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHDIR_UPWARDS, SCIP_CALL, SCIP_DIVETYPE_INTEGRALITY, SCIP_OKAY, SCIP_Real, SCIP_REAL_MIN, SCIPaddDiveBoundChange(), SCIPconshdlrGetConss(), SCIPconshdlrGetName(), SCIPconshdlrGetNConss(), SCIPgetBinaryVarIndicator(), SCIPgetDivesetScore(), SCIPgetSolVal(), SCIPincludeConshdlrIndicator(), SCIPisFeasIntegral(), SCIPisViolatedIndicator(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and TRUE.
Referenced by SCIP_DECL_CONSGETNVARS().