Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

constraint handler that checks bounds on fixed variables

Author
Stefan Vigerske

For each original variable that has a counterpart in the transformed problem which is not active (i.e., fixed, negated, aggregated, or multiaggregated), check the original bounds. In enforcement, add a cut that enforces the bounds or tighten LP feasibility tolerance.

Definition in file cons_fixedvar.c.

#include <assert.h>
#include "scip/cons_fixedvar.h"

Go to the source code of this file.

Macros

#define CONSHDLR_NAME   "fixedvar"
 
#define CONSHDLR_DESC   "check bounds of original variables that are not active in transformed problem"
 
#define CONSHDLR_ENFOPRIORITY   -7000000
 
#define CONSHDLR_CHECKPRIORITY   -7000000
 
#define CONSHDLR_EAGERFREQ   -1
 
#define CONSHDLR_NEEDSCONS   FALSE
 
#define DEFAULT_ENABLED   TRUE
 
#define DEFAULT_SUBSCIPS   TRUE
 
#define DEFAULT_PREFERCUT   TRUE
 
#define assertSmallViolation(lb, val, ub)   (assert((val) >= (lb) - 0.5 && (val) <= (ub) + 0.5));
 

Functions

static SCIP_RETCODE addCut (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Bool *success, SCIP_Bool *cutoff)
 
static SCIP_DECL_CONSHDLRCOPY (conshdlrCopyFixedvar)
 
static SCIP_DECL_CONSFREE (consFreeFixedvar)
 
static SCIP_DECL_CONSINITSOL (consInitsolFixedvar)
 
static SCIP_DECL_CONSEXITSOL (consExitsolFixedvar)
 
static SCIP_DECL_CONSENFOLP (consEnfolpFixedvar)
 
static SCIP_DECL_CONSENFORELAX (consEnforelaxFixedvar)
 
static SCIP_DECL_CONSENFOPS (consEnfopsFixedvar)
 
static SCIP_DECL_CONSCHECK (consCheckFixedvar)
 
static SCIP_DECL_CONSLOCK (consLockFixedvar)
 
SCIP_RETCODE SCIPincludeConshdlrFixedvar (SCIP *scip)
 

Macro Definition Documentation

◆ CONSHDLR_NAME

#define CONSHDLR_NAME   "fixedvar"

Definition at line 44 of file cons_fixedvar.c.

Referenced by SCIP_DECL_CONSHDLRCOPY(), and SCIPincludeConshdlrFixedvar().

◆ CONSHDLR_DESC

#define CONSHDLR_DESC   "check bounds of original variables that are not active in transformed problem"

Definition at line 45 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ CONSHDLR_ENFOPRIORITY

#define CONSHDLR_ENFOPRIORITY   -7000000

priority of the constraint handler for constraint enforcing

Definition at line 46 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ CONSHDLR_CHECKPRIORITY

#define CONSHDLR_CHECKPRIORITY   -7000000

priority of the constraint handler for checking feasibility

Definition at line 47 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ CONSHDLR_EAGERFREQ

#define CONSHDLR_EAGERFREQ   -1

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 48 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ CONSHDLR_NEEDSCONS

#define CONSHDLR_NEEDSCONS   FALSE

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

Definition at line 51 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ DEFAULT_ENABLED

#define DEFAULT_ENABLED   TRUE

enable constraint handler

Definition at line 54 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ DEFAULT_SUBSCIPS

#define DEFAULT_SUBSCIPS   TRUE

also run in subSCIPs

Definition at line 55 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ DEFAULT_PREFERCUT

#define DEFAULT_PREFERCUT   TRUE

whether to prefer separation over tightening LP feastol in enforcement

Definition at line 56 of file cons_fixedvar.c.

Referenced by SCIPincludeConshdlrFixedvar().

◆ assertSmallViolation

#define assertSmallViolation (   lb,
  val,
  ub 
)    (assert((val) >= (lb) - 0.5 && (val) <= (ub) + 0.5));

an assert for checking that the violation is not so large

The idea of this constraint handler is the handling of tiny bound violations that are scaled up above the feasibility tolerance by aggregation factors. Usually, the violation should still be rather "small". For this test, we quantify "small" as 0.5.

Definition at line 85 of file cons_fixedvar.c.

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

Function Documentation

◆ addCut()

static SCIP_RETCODE addCut ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_SOL sol,
SCIP_VAR var,
SCIP_Bool success,
SCIP_Bool cutoff 
)
static

add cut to enforce global bounds on variable aggregation

Given an original fixed variable x, add cut lb <= x <= ub. SCIP will replace x by the corresponding aggregation of x in the transformed problem. Though we only need to enforce original bounds on x, we use here the global bounds on x for lb/ub, as these should be as tight as or tighter than the original bounds.

Parameters
scipSCIP data structure
conshdlrfixedvar conshdlr
solsolution that is enforced
varfixed original variable which bound is violated
successbuffer to store whether cut was added
cutoffbuffer to store whether a cutoff was detected

Definition at line 95 of file cons_fixedvar.c.

References FALSE, NULL, SCIP_CALL, SCIP_DECL_CONSHDLRCOPY(), SCIP_MAXSTRLEN, SCIP_OKAY, SCIPaddRow(), SCIPaddVarToRow(), SCIPcreateEmptyRowConshdlr(), SCIPdebugMsg, SCIPgetRowSolFeasibility(), SCIPgetSolVal(), SCIPisFeasNegative(), SCIPprintRow(), SCIPreleaseRow(), SCIPsnprintf(), SCIPvarGetLbGlobal(), SCIPvarGetLbOriginal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbOriginal(), and TRUE.

Referenced by SCIP_DECL_CONSENFOLP(), and SCIP_DECL_CONSENFORELAX().

◆ SCIP_DECL_CONSHDLRCOPY()

static SCIP_DECL_CONSHDLRCOPY ( conshdlrCopyFixedvar  )
static

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

Definition at line 146 of file cons_fixedvar.c.

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

Referenced by addCut().

◆ SCIP_DECL_CONSFREE()

static SCIP_DECL_CONSFREE ( consFreeFixedvar  )
static

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

Definition at line 164 of file cons_fixedvar.c.

References NULL, SCIP_DECL_CONSINITSOL(), SCIP_OKAY, SCIPconshdlrGetData(), SCIPconshdlrSetData(), and SCIPfreeBlockMemory.

Referenced by SCIP_DECL_CONSHDLRCOPY().

◆ SCIP_DECL_CONSINITSOL()

static SCIP_DECL_CONSINITSOL ( consInitsolFixedvar  )
static

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

Definition at line 181 of file cons_fixedvar.c.

References NULL, SCIP_CALL, SCIP_DECL_CONSEXITSOL(), SCIP_OKAY, SCIPallocBlockMemoryArray, SCIPconshdlrGetData(), SCIPgetNFixedVars(), SCIPgetNOrigVars(), SCIPgetOrigVars(), SCIPgetTransformedVar(), SCIPisInfinity(), SCIPvarGetLbOriginal(), SCIPvarGetUbOriginal(), and SCIPvarIsActive().

Referenced by SCIP_DECL_CONSFREE().

◆ SCIP_DECL_CONSEXITSOL()

static SCIP_DECL_CONSEXITSOL ( consExitsolFixedvar  )
static

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

Definition at line 239 of file cons_fixedvar.c.

References NULL, SCIP_DECL_CONSENFOLP(), SCIP_OKAY, SCIPconshdlrGetData(), and SCIPfreeBlockMemoryArrayNull.

Referenced by SCIP_DECL_CONSINITSOL().

◆ SCIP_DECL_CONSENFOLP()

◆ SCIP_DECL_CONSENFORELAX()

static SCIP_DECL_CONSENFORELAX ( consEnforelaxFixedvar  )
static

◆ SCIP_DECL_CONSENFOPS()

static SCIP_DECL_CONSENFOPS ( consEnfopsFixedvar  )
static

◆ SCIP_DECL_CONSCHECK()

◆ SCIP_DECL_CONSLOCK()

static SCIP_DECL_CONSLOCK ( consLockFixedvar  )
static

variable rounding lock method of constraint handler

Definition at line 557 of file cons_fixedvar.c.

References SCIP_OKAY, and SCIPincludeConshdlrFixedvar().

Referenced by SCIP_DECL_CONSCHECK().