SCIP

Solving Constraint Integer Programs

cons_indicator.c File Reference

Detailed Description

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$$.

Note
The constraint only implements an implication not an equivalence, i.e., it does not ensure that $$y = 1$$ if $$ax \leq b$$ or equivalently if $$s = 0$$ holds.

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.

Separation Methods

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.

Note
In the implementation, we assume that bounds on the original variables $$x$$ cannot be influenced by the indicator constraint. If it should be possible to relax these constraints as well, then these constraints have to be added as indicator constraints.

We separate inequalities by using the so-called alternative polyhedron.

Separation via the 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.$

Separation heuristic

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.

Preprocessing

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:

• (Multi-)Aggregation of variables $$x$$ will remove these variables from the formulation, such that the corresponding column of $$\tilde{A}$$ (row of $$\tilde{A}^T$$) will be zero.
• The rows of $$\tilde{B}^T$$ are not unit vectors, i.e., do not correspond to redundant nonnegativity constraints, only if the corresponding slack variables appear in an aggregation.

Taken together, these two observations yield the conclusion that the new system is roughly as large as the original one.

Note
Because of possible (multi-)aggregation it might happen that the linear constraint corresponding to an indicator constraint becomes redundant and is deleted. From this we cannot conclude that the indicator constraint is redundant as well (i.e. always fulfilled), because the corresponding slack variable is still present and its setting to 0 might influence other (linear) constraints. Thus, we have to rely on the dual presolving of the linear constraints to detect this case: If the linear constraint is really redundant, i.e., is always fulfilled, it is deleted and the slack variable can be fixed to 0. In this case, the indicator constraint can be deleted as well.

Definition in file cons_indicator.c.

#include "blockmemshell/memory.h"
#include "lpi/lpi.h"
#include "lpi/type_lpi.h"
#include "scip/expr_var.h"
#include "scip/expr_product.h"
#include "scip/cons_nonlinear.h"
#include "scip/cons_indicator.h"
#include "scip/cons_linear.h"
#include "scip/cons_logicor.h"
#include "scip/cons_varbound.h"
#include "scip/heur_indicator.h"
#include "scip/heur_trysol.h"
#include "scip/pub_conflict.h"
#include "scip/pub_cons.h"
#include "scip/pub_event.h"
#include "scip/pub_lp.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_paramset.h"
#include "scip/pub_var.h"
#include "scip/scip_branch.h"
#include "scip/scip_conflict.h"
#include "scip/scip_cons.h"
#include "scip/scip_copy.h"
#include "scip/scip_cut.h"
#include "scip/scip_event.h"
#include "scip/scip_general.h"
#include "scip/scip_heur.h"
#include "scip/scip_lp.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_nlp.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_prob.h"
#include "scip/scip_probing.h"
#include "scip/scip_sol.h"
#include "scip/scip_solve.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_tree.h"
#include "scip/scip_var.h"
#include "scip/symmetry_graph.h"
#include "symmetry/struct_symmetry.h"
#include <string.h>

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "indicator"

#define CONSHDLR_DESC   "indicator constraint handler"

#define CONSHDLR_SEPAPRIORITY   10

#define CONSHDLR_ENFOPRIORITY   -100

#define CONSHDLR_CHECKPRIORITY   -6000000

#define CONSHDLR_SEPAFREQ   10

#define CONSHDLR_PROPFREQ   1

#define CONSHDLR_EAGERFREQ   100

#define CONSHDLR_MAXPREROUNDS   -1

#define CONSHDLR_DELAYSEPA   FALSE

#define CONSHDLR_DELAYPROP   FALSE

#define CONSHDLR_NEEDSCONS   TRUE

#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST

#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

#define EVENTHDLR_BOUND_NAME   "indicatorbound"

#define EVENTHDLR_BOUND_DESC   "bound change event handler for indicator constraints"

#define EVENTHDLR_LINCONSBOUND_NAME   "indicatorlinconsbound"

#define EVENTHDLR_LINCONSBOUND_DESC   "bound change event handler for lincons of indicator constraints"

#define EVENTHDLR_RESTART_NAME   "indicatorrestart"

#define EVENTHDLR_RESTART_DESC   "force restart if absolute gap is 1 or enough binary variables have been fixed"

#define CONFLICTHDLR_NAME   "indicatorconflict"

#define CONFLICTHDLR_DESC   "replace slack variables and generate logicor constraints"

#define CONFLICTHDLR_PRIORITY   200000

#define LINCONSUPGD_PRIORITY   +100000

#define DEFAULT_BRANCHINDICATORS   FALSE

#define DEFAULT_GENLOGICOR   FALSE

#define DEFAULT_MAXCOUPLINGVALUE   1e4

#define DEFAULT_SEPACOUPLINGCUTS   TRUE

#define DEFAULT_SEPACOUPLINGLOCAL   FALSE

#define DEFAULT_SEPACOUPLINGVALUE   1e4

#define DEFAULT_SEPAALTERNATIVELP   FALSE

#define DEFAULT_SEPAPERSPECTIVE   FALSE

#define DEFAULT_SEPAPERSPLOCAL   TRUE

#define DEFAULT_MAXSEPANONVIOLATED   3

#define DEFAULT_TRYSOLFROMCOVER   FALSE

#define DEFAULT_USEOTHERCONSS   FALSE

#define DEFAULT_USEOBJECTIVECUT   FALSE

#define DEFAULT_UPDATEBOUNDS   FALSE

#define DEFAULT_MAXCONDITIONALTLP   0.0

#define DEFAULT_MAXSEPACUTS   100

#define DEFAULT_MAXSEPACUTSROOT   2000

#define DEFAULT_REMOVEINDICATORS   FALSE

#define DEFAULT_GENERATEBILINEAR   FALSE

#define DEFAULT_SCALESLACKVAR   FALSE

#define DEFAULT_NOLINCONSCONT   FALSE

#define DEFAULT_TRYSOLUTIONS   TRUE

#define DEFAULT_ENFORCECUTS   FALSE

#define DEFAULT_DUALREDUCTIONS   TRUE

#define DEFAULT_FORCERESTART   FALSE

#define DEFAULT_RESTARTFRAC   0.9

#define OBJEPSILON   0.001

#define SEPAALTTHRESHOLD   10

#define MAXROUNDINGROUNDS   1

#define SCIP_CALL_PARAM(x)

Typedefs

typedef enum SCIP_enfosepatype SCIP_ENFOSEPATYPE

Enumerations

enum  SCIP_enfosepatype {
SCIP_TYPE_ENFOLP = 0,
SCIP_TYPE_ENFOPS = 1,
SCIP_TYPE_ENFORELAX = 2,
SCIP_TYPE_SEPALP = 3,
SCIP_TYPE_SEPARELAX = 4,
SCIP_TYPE_SEPASOL = 5
}

Functions

static SCIP_RETCODE addSymmetryInformation (SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)

static SCIP_DECL_EVENTEXEC (eventExecIndicatorBound)

static SCIP_DECL_EVENTEXEC (eventExecIndicatorLinconsBound)

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_ENFOSEPATYPE enfosepatype, 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 *eventhdlrrestart, SCIP_VAR *binvar, SCIP_Bool activeone, SCIP_Bool lessthanineq, 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_CONSHDLRDATA *conshdlrdata, 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_ENFOSEPATYPE enfosepatype, 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_ENFOSEPATYPE enfosepatype, SCIP_Bool genlogicor, SCIP_RESULT *result)

static SCIP_RETCODE separateIISRounding (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_ENFOSEPATYPE enfosepatype, 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_ENFOSEPATYPE enfosepatype, 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)

static SCIP_DECL_CONSGETPERMSYMGRAPH (consGetPermsymGraphIndicator)

static SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH (consGetSignedPermsymGraphIndicator)

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 SCIPcreateConsIndicatorGeneric (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real rhs, SCIP_Bool activeone, SCIP_Bool lessthanineq, 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 SCIPcreateConsIndicatorGenericLinCons (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_VAR *slackvar, SCIP_Bool activeone, 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 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 SCIPcreateConsIndicatorGenericLinConsPure (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, SCIP_Bool activeone, 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 SCIPcreateConsIndicatorLinConsPure (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *lincons, 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 SCIPaddVarIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)

SCIP_CONSSCIPgetLinearConsIndicator (SCIP_CONS *cons)

SCIP_RETCODE SCIPsetLinearConsIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_CONS *lincons)

SCIP_Bool SCIPgetActiveOnIndicator (SCIP_CONS *cons)

SCIP_VARSCIPgetBinaryVarIndicator (SCIP_CONS *cons)

SCIP_VARSCIPgetBinaryVarIndicatorGeneric (SCIP_CONS *cons)

SCIP_RETCODE SCIPsetBinaryVarIndicator (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *binvar)

SCIP_VARSCIPgetSlackVarIndicator (SCIP_CONS *cons)

SCIP_RETCODE SCIPsetSlackVarUb (SCIP *scip, SCIP_CONS *cons, SCIP_Real ub)

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)

◆ CONSHDLR_DESC

 #define CONSHDLR_DESC   "indicator constraint handler"

Definition at line 252 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_SEPAPRIORITY

 #define CONSHDLR_SEPAPRIORITY   10

priority of the constraint handler for separation

Definition at line 253 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_ENFOPRIORITY

 #define CONSHDLR_ENFOPRIORITY   -100

priority of the constraint handler for constraint enforcing

Definition at line 254 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_CHECKPRIORITY

 #define CONSHDLR_CHECKPRIORITY   -6000000

priority of the constraint handler for checking feasibility

Definition at line 255 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_SEPAFREQ

 #define CONSHDLR_SEPAFREQ   10

frequency for separating cuts; zero means to separate only in the root node

Definition at line 256 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_PROPFREQ

 #define CONSHDLR_PROPFREQ   1

frequency for propagating domains; zero means only preprocessing propagation

Definition at line 257 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_EAGERFREQ

 #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 258 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_MAXPREROUNDS

 #define CONSHDLR_MAXPREROUNDS   -1

maximal number of presolving rounds the constraint handler participates in (-1: no limit)

Definition at line 261 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_DELAYSEPA

 #define CONSHDLR_DELAYSEPA   FALSE

Should separation method be delayed, if other separators found cuts?

Definition at line 262 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_DELAYPROP

 #define CONSHDLR_DELAYPROP   FALSE

Should propagation method be delayed, if other propagators found reductions?

Definition at line 263 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_NEEDSCONS

 #define CONSHDLR_NEEDSCONS   TRUE

Should the constraint handler be skipped, if no constraints are available?

Definition at line 264 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_PRESOLTIMING

 #define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_FAST

Definition at line 266 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONSHDLR_PROP_TIMING

 #define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

Definition at line 267 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_BOUND_NAME

 #define EVENTHDLR_BOUND_NAME   "indicatorbound"

Definition at line 271 of file cons_indicator.c.

Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_BOUND_DESC

 #define EVENTHDLR_BOUND_DESC   "bound change event handler for indicator constraints"

Definition at line 272 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_LINCONSBOUND_NAME

 #define EVENTHDLR_LINCONSBOUND_NAME   "indicatorlinconsbound"

Definition at line 274 of file cons_indicator.c.

Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_LINCONSBOUND_DESC

 #define EVENTHDLR_LINCONSBOUND_DESC   "bound change event handler for lincons of indicator constraints"

Definition at line 275 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_RESTART_NAME

 #define EVENTHDLR_RESTART_NAME   "indicatorrestart"

Definition at line 277 of file cons_indicator.c.

Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrIndicator().

◆ EVENTHDLR_RESTART_DESC

 #define EVENTHDLR_RESTART_DESC   "force restart if absolute gap is 1 or enough binary variables have been fixed"

Definition at line 278 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONFLICTHDLR_NAME

 #define CONFLICTHDLR_NAME   "indicatorconflict"

◆ CONFLICTHDLR_DESC

 #define CONFLICTHDLR_DESC   "replace slack variables and generate logicor constraints"

Definition at line 283 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ CONFLICTHDLR_PRIORITY

 #define CONFLICTHDLR_PRIORITY   200000

Definition at line 284 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ LINCONSUPGD_PRIORITY

 #define LINCONSUPGD_PRIORITY   +100000

priority of the constraint handler for upgrading of linear constraints

Definition at line 287 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_BRANCHINDICATORS

 #define DEFAULT_BRANCHINDICATORS   FALSE

Branch on indicator constraints in enforcing?

Definition at line 290 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_GENLOGICOR

 #define DEFAULT_GENLOGICOR   FALSE

Generate logicor constraints instead of cuts?

Definition at line 291 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

Add coupling constraints or rows if big-M is small enough?

Definition at line 292 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_MAXCOUPLINGVALUE

 #define DEFAULT_MAXCOUPLINGVALUE   1e4

maximum coefficient for binary variable in coupling constraint

Definition at line 293 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

Definition at line 294 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPACOUPLINGCUTS

 #define DEFAULT_SEPACOUPLINGCUTS   TRUE

Should the coupling inequalities be separated dynamically?

Definition at line 295 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPACOUPLINGLOCAL

 #define DEFAULT_SEPACOUPLINGLOCAL   FALSE

Allow to use local bounds in order to separate coupling inequalities?

Definition at line 296 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPACOUPLINGVALUE

 #define DEFAULT_SEPACOUPLINGVALUE   1e4

maximum coefficient for binary variable in separated coupling constraint

Definition at line 297 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPAALTERNATIVELP

 #define DEFAULT_SEPAALTERNATIVELP   FALSE

Separate using the alternative LP?

Definition at line 298 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPAPERSPECTIVE

 #define DEFAULT_SEPAPERSPECTIVE   FALSE

Separate cuts based on perspective formulation?

Definition at line 299 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SEPAPERSPLOCAL

 #define DEFAULT_SEPAPERSPLOCAL   TRUE

Allow to use local bounds in order to separate perspectice cuts?

Definition at line 300 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_MAXSEPANONVIOLATED

 #define DEFAULT_MAXSEPANONVIOLATED   3

maximal number of separated non violated IISs, before separation is stopped

Definition at line 301 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_TRYSOLFROMCOVER

 #define DEFAULT_TRYSOLFROMCOVER   FALSE

Try to construct a feasible solution from a cover?

Definition at line 302 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

Try to upgrade linear constraints to indicator constraints?

Definition at line 303 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_USEOTHERCONSS

 #define DEFAULT_USEOTHERCONSS   FALSE

Collect other constraints to alternative LP?

Definition at line 304 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_USEOBJECTIVECUT

 #define DEFAULT_USEOBJECTIVECUT   FALSE

Use objective cut with current best solution to alternative LP?

Definition at line 305 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_UPDATEBOUNDS

 #define DEFAULT_UPDATEBOUNDS   FALSE

Update bounds of original variables for separation?

Definition at line 306 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_MAXCONDITIONALTLP

 #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 307 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_MAXSEPACUTS

 #define DEFAULT_MAXSEPACUTS   100

maximal number of cuts separated per separation round

Definition at line 308 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_MAXSEPACUTSROOT

 #define DEFAULT_MAXSEPACUTSROOT   2000

maximal number of cuts separated per separation round in the root node

Definition at line 309 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_REMOVEINDICATORS

 #define DEFAULT_REMOVEINDICATORS   FALSE

Remove indicator constraint if corresponding variable bound constraint has been added?

Definition at line 310 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_GENERATEBILINEAR

 #define DEFAULT_GENERATEBILINEAR   FALSE

Do not generate indicator constraint, but a bilinear constraint instead?

Definition at line 311 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_SCALESLACKVAR

 #define DEFAULT_SCALESLACKVAR   FALSE

Scale slack variable coefficient at construction time?

Definition at line 312 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_NOLINCONSCONT

 #define DEFAULT_NOLINCONSCONT   FALSE

Decompose problem (do not generate linear constraint if all variables are continuous)?

Definition at line 313 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_TRYSOLUTIONS

 #define DEFAULT_TRYSOLUTIONS   TRUE

Try to make solutions feasible by setting indicator variables?

Definition at line 314 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_ENFORCECUTS

 #define DEFAULT_ENFORCECUTS   FALSE

In enforcing try to generate cuts (only if sepaalternativelp is true)?

Definition at line 315 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_DUALREDUCTIONS

 #define DEFAULT_DUALREDUCTIONS   TRUE

Should dual reduction steps be performed?

Definition at line 316 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

Add opposite inequality in nodes in which the binary variable has been fixed to 0?

Definition at line 317 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

Try to upgrade bounddisjunction conflicts by replacing slack variables?

Definition at line 318 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_FORCERESTART

 #define DEFAULT_FORCERESTART   FALSE

Force restart if absolute gap is 1 or enough binary variables have been fixed?

Definition at line 319 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ DEFAULT_RESTARTFRAC

 #define DEFAULT_RESTARTFRAC   0.9

fraction of binary variables that need to be fixed before restart occurs (in forcerestart)

Definition at line 320 of file cons_indicator.c.

Referenced by SCIPincludeConshdlrIndicator().

◆ OBJEPSILON

 #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 324 of file cons_indicator.c.

Referenced by setAltLPObj(), and setAltLPObjZero().

◆ SEPAALTTHRESHOLD

 #define SEPAALTTHRESHOLD   10

only separate IIS cuts if the number of separated coupling cuts is less than this value

Definition at line 325 of file cons_indicator.c.

Referenced by separateIndicators().

◆ MAXROUNDINGROUNDS

 #define MAXROUNDINGROUNDS   1

maximal number of rounds that produced cuts in separation

Definition at line 326 of file cons_indicator.c.

Referenced by initConshdlrData().

◆ SCIP_CALL_PARAM

 #define SCIP_CALL_PARAM ( x )
Value:
/*lint -e527 */ do \
{ \
SCIP_RETCODE _restat_; \
if ( (_restat_ = (x)) != SCIP_OKAY && (_restat_ != SCIP_PARAMETERUNKNOWN) ) \
{ \
SCIPerrorMessage("[%s:%d] Error <%d> in function call\n", __FILE__, __LINE__, _restat_); \
SCIPABORT(); \
return _restat_; \
} \
} \
while ( FALSE )
#define FALSE
Definition: def.h:94
SCIP_VAR ** x
Definition: circlepacking.c:63

Definition at line 451 of file cons_indicator.c.

Referenced by checkAltLPInfeasible(), extendToCover(), initAlternativeLP(), and SCIP_DECL_CONSCHECK().

◆ SCIP_ENFOSEPATYPE

 typedef enum SCIP_enfosepatype SCIP_ENFOSEPATYPE

Definition at line 447 of file cons_indicator.c.

◆ SCIP_enfosepatype

 enum SCIP_enfosepatype

type of enforcing/separation call

Enumerator
SCIP_TYPE_ENFOLP

enforce LP

SCIP_TYPE_ENFOPS

enforce pseudo solution

SCIP_TYPE_ENFORELAX

enforce relaxation solution

SCIP_TYPE_SEPALP

separate LP

SCIP_TYPE_SEPARELAX

separate relaxation solution

SCIP_TYPE_SEPASOL

separate relaxation solution

Definition at line 438 of file cons_indicator.c.

Function Documentation

 static SCIP_RETCODE addSymmetryInformation ( SCIP * scip, SYM_SYMTYPE symtype, SCIP_CONS * cons, SYM_GRAPH * graph, SCIP_Bool * success )
static

adds symmetry information of constraint to a symmetry detection graph

Parameters
 scip SCIP pointer symtype type of symmetries that need to be added cons constraint graph symmetry detection graph success pointer to store whether symmetry information could be added

Definition at line 466 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSGETPERMSYMGRAPH(), and SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH().

◆ SCIP_DECL_EVENTEXEC() [1/3]

 static SCIP_DECL_EVENTEXEC ( eventExecIndicatorBound )
static

execute the event handler for getting variable bound changes

We update the number of variables fixed to be nonzero.

Definition at line 623 of file cons_indicator.c.

◆ SCIP_DECL_EVENTEXEC() [2/3]

 static SCIP_DECL_EVENTEXEC ( eventExecIndicatorLinconsBound )
static

execute the event handler for getting variable bound changes on variables of linear constraint

used for propagation of max activity of lincons to upper bound of slackvar; only important bounds for this purpose are catched

Definition at line 722 of file cons_indicator.c.

◆ SCIP_DECL_EVENTEXEC() [3/3]

 static SCIP_DECL_EVENTEXEC ( eventExecIndicatorRestart )
static

exec the event handler for forcing a restart

There are two cases in which we perform a (user) restart:

• If we have a max FS instance, i.e., the objective is 1 for indicator variables and 0 otherwise, we can force a restart if the gap is 1. In this case, the remaining work consists of proving infeasibility of the non-fixed indicators.
• If a large fraction of the binary indicator variables have been globally fixed, it makes sense to force a restart.

Definition at line 755 of file cons_indicator.c.

◆ SCIP_DECL_CONFLICTFREE()

 static SCIP_DECL_CONFLICTFREE ( conflictFreeIndicator )
static

destructor of conflict handler to free conflict handler data (called when SCIP is exiting)

Definition at line 861 of file cons_indicator.c.

Referenced by SCIP_DECL_EVENTEXEC().

◆ SCIP_DECL_CONFLICTEXEC()

 static SCIP_DECL_CONFLICTEXEC ( conflictExecIndicator )
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 884 of file cons_indicator.c.

Referenced by SCIP_DECL_CONFLICTFREE().

◆ checkTransferBoolParam()

 static SCIP_RETCODE checkTransferBoolParam ( SCIP * scip, SCIP_PARAM * param, const char * name, SCIP_Bool newvalue, SCIP_Bool * value )
static

check whether we transfer a changed parameter to the given value

paramChangedIndicator()
Parameters
 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 1054 of file cons_indicator.c.

Referenced by SCIP_DECL_CONFLICTEXEC(), and SCIP_DECL_PARAMCHGD().

◆ SCIP_DECL_PARAMCHGD()

 static SCIP_DECL_PARAMCHGD ( paramChangedIndicator )
static

◆ varGetObjDelta()

 static SCIP_Real varGetObjDelta ( SCIP_VAR * var )
static

return objective contribution of variable

Special treatment of negated variables: return negative of objective of original variable. SCIPvarGetObj() would return 0 in these cases.

Parameters
 var variable

Definition at line 1516 of file cons_indicator.c.

 static SCIP_RETCODE consdataEnsureAddLinConsSize ( SCIP * scip, SCIP_CONSHDLR * conshdlr, int num )
static

ensures that the addlincons array can store at least num entries

Parameters
 scip SCIP data structure conshdlr constraint handler num minimum number of entries to store

Definition at line 1537 of file cons_indicator.c.

◆ initAlternativeLP()

 static SCIP_RETCODE initAlternativeLP ( SCIP * scip, SCIP_CONSHDLR * conshdlr )
static

initialize alternative LP

The alternative system is organized as follows:

• The first row corresponds to the right hand side of the original system.
• The next nconss constraints correspond to the slack variables.
• The rows after that correspond to the original variables.
Parameters
 scip SCIP pointer conshdlr constraint handler

Definition at line 1577 of file cons_indicator.c.

◆ checkLPBoundsClean()

 static SCIP_RETCODE checkLPBoundsClean ( SCIP * scip, SCIP_LPI * lp, int nconss, SCIP_CONS ** conss )
static

check whether the bounds in given (alternative) LP are set correctly (for debugging)

Parameters
 scip SCIP pointer lp LP for which bounds should be checked nconss number of constraints conss constraints

Definition at line 1627 of file cons_indicator.c.

Referenced by enforceCuts(), initAlternativeLP(), SCIP_DECL_CONSCHECK(), and separateIISRounding().

◆ setAltLPObj()

 static SCIP_RETCODE setAltLPObj ( SCIP * scip, SCIP_LPI * lp, SCIP_SOL * sol, int nconss, SCIP_CONS ** conss )
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$$.

Parameters
 scip SCIP pointer lp alternative LP sol solution to be dealt with nconss number of constraints conss indicator constraints

Definition at line 1705 of file cons_indicator.c.

Referenced by checkLPBoundsClean(), and separateIISRounding().

◆ setAltLPObjZero()

 static SCIP_RETCODE setAltLPObjZero ( SCIP * scip, SCIP_LPI * lp, int nconss, SCIP_CONS ** conss )
static

set the alternative system objective function to some small value

Parameters
 scip SCIP pointer lp alternative LP nconss number of constraints conss indicator constraints

Definition at line 1758 of file cons_indicator.c.

Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), and setAltLPObj().

◆ fixAltLPVariables()

 static SCIP_RETCODE fixAltLPVariables ( SCIP * scip, SCIP_LPI * lp, int nconss, SCIP_CONS ** conss, SCIP_Bool * S )
static

fix variable given by S to 0

Parameters
 scip SCIP pointer lp alternative LP nconss number of constraints conss indicator constraints S bitset of variables

Definition at line 1806 of file cons_indicator.c.

Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), separateIISRounding(), and setAltLPObjZero().

◆ fixAltLPVariable()

 static SCIP_RETCODE fixAltLPVariable ( SCIP_LPI * lp, int ind )
static

fix variable ind to 0

Parameters
 lp alternative LP ind variable that should be fixed to 0

Definition at line 1865 of file cons_indicator.c.

References SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPlpiChgBounds(), and unfixAltLPVariable().

Referenced by deleteAltLPConstraint(), extendToCover(), fixAltLPVariables(), and SCIP_DECL_CONSDISABLE().

◆ unfixAltLPVariable()

 static SCIP_RETCODE unfixAltLPVariable ( SCIP_LPI * lp, int ind )
static

unfix variable ind to 0

Parameters
 lp alternative LP ind variable that should be fixed to 0

Definition at line 1882 of file cons_indicator.c.

Referenced by fixAltLPVariable(), and SCIP_DECL_CONSENABLE().

◆ unfixAltLPVariables()

 static SCIP_RETCODE unfixAltLPVariables ( SCIP * scip, SCIP_LPI * lp, int nconss, SCIP_CONS ** conss, SCIP_Bool * S )
static

unfix variable given by S to 0

Parameters
 scip SCIP pointer lp alternative LP nconss number of constraints conss indicator constraints S bitset of variables

Definition at line 1898 of file cons_indicator.c.

Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), separateIISRounding(), and unfixAltLPVariable().

◆ updateFirstRow()

 static SCIP_RETCODE updateFirstRow ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata )
static

update bounds in first row to the current ones

Parameters
 scip SCIP pointer conshdlrdata constraint handler

Definition at line 1957 of file cons_indicator.c.

Referenced by separateIISRounding(), and unfixAltLPVariables().

◆ updateFirstRowGlobal()

 static SCIP_RETCODE updateFirstRowGlobal ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata )
static

update bounds in first row to the global bounds

Parameters
 scip SCIP pointer conshdlrdata constraint handler

Definition at line 2021 of file cons_indicator.c.

Referenced by enforceCuts(), SCIP_DECL_CONSCHECK(), and updateFirstRow().

◆ checkIISlocal()

 static SCIP_RETCODE checkIISlocal ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata, SCIP_Real * vector, SCIP_Bool * isLocal )
static

check whether IIS defined by vector corresponds to a local cut

Parameters
 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 2082 of file cons_indicator.c.

Referenced by extendToCover(), and updateFirstRowGlobal().

◆ scaleFirstRow()

 static SCIP_RETCODE scaleFirstRow ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata )
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.

Parameters
 scip SCIP pointer conshdlrdata constraint handler

Definition at line 2171 of file cons_indicator.c.

Referenced by checkIISlocal(), enforceCuts(), SCIP_DECL_CONSCHECK(), and separateIISRounding().

 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

See the description at the top of the file for more information.

Parameters
 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 2224 of file cons_indicator.c.

 static SCIP_RETCODE addAltLPConstraint ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_CONS * lincons, SCIP_VAR * slackvar, SCIP_Real objcoef, int * colindex )
static

add column corresponding to constraint to alternative LP

See the description at the top of the file for more information.

Parameters
 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 2496 of file cons_indicator.c.

Referenced by addAltLPColumn(), consdataCreate(), and SCIP_DECL_CONSINITSOL().

 static SCIP_RETCODE addAltLPRow ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_ROW * row, SCIP_Real objcoef, int * colindex )
static

add column corresponding to row to alternative LP

See the description at the top of the file for more information.

Parameters
 scip SCIP pointer conshdlr constraint handler row row to add objcoef objective coefficient colindex index of new column

Definition at line 2597 of file cons_indicator.c.

 static SCIP_RETCODE addObjcut ( SCIP * scip, SCIP_CONSHDLR * conshdlr )
static

try to add objective cut as column to alternative LP

Parameters
 scip SCIP pointer conshdlr constraint handler

Definition at line 2670 of file cons_indicator.c.

◆ deleteAltLPConstraint()

 static SCIP_RETCODE deleteAltLPConstraint ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_CONS * cons )
static

delete column corresponding to constraint in alternative LP

We currently just fix the corresponding variable to 0.

Parameters
 scip SCIP pointer conshdlr constraint handler cons indicator constraint

Definition at line 2740 of file cons_indicator.c.

◆ updateObjUpperbound()

 static SCIP_RETCODE updateObjUpperbound ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_CONSHDLRDATA * conshdlrdata )
static

update upper bound in alternative LP

Parameters
 scip SCIP pointer conshdlr constraint handler conshdlrdata constraint handler data

Definition at line 2779 of file cons_indicator.c.

Referenced by deleteAltLPConstraint(), enforceCuts(), and separateIISRounding().

◆ checkAltLPInfeasible()

 static SCIP_RETCODE checkAltLPInfeasible ( SCIP * scip, SCIP_LPI * lp, SCIP_Real maxcondition, SCIP_Bool primal, SCIP_Bool * infeasible, SCIP_Bool * error )
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.

Precondition
It is assumed that all parameters for the alternative LP are set.
Parameters
 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 2855 of file cons_indicator.c.

Referenced by extendToCover(), SCIP_DECL_CONSCHECK(), and updateObjUpperbound().

◆ extendToCover()

 static SCIP_RETCODE extendToCover ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_CONSHDLRDATA * conshdlrdata, SCIP_LPI * lp, SCIP_SOL * sol, SCIP_ENFOSEPATYPE enfosepatype, 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

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.

Precondition
It is assumed that all parameters for the alternative LP are set and that the variables corresponding to S are fixed. Furthermore xVal_ should contain the current LP solution.
Parameters
 scip SCIP pointer conshdlr constraint handler conshdlrdata constraint handler data lp LP sol solution to be separated enfosepatype type of enforcing/separating type 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 3002 of file cons_indicator.c.

Referenced by checkAltLPInfeasible(), enforceCuts(), and separateIISRounding().

◆ consdataCreate()

 static SCIP_RETCODE consdataCreate ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_CONSHDLRDATA * conshdlrdata, const char * consname, SCIP_CONSDATA ** consdata, SCIP_EVENTHDLR * eventhdlrrestart, SCIP_VAR * binvar, SCIP_Bool activeone, SCIP_Bool lessthanineq, SCIP_VAR * slackvar, SCIP_CONS * lincons, SCIP_Bool linconsactive )
static

creates and initializes consdata

Parameters
 scip SCIP data structure conshdlr constraint handler conshdlrdata constraint handler data consname name of constraint (or NULL) consdata pointer to store constraint data eventhdlrrestart event handler for handling restarts binvar binary variable (or NULL) activeone whether the constraint is active on 1 or not lessthanineq whether the original linear constraint is a less-than-rhs (TRUE) or not slackvar slack variable lincons linear constraint (or NULL) linconsactive whether the linear constraint is active

Definition at line 3355 of file cons_indicator.c.

◆ createVarUbs()

 static SCIP_RETCODE createVarUbs ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata, SCIP_CONS ** conss, int nconss, int * ngen )
static

create variable upper bounds for constraints

Parameters
 scip SCIP pointer conshdlrdata constraint handler data conss constraints nconss number of constraints ngen number of successful operations

Definition at line 3483 of file cons_indicator.c.

Referenced by consdataCreate(), and SCIP_DECL_CONSPRESOL().

◆ presolRoundIndicator()

 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

perform one presolving round

Parameters
 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 pointer to store the number of deleted constraints nfixedvars pointer to store the number of fixed variables

Definition at line 3553 of file cons_indicator.c.

Referenced by createVarUbs(), and SCIP_DECL_CONSPRESOL().

◆ propIndicator()

 static SCIP_RETCODE propIndicator ( SCIP * scip, SCIP_CONS * cons, SCIP_CONSDATA * consdata, SCIP_CONSHDLRDATA * conshdlrdata, SCIP_Bool dualreductions, SCIP_Bool addopposite, SCIP_Bool * cutoff, int * nGen )
static

propagate indicator constraint

Parameters
 scip SCIP pointer cons constraint consdata constraint data conshdlrdata constraint handler 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 3859 of file cons_indicator.c.

Referenced by enforceIndicators(), presolRoundIndicator(), and SCIP_DECL_CONSPROP().

◆ enforceCuts()

 static SCIP_RETCODE enforceCuts ( SCIP * scip, SCIP_CONSHDLR * conshdlr, int nconss, SCIP_CONS ** conss, SCIP_SOL * sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_Bool genlogicor, SCIP_Bool * cutoff, int * nGen )
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.

Parameters
 scip SCIP pointer conshdlr constraint handler nconss number of constraints conss indicator constraints sol solution to be enforced enfosepatype type of enforcing/separating type 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 4252 of file cons_indicator.c.

Referenced by enforceIndicators(), and propIndicator().

◆ enforceIndicators()

 static SCIP_RETCODE enforceIndicators ( SCIP * scip, SCIP_CONSHDLR * conshdlr, int nconss, SCIP_CONS ** conss, SCIP_SOL * sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_Bool genlogicor, SCIP_RESULT * result )
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.

Parameters
 scip SCIP pointer conshdlr constraint handler nconss number of constraints conss indicator constraints sol solution to be enforced (NULL for LP solution) enfosepatype type of enforcing/separating type genlogicor whether logicor constraint should be generated result result

Definition at line 4363 of file cons_indicator.c.

Referenced by enforceCuts(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().

◆ separateIISRounding()

 static SCIP_RETCODE separateIISRounding ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_SOL * sol, SCIP_ENFOSEPATYPE enfosepatype, int nconss, SCIP_CONS ** conss, int maxsepacuts, SCIP_Bool * cutoff, int * nGen )
static

separate IIS-cuts via rounding

Parameters
 scip SCIP pointer conshdlr constraint handler sol solution to be separated enfosepatype type of enforcing/separating type 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 4550 of file cons_indicator.c.

Referenced by enforceIndicators(), and separateIndicators().

◆ separatePerspective()

 static SCIP_RETCODE separatePerspective ( SCIP * scip, SCIP_CONSHDLR * conshdlr, SCIP_SOL * sol, int nconss, SCIP_CONS ** conss, int maxsepacuts, int * nGen )
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.

Parameters
 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 4762 of file cons_indicator.c.

Referenced by separateIISRounding(), and separateIndicators().

◆ separateIndicators()

 static SCIP_RETCODE separateIndicators ( SCIP * scip, SCIP_CONSHDLR * conshdlr, int nconss, int nusefulconss, SCIP_CONS ** conss, SCIP_SOL * sol, SCIP_ENFOSEPATYPE enfosepatype, SCIP_RESULT * result )
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.

Parameters
 scip SCIP pointer conshdlr constraint handler nconss number of constraints nusefulconss number of useful constraints conss indicator constraints sol solution to be separated enfosepatype type of enforcing/separating type result result

Definition at line 4963 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), and separatePerspective().

◆ initConshdlrData()

 static void initConshdlrData ( SCIP * scip, SCIP_CONSHDLRDATA * conshdlrdata )
static

initializes the constraint handler data

Parameters
 scip SCIP pointer conshdlrdata constraint handler data

Definition at line 5133 of file cons_indicator.c.

References FALSE, MAXROUNDINGROUNDS, NULL, SCIP_DECL_LINCONSUPGD(), SCIPinfinity(), and TRUE.

Referenced by SCIP_DECL_CONSINIT(), SCIPincludeConshdlrIndicator(), and separateIndicators().

◆ SCIP_DECL_LINCONSUPGD()

 static SCIP_DECL_LINCONSUPGD ( linconsUpgdIndicator )
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 5187 of file cons_indicator.c.

Referenced by initConshdlrData().

◆ SCIP_DECL_CONSHDLRCOPY()

 static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyIndicator )
static

copy method for constraint handler plugins (called when SCIP copies plugins)

Definition at line 5416 of file cons_indicator.c.

Referenced by SCIP_DECL_LINCONSUPGD().

◆ SCIP_DECL_CONSINIT()

 static SCIP_DECL_CONSINIT ( consInitIndicator )
static

initialization method of constraint handler (called after problem was transformed)

Definition at line 5434 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSHDLRCOPY().

◆ SCIP_DECL_CONSEXIT()

 static SCIP_DECL_CONSEXIT ( consExitIndicator )
static

deinitialization method of constraint handler (called before transformed problem is freed)

Definition at line 5459 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSINIT().

◆ SCIP_DECL_CONSFREE()

 static SCIP_DECL_CONSFREE ( consFreeIndicator )
static

destructor of constraint handler to free constraint handler data (called when SCIP is exiting)

Definition at line 5513 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSEXIT().

◆ SCIP_DECL_CONSINITSOL()

 static SCIP_DECL_CONSINITSOL ( consInitsolIndicator )
static

solving process initialization method of constraint handler (called when branch and bound process is about to begin)

Definition at line 5546 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSFREE().

◆ SCIP_DECL_CONSEXITSOL()

 static SCIP_DECL_CONSEXITSOL ( consExitsolIndicator )
static

solving process deinitialization method of constraint handler (called before branch and bound process data is freed)

Definition at line 5864 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSINITSOL().

◆ SCIP_DECL_CONSDELETE()

 static SCIP_DECL_CONSDELETE ( consDeleteIndicator )
static

frees specific constraint data

Definition at line 5936 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSEXITSOL().

◆ SCIP_DECL_CONSTRANS()

 static SCIP_DECL_CONSTRANS ( consTransIndicator )
static

transforms constraint data into data belonging to the transformed problem

Definition at line 6043 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSDELETE().

◆ SCIP_DECL_CONSINITPRE()

 static SCIP_DECL_CONSINITPRE ( consInitpreIndicator )
static

presolving initialization method of constraint handler (called when presolving is about to begin)

Definition at line 6137 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSTRANS().

◆ SCIP_DECL_CONSPRESOL()

 static SCIP_DECL_CONSPRESOL ( consPresolIndicator )
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()).

Warning
We can never delete linear constraints, because we need them to get the right values for the slack variables!

Definition at line 6203 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSINITPRE().

◆ SCIP_DECL_CONSINITLP()

 static SCIP_DECL_CONSINITLP ( consInitlpIndicator )
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 6383 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSPRESOL().

◆ SCIP_DECL_CONSSEPALP()

 static SCIP_DECL_CONSSEPALP ( consSepalpIndicator )
static

separation method of constraint handler for LP solutions

Definition at line 6479 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSINITLP().

◆ SCIP_DECL_CONSSEPASOL()

 static SCIP_DECL_CONSSEPASOL ( consSepasolIndicator )
static

separation method of constraint handler for arbitrary primal solutions

Definition at line 6496 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSSEPALP().

◆ SCIP_DECL_CONSENFOLP()

 static SCIP_DECL_CONSENFOLP ( consEnfolpIndicator )
static

constraint enforcing method of constraint handler for LP solutions

Definition at line 6513 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSSEPASOL().

◆ SCIP_DECL_CONSENFORELAX()

 static SCIP_DECL_CONSENFORELAX ( consEnforelaxIndicator )
static

constraint enforcing method of constraint handler for relaxation solutions

Definition at line 6541 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSENFOLP().

◆ SCIP_DECL_CONSENFOPS()

 static SCIP_DECL_CONSENFOPS ( consEnfopsIndicator )
static

constraint enforcing method of constraint handler for pseudo solutions

Definition at line 6569 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSENFORELAX().

◆ SCIP_DECL_CONSCHECK()

 static SCIP_DECL_CONSCHECK ( consCheckIndicator )
static

feasibility check method of constraint handler for integral solutions

Definition at line 6597 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSENFOPS().

◆ SCIP_DECL_CONSPROP()

 static SCIP_DECL_CONSPROP ( consPropIndicator )
static

domain propagation method of constraint handler

Definition at line 6797 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSCHECK().

◆ SCIP_DECL_CONSRESPROP()

 static SCIP_DECL_CONSRESPROP ( consRespropIndicator )
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 6941 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSPROP().

◆ SCIP_DECL_CONSLOCK()

 static SCIP_DECL_CONSLOCK ( consLockIndicator )
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 7002 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSRESPROP().

◆ SCIP_DECL_CONSPRINT()

 static SCIP_DECL_CONSPRINT ( consPrintIndicator )
static

constraint display method of constraint handler

Definition at line 7078 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSLOCK().

◆ SCIP_DECL_CONSCOPY()

 static SCIP_DECL_CONSCOPY ( consCopyIndicator )
static

constraint copying method of constraint handler

Definition at line 7113 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSPRINT().

◆ SCIP_DECL_CONSPARSE()

 static SCIP_DECL_CONSPARSE ( consParseIndicator )
static

constraint parsing method of constraint handler

Definition at line 7240 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSCOPY().

◆ SCIP_DECL_CONSENABLE()

 static SCIP_DECL_CONSENABLE ( consEnableIndicator )
static

constraint enabling notification method of constraint handler

Definition at line 7372 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSPARSE().

◆ SCIP_DECL_CONSDISABLE()

 static SCIP_DECL_CONSDISABLE ( consDisableIndicator )
static

constraint disabling notification method of constraint handler

Definition at line 7408 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSENABLE().

◆ SCIP_DECL_CONSGETVARS()

 static SCIP_DECL_CONSGETVARS ( consGetVarsIndicator )
static

constraint method of constraint handler which returns the variables (if possible)

Definition at line 7444 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSDISABLE().

◆ SCIP_DECL_CONSGETNVARS()

 static SCIP_DECL_CONSGETNVARS ( consGetNVarsIndicator )
static

constraint method of constraint handler which returns the number of variables (if possible)

Definition at line 7491 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSGETVARS().

◆ SCIP_DECL_CONSGETDIVEBDCHGS()

 static SCIP_DECL_CONSGETDIVEBDCHGS ( consGetDiveBdChgsIndicator )
static

constraint handler method to suggest dive bound changes during the generic diving algorithm

Definition at line 7535 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSGETNVARS().

◆ SCIP_DECL_CONSGETPERMSYMGRAPH()

 static SCIP_DECL_CONSGETPERMSYMGRAPH ( consGetPermsymGraphIndicator )
static

constraint handler method which returns the permutation symmetry detection graph of a constraint

Definition at line 7604 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSGETDIVEBDCHGS().

◆ SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH()

 static SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH ( consGetSignedPermsymGraphIndicator )
static

constraint handler method which returns the signed permutation symmetry detection graph of a constraint

Definition at line 7613 of file cons_indicator.c.

Referenced by SCIP_DECL_CONSGETPERMSYMGRAPH().