Scippy

SCIP

Solving Constraint Integer Programs

sepa_cmir.c File Reference

Detailed Description

complemented mixed integer rounding cuts separator (Marchand's version)

Author
Kati Wolter
Tobias Achterberg

Definition in file sepa_cmir.c.

#include <assert.h>
#include <string.h>
#include "scip/sepa_cmir.h"
#include "scip/pub_misc.h"

Go to the source code of this file.

Macros

#define SEPA_NAME   "cmir"
 
#define SEPA_DESC   "complemented mixed integer rounding cuts separator (Marchand's version)"
 
#define SEPA_PRIORITY   -3000
 
#define SEPA_FREQ   0
 
#define SEPA_MAXBOUNDDIST   0.0
 
#define SEPA_USESSUBSCIP   FALSE
 
#define SEPA_DELAY   FALSE
 
#define DEFAULT_MAXROUNDS   3
 
#define DEFAULT_MAXROUNDSROOT   10
 
#define DEFAULT_MAXTRIES   100
 
#define DEFAULT_MAXTRIESROOT   -1
 
#define DEFAULT_MAXFAILS   20
 
#define DEFAULT_MAXFAILSROOT   100
 
#define DEFAULT_MAXAGGRS   3
 
#define DEFAULT_MAXAGGRSROOT   6
 
#define DEFAULT_MAXSEPACUTS   100
 
#define DEFAULT_MAXSEPACUTSROOT   500
 
#define DEFAULT_MAXSLACK   0.0
 
#define DEFAULT_MAXSLACKROOT   0.1
 
#define DEFAULT_DENSITYSCORE   1e-04
 
#define DEFAULT_SLACKSCORE   1e-03
 
#define DEFAULT_MAXAGGDENSITY   0.20
 
#define DEFAULT_MAXROWDENSITY   0.05
 
#define DEFAULT_DENSITYOFFSET   100
 
#define DEFAULT_MAXROWFAC   1e+4
 
#define DEFAULT_MAXTESTDELTA   -1
 
#define DEFAULT_MAXCONTS   10
 
#define DEFAULT_MAXCONTSROOT   10
 
#define DEFAULT_AGGRTOL   0.1
 
#define DEFAULT_TRYNEGSCALING   TRUE
 
#define DEFAULT_FIXINTEGRALRHS   TRUE
 
#define DEFAULT_DYNAMICCUTS   TRUE
 
#define BOUNDSWITCH   0.5
 
#define USEVBDS   TRUE
 
#define ALLOWLOCAL   TRUE
 
#define MINFRAC   0.05
 
#define MAXFRAC   0.999
 
#define MAKECONTINTEGRAL   FALSE
 
#define IMPLINTSARECONT
 
#define MAXAGGRLEN(nvars)   (0.1*(nvars)+1000)
 

Functions

static SCIP_RETCODE storeCutInArrays (SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_Real *cutcoefs, SCIP_Real *varsolvals, SCIP_VAR **cutvars, SCIP_Real *cutvals, int *cutlen, SCIP_Real *cutact)
 
static SCIP_RETCODE addCut (SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_Real *varsolvals, SCIP_Real *cutcoefs, SCIP_Real cutrhs, SCIP_Bool cutislocal, SCIP_Bool cutremovable, int cutrank, const char *cutclassname, SCIP_Bool *cutoff, int *ncuts)
 
static void updateNActiveConts (SCIP *scip, SCIP_Real *varsolvals, SCIP_Real *bestcontlbs, SCIP_Real *bestcontubs, int nintvars, SCIP_VAR *var, int delta, int *nactiveconts)
 
static void decreaseRowScore (SCIP *scip, SCIP_Real *rowlhsscores, SCIP_Real *rowrhsscores, int rowidx)
 
static SCIP_RETCODE tryDelta (SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_Real *rowweights, SCIP_Real *cutcoefs, SCIP_Real *mksetcoefs, SCIP_Bool *mksetcoefsvalid, SCIP_Real *testeddeltas, int *ntesteddeltas, SCIP_Real delta, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real *bestdelta, SCIP_Real *bestefficacy)
 
SCIP_RETCODE SCIPcutGenerationHeuristicCmir (SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_Real *varsolvals, int maxtestdelta, SCIP_Real *rowweights, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int maxmksetcoefs, SCIP_Real maxweightrange, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Bool trynegscaling, SCIP_Bool cutremovable, const char *cutclassname, SCIP_Bool *cutoff, int *ncuts, SCIP_Real *delta, SCIP_Bool *deltavalid)
 
static SCIP_Bool varIsContinuous (SCIP_VAR *var)
 
static SCIP_Real getBounddist (SCIP *scip, int nintvars, SCIP_Real *varsolvals, SCIP_Real *bestcontlbs, SCIP_Real *bestcontubs, SCIP_VAR *var)
 
static SCIP_RETCODE aggregation (SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_SOL *sol, SCIP_Real *varsolvals, SCIP_Real *bestcontlbs, SCIP_Real *bestcontubs, SCIP_Real *contvarscorebounds, SCIP_Real *rowlhsscores, SCIP_Real *rowrhsscores, int startrow, int maxaggrs, SCIP_Real maxslack, int maxconts, SCIP_Bool *wastried, SCIP_Bool *cutoff, int *ncuts)
 
static SCIP_RETCODE separateCuts (SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
 
static SCIP_DECL_SEPACOPY (sepaCopyCmir)
 
static SCIP_DECL_SEPAFREE (sepaFreeCmir)
 
static SCIP_DECL_SEPAEXECLP (sepaExeclpCmir)
 
static SCIP_DECL_SEPAEXECSOL (sepaExecsolCmir)
 
SCIP_RETCODE SCIPincludeSepaCmir (SCIP *scip)
 

Macro Definition Documentation

#define SEPA_NAME   "cmir"

Definition at line 31 of file sepa_cmir.c.

Referenced by SCIP_DECL_SEPACOPY(), and SCIPincludeSepaCmir().

#define SEPA_DESC   "complemented mixed integer rounding cuts separator (Marchand's version)"

Definition at line 32 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define SEPA_PRIORITY   -3000

Definition at line 33 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define SEPA_FREQ   0

Definition at line 34 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define SEPA_MAXBOUNDDIST   0.0

Definition at line 35 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define SEPA_USESSUBSCIP   FALSE

does the separator use a secondary SCIP instance?

Definition at line 36 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define SEPA_DELAY   FALSE

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

Definition at line 37 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXROUNDS   3

maximal number of cmir separation rounds per node (-1: unlimited)

Definition at line 39 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXROUNDSROOT   10

maximal number of cmir separation rounds in the root node (-1: unlimited)

Definition at line 40 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXTRIES   100

maximal number of rows to start aggregation with per separation round (-1: unlimited)

Definition at line 41 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXTRIESROOT   -1

maximal number of rows to start aggregation with per round in the root node (-1: unlimited)

Definition at line 43 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXFAILS   20

maximal number of consecutive unsuccessful aggregation tries (-1: unlimited)

Definition at line 45 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXFAILSROOT   100

maximal number of consecutive unsuccessful aggregation tries in the root node (-1: unlimited)

Definition at line 46 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXAGGRS   3

maximal number of aggregations for each row per separation round

Definition at line 48 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXAGGRSROOT   6

maximal number of aggregations for each row per round in the root node

Definition at line 49 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXSEPACUTS   100

maximal number of cmir cuts separated per separation round

Definition at line 50 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXSEPACUTSROOT   500

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

Definition at line 51 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXSLACK   0.0

maximal slack of rows to be used in aggregation

Definition at line 52 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXSLACKROOT   0.1

maximal slack of rows to be used in aggregation in the root node

Definition at line 53 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_DENSITYSCORE   1e-04

weight of row density in the aggregation scoring of the rows

Definition at line 54 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_SLACKSCORE   1e-03

weight of slack in the aggregation scoring of the rows

Definition at line 55 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXAGGDENSITY   0.20

maximal density of aggregated row

Definition at line 56 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXROWDENSITY   0.05

maximal density of row to be used in aggregation

Definition at line 57 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_DENSITYOFFSET   100

additional number of variables allowed in row on top of density

Definition at line 58 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXROWFAC   1e+4

maximal row aggregation factor

Definition at line 59 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXTESTDELTA   -1

maximal number of different deltas to try (-1: unlimited)

Definition at line 60 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXCONTS   10

maximal number of active continuous variables in aggregated row

Definition at line 61 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_MAXCONTSROOT   10

maximal number of active continuous variables in aggregated row in the root

Definition at line 62 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_AGGRTOL   0.1

aggregation heuristic: tolerance for bound distances used to select real variable in current aggregated constraint to be eliminated

Definition at line 63 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_TRYNEGSCALING   TRUE

should negative values also be tested in scaling?

Definition at line 65 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_FIXINTEGRALRHS   TRUE

should an additional variable be complemented if f0 = 0?

Definition at line 66 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define DEFAULT_DYNAMICCUTS   TRUE

should generated cuts be removed from the LP if they are no longer tight?

Definition at line 67 of file sepa_cmir.c.

Referenced by SCIPincludeSepaCmir().

#define BOUNDSWITCH   0.5

Definition at line 69 of file sepa_cmir.c.

Referenced by aggregation().

#define USEVBDS   TRUE

Definition at line 70 of file sepa_cmir.c.

Referenced by aggregation().

#define ALLOWLOCAL   TRUE

Definition at line 71 of file sepa_cmir.c.

Referenced by aggregation(), and separateCuts().

#define MINFRAC   0.05

Definition at line 72 of file sepa_cmir.c.

Referenced by aggregation().

#define MAXFRAC   0.999

Definition at line 73 of file sepa_cmir.c.

Referenced by aggregation().

#define MAKECONTINTEGRAL   FALSE

Definition at line 74 of file sepa_cmir.c.

Referenced by addCut().

#define IMPLINTSARECONT

Definition at line 75 of file sepa_cmir.c.

#define MAXAGGRLEN (   nvars)    (0.1*(nvars)+1000)

maximal length of base inequality

Definition at line 77 of file sepa_cmir.c.

Referenced by aggregation().

Function Documentation

static SCIP_RETCODE storeCutInArrays ( SCIP scip,
int  nvars,
SCIP_VAR **  vars,
SCIP_Real cutcoefs,
SCIP_Real varsolvals,
SCIP_VAR **  cutvars,
SCIP_Real cutvals,
int *  cutlen,
SCIP_Real cutact 
)
static

stores nonzero elements of dense coefficient vector as sparse vector, and calculates activity and norm

Parameters
scipSCIP data structure
nvarsnumber of problem variables
varsproblem variables
cutcoefsdense coefficient vector
varsolvalsdense variable LP solution vector
cutvarsarray to store variables of sparse cut vector
cutvalsarray to store coefficients of sparse cut vector
cutlenpointer to store number of nonzero entries in cut
cutactpointer to store activity of cut

Definition at line 125 of file sepa_cmir.c.

References NULL, SCIP_OKAY, SCIP_Real, and SCIPisZero().

Referenced by addCut().

static SCIP_RETCODE addCut ( SCIP scip,
SCIP_SEPA sepa,
SCIP_SOL sol,
SCIP_Real varsolvals,
SCIP_Real cutcoefs,
SCIP_Real  cutrhs,
SCIP_Bool  cutislocal,
SCIP_Bool  cutremovable,
int  cutrank,
const char *  cutclassname,
SCIP_Bool cutoff,
int *  ncuts 
)
static

adds given cut to LP if violated

Parameters
scipSCIP data structure
sepaseparator
solthe solution that should be separated, or NULL for LP solution
varsolvalssolution values of active variables
cutcoefscoefficients of active variables in cut
cutrhsright hand side of cut
cutislocalis the cut only locally valid?
cutremovableshould the cut be removed from the LP due to aging or cleanup?
cutrankrank of the cut
cutclassnamename of cut class to use for row names
cutoffwhether a cutoff has been detected
ncutspointer to count the number of added cuts

Definition at line 172 of file sepa_cmir.c.

References FALSE, MAKECONTINTEGRAL, NULL, SCIP_Bool, SCIP_CALL, SCIP_Longint, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddCut(), SCIPaddPoolCut(), SCIPaddVarsToRow(), SCIPallocBufferArray, SCIPcreateEmptyRowSepa(), SCIPdebug, SCIPdebugMessage, SCIPepsilon(), SCIPfreeBufferArray, SCIPgetCutEfficacy(), SCIPgetNLPs(), SCIPgetRowMaxCoef(), SCIPgetRowMinCoef(), SCIPgetVarsData(), SCIPgetVectorEfficacyNorm(), SCIPinfinity(), SCIPisCutEfficacious(), SCIPisEfficacious(), SCIPisPositive(), SCIPmakeRowIntegral(), SCIPprintRow(), SCIPreleaseRow(), SCIProwChgRank(), SCIProwGetRank(), SCIPsnprintf(), SCIPsumepsilon(), storeCutInArrays(), and TRUE.

Referenced by SCIPcutGenerationHeuristicCmir().

static void updateNActiveConts ( SCIP scip,
SCIP_Real varsolvals,
SCIP_Real bestcontlbs,
SCIP_Real bestcontubs,
int  nintvars,
SCIP_VAR var,
int  delta,
int *  nactiveconts 
)
static

adds delta to active continuous variables counter

Parameters
scipSCIP data structure
varsolvalsLP solution value of all variables in LP
bestcontlbsbest lower (variable or standard) bounds of continuous variables
bestcontubsbest upper (variable or standard) bounds of continuous variables
nintvarsnumber of integer variables
varcontinuous variable
deltadelta value of counters
nactivecontspointer to count number of active continuous variables

Definition at line 281 of file sepa_cmir.c.

References NULL, SCIP_Real, SCIPisLT(), SCIPvarGetProbindex(), and SCIPvarIsIntegral().

Referenced by aggregation().

static void decreaseRowScore ( SCIP scip,
SCIP_Real rowlhsscores,
SCIP_Real rowrhsscores,
int  rowidx 
)
static

decreases the score of a row in order to not aggregate it again too soon

Parameters
scipSCIP data structure
rowlhsscoresaggregation scores for left hand sides of row
rowrhsscoresaggregation scores for right hand sides of row
rowidxindex of row to decrease score for

Definition at line 315 of file sepa_cmir.c.

References NULL.

Referenced by aggregation().

static SCIP_RETCODE tryDelta ( SCIP scip,
SCIP_SOL sol,
int  nvars,
SCIP_Real rowweights,
SCIP_Real cutcoefs,
SCIP_Real mksetcoefs,
SCIP_Bool mksetcoefsvalid,
SCIP_Real testeddeltas,
int *  ntesteddeltas,
SCIP_Real  delta,
SCIP_Real  boundswitch,
SCIP_Bool  usevbds,
SCIP_Bool  allowlocal,
SCIP_Bool  fixintegralrhs,
int  maxmksetcoefs,
SCIP_Real  maxweightrange,
SCIP_Real  minfrac,
SCIP_Real  maxfrac,
SCIP_Real bestdelta,
SCIP_Real bestefficacy 
)
static

calculates the c-MIR cut for the given rowweights and delta value, and updates testeddeltas, bestdelta, and bestefficacy

Parameters
scipSCIP data structure
solthe solution that should be separated, or NULL for LP solution
nvarsnumber of problem variables
rowweightsweight of rows in aggregated row
cutcoefsarray to store the cut coefficients
mksetcoefsarray to store mixed knapsack set coefficients: size nvars; or NULL
mksetcoefsvalidpointer to store whether mixed knapsack set coefficients are valid; or NULL
testeddeltasarray with already tested deltas
ntesteddeltaspointer to the number of elements in testeddeltas
deltadelta value to scale mixed knapsack equation with
boundswitchfraction of domain up to which lower bound is used in transformation
usevbdsshould variable bounds be used in bound transformation?
allowlocalshould local information allowed to be used, resulting in a local cut?
fixintegralrhsshould complementation tried to be adjusted such that rhs gets fractional?
maxmksetcoefsmaximal number of nonzeros allowed in aggregated base inequality
maxweightrangemaximal valid range max(|weights|)/min(|weights|) of row weights
minfracminimal fractionality of rhs to produce MIR cut for
maxfracmaximal fractionality of rhs to produce MIR cut for
bestdeltapointer to the currently best delta value
bestefficacypointer to the currently best efficacy

Definition at line 335 of file sepa_cmir.c.

References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcalcMIR(), SCIPdebugMessage, SCIPgetVectorEfficacyNorm(), SCIPisEQ(), SCIPisFeasGT(), and SCIPisFeasZero().

Referenced by SCIPcutGenerationHeuristicCmir().

SCIP_RETCODE SCIPcutGenerationHeuristicCmir ( SCIP scip,
SCIP_SEPA sepa,
SCIP_SOL sol,
SCIP_Real varsolvals,
int  maxtestdelta,
SCIP_Real rowweights,
SCIP_Real  boundswitch,
SCIP_Bool  usevbds,
SCIP_Bool  allowlocal,
SCIP_Bool  fixintegralrhs,
int  maxmksetcoefs,
SCIP_Real  maxweightrange,
SCIP_Real  minfrac,
SCIP_Real  maxfrac,
SCIP_Bool  trynegscaling,
SCIP_Bool  cutremovable,
const char *  cutclassname,
SCIP_Bool cutoff,
int *  ncuts,
SCIP_Real delta,
SCIP_Bool deltavalid 
)

Performs the cut generation heuristic of the c-MIR separation algorithm, i.e., tries to generate a c-MIR cut which is valid for the mixed knapsack set corresponding to the current aggregated constraint. Cuts will only be added here if no pointer to store best scaling factor delta is given.

Parameters
scipSCIP data structure
sepaseparator
solthe solution that should be separated, or NULL for LP solution
varsolvalsLP solution value of all variables in LP
maxtestdeltamaximal number of different deltas to try (-1: unlimited)
rowweightsweight of rows in aggregated row
boundswitchfraction of domain up to which lower bound is used in transformation
usevbdsshould variable bounds be used in bound transformation?
allowlocalshould local information allowed to be used, resulting in a local cut?
fixintegralrhsshould complementation tried to be adjusted such that rhs gets fractional?
maxmksetcoefsmaximal number of nonzeros allowed in aggregated base inequality
maxweightrangemaximal valid range max(|weights|)/min(|weights|) of row weights
minfracminimal fractionality of rhs to produce MIR cut for
maxfracmaximal fractionality of rhs to produce MIR cut for
trynegscalingshould negative values also be tested in scaling?
cutremovableshould the cut be removed from the LP due to aging or cleanup?
cutclassnamename of cut class to use for row names
cutoffwhether a cutoff has been detected
ncutspointer to count the number of generated cuts
deltapointer to store best delta found; NULL, if cut should be added here
deltavalidpointer to store whether best delta value is valid or NULL

Definition at line 421 of file sepa_cmir.c.

References addCut(), FALSE, MAX, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPallocBufferArray, SCIPcalcMIR(), SCIPfreeBufferArray, SCIPgetNContVars(), SCIPgetNVars(), SCIPgetVars(), SCIPisEfficacious(), SCIPisEQ(), SCIPisFeasZero(), SCIPvarGetLbLocal(), SCIPvarGetProbindex(), SCIPvarGetType(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SCIPvarIsIntegral(), TRUE, and tryDelta().

Referenced by aggregation(), and createZerohalfCutFromZerohalfWeightvector().

static SCIP_Bool varIsContinuous ( SCIP_VAR var)
static

returns whether the variable should be tried to be aggregated out

Parameters
varproblem variable

Definition at line 623 of file sepa_cmir.c.

References SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_IMPLINT, and SCIPvarGetType().

Referenced by aggregation(), and getBounddist().

static SCIP_Real getBounddist ( SCIP scip,
int  nintvars,
SCIP_Real varsolvals,
SCIP_Real bestcontlbs,
SCIP_Real bestcontubs,
SCIP_VAR var 
)
static

returns the minimal distance of the solution of a continuous variable to its bounds

Parameters
scipSCIP data structure
nintvarsnumber of integer variables in the problem
varsolvalsLP solution value of all variables in LP
bestcontlbsbest lower (variable or standard) bounds of continuous variables
bestcontubsbest upper (variable or standard) bounds of continuous variables
varcontinuous variable to get bound distance for

Definition at line 640 of file sepa_cmir.c.

References MIN, SCIP_Real, SCIP_VARTYPE_CONTINUOUS, SCIPisGE(), SCIPisLE(), SCIPvarGetLbGlobal(), SCIPvarGetProbindex(), SCIPvarGetType(), SCIPvarGetUbGlobal(), and varIsContinuous().

Referenced by aggregation().

static SCIP_RETCODE aggregation ( SCIP scip,
SCIP_SEPA sepa,
SCIP_SEPADATA sepadata,
SCIP_SOL sol,
SCIP_Real varsolvals,
SCIP_Real bestcontlbs,
SCIP_Real bestcontubs,
SCIP_Real contvarscorebounds,
SCIP_Real rowlhsscores,
SCIP_Real rowrhsscores,
int  startrow,
int  maxaggrs,
SCIP_Real  maxslack,
int  maxconts,
SCIP_Bool wastried,
SCIP_Bool cutoff,
int *  ncuts 
)
static

aggregates different single mixed integer constraints by taking linear combinations of the rows of the LP

Parameters
scipSCIP data structure
sepaseparator
sepadataseparator data
solthe solution that should be separated, or NULL for LP solution
varsolvalsLP solution value of all variables in LP
bestcontlbsbest lower (variable or standard) bounds of continuous variables
bestcontubsbest upper (variable or standard) bounds of continuous variables
contvarscoreboundsbounds on the maximal rowlhsscores and rowrhsscores the variable is contained in
rowlhsscoresaggregation scores for left hand sides of row
rowrhsscoresaggregation scores for right hand sides of row
startrowindex of row to start aggregation
maxaggrsmaximal number of aggregations
maxslackmaximal slack of rows to be used in aggregation
maxcontsmaximal number of active continuous variables in aggregated row
wastriedpointer to store whether the given startrow was actually tried
cutoffwhether a cutoff has been detected
ncutspointer to count the number of generated cuts

Definition at line 678 of file sepa_cmir.c.

References ALLOWLOCAL, BMSclearMemoryArray, BOUNDSWITCH, decreaseRowScore(), FALSE, getBounddist(), MAX, MAXAGGRLEN, MAXFRAC, MIN, MINFRAC, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcolGetLPPos(), SCIPcolGetNLPNonz(), SCIPcolGetRows(), SCIPcolGetVals(), SCIPcolGetVar(), SCIPcutGenerationHeuristicCmir(), SCIPdebugMessage, SCIPdebugPrintf, SCIPfreeBufferArray, SCIPgetLPColsData(), SCIPgetLPRowsData(), SCIPgetNImplVars(), SCIPgetRowSolActivity(), SCIPgetVarsData(), SCIPisEQ(), SCIPisFeasIntegral(), SCIPisGT(), SCIPisInfinity(), SCIPisPositive(), SCIPisZero(), SCIProwGetCols(), SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetName(), SCIProwGetNLPNonz(), SCIProwGetRhs(), SCIProwGetVals(), SCIProwIsModifiable(), SCIPsortedvecInsertDownRealInt(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIPvarIsIntegral(), TRUE, updateNActiveConts(), USEVBDS, and varIsContinuous().

Referenced by separateCuts().

static SCIP_DECL_SEPACOPY ( sepaCopyCmir  )
static

copy method for separator plugins (called when SCIP copies plugins)

Definition at line 1470 of file sepa_cmir.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPincludeSepaCmir(), SCIPsepaGetName(), and SEPA_NAME.

static SCIP_DECL_SEPAFREE ( sepaFreeCmir  )
static

destructor of separator to free user data (called when SCIP is exiting)

Definition at line 1484 of file sepa_cmir.c.

References NULL, SCIP_OKAY, SCIPfreeMemory, SCIPsepaGetData(), and SCIPsepaSetData().

static SCIP_DECL_SEPAEXECLP ( sepaExeclpCmir  )
static

LP solution separation method of separator

Definition at line 1502 of file sepa_cmir.c.

References NULL, SCIP_CALL, SCIP_DIDNOTRUN, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIPgetLPSolstat(), SCIPgetNLPBranchCands(), SCIPisStopped(), and separateCuts().

static SCIP_DECL_SEPAEXECSOL ( sepaExecsolCmir  )
static

arbitrary primal solution separation method of separator

Definition at line 1527 of file sepa_cmir.c.

References SCIP_CALL, SCIP_DIDNOTRUN, SCIP_OKAY, and separateCuts().