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:
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) |
#define CONSHDLR_NAME "SOS2" |
Definition at line 110 of file cons_sos2.c.
#define CONSHDLR_DESC "SOS2 constraint handler" |
Definition at line 111 of file cons_sos2.c.
#define CONSHDLR_SEPAPRIORITY 10 |
priority of the constraint handler for separation
Definition at line 112 of file cons_sos2.c.
#define CONSHDLR_ENFOPRIORITY 100 |
priority of the constraint handler for constraint enforcing
Definition at line 113 of file cons_sos2.c.
#define CONSHDLR_CHECKPRIORITY -10 |
priority of the constraint handler for checking feasibility
Definition at line 114 of file cons_sos2.c.
#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.
#define CONSHDLR_PROPFREQ 1 |
frequency for propagating domains; zero means only preprocessing propagation
Definition at line 116 of file cons_sos2.c.
#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.
#define CONSHDLR_MAXPREROUNDS -1 |
maximal number of presolving rounds the constraint handler participates in (-1: no limit)
Definition at line 119 of file cons_sos2.c.
#define CONSHDLR_DELAYSEPA FALSE |
should separation method be delayed, if other separators found cuts?
Definition at line 120 of file cons_sos2.c.
#define CONSHDLR_DELAYPROP FALSE |
should propagation method be delayed, if other propagators found reductions?
Definition at line 121 of file cons_sos2.c.
#define CONSHDLR_NEEDSCONS TRUE |
should the constraint handler be skipped, if no constraints are available?
Definition at line 122 of file cons_sos2.c.
#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP |
Definition at line 124 of file cons_sos2.c.
#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_FAST |
Definition at line 125 of file cons_sos2.c.
#define EVENTHDLR_NAME "SOS2" |
Definition at line 128 of file cons_sos2.c.
#define EVENTHDLR_DESC "bound change event handler for SOS2 constraints" |
Definition at line 129 of file cons_sos2.c.
#define EVENTHDLR_EVENT_TYPE (SCIP_EVENTTYPE_BOUNDCHANGED | SCIP_EVENTTYPE_GBDCHANGED) |
Definition at line 131 of file cons_sos2.c.
|
static |
fix variable in given node to 0 or add constraint if variable is multi-aggregated
scip | SCIP pointer |
var | variable to be fixed to 0 |
node | node |
infeasible | if fixing is infeasible |
Definition at line 154 of file cons_sos2.c.
References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_MULTAGGR, SCIPaddConsNode(), SCIPchgVarLbNode(), SCIPchgVarUbNode(), SCIPcreateConsLinear(), SCIPdebugMsg, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPisFeasZero(), SCIPreleaseCons(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), TRUE, and var.
Referenced by enforceSOS2().
|
static |
fix variable in local node to 0, and return whether the operation was feasible
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 205 of file cons_sos2.c.
References FALSE, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_VARSTATUS_MULTAGGR, SCIPinferVarLbCons(), SCIPinferVarUbCons(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPvarGetLbLocal(), SCIPvarGetStatus(), SCIPvarGetUbLocal(), TRUE, and var.
Referenced by propSOS2().
|
static |
add lock on variable
scip | SCIP data structure |
cons | constraint |
var | variable |
Definition at line 248 of file cons_sos2.c.
References assert(), NULL, SCIP_CALL, SCIP_OKAY, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPlockVarCons(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and var.
Referenced by handleNewVariableSOS2(), and presolRoundSOS2().
|
static |
remove lock on variable
scip | SCIP data structure |
cons | constraint |
var | variable |
Definition at line 268 of file cons_sos2.c.
References assert(), NULL, SCIP_CALL, SCIP_OKAY, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPunlockVarCons(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and var.
Referenced by deleteVarSOS2(), and presolRoundSOS2().
|
static |
ensures that the vars and weights array can store at least num entries
scip | SCIP data structure |
consdata | constraint data |
num | minimum number of entries to store |
reserveWeights | whether the weights array is handled |
Definition at line 288 of file cons_sos2.c.
References assert(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), and SCIPreallocBlockMemoryArray.
Referenced by addVarSOS2(), and appendVarSOS2().
|
static |
handle new variable
scip | SCIP data structure |
cons | constraint |
consdata | constraint data |
var | variable |
transformed | whether original variable was transformed |
Definition at line 316 of file cons_sos2.c.
References assert(), EVENTHDLR_EVENT_TYPE, lockVariableSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPaddVarToRow(), SCIPcatchVarEvent(), SCIPchgRowLhs(), SCIPchgRowRhs(), SCIPconsGetHdlr(), SCIPconshdlrGetData(), SCIPisFeasGT(), SCIPisFeasLT(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIProwGetLhs(), SCIProwGetRhs(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and var.
Referenced by addVarSOS2(), and appendVarSOS2().
|
static |
adds a variable to an SOS2 constraint, a position given by weight - ascending order
scip | SCIP data structure |
cons | constraint |
var | variable to add to the constraint |
weight | weight to determine position |
Definition at line 373 of file cons_sos2.c.
References assert(), consdataEnsurevarsSizeSOS2(), handleNewVariableSOS2(), NULL, nvars, SCIP_Bool, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsTransformed(), SCIPerrorMessage, SCIPgetTransformedVar(), SCIPvarIsTransformed(), TRUE, and var.
Referenced by SCIPaddVarSOS2().
|
static |
appends a variable to an SOS2 constraint
scip | SCIP data structure |
cons | constraint |
var | variable to add to the constraint |
Definition at line 441 of file cons_sos2.c.
References assert(), consdataEnsurevarsSizeSOS2(), FALSE, handleNewVariableSOS2(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsIsTransformed(), SCIPgetTransformedVar(), SCIPvarIsTransformed(), TRUE, and var.
Referenced by SCIPappendVarSOS2().
|
static |
deletes a variable of an SOS2 constraint
scip | SCIP data structure |
cons | constraint |
consdata | constraint data |
eventhdlr | corresponding event handler |
pos | position of variable in array |
Definition at line 497 of file cons_sos2.c.
References assert(), EVENTHDLR_EVENT_TYPE, NULL, nvars, SCIP_CALL, SCIP_OKAY, SCIPdropVarEvent(), and unlockVariableSOS2().
Referenced by presolRoundSOS2().
|
static |
perform one presolving round
We perform the following presolving steps.
We currently do not handle the following:
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 557 of file cons_sos2.c.
References assert(), cutoff, deleteVarSOS2(), EVENTHDLR_EVENT_TYPE, FALSE, lockVariableSOS2(), NULL, nvars, 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, unlockVariableSOS2(), var, and vars.
Referenced by SCIP_DECL_CONSPRESOL().
|
static |
propagate variables
scip | SCIP pointer |
cons | constraint |
consdata | constraint data |
cutoff | whether a cutoff happened |
ngen | pointer to incremental counter for domain changes |
Definition at line 838 of file cons_sos2.c.
References assert(), cutoff, FALSE, inferVariableZero(), NULL, nvars, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetName(), SCIPconsIsModifiable(), SCIPdebugMsg, SCIPdelConsLocal(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPresetConsAge(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbLocal(), TRUE, and vars.
Referenced by enforceSOS2(), and SCIP_DECL_CONSPROP().
|
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\).
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 1036 of file cons_sos2.c.
References assert(), branchCons(), c, cutoff, fixVariableZeroNode(), NULL, nvars, propSOS2(), REALABS, result, 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(), sol, vars, and w.
Referenced by SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().
|
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\).
scip | SCIP pointer |
conshdlr | constraint handler |
cons | constraint |
local | produce local cut? |
Definition at line 1238 of file cons_sos2.c.
References assert(), FALSE, NULL, nvars, REALABS, SCIP_Bool, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddVarsToRowSameCoef(), SCIPconsGetData(), SCIPconsGetName(), SCIPcreateEmptyRowCons(), SCIPdebug, SCIPinfinity(), SCIPisFeasZero(), SCIPisInfinity(), SCIPprintRow(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and vars.
Referenced by SCIP_DECL_CONSINITLP(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().
|
static |
copy method for constraint handler plugins (called when SCIP copies plugins)
Definition at line 1337 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrSOS2(), TRUE, and valid.
|
static |
destructor of constraint handler to free constraint handler data (called when SCIP is exiting)
Definition at line 1354 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, NULL, SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrGetName(), and SCIPfreeBlockMemory.
|
static |
solving process deinitialization method of constraint handler (called before branch and bound process data is freed)
Definition at line 1373 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, and SCIPreleaseRow().
|
static |
frees specific constraint data
Definition at line 1405 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, EVENTHDLR_EVENT_TYPE, NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetName(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsTransformed(), SCIPdebugMsg, SCIPdropVarEvent(), SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, and SCIPreleaseRow().
|
static |
transforms constraint data into data belonging to the transformed problem
Definition at line 1454 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, EVENTHDLR_EVENT_TYPE, NULL, SCIP_CALL, 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().
|
static |
presolving method of constraint handler
Definition at line 1537 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, cutoff, NULL, presolRoundSOS2(), result, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SUCCESS, SCIPconsGetData(), SCIPconshdlrGetData(), SCIPconshdlrGetName(), SCIPconsIsModifiable(), SCIPdebug, and SCIPdebugMsg.
|
static |
LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved)
Definition at line 1606 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, FALSE, generateRowSOS2(), NULL, REALABS, SCIP_CALL, SCIP_OKAY, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisInfinity(), SCIPprintRow(), SCIProwGetLhs(), SCIProwGetRhs(), and SCIProwIsInLP().
|
static |
separation method of constraint handler for LP solutions
Definition at line 1650 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, cutoff, FALSE, generateRowSOS2(), NULL, result, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SEPARATED, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisCutEfficacious(), SCIPprintRow(), SCIPresetConsAge(), and SCIProwIsInLP().
|
static |
separation method of constraint handler for arbitrary primal solutions
Definition at line 1706 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, cutoff, FALSE, generateRowSOS2(), NULL, result, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_SEPARATED, SCIPaddRow(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebug, SCIPdebugMsg, SCIPisCutEfficacious(), SCIPprintRow(), SCIPresetConsAge(), SCIProwIsInLP(), and sol.
|
static |
constraint enforcing method of constraint handler for LP solutions
Definition at line 1762 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, enforceSOS2(), NULL, result, SCIP_CALL, SCIP_OKAY, and SCIPconshdlrGetName().
|
static |
constraint enforcing method of constraint handler for relaxation solutions
Definition at line 1778 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, enforceSOS2(), NULL, result, SCIP_CALL, SCIP_OKAY, SCIPconshdlrGetName(), and sol.
|
static |
constraint enforcing method of constraint handler for pseudo solutions
Definition at line 1794 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, enforceSOS2(), NULL, result, SCIP_CALL, SCIP_OKAY, and SCIPconshdlrGetName().
|
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 1815 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, NULL, result, SCIP_CALL, SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetSolVal(), SCIPinfoMessage(), SCIPisFeasZero(), SCIPprintCons(), SCIPresetConsAge(), SCIPupdateSolConsViolation(), SCIPvarGetName(), and sol.
|
static |
domain propagation method of constraint handler
Definition at line 1884 of file cons_sos2.c.
References assert(), c, CONSHDLR_NAME, cutoff, NULL, propSOS2(), result, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_REDUCEDDOM, SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, and SCIPisTransformed().
|
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 1933 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, FALSE, NULL, nvars, result, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SUCCESS, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPisFeasNegative(), SCIPisFeasPositive(), and var.
|
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.
Definition at line 1985 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, NULL, nvars, SCIP_CALL, SCIP_LOCKTYPE_MODEL, SCIP_OKAY, SCIPaddVarLocksType(), SCIPconsGetData(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPdebugMsg, SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), var, and vars.
|
static |
constraint display method of constraint handler
Definition at line 2027 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconshdlrGetName(), SCIPinfoMessage(), and SCIPwriteVarName().
|
static |
constraint copying method of constraint handler
Definition at line 2057 of file cons_sos2.c.
References assert(), CONSHDLR_NAME, NULL, nvars, propagate, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconshdlrGetName(), SCIPcreateConsSOS2(), SCIPdebugMsg, SCIPduplicateBufferArray, SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetVarCopy(), TRUE, and valid.
|
static |
constraint parsing method of constraint handler
Definition at line 2121 of file cons_sos2.c.
References FALSE, NULL, propagate, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddVarSOS2(), SCIPcreateConsSOS2(), SCIPerrorMessage, SCIPparseVarName(), SCIPreleaseCons(), SCIPskipSpace(), TRUE, and var.
|
static |
constraint method of constraint handler which returns the variables (if possible)
Definition at line 2205 of file cons_sos2.c.
References assert(), BMScopyMemoryArray, FALSE, NULL, nvars, SCIP_OKAY, SCIPconsGetData(), TRUE, and vars.
|
static |
constraint method of constraint handler which returns the number of variables (if possible)
Definition at line 2228 of file cons_sos2.c.
References assert(), NULL, SCIP_OKAY, SCIPconsGetData(), and TRUE.
|
static |
constraint handler method which returns the permutation symmetry detection graph of a constraint
Definition at line 2244 of file cons_sos2.c.
References assert(), FALSE, i, NULL, nvars, SCIP_CALL, 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.
|
static |
constraint handler method which returns the signed permutation symmetry detection graph of a constraint
Definition at line 2319 of file cons_sos2.c.
References assert(), FALSE, i, NULL, nvars, SCIP_Bool, SCIP_CALL, 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.
|
static |
exec the event handler
We update the number of variables fixed to be nonzero
Definition at line 2438 of file cons_sos2.c.
References assert(), 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(), SCIPisFeasNegative(), SCIPisFeasPositive(), SCIPlockVarCons(), SCIPunlockVarCons(), SCIPvarGetName(), TRUE, and var.