Scippy

SCIP

Solving Constraint Integer Programs

cons_or.c File Reference

Detailed Description

Constraint handler for "or" constraints, \(r = x_1 \vee x_2 \vee \dots \vee x_n\).

Author
Tobias Achterberg
Stefan Heinz
Michael Winkler

This constraint handler deals with "or" constraint. These are constraint of the form:

\[ r = x_1 \vee x_2 \vee \dots \vee x_n \]

where \(x_i\) is a binary variable for all \(i\). Hence, \(r\) is also of binary type. The variable \(r\) is called resultant and the \(x\)'s operators.

Definition in file cons_or.c.

#include "blockmemshell/memory.h"
#include "scip/cons_and.h"
#include "scip/cons_or.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_var.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_probing.h"
#include "scip/scip_sol.h"
#include "scip/scip_tree.h"
#include "scip/scip_var.h"
#include <string.h>

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "or"
 
#define CONSHDLR_DESC   "constraint handler for or constraints: r = or(x1, ..., xn)"
 
#define CONSHDLR_SEPAPRIORITY   +850000
 
#define CONSHDLR_ENFOPRIORITY   -850000
 
#define CONSHDLR_CHECKPRIORITY   -850000
 
#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_MEDIUM
 
#define EVENTHDLR_NAME   "or"
 
#define EVENTHDLR_DESC   "event handler for or constraints"
 

Typedefs

typedef enum Proprule PROPRULE
 

Enumerations

enum  Proprule {
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_INVALID,
  PROPRULE_INVALID = 0,
  PROPRULE_1 = 1,
  PROPRULE_2 = 2,
  PROPRULE_3 = 3,
  PROPRULE_4 = 4,
  PROPRULE_1_CORETIMES = 1,
  PROPRULE_2_EDGEFINDING = 2,
  PROPRULE_3_TTEF = 3,
  PROPRULE_1_RHS = 1,
  PROPRULE_1_LHS = 2,
  PROPRULE_1_RANGEDROW = 3,
  PROPRULE_INVALID = 0,
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_INVALID,
  PROPRULE_1,
  PROPRULE_2,
  PROPRULE_3,
  PROPRULE_4,
  PROPRULE_0,
  PROPRULE_1,
  PROPRULE_INTLB,
  PROPRULE_INTUB,
  PROPRULE_INVALID
}
 

Functions

static SCIP_RETCODE lockRounding (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
 
static SCIP_RETCODE unlockRounding (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
 
static SCIP_RETCODE conshdlrdataCreate (SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr)
 
static SCIP_RETCODE conshdlrdataFree (SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
 
static int consdataGetNRows (SCIP_CONSDATA *consdata)
 
static SCIP_RETCODE consdataCatchWatchedEvents (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_EVENTHDLR *eventhdlr, int pos, int *filterpos)
 
static SCIP_RETCODE consdataDropWatchedEvents (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_EVENTHDLR *eventhdlr, int pos, int filterpos)
 
static SCIP_RETCODE consdataCatchEvents (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_EVENTHDLR *eventhdlr)
 
static SCIP_RETCODE consdataDropEvents (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_EVENTHDLR *eventhdlr)
 
static SCIP_RETCODE consdataSwitchWatchedvars (SCIP *scip, SCIP_CONSDATA *consdata, SCIP_EVENTHDLR *eventhdlr, int watchedvar1, int watchedvar2)
 
static SCIP_RETCODE consdataEnsureVarsSize (SCIP *scip, SCIP_CONSDATA *consdata, int num)
 
static SCIP_RETCODE consdataCreate (SCIP *scip, SCIP_CONSDATA **consdata, SCIP_EVENTHDLR *eventhdlr, int nvars, SCIP_VAR **vars, SCIP_VAR *resvar)
 
static SCIP_RETCODE consdataFreeRows (SCIP *scip, SCIP_CONSDATA *consdata)
 
static SCIP_RETCODE consdataFree (SCIP *scip, SCIP_CONSDATA **consdata, SCIP_EVENTHDLR *eventhdlr)
 
static SCIP_RETCODE consdataPrint (SCIP *scip, SCIP_CONSDATA *consdata, FILE *file)
 
static SCIP_RETCODE addCoef (SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_VAR *var)
 
static SCIP_RETCODE delCoefPos (SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos)
 
static SCIP_RETCODE applyFixings (SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr)
 
static SCIP_RETCODE createRelaxation (SCIP *scip, SCIP_CONS *cons)
 
static SCIP_RETCODE addRelaxation (SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible)
 
static SCIP_RETCODE checkCons (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checklprows, SCIP_Bool printreason, SCIP_Bool *violated)
 
static SCIP_RETCODE separateCons (SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *separated)
 
static SCIP_RETCODE analyzeConflictZero (SCIP *scip, SCIP_CONS *cons, int truepos)
 
static SCIP_RETCODE analyzeConflictOne (SCIP *scip, SCIP_CONS *cons)
 
static SCIP_RETCODE propagateCons (SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *cutoff, int *nfixedvars)
 
static SCIP_RETCODE resolvePropagation (SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, PROPRULE proprule, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result)
 
static SCIP_RETCODE upgradeCons (SCIP *scip, SCIP_CONS *cons, int *nupgdconss)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyOr)
 
static SCIP_DECL_CONSFREE (consFreeOr)
 
static SCIP_DECL_CONSEXITSOL (consExitsolOr)
 
static SCIP_DECL_CONSDELETE (consDeleteOr)
 
static SCIP_DECL_CONSTRANS (consTransOr)
 
static SCIP_DECL_CONSINITLP (consInitlpOr)
 
static SCIP_DECL_CONSSEPALP (consSepalpOr)
 
static SCIP_DECL_CONSSEPASOL (consSepasolOr)
 
static SCIP_DECL_CONSENFOLP (consEnfolpOr)
 
static SCIP_DECL_CONSENFORELAX (consEnforelaxOr)
 
static SCIP_DECL_CONSENFOPS (consEnfopsOr)
 
static SCIP_DECL_CONSCHECK (consCheckOr)
 
static SCIP_DECL_CONSPROP (consPropOr)
 
static SCIP_DECL_CONSPRESOL (consPresolOr)
 
static SCIP_DECL_CONSRESPROP (consRespropOr)
 
static SCIP_DECL_CONSLOCK (consLockOr)
 
static SCIP_DECL_CONSPRINT (consPrintOr)
 
static SCIP_DECL_CONSCOPY (consCopyOr)
 
static SCIP_DECL_CONSPARSE (consParseOr)
 
static SCIP_DECL_CONSGETVARS (consGetVarsOr)
 
static SCIP_DECL_CONSGETNVARS (consGetNVarsOr)
 
static SCIP_DECL_EVENTEXEC (eventExecOr)
 
SCIP_RETCODE SCIPincludeConshdlrOr (SCIP *scip)
 
SCIP_RETCODE SCIPcreateConsOr (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
 
SCIP_RETCODE SCIPcreateConsBasicOr (SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars)
 
int SCIPgetNVarsOr (SCIP *scip, SCIP_CONS *cons)
 
SCIP_VAR ** SCIPgetVarsOr (SCIP *scip, SCIP_CONS *cons)
 
SCIP_VARSCIPgetResultantOr (SCIP *scip, SCIP_CONS *cons)
 

Macro Definition Documentation

◆ CONSHDLR_NAME

#define CONSHDLR_NAME   "or"

◆ CONSHDLR_DESC

#define CONSHDLR_DESC   "constraint handler for or constraints: r = or(x1, ..., xn)"

Definition at line 63 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_SEPAPRIORITY

#define CONSHDLR_SEPAPRIORITY   +850000

priority of the constraint handler for separation

Definition at line 64 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_ENFOPRIORITY

#define CONSHDLR_ENFOPRIORITY   -850000

priority of the constraint handler for constraint enforcing

Definition at line 65 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_CHECKPRIORITY

#define CONSHDLR_CHECKPRIORITY   -850000

priority of the constraint handler for checking feasibility

Definition at line 66 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_SEPAFREQ

#define CONSHDLR_SEPAFREQ   0

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

Definition at line 67 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_PROPFREQ

#define CONSHDLR_PROPFREQ   1

frequency for propagating domains; zero means only preprocessing propagation

Definition at line 68 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ 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 69 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_MAXPREROUNDS

#define CONSHDLR_MAXPREROUNDS   -1

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

Definition at line 72 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_DELAYSEPA

#define CONSHDLR_DELAYSEPA   FALSE

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

Definition at line 73 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_DELAYPROP

#define CONSHDLR_DELAYPROP   FALSE

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

Definition at line 74 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_NEEDSCONS

#define CONSHDLR_NEEDSCONS   TRUE

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

Definition at line 75 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_PROP_TIMING

#define CONSHDLR_PROP_TIMING   SCIP_PROPTIMING_BEFORELP

propagation timing mask of the constraint handler

Definition at line 77 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ CONSHDLR_PRESOLTIMING

#define CONSHDLR_PRESOLTIMING   SCIP_PRESOLTIMING_MEDIUM

presolving timing of the constraint handler (fast, medium, or exhaustive)

Definition at line 78 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ EVENTHDLR_NAME

#define EVENTHDLR_NAME   "or"

Definition at line 80 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

◆ EVENTHDLR_DESC

#define EVENTHDLR_DESC   "event handler for or constraints"

Definition at line 81 of file cons_or.c.

Referenced by SCIPincludeConshdlrOr().

Typedef Documentation

◆ PROPRULE

typedef enum Proprule PROPRULE

Definition at line 126 of file cons_or.c.

Enumeration Type Documentation

◆ Proprule

enum Proprule
Enumerator
PROPRULE_1 

left hand side and bounds on z -> lower bound on x

PROPRULE_2 

left hand side and upper bound on x -> bound on z

PROPRULE_3 

right hand side and bounds on z -> upper bound on x

PROPRULE_4 

right hand side and lower bound on x -> bound on z

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

v_i = FALSE => r = FALSE

PROPRULE_2 

r = TRUE => v_i = TRUE for all i

PROPRULE_3 

v_i = TRUE for all i => r = TRUE

PROPRULE_4 

r = FALSE, v_i = TRUE for all i except j => v_j = FALSE

PROPRULE_1_CORETIMES 

core-time propagator

PROPRULE_2_EDGEFINDING 

edge-finder

PROPRULE_3_TTEF 

time-table edeg-finding

PROPRULE_1_RHS 

activity residuals of all other variables tighten bounds of single variable due to the right hand side of the inequality

PROPRULE_1_LHS 

activity residuals of all other variables tighten bounds of single variable due to the left hand side of the inequality

PROPRULE_1_RANGEDROW 

fixed variables and gcd of all left variables tighten bounds of a single variable in this reanged row

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

v_i = TRUE => r = TRUE

PROPRULE_2 

r = FALSE => v_i = FALSE for all i

PROPRULE_3 

v_i = FALSE for all i => r = FALSE

PROPRULE_4 

r = TRUE, v_i = FALSE for all i except j => v_j = TRUE

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

PROPRULE_1 

left hand side and bounds on y -> lower bound on x

PROPRULE_2 

left hand side and upper bound on x -> bound on y

PROPRULE_3 

right hand side and bounds on y -> upper bound on x

PROPRULE_4 

right hand side and lower bound on x -> bound on y

PROPRULE_0 

all variables are fixed => fix integral variable

PROPRULE_1 

all except one variable fixed => fix remaining variable

PROPRULE_INTLB 

lower bound propagation of integral variable

PROPRULE_INTUB 

upper bound propagation of integral variable

PROPRULE_INVALID 

propagation was applied without a specific propagation rule

Definition at line 118 of file cons_or.c.

Function Documentation

◆ lockRounding()

static SCIP_RETCODE lockRounding ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR var 
)
static

installs rounding locks for the given variable in the given or constraint

Parameters
scipSCIP data structure
consor constraint
varvariable of constraint entry

Definition at line 135 of file cons_or.c.

References SCIP_CALL, SCIP_LOCKTYPE_CONFLICT, SCIP_OKAY, SCIPconsIsLockedType(), SCIPlockVarCons(), TRUE, and unlockRounding().

Referenced by addCoef().

◆ unlockRounding()

static SCIP_RETCODE unlockRounding ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR var 
)
static

removes rounding locks for the given variable in the given or constraint

Parameters
scipSCIP data structure
consor constraint
varvariable of constraint entry

Definition at line 151 of file cons_or.c.

References conshdlrdataCreate(), SCIP_CALL, SCIP_LOCKTYPE_CONFLICT, SCIP_OKAY, SCIPconsIsLockedType(), SCIPunlockVarCons(), and TRUE.

Referenced by delCoefPos(), and lockRounding().

◆ conshdlrdataCreate()

static SCIP_RETCODE conshdlrdataCreate ( SCIP scip,
SCIP_CONSHDLRDATA **  conshdlrdata,
SCIP_EVENTHDLR eventhdlr 
)
static

creates constraint handler data

Parameters
scipSCIP data structure
conshdlrdatapointer to store the constraint handler data
eventhdlrevent handler

Definition at line 167 of file cons_or.c.

References conshdlrdataFree(), NULL, SCIP_CALL, SCIP_OKAY, and SCIPallocBlockMemory.

Referenced by SCIPincludeConshdlrOr(), and unlockRounding().

◆ conshdlrdataFree()

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

frees constraint handler data

Parameters
scipSCIP data structure
conshdlrdatapointer to the constraint handler data

Definition at line 187 of file cons_or.c.

References consdataGetNRows(), NULL, SCIP_OKAY, and SCIPfreeBlockMemory.

Referenced by conshdlrdataCreate(), and SCIP_DECL_CONSFREE().

◆ consdataGetNRows()

static int consdataGetNRows ( SCIP_CONSDATA consdata)
static

gets number of LP rows needed for the LP relaxation of the constraint

Parameters
consdataconstraint data

Definition at line 202 of file cons_or.c.

References consdataCatchWatchedEvents(), and NULL.

Referenced by addRelaxation(), checkCons(), consdataFreeRows(), conshdlrdataFree(), createRelaxation(), and separateCons().

◆ consdataCatchWatchedEvents()

static SCIP_RETCODE consdataCatchWatchedEvents ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_EVENTHDLR eventhdlr,
int  pos,
int *  filterpos 
)
static

catches events for the watched variable at given position

Parameters
scipSCIP data structure
consdataor constraint data
eventhdlrevent handler to call for the event processing
posarray position of variable to catch bound change events for
filterpospointer to store position of event filter entry

Definition at line 213 of file cons_or.c.

References consdataDropWatchedEvents(), NULL, SCIP_CALL, SCIP_EVENTTYPE_LBRELAXED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, and SCIPcatchVarEvent().

Referenced by consdataGetNRows(), and consdataSwitchWatchedvars().

◆ consdataDropWatchedEvents()

static SCIP_RETCODE consdataDropWatchedEvents ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_EVENTHDLR eventhdlr,
int  pos,
int  filterpos 
)
static

drops events for the watched variable at given position

Parameters
scipSCIP data structure
consdataor constraint data
eventhdlrevent handler to call for the event processing
posarray position of watched variable to drop bound change events for
filterposposition of event filter entry

Definition at line 237 of file cons_or.c.

References consdataCatchEvents(), NULL, SCIP_CALL, SCIP_EVENTTYPE_LBRELAXED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, and SCIPdropVarEvent().

Referenced by consdataCatchWatchedEvents(), and consdataSwitchWatchedvars().

◆ consdataCatchEvents()

static SCIP_RETCODE consdataCatchEvents ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_EVENTHDLR eventhdlr 
)
static

catches needed events on all variables of constraint, except the special ones for watched variables

Parameters
scipSCIP data structure
consdataor constraint data
eventhdlrevent handler to call for the event processing

Definition at line 260 of file cons_or.c.

References consdataDropEvents(), NULL, SCIP_CALL, SCIP_EVENTTYPE_BOUNDCHANGED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_OKAY, and SCIPcatchVarEvent().

Referenced by consdataCreate(), and consdataDropWatchedEvents().

◆ consdataDropEvents()

static SCIP_RETCODE consdataDropEvents ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_EVENTHDLR eventhdlr 
)
static

drops events on all variables of constraint, except the special ones for watched variables

Parameters
scipSCIP data structure
consdataor constraint data
eventhdlrevent handler to call for the event processing

Definition at line 286 of file cons_or.c.

References consdataSwitchWatchedvars(), NULL, SCIP_CALL, SCIP_EVENTTYPE_BOUNDCHANGED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_OKAY, and SCIPdropVarEvent().

Referenced by consdataCatchEvents(), and consdataFree().

◆ consdataSwitchWatchedvars()

static SCIP_RETCODE consdataSwitchWatchedvars ( SCIP scip,
SCIP_CONSDATA consdata,
SCIP_EVENTHDLR eventhdlr,
int  watchedvar1,
int  watchedvar2 
)
static

stores the given variable numbers as watched variables, and updates the event processing

Parameters
scipSCIP data structure
consdataor constraint data
eventhdlrevent handler to call for the event processing
watchedvar1new first watched variable
watchedvar2new second watched variable

Definition at line 312 of file cons_or.c.

References consdataCatchWatchedEvents(), consdataDropWatchedEvents(), consdataEnsureVarsSize(), NULL, SCIP_CALL, and SCIP_OKAY.

Referenced by consdataDropEvents(), consdataFree(), delCoefPos(), and propagateCons().

◆ consdataEnsureVarsSize()

static SCIP_RETCODE consdataEnsureVarsSize ( SCIP scip,
SCIP_CONSDATA consdata,
int  num 
)
static

ensures, that the vars array can store at least num entries

Parameters
scipSCIP data structure
consdatalinear constraint data
numminimum number of entries to store

Definition at line 372 of file cons_or.c.

References consdataCreate(), NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), and SCIPreallocBlockMemoryArray.

Referenced by addCoef(), and consdataSwitchWatchedvars().

◆ consdataCreate()

static SCIP_RETCODE consdataCreate ( SCIP scip,
SCIP_CONSDATA **  consdata,
SCIP_EVENTHDLR eventhdlr,
int  nvars,
SCIP_VAR **  vars,
SCIP_VAR resvar 
)
static

creates constraint data for or constraint

Parameters
scipSCIP data structure
consdatapointer to store the constraint data
eventhdlrevent handler to call for the event processing
nvarsnumber of variables in the or operation
varsvariables in or operation
resvarresultant variable

Definition at line 396 of file cons_or.c.

References consdataCatchEvents(), consdataFreeRows(), FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBlockMemory, SCIPduplicateBlockMemoryArray, SCIPgetTransformedVar(), SCIPgetTransformedVars(), and SCIPisTransformed().

Referenced by consdataEnsureVarsSize(), SCIP_DECL_CONSTRANS(), and SCIPcreateConsOr().

◆ consdataFreeRows()

static SCIP_RETCODE consdataFreeRows ( SCIP scip,
SCIP_CONSDATA consdata 
)
static

releases LP rows of constraint data and frees rows array

Parameters
scipSCIP data structure
consdataconstraint data

Definition at line 440 of file cons_or.c.

References consdataFree(), consdataGetNRows(), NULL, r, SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemoryArray, and SCIPreleaseRow().

Referenced by consdataCreate(), consdataFree(), and SCIP_DECL_CONSEXITSOL().

◆ consdataFree()

static SCIP_RETCODE consdataFree ( SCIP scip,
SCIP_CONSDATA **  consdata,
SCIP_EVENTHDLR eventhdlr 
)
static

frees constraint data for or constraint

Parameters
scipSCIP data structure
consdatapointer to the constraint data
eventhdlrevent handler to call for the event processing

Definition at line 467 of file cons_or.c.

References consdataDropEvents(), consdataFreeRows(), consdataPrint(), consdataSwitchWatchedvars(), NULL, SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, and SCIPisTransformed().

Referenced by consdataFreeRows(), and SCIP_DECL_CONSDELETE().

◆ consdataPrint()

static SCIP_RETCODE consdataPrint ( SCIP scip,
SCIP_CONSDATA consdata,
FILE *  file 
)
static

prints or constraint to file stream

Parameters
scipSCIP data structure
consdataor constraint data
fileoutput file (or NULL for standard output)

Definition at line 501 of file cons_or.c.

References addCoef(), NULL, SCIP_CALL, SCIP_OKAY, SCIPinfoMessage(), SCIPwriteVarName(), SCIPwriteVarsList(), and TRUE.

Referenced by applyFixings(), consdataFree(), and SCIP_DECL_CONSPRINT().

◆ addCoef()

static SCIP_RETCODE addCoef ( SCIP scip,
SCIP_CONS cons,
SCIP_EVENTHDLR eventhdlr,
SCIP_VAR var 
)
static

adds coefficient in or constraint

Parameters
scipSCIP data structure
conslinear constraint
eventhdlrevent handler to call for the event processing
varvariable to add to the constraint

Definition at line 526 of file cons_or.c.

References consdataEnsureVarsSize(), delCoefPos(), lockRounding(), NULL, SCIP_Bool, SCIP_CALL, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcatchVarEvent(), SCIPconsGetData(), SCIPconsIsTransformed(), SCIPerrorMessage, SCIPgetTransformedVar(), and SCIPvarIsTransformed().

Referenced by applyFixings(), and consdataPrint().

◆ delCoefPos()

static SCIP_RETCODE delCoefPos ( SCIP scip,
SCIP_CONS cons,
SCIP_EVENTHDLR eventhdlr,
int  pos 
)
static

deletes coefficient at given position from or constraint data

Parameters
scipSCIP data structure
consor constraint
eventhdlrevent handler to call for the event processing
posposition of coefficient to delete

Definition at line 580 of file cons_or.c.

References applyFixings(), consdataSwitchWatchedvars(), FALSE, NULL, SCIP_CALL, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBRELAXED, SCIP_OKAY, SCIPconsGetData(), SCIPconsIsTransformed(), SCIPdropVarEvent(), SCIPvarIsTransformed(), and unlockRounding().

Referenced by addCoef(), and applyFixings().

◆ applyFixings()

static SCIP_RETCODE applyFixings ( SCIP scip,
SCIP_CONS cons,
SCIP_EVENTHDLR eventhdlr 
)
static

deletes all zero-fixed variables

Parameters
scipSCIP data structure
consor constraint
eventhdlrevent handler to call for the event processing

Definition at line 638 of file cons_or.c.

References addCoef(), consdataPrint(), createRelaxation(), delCoefPos(), NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPdebug, SCIPdebugMsg, SCIPdebugMsgPrint, SCIPgetBinvarRepresentative(), SCIPisFeasEQ(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), and SCIPvarIsBinary().

Referenced by delCoefPos(), and SCIP_DECL_CONSPRESOL().

◆ createRelaxation()

static SCIP_RETCODE createRelaxation ( SCIP scip,
SCIP_CONS cons 
)
static

creates LP rows corresponding to or constraint:

  • for each operator variable vi: resvar - vi >= 0
  • one additional row: resvar - v1 - ... - vn <= 0
Parameters
scipSCIP data structure
consconstraint to check

Definition at line 697 of file cons_or.c.

References addRelaxation(), consdataGetNRows(), NULL, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPaddVarsToRowSameCoef(), SCIPaddVarToRow(), SCIPallocBlockMemoryArray, SCIPconsGetData(), SCIPconsGetHdlr(), SCIPconsGetName(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsRemovable(), SCIPcreateEmptyRowCons(), SCIPinfinity(), and SCIPsnprintf().

Referenced by addRelaxation(), applyFixings(), and separateCons().

◆ addRelaxation()

static SCIP_RETCODE addRelaxation ( SCIP scip,
SCIP_CONS cons,
SCIP_Bool infeasible 
)
static

adds linear relaxation of or constraint to the LP

Parameters
scipSCIP data structure
consconstraint to check
infeasiblepointer to store whether an infeasibility was detected

Definition at line 740 of file cons_or.c.

References checkCons(), consdataGetNRows(), createRelaxation(), FALSE, NULL, r, SCIP_CALL, SCIP_OKAY, SCIPaddRow(), SCIPconsGetData(), and SCIProwIsInLP().

Referenced by createRelaxation(), and SCIP_DECL_CONSINITLP().

◆ checkCons()

static SCIP_RETCODE checkCons ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_Bool  checklprows,
SCIP_Bool  printreason,
SCIP_Bool violated 
)
static

checks or constraint for feasibility of given solution: returns TRUE iff constraint is feasible

Parameters
scipSCIP data structure
consconstraint to check
solsolution to check, NULL for current solution
checklprowsDo constraints represented by rows in the current LP have to be checked?
printreasonShould the reason for the violation be printed?
violatedpointer to store whether the constraint is violated

Definition at line 774 of file cons_or.c.

References consdataGetNRows(), FALSE, NULL, r, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPconsGetData(), SCIPgetSolVal(), SCIPincConsAge(), SCIPinfoMessage(), SCIPisFeasIntegral(), SCIPprintCons(), SCIPresetConsAge(), SCIProwIsInLP(), SCIPupdateSolConsViolation(), SCIPvarGetName(), separateCons(), and TRUE.

Referenced by addRelaxation(), SCIP_DECL_CONSCHECK(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFOPS(), and SCIP_DECL_CONSENFORELAX().

◆ separateCons()

static SCIP_RETCODE separateCons ( SCIP scip,
SCIP_CONS cons,
SCIP_SOL sol,
SCIP_Bool separated 
)
static

separates current LP solution

Parameters
scipSCIP data structure
consconstraint to check
solprimal CIP solution, NULL for current LP solution
separatedpointer to store whether a cut was found

Definition at line 876 of file cons_or.c.

References analyzeConflictZero(), consdataGetNRows(), createRelaxation(), FALSE, NULL, r, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddRow(), SCIPconsGetData(), SCIPgetRowSolFeasibility(), SCIPisFeasNegative(), SCIProwIsInLP(), and TRUE.

Referenced by checkCons(), SCIP_DECL_CONSENFOLP(), SCIP_DECL_CONSENFORELAX(), SCIP_DECL_CONSSEPALP(), and SCIP_DECL_CONSSEPASOL().

◆ analyzeConflictZero()

static SCIP_RETCODE analyzeConflictZero ( SCIP scip,
SCIP_CONS cons,
int  truepos 
)
static

analyzes conflicting FALSE assignment to resultant of given constraint, and adds conflict constraint to problem

Parameters
scipSCIP data structure
consor constraint that detected the conflict
trueposposition of operand that is fixed to TRUE

Definition at line 926 of file cons_or.c.

References analyzeConflictOne(), FALSE, NULL, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPaddConflictBinvar(), SCIPanalyzeConflictCons(), SCIPconsGetData(), SCIPgetStage(), SCIPinitConflictAnalysis(), SCIPinProbing(), SCIPisConflictAnalysisApplicable(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().

Referenced by propagateCons(), and separateCons().

◆ analyzeConflictOne()

static SCIP_RETCODE analyzeConflictOne ( SCIP scip,
SCIP_CONS cons 
)
static

analyzes conflicting TRUE assignment to resultant of given constraint, and adds conflict constraint to problem

Parameters
scipSCIP data structure
consor constraint that detected the conflict

Definition at line 958 of file cons_or.c.

References FALSE, NULL, propagateCons(), SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPaddConflictBinvar(), SCIPanalyzeConflictCons(), SCIPconsGetData(), SCIPconsIsModifiable(), SCIPgetStage(), SCIPinitConflictAnalysis(), SCIPinProbing(), SCIPisConflictAnalysisApplicable(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().

Referenced by analyzeConflictZero(), and propagateCons().

◆ propagateCons()

static SCIP_RETCODE propagateCons ( SCIP scip,
SCIP_CONS cons,
SCIP_EVENTHDLR eventhdlr,
SCIP_Bool cutoff,
int *  nfixedvars 
)
static

propagates constraint with the following rules: (1) v_i = TRUE => r = TRUE (2) r = FALSE => v_i = FALSE for all i (3) v_i = FALSE for all i => r = FALSE (4) r = TRUE, v_i = FALSE for all i except j => v_j = TRUE

Parameters
scipSCIP data structure
consor constraint to be processed
eventhdlrevent handler to call for the event processing
cutoffpointer to store TRUE, if the node can be cut off
nfixedvarspointer to add up the number of found domain reductions

Definition at line 999 of file cons_or.c.

References analyzeConflictOne(), analyzeConflictZero(), consdataSwitchWatchedvars(), FALSE, NULL, PROPRULE_1, PROPRULE_2, PROPRULE_3, PROPRULE_4, resolvePropagation(), SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsModifiable(), SCIPdebugMsg, SCIPdelConsLocal(), SCIPincConsAge(), SCIPinferBinvarCons(), SCIPinRepropagation(), SCIPisFeasEQ(), SCIPresetConsAge(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbLocal(), and TRUE.

Referenced by analyzeConflictOne(), SCIP_DECL_CONSPRESOL(), and SCIP_DECL_CONSPROP().

◆ resolvePropagation()

static SCIP_RETCODE resolvePropagation ( SCIP scip,
SCIP_CONS cons,
SCIP_VAR infervar,
PROPRULE  proprule,
SCIP_BDCHGIDX bdchgidx,
SCIP_RESULT result 
)
static

resolves a conflict on the given variable by supplying the variables needed for applying the corresponding propagation rule (see propagateCons()): (1) v_i = TRUE => r = TRUE (2) r = FALSE => v_i = FALSE for all i (3) v_i = FALSE for all i => r = FALSE (4) r = TRUE, v_i = FALSE for all i except j => v_j = TRUE

Parameters
scipSCIP data structure
consconstraint that inferred the bound change
infervarvariable that was deduced
proprulepropagation rule that deduced the value
bdchgidxbound change index (time stamp of bound change), or NULL for current time
resultpointer to store the result of the propagation conflict resolving call

Definition at line 1238 of file cons_or.c.

References FALSE, NULL, PROPRULE_1, PROPRULE_2, PROPRULE_3, PROPRULE_4, PROPRULE_INVALID, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_SUCCESS, SCIPaddConflictBinvar(), SCIPconsGetData(), SCIPconsGetName(), SCIPerrorMessage, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), TRUE, and upgradeCons().

Referenced by propagateCons(), and SCIP_DECL_CONSRESPROP().

◆ upgradeCons()

static SCIP_RETCODE upgradeCons ( SCIP scip,
SCIP_CONS cons,
int *  nupgdconss 
)
static

upgrades unmodifiable or constraint into an and constraint on negated variables

Parameters
scipSCIP data structure
consconstraint that inferred the bound change
nupgdconsspointer to count the number of constraint upgrades

Definition at line 1324 of file cons_or.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_OKAY, SCIPaddCons(), SCIPallocBufferArray, SCIPconsGetData(), SCIPconsGetName(), SCIPconsIsChecked(), SCIPconsIsDynamic(), SCIPconsIsEnforced(), SCIPconsIsInitial(), SCIPconsIsLocal(), SCIPconsIsModifiable(), SCIPconsIsPropagated(), SCIPconsIsRemovable(), SCIPconsIsSeparated(), SCIPconsIsStickingAtNode(), SCIPcreateConsAnd(), SCIPdebugMsg, SCIPdelCons(), SCIPfreeBufferArray, SCIPgetNegatedVar(), and SCIPreleaseCons().

Referenced by resolvePropagation(), and SCIP_DECL_CONSPRESOL().

◆ SCIP_DECL_CONSHDLRCOPY()

static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyOr  )
static

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

Definition at line 1382 of file cons_or.c.

References CONSHDLR_NAME, NULL, SCIP_CALL, SCIP_DECL_CONSFREE(), SCIP_OKAY, SCIPconshdlrGetName(), SCIPincludeConshdlrOr(), and TRUE.

Referenced by upgradeCons().

◆ SCIP_DECL_CONSFREE()

static SCIP_DECL_CONSFREE ( consFreeOr  )
static

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

Definition at line 1398 of file cons_or.c.

References conshdlrdataFree(), NULL, SCIP_CALL, SCIP_DECL_CONSEXITSOL(), SCIP_OKAY, SCIPconshdlrGetData(), and SCIPconshdlrSetData().

Referenced by SCIP_DECL_CONSHDLRCOPY().

◆ SCIP_DECL_CONSEXITSOL()

static SCIP_DECL_CONSEXITSOL ( consExitsolOr  )
static

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

Definition at line 1416 of file cons_or.c.

References consdataFreeRows(), SCIP_CALL, SCIP_DECL_CONSDELETE(), SCIP_OKAY, and SCIPconsGetData().

Referenced by SCIP_DECL_CONSFREE().

◆ SCIP_DECL_CONSDELETE()

static SCIP_DECL_CONSDELETE ( consDeleteOr  )
static

frees specific constraint data

Definition at line 1434 of file cons_or.c.

References consdataFree(), NULL, SCIP_CALL, SCIP_DECL_CONSTRANS(), SCIP_OKAY, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSEXITSOL().

◆ SCIP_DECL_CONSTRANS()

◆ SCIP_DECL_CONSINITLP()

static SCIP_DECL_CONSINITLP ( consInitlpOr  )
static

LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved)

Definition at line 1478 of file cons_or.c.

References addRelaxation(), FALSE, SCIP_CALL, SCIP_DECL_CONSSEPALP(), SCIP_OKAY, and SCIPconsIsInitial().

Referenced by SCIP_DECL_CONSTRANS().

◆ SCIP_DECL_CONSSEPALP()

static SCIP_DECL_CONSSEPALP ( consSepalpOr  )
static

separation method of constraint handler for LP solutions

Definition at line 1496 of file cons_or.c.

References NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSSEPASOL(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SEPARATED, and separateCons().

Referenced by SCIP_DECL_CONSINITLP().

◆ SCIP_DECL_CONSSEPASOL()

static SCIP_DECL_CONSSEPASOL ( consSepasolOr  )
static

separation method of constraint handler for arbitrary primal solutions

Definition at line 1520 of file cons_or.c.

References SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSENFOLP(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SEPARATED, and separateCons().

Referenced by SCIP_DECL_CONSSEPALP().

◆ SCIP_DECL_CONSENFOLP()

static SCIP_DECL_CONSENFOLP ( consEnfolpOr  )
static

constraint enforcing method of constraint handler for LP solutions

Definition at line 1544 of file cons_or.c.

References checkCons(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSENFORELAX(), SCIP_FEASIBLE, SCIP_OKAY, SCIP_SEPARATED, and separateCons().

Referenced by SCIP_DECL_CONSSEPASOL().

◆ SCIP_DECL_CONSENFORELAX()

static SCIP_DECL_CONSENFORELAX ( consEnforelaxOr  )
static

constraint enforcing method of constraint handler for relaxation solutions

Definition at line 1571 of file cons_or.c.

References checkCons(), FALSE, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSENFOPS(), SCIP_FEASIBLE, SCIP_OKAY, SCIP_SEPARATED, and separateCons().

Referenced by SCIP_DECL_CONSENFOLP().

◆ SCIP_DECL_CONSENFOPS()

static SCIP_DECL_CONSENFOPS ( consEnfopsOr  )
static

constraint enforcing method of constraint handler for pseudo solutions

Definition at line 1598 of file cons_or.c.

References checkCons(), FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSCHECK(), SCIP_FEASIBLE, SCIP_INFEASIBLE, SCIP_OKAY, and TRUE.

Referenced by SCIP_DECL_CONSENFORELAX().

◆ SCIP_DECL_CONSCHECK()

static SCIP_DECL_CONSCHECK ( consCheckOr  )
static

feasibility check method of constraint handler for integral solutions

Definition at line 1621 of file cons_or.c.

References checkCons(), FALSE, SCIP_Bool, SCIP_CALL, SCIP_DECL_CONSPROP(), SCIP_FEASIBLE, SCIP_INFEASIBLE, and SCIP_OKAY.

Referenced by SCIP_DECL_CONSENFOPS().

◆ SCIP_DECL_CONSPROP()

static SCIP_DECL_CONSPROP ( consPropOr  )
static

domain propagation method of constraint handler

Definition at line 1644 of file cons_or.c.

References FALSE, NULL, propagateCons(), SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DECL_CONSPRESOL(), SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_REDUCEDDOM, and SCIPconshdlrGetData().

Referenced by SCIP_DECL_CONSCHECK().

◆ SCIP_DECL_CONSPRESOL()

◆ SCIP_DECL_CONSRESPROP()

static SCIP_DECL_CONSRESPROP ( consRespropOr  )
static

propagation conflict resolving method of constraint handler

Definition at line 1797 of file cons_or.c.

References resolvePropagation(), SCIP_CALL, SCIP_DECL_CONSLOCK(), and SCIP_OKAY.

Referenced by SCIP_DECL_CONSPRESOL().

◆ SCIP_DECL_CONSLOCK()

static SCIP_DECL_CONSLOCK ( consLockOr  )
static

variable rounding lock method of constraint handler

Definition at line 1807 of file cons_or.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSPRINT(), SCIP_LOCKTYPE_MODEL, SCIP_OKAY, SCIPaddVarLocksType(), and SCIPconsGetData().

Referenced by SCIP_DECL_CONSRESPROP().

◆ SCIP_DECL_CONSPRINT()

static SCIP_DECL_CONSPRINT ( consPrintOr  )
static

constraint display method of constraint handler

Definition at line 1832 of file cons_or.c.

References consdataPrint(), NULL, SCIP_CALL, SCIP_DECL_CONSCOPY(), SCIP_OKAY, and SCIPconsGetData().

Referenced by SCIP_DECL_CONSLOCK().

◆ SCIP_DECL_CONSCOPY()

static SCIP_DECL_CONSCOPY ( consCopyOr  )
static

◆ SCIP_DECL_CONSPARSE()

static SCIP_DECL_CONSPARSE ( consParseOr  )
static

◆ SCIP_DECL_CONSGETVARS()

static SCIP_DECL_CONSGETVARS ( consGetVarsOr  )
static

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

Definition at line 1976 of file cons_or.c.

References BMScopyMemoryArray, FALSE, NULL, SCIP_DECL_CONSGETNVARS(), SCIP_OKAY, SCIPconsGetData(), and TRUE.

Referenced by SCIP_DECL_CONSPARSE().

◆ SCIP_DECL_CONSGETNVARS()

static SCIP_DECL_CONSGETNVARS ( consGetNVarsOr  )
static

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

Definition at line 1997 of file cons_or.c.

References NULL, SCIP_DECL_EVENTEXEC(), SCIP_OKAY, SCIPconsGetData(), and TRUE.

Referenced by SCIP_DECL_CONSGETVARS().

◆ SCIP_DECL_EVENTEXEC()

static SCIP_DECL_EVENTEXEC ( eventExecOr  )
static