Detailed Description
constraint handler for SOS type 2 constraints
A specially ordered set of type 2 (SOS2) is a sequence of variables such that at most two variables are nonzero and if two variables are nonzero they must be adjacent in the specified sequence. Note that it is in principle allowed that a variable appears twice, but it then can be fixed to 0 if it is at least two apart in the sequence.
This constraint is useful when considering a piecewise affine approximation of a univariate (nonlinear) function \(: [a,b] \rightarrow R\): Let \(x_1 < \ldots < x_n\) be points in \([a,b]\) and introduce variables \(\lambda_1, \ldots, \lambda_n\). To evaluate \(f(x')\) at some point \(x' \in [a,b]\) one can use the following constraints:
\[ \lambda_1 + \cdots + \lambda_n = 1,\quad x' = x_1 \lambda_1 + \cdots + x_n \lambda_n. \]
The value of \(f(x')\) can the be approximated as
\[ f(x_1) \lambda_1 + \cdots + f(x_n) \lambda_n. \]
To get a valid piecewise affine approximation, \(\lambda_1, \ldots, \lambda_n\) have to obey an SOS constraint of type 2.
This implementation of this constraint handler is based on classical ideas, see e.g.
"Special Facilities in General Mathematical Programming System for
Non-Convex Problems Using Ordered Sets of Variables"
E. Beale and J. Tomlin, Proc. 5th IFORS Conference, 447-454 (1970)
The order of the variables is determined as follows:
- If the constraint is created with SCIPcreateConsSOS2() and weights are given, the weights determine the order (decreasing weights). Additional variables can be added with SCIPaddVarSOS2(), which adds a variable with given weight.
- If an empty constraint is created and then variables are added with SCIPaddVarSOS2(), weights are needed and stored.
- All other calls ignore the weights, i.e., if a nonempty constraint is created or variables are added with SCIPappendVarSOS2().
Definition in file cons_sos2.c.
#include "blockmemshell/memory.h"
#include "scip/cons_linear.h"
#include "scip/cons_sos2.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_misc_sort.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_lp.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_numerics.h"
#include "scip/scip_prob.h"
#include "scip/scip_sol.h"
#include "scip/scip_var.h"
#include "scip/symmetry_graph.h"
#include "symmetry/struct_symmetry.h"
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
Go to the source code of this file.
Macros | |
#define | CONSHDLR_NAME "SOS2" |
#define | CONSHDLR_DESC "SOS2 constraint handler" |
#define | CONSHDLR_SEPAPRIORITY 10 |
#define | CONSHDLR_ENFOPRIORITY 100 |
#define | CONSHDLR_CHECKPRIORITY -10 |
#define | CONSHDLR_SEPAFREQ 0 |
#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_PROP_TIMING SCIP_PROPTIMING_BEFORELP |
#define | CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST |
#define | EVENTHDLR_NAME "SOS2" |
#define | EVENTHDLR_DESC "bound change event handler for SOS2 constraints" |
#define | EVENTHDLR_EVENT_TYPE (SCIP_EVENTTYPE_BOUNDCHANGED | SCIP_EVENTTYPE_GBDCHANGED) |
Macro Definition Documentation
◆ CONSHDLR_NAME
#define CONSHDLR_NAME "SOS2" |
Definition at line 110 of file cons_sos2.c.
Referenced by SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSCOPY(), SCIP_DECL_CONSDELETE(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), SCIP_DECL_CONSENFORELAX(), SCIP_DECL_CONSEXITSOL(), SCIP_DECL_CONSFREE(), SCIP_DECL_CONSHDLRCOPY(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSLOCK(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_CONSPRINT(), SCIP_DECL_CONSPROP(), SCIP_DECL_CONSRESPROP(), SCIP_DECL_CONSSEPALP(), SCIP_DECL_CONSSEPASOL(), SCIP_DECL_CONSTRANS(), SCIPaddVarSOS2(), SCIPappendVarSOS2(), SCIPcreateConsSOS2(), SCIPgetNVarsSOS2(), SCIPgetVarsSOS2(), SCIPgetWeightsSOS2(), and SCIPincludeConshdlrSOS2().
◆ CONSHDLR_DESC
#define CONSHDLR_DESC "SOS2 constraint handler" |
Definition at line 111 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_SEPAPRIORITY
#define CONSHDLR_SEPAPRIORITY 10 |
priority of the constraint handler for separation
Definition at line 112 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_ENFOPRIORITY
#define CONSHDLR_ENFOPRIORITY 100 |
priority of the constraint handler for constraint enforcing
Definition at line 113 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_CHECKPRIORITY
#define CONSHDLR_CHECKPRIORITY -10 |
priority of the constraint handler for checking feasibility
Definition at line 114 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_SEPAFREQ
#define CONSHDLR_SEPAFREQ 0 |
frequency for separating cuts; zero means to separate only in the root node
Definition at line 115 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_PROPFREQ
#define CONSHDLR_PROPFREQ 1 |
frequency for propagating domains; zero means only preprocessing propagation
Definition at line 116 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ 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 117 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_MAXPREROUNDS
#define CONSHDLR_MAXPREROUNDS -1 |
maximal number of presolving rounds the constraint handler participates in (-1: no limit)
Definition at line 120 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYSEPA FALSE |
should separation method be delayed, if other separators found cuts?
Definition at line 121 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_DELAYPROP
#define CONSHDLR_DELAYPROP FALSE |
should propagation method be delayed, if other propagators found reductions?
Definition at line 122 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_NEEDSCONS
#define CONSHDLR_NEEDSCONS TRUE |
should the constraint handler be skipped, if no constraints are available?
Definition at line 123 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_PROP_TIMING
#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP |
Definition at line 125 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ CONSHDLR_PRESOLTIMING
#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST |
Definition at line 126 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ EVENTHDLR_NAME
#define EVENTHDLR_NAME "SOS2" |
Definition at line 129 of file cons_sos2.c.
Referenced by SCIP_DECL_EVENTEXEC(), and SCIPincludeConshdlrSOS2().
◆ EVENTHDLR_DESC
#define EVENTHDLR_DESC "bound change event handler for SOS2 constraints" |
Definition at line 130 of file cons_sos2.c.
Referenced by SCIPincludeConshdlrSOS2().
◆ EVENTHDLR_EVENT_TYPE
#define EVENTHDLR_EVENT_TYPE (SCIP_EVENTTYPE_BOUNDCHANGED | SCIP_EVENTTYPE_GBDCHANGED) |
Definition at line 132 of file cons_sos2.c.
Referenced by deleteVarSOS2(), handleNewVariableSOS2(), presolRoundSOS2(), SCIP_DECL_CONSDELETE(), and SCIP_DECL_CONSTRANS().
Function Documentation
◆ fixVariableZeroNode()
|
static |
fix variable in given node to 0 or add constraint if variable is multi-aggregated
- Parameters
-
scip SCIP pointer var variable to be fixed to 0 node node infeasible if fixing is infeasible
Definition at line 155 of file cons_sos2.c.
References FALSE, inferVariableZero(), NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIPaddConsNode(), SCIPchgVarLbNode(), SCIPchgVarUbNode(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPisFeasZero(), SCIPreleaseCons(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), and TRUE.
Referenced by enforceSOS2().
◆ inferVariableZero()
|
static |
fix variable in local node to 0, and return whether the operation was feasible
- Note
- We do not add a linear constraint if the variable is multi-aggregated as in fixVariableZeroNode(), since this would be too time consuming.
- Parameters
-
scip SCIP pointer var variable to be fixed to 0 cons constraint inferinfo info for reverse prop. infeasible if fixing is infeasible tightened if fixing was performed success whether fixing was successful, i.e., variable is not multi-aggregated
Definition at line 206 of file cons_sos2.c.
References FALSE, lockVariableSOS2(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_MULTAGGR, SCIPinferVarLbCons(), SCIPinferVarUbCons(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPvarGetLbLocal(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), and TRUE.
Referenced by fixVariableZeroNode(), and propSOS2().
◆ lockVariableSOS2()
|
static |
add lock on variable
- Parameters
-
scip SCIP data structure cons constraint var variable
Definition at line 249 of file cons_sos2.c.
References NULL, SCIP_CALL, SCIP_OKAY, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPlockVarCons(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and unlockVariableSOS2().
Referenced by handleNewVariableSOS2(), inferVariableZero(), and presolRoundSOS2().
◆ unlockVariableSOS2()
|
static |
remove lock on variable
- Parameters
-
scip SCIP data structure cons constraint var variable
Definition at line 269 of file cons_sos2.c.
References consdataEnsurevarsSizeSOS2(), NULL, SCIP_CALL, SCIP_OKAY, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPunlockVarCons(), SCIPvarGetLbGlobal(), and SCIPvarGetUbGlobal().
Referenced by deleteVarSOS2(), lockVariableSOS2(), and presolRoundSOS2().
◆ consdataEnsurevarsSizeSOS2()
|
static |
ensures that the vars and weights array can store at least num entries
- Parameters
-
scip SCIP data structure consdata constraint data num minimum number of entries to store reserveWeights whether the weights array is handled
Definition at line 289 of file cons_sos2.c.
References handleNewVariableSOS2(), NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), and SCIPreallocBlockMemoryArray.
Referenced by addVarSOS2(), appendVarSOS2(), and unlockVariableSOS2().
◆ handleNewVariableSOS2()
|
static |
handle new variable
- Parameters
-
scip SCIP data structure cons constraint consdata constraint data var variable transformed whether original variable was transformed
Definition at line 317 of file cons_sos2.c.
References addVarSOS2(), EVENTHDLR_EVENT_TYPE, lockVariableSOS2(), NULL, SCIP_CALL, SCIP_OKAY, SCIPaddVarToRow(), SCIPcatchVarEvent(), SCIPchgRowLhs(), SCIPchgRowRhs(), SCIPconsGetHdlr(), SCIPconshdlrGetData(), SCIPisFeasGT(), SCIPisFeasLT(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIProwGetLhs(), SCIProwGetRhs(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().
Referenced by addVarSOS2(), appendVarSOS2(), and consdataEnsurevarsSizeSOS2().
◆ addVarSOS2()
|
static |
adds a variable to an SOS2 constraint, a position given by weight - ascending order
- Parameters
-
scip SCIP data structure cons constraint var variable to add to the constraint weight weight to determine position
Definition at line 374 of file cons_sos2.c.
References appendVarSOS2(), consdataEnsurevarsSizeSOS2(), handleNewVariableSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsTransformed(), SCIPerrorMessage, SCIPgetTransformedVar(), SCIPvarIsTransformed(), and TRUE.
Referenced by handleNewVariableSOS2(), and SCIPaddVarSOS2().
◆ appendVarSOS2()
|
static |
appends a variable to an SOS2 constraint
- Parameters
-
scip SCIP data structure cons constraint var variable to add to the constraint
Definition at line 442 of file cons_sos2.c.
References consdataEnsurevarsSizeSOS2(), deleteVarSOS2(), FALSE, handleNewVariableSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsIsTransformed(), SCIPgetTransformedVar(), SCIPvarIsTransformed(), and TRUE.
Referenced by addVarSOS2(), and SCIPappendVarSOS2().
◆ deleteVarSOS2()
|
static |
deletes a variable of an SOS2 constraint
- Parameters
-
scip SCIP data structure cons constraint consdata constraint data eventhdlr corresponding event handler pos position of variable in array
Definition at line 498 of file cons_sos2.c.
References EVENTHDLR_EVENT_TYPE, NULL, presolRoundSOS2(), SCIP_CALL, SCIP_OKAY, SCIPdropVarEvent(), and unlockVariableSOS2().
Referenced by appendVarSOS2(), and presolRoundSOS2().
◆ presolRoundSOS2()
|
static |
perform one presolving round
We perform the following presolving steps.
- If the bounds of one variable force it to be nonzero, we can fix all other variables with distance at least two to zero. If two variables are certain to be nonzero, we can fix all other variables to 0 and remove the constraint.
- All variables fixed to zero, that are at the beginning or end of the constraint can be removed.
- We substitute appregated variables.
- If a constraint has at most two variables, we delete it.
We currently do not handle the following:
- If we have at least two variables fixed to zero next to each-other, that are positioned in the inner part of this constraint, we can delete all but one of these variables.
- If a variable appears twice not next to each-other, it can be fixed to 0. If one variable appears next to each-other and is already certain to be nonzero, we can fix all variables.
- If a binary variable and its negation appear in the constraint, we might fix variables to zero or can forbid a zero value for them.
- When, after removing all zero "border" variables, a constraint with more than two variables has at most two variables that are not fixed to 0, only one of these can take a nonzero value, because these variables need to be the "border" variables of this constraint. The same holds if we have exactly three variables in one constraint and the middle variable is certain to be not zero. In both cases we can upgrade this constraint constraint to an sos1 consisting only of the "border" variables. If these "border" variables are negations of each other, we can delete this constraint.
- When, after removing all variables fixed to 0, that are possible, in a constraint each even positioned variable is fixed to 0, we can upgrade this constraint to an sos1 that holds all non-fixed variables.
- Extract cliques for all odd and also for all even positioned binary variables
- Parameters
-
scip SCIP pointer cons constraint consdata constraint data eventhdlr event handler cutoff whether a cutoff happened success whether we performed a successful reduction ndelconss number of deleted constraints nfixedvars number of fixed variables nremovedvars number of variables removed
Definition at line 558 of file cons_sos2.c.
References deleteVarSOS2(), EVENTHDLR_EVENT_TYPE, FALSE, lockVariableSOS2(), NULL, propSOS2(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcatchVarEvent(), SCIPconsGetName(), SCIPconsIsModifiable(), SCIPdebugMsg, SCIPdelCons(), SCIPdropVarEvent(), SCIPfixVar(), SCIPgetProbvarSum(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPisFeasZero(), SCIPisZero(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), TRUE, and unlockVariableSOS2().
Referenced by deleteVarSOS2(), and SCIP_DECL_CONSPRESOL().
◆ propSOS2()
|
static |
propagate variables
- Parameters
-
scip SCIP pointer cons constraint consdata constraint data cutoff whether a cutoff happened ngen pointer to incremental counter for domain changes
Definition at line 839 of file cons_sos2.c.
References enforceSOS2(), FALSE, inferVariableZero(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetName(), SCIPconsIsModifiable(), SCIPdebugMsg, SCIPdelConsLocal(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPresetConsAge(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbLocal(), and TRUE.
Referenced by enforceSOS2(), presolRoundSOS2(), and SCIP_DECL_CONSPROP().
◆ enforceSOS2()
|
static |
enforcement method
We check whether the current solution is feasible, i.e., contains at most one nonzero variable. If not, we branch along the lines indicated by Beale and Tomlin:
We first compute \(W = \sum_{j=1}^n |x_i|\) and \(w = \sum_{j=1}^n j\, |x_i|\). Then we search for the index \(k\) that satisfies
\[ k \leq \frac{w}{W} < k+1. \]
The branches are then
\[ x_1 = 0, \ldots, x_{k-1} = 0 \qquad \mbox{and}\qquad x_{k+1} = 0, \ldots, x_n = 0. \]
There is one special case that we have to consider: It can happen that \(k\) is one too small. Example: \(x_1 = 1 - \epsilon, x_2 = 0, x_3 = \epsilon\). Then \(w = 1 - \epsilon + 3 \epsilon = 1 + 2 \epsilon\). This yields \(k = 1\) and hence the first branch does not change the solution. We therefore increase \(k\) by one if \(x_k \neq 0\). This is valid, since we know that \(x_{k+1} \neq 0\) (with respect to the original \(k\)); the corresponding branch will cut off the current solution, since \(x_k \neq 0\).
- Parameters
-
scip SCIP pointer conshdlr constraint handler nconss number of constraints conss indicator constraints sol solution to be enforced (NULL for LP solution) result result
Definition at line 1037 of file cons_sos2.c.
References branchCons(), fixVariableZeroNode(), generateRowSOS2(), NULL, propSOS2(), REALABS, SCIP_Bool, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHED, SCIP_CALL, SCIP_CUTOFF, SCIP_FEASIBLE, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIPcalcChildEstimateIncrease(), SCIPcalcNodeselPriority(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPcreateChild(), SCIPdebugMsg, SCIPfeasFloor(), SCIPgetLocalTransEstimate(), SCIPgetSolVal(), SCIPisFeasZero(), SCIPresetConsAge(), SCIPvarGetName(), and w.
Referenced by propSOS2(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().
◆ generateRowSOS2()
|
static |
Generate basic row
We generate the row corresponding to the following simple valid inequalities. Let \(U\) and \(U'\) be the largest and second largest upper bound of variables appearing in the constraint. Similarly let \(L\) and \(L'\) be the smallest and second smallest lower bound. The inequalities are:
\[ x_1 + \ldots + x_n \leq U + U' \qquad\mbox{and}\qquad x_1 + \ldots + x_n \geq L + L'. \]
Of course, these inequalities are only added if the upper and lower bounds are all finite and \(L+L' < 0\) or \(U+U' > 0\).
- Parameters
-
scip SCIP pointer conshdlr constraint handler cons constraint local produce local cut?
Definition at line 1239 of file cons_sos2.c.
References FALSE, NULL, REALABS, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddVarsToRowSameCoef(), SCIPconsGetData(), SCIPconsGetName(), SCIPcreateEmptyRowCons(), SCIPdebug, SCIPinfinity(), SCIPisFeasZero(), SCIPisInfinity(), SCIPprintRow(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), and SCIPvarGetUbLocal().
Referenced by enforceSOS2(), SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().
◆ SCIP_DECL_CONSHDLRCOPY()
|
static |
copy method for constraint handler plugins (called when SCIP copies plugins)
Definition at line 1338 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSFREE(), SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrSOS2(), and TRUE.
Referenced by generateRowSOS2().
◆ SCIP_DECL_CONSFREE()
|
static |
destructor of constraint handler to free constraint handler data (called when SCIP is exiting)
Definition at line 1355 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_DECL_CONSEXITSOL(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPfreeBlockMemory.
Referenced by SCIP_DECL_CONSHDLRCOPY().
◆ SCIP_DECL_CONSEXITSOL()
|
static |
solving process deinitialization method of constraint handler (called before branch and bound process data is freed)
Definition at line 1374 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSDELETE(), SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, and SCIPreleaseRow().
Referenced by SCIP_DECL_CONSFREE().
◆ SCIP_DECL_CONSDELETE()
|
static |
frees specific constraint data
Definition at line 1406 of file cons_sos2.c.
References CONSHDLR_NAME, EVENTHDLR_EVENT_TYPE, NULL, SCIP_CALL, SCIP_DECL_CONSTRANS(), SCIP_OKAY, SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsTransformed(), SCIPdebugMsg, SCIPdropVarEvent(), SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, and SCIPreleaseRow().
Referenced by SCIP_DECL_CONSEXITSOL().
◆ SCIP_DECL_CONSTRANS()
|
static |
transforms constraint data into data belonging to the transformed problem
Definition at line 1455 of file cons_sos2.c.
References CONSHDLR_NAME, EVENTHDLR_EVENT_TYPE, NULL, SCIP_CALL, SCIP_DECL_CONSPRESOL(), SCIP_MAXSTRLEN, SCIP_OKAY, SCIPallocBlockMemory, SCIPallocBlockMemoryArray, SCIPcatchVarEvent(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateCons(), SCIPdebugMsg, SCIPduplicateBlockMemoryArray, SCIPgetTransformedVar(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPsnprintf(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().
Referenced by SCIP_DECL_CONSDELETE().
◆ SCIP_DECL_CONSPRESOL()
|
static |
presolving method of constraint handler
Definition at line 1538 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, presolRoundSOS2(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSINITLP(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SUCCESS, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsModifiable(), SCIPdebug, and SCIPdebugMsg.
Referenced by SCIP_DECL_CONSTRANS().
◆ SCIP_DECL_CONSINITLP()
|
static |
LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved)
Definition at line 1607 of file cons_sos2.c.
References CONSHDLR_NAME, FALSE, generateRowSOS2(), NULL, REALABS, SCIP_CALL, SCIP_DECL_CONSSEPALP(), SCIP_OKAY, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisInfinity(), SCIPprintRow(), SCIProwGetLhs(), SCIProwGetRhs(), and SCIProwIsInLP().
Referenced by SCIP_DECL_CONSPRESOL().
◆ SCIP_DECL_CONSSEPALP()
|
static |
separation method of constraint handler for LP solutions
Definition at line 1651 of file cons_sos2.c.
References CONSHDLR_NAME, FALSE, generateRowSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSSEPASOL(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SEPARATED, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisCutEfficacious(), SCIPprintRow(), SCIPresetConsAge(), and SCIProwIsInLP().
Referenced by SCIP_DECL_CONSINITLP().
◆ SCIP_DECL_CONSSEPASOL()
|
static |
separation method of constraint handler for arbitrary primal solutions
Definition at line 1707 of file cons_sos2.c.
References CONSHDLR_NAME, FALSE, generateRowSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSENFOLP(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SEPARATED, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisCutEfficacious(), SCIPprintRow(), SCIPresetConsAge(), and SCIProwIsInLP().
Referenced by SCIP_DECL_CONSSEPALP().
◆ SCIP_DECL_CONSENFOLP()
|
static |
constraint enforcing method of constraint handler for LP solutions
Definition at line 1763 of file cons_sos2.c.
References CONSHDLR_NAME, enforceSOS2(), NULL, SCIP_CALL, SCIP_DECL_CONSENFORELAX(), SCIP_OKAY, and SCIPconshdlrGetName().
Referenced by SCIP_DECL_CONSSEPASOL().
◆ SCIP_DECL_CONSENFORELAX()
|
static |
constraint enforcing method of constraint handler for relaxation solutions
Definition at line 1779 of file cons_sos2.c.
References CONSHDLR_NAME, enforceSOS2(), NULL, SCIP_CALL, SCIP_DECL_CONSENFOPS(), SCIP_OKAY, and SCIPconshdlrGetName().
Referenced by SCIP_DECL_CONSENFOLP().
◆ SCIP_DECL_CONSENFOPS()
|
static |
constraint enforcing method of constraint handler for pseudo solutions
Definition at line 1795 of file cons_sos2.c.
References CONSHDLR_NAME, enforceSOS2(), NULL, SCIP_CALL, SCIP_DECL_CONSCHECK(), SCIP_OKAY, and SCIPconshdlrGetName().
Referenced by SCIP_DECL_CONSENFORELAX().
◆ SCIP_DECL_CONSCHECK()
|
static |
feasibility check method of constraint handler for integral solutions
We simply check whether at most two variable are nonzero and in the case there are exactly two nonzero, then they have to be direct neighbors in the given solution.
Definition at line 1816 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSPROP(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetSolVal(), SCIPinfoMessage(), SCIPisFeasZero(), SCIPprintCons(), SCIPresetConsAge(), SCIPupdateSolConsViolation(), and SCIPvarGetName().
Referenced by SCIP_DECL_CONSENFOPS().
◆ SCIP_DECL_CONSPROP()
|
static |
domain propagation method of constraint handler
Definition at line 1885 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, propSOS2(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSRESPROP(), SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_REDUCEDDOM, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, and SCIPisTransformed().
Referenced by SCIP_DECL_CONSCHECK().
◆ SCIP_DECL_CONSRESPROP()
|
static |
propagation conflict resolving method of constraint handler
We check which bound changes were the reason for infeasibility. We use that inferinfo stores the index of the variable that has bounds that fix it to be nonzero (these bounds are the reason).
Definition at line 1934 of file cons_sos2.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSLOCK(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SUCCESS, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPisFeasNegative(), and SCIPisFeasPositive().
Referenced by SCIP_DECL_CONSPROP().
◆ SCIP_DECL_CONSLOCK()
|
static |
variable rounding lock method of constraint handler
Let lb and ub be the lower and upper bounds of a variable. Preprocessing usually makes sure that lb <= 0 <= ub.
- If lb < 0 then rounding down may violate the constraint.
- If ub > 0 then rounding up may violated the constraint.
- If lb > 0 or ub < 0 then the constraint is infeasible and we do not have to deal with it here.
- If lb == 0 then rounding down does not violate the constraint.
- If ub == 0 then rounding up does not violate the constraint.
Definition at line 1986 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_LOCKTYPE_MODEL, SCIP_OKAY, SCIPaddVarLocksType(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPvarGetLbGlobal(), and SCIPvarGetUbGlobal().
Referenced by SCIP_DECL_CONSRESPROP().
◆ SCIP_DECL_CONSPRINT()
|
static |
constraint display method of constraint handler
Definition at line 2028 of file cons_sos2.c.
References CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSCOPY(), SCIP_OKAY, SCIPconsGetData(), SCIPconshdlrGetName(), SCIPinfoMessage(), and SCIPwriteVarName().
Referenced by SCIP_DECL_CONSLOCK().
◆ SCIP_DECL_CONSCOPY()
|
static |
constraint copying method of constraint handler
Definition at line 2058 of file cons_sos2.c.
References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSPARSE(), SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPcreateConsSOS2(), SCIPdebugMsg, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetVarCopy(), and TRUE.
Referenced by SCIP_DECL_CONSPRINT().
◆ SCIP_DECL_CONSPARSE()
|
static |
constraint parsing method of constraint handler
Definition at line 2122 of file cons_sos2.c.
References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSGETVARS(), SCIP_OKAY, SCIP_Real, SCIPaddVarSOS2(), SCIPcreateConsSOS2(), SCIPerrorMessage, SCIPparseVarName(), SCIPreleaseCons(), SCIPskipSpace(), and TRUE.
Referenced by SCIP_DECL_CONSCOPY().
◆ SCIP_DECL_CONSGETVARS()
|
static |
constraint method of constraint handler which returns the variables (if possible)
Definition at line 2206 of file cons_sos2.c.
References BMScopyMemoryArray, FALSE, NULL, SCIP_DECL_CONSGETNVARS(), SCIP_OKAY, SCIPconsGetData(), and TRUE.
Referenced by SCIP_DECL_CONSPARSE().
◆ SCIP_DECL_CONSGETNVARS()
|
static |
constraint method of constraint handler which returns the number of variables (if possible)
Definition at line 2229 of file cons_sos2.c.
References NULL, SCIP_DECL_CONSGETPERMSYMGRAPH(), SCIP_OKAY, SCIPconsGetData(), and TRUE.
Referenced by SCIP_DECL_CONSGETVARS().
◆ SCIP_DECL_CONSGETPERMSYMGRAPH()
|
static |
constraint handler method which returns the permutation symmetry detection graph of a constraint
Definition at line 2245 of file cons_sos2.c.
References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(), SCIP_OKAY, SCIP_Real, SCIPaddSymgraphConsnode(), SCIPaddSymgraphEdge(), SCIPaddSymgraphOpnode(), SCIPaddSymgraphVarAggregation(), SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, SCIPgetNVars(), SCIPgetSymActiveVariables(), SCIPgetSymgraphVarnodeidx(), SCIPgetVarsSOS2(), SCIPisEQ(), SCIPisTransformed(), SCIPisZero(), SYM_CONSOPTYPE_SOS2_TUPLE, SYM_CONSOPTYPE_SUM, SYM_SYMTYPE_PERM, and TRUE.
Referenced by SCIP_DECL_CONSGETNVARS().
◆ SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH()
|
static |
constraint handler method which returns the signed permutation symmetry detection graph of a constraint
Definition at line 2320 of file cons_sos2.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_EVENTEXEC(), SCIP_OKAY, SCIP_Real, SCIPaddSymgraphConsnode(), SCIPaddSymgraphEdge(), SCIPaddSymgraphOpnode(), SCIPaddSymgraphValnode(), SCIPallocBufferArray, SCIPconsGetData(), SCIPfreeBufferArray, SCIPgetNVars(), SCIPgetSymActiveVariables(), SCIPgetSymgraphNegatedVarnodeidx(), SCIPgetSymgraphVarnodeidx(), SCIPgetVarsSOS2(), SCIPisEQ(), SCIPisInfinity(), SCIPisTransformed(), SCIPisZero(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), SYM_CONSOPTYPE_SOS2_TUPLE, SYM_CONSOPTYPE_SUM, SYM_SYMTYPE_PERM, and TRUE.
Referenced by SCIP_DECL_CONSGETPERMSYMGRAPH().
◆ SCIP_DECL_EVENTEXEC()
|
static |
exec the event handler
We update the number of variables fixed to be nonzero
Definition at line 2439 of file cons_sos2.c.
References EVENTHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_EVENTTYPE_GLBCHANGED, SCIP_EVENTTYPE_GUBCHANGED, SCIP_EVENTTYPE_LBRELAXED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPdebugMsg, SCIPerrorMessage, SCIPeventGetNewbound(), SCIPeventGetOldbound(), SCIPeventGetType(), SCIPeventGetVar(), SCIPeventhdlrGetName(), SCIPincludeConshdlrSOS2(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPlockVarCons(), SCIPunlockVarCons(), SCIPvarGetName(), and TRUE.
Referenced by SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH().