Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

ensemble cut selector

Author
Mark Turner

Definition in file cutsel_ensemble.c.

#include <assert.h>
#include "scip/scip_cutsel.h"
#include "scip/scip_cut.h"
#include "scip/scip_lp.h"
#include "scip/scip_randnumgen.h"
#include "scip/cutsel_ensemble.h"

Go to the source code of this file.

Macros

#define CUTSEL_NAME   "ensemble"
 
#define CUTSEL_DESC   "weighted sum of many terms with optional filtering and penalties"
 
#define CUTSEL_PRIORITY   7000
 
#define RANDSEED   0x5EED
 
#define DEFAULT_MINSCORE   0.0
 
#define DEFAULT_EFFICACYWEIGHT   0.75
 
#define DEFAULT_DIRCUTOFFDISTWEIGHT   0.0
 
#define DEFAULT_OBJPARALWEIGHT   0.25
 
#define DEFAULT_INTSUPPORTWEIGHT   0.45
 
#define DEFAULT_EXPIMPROVWEIGHT   0.1
 
#define DEFAULT_PSCOSTWEIGHT   0.75
 
#define DEFAULT_NLOCKSWEIGHT   0.25
 
#define DEFAULT_MAXSPARSITYBONUS   0.5
 
#define DEFAULT_SPARSITYENDBONUS   0.2
 
#define DEFAULT_GOODNUMERICBONUS   0.0
 
#define DEFAULT_MAXCOEFRATIOBONUS   10000
 
#define DEFAULT_PENALISELOCKS   TRUE
 
#define DEFAULT_PENALISEOBJPARAL   TRUE
 
#define DEFAULT_FILTERPARALCUTS   FALSE
 
#define DEFAULT_MAXPARAL   0.95
 
#define DEFAULT_PENALISEPARALCUTS   TRUE
 
#define DEFAULT_PARALPENALTY   0.25
 
#define DEFAULT_FILTERDENSECUTS   TRUE
 
#define DEFAULT_MAXCUTDENSITY   0.425
 
#define DEFAULT_MAXNONZEROROOTROUND   4.5
 
#define DEFAULT_MAXNONZEROTREEROUND   9.5
 
#define DEFAULT_MAXCUTS   200
 
#define DEFAULT_MAXNUMVARS   50000
 

Functions

static SCIP_RETCODE scoring (SCIP *scip, SCIP_ROW **cuts, SCIP_CUTSELDATA *cutseldata, SCIP_Real *scores, SCIP_Bool root, int ncuts)
 
static void selectBestCut (SCIP_ROW **cuts, SCIP_Real *scores, int ncuts)
 
static int filterWithParallelism (SCIP_ROW *cut, SCIP_ROW **cuts, SCIP_Real *scores, int ncuts, SCIP_Real maxparallel)
 
static int penaliseWithParallelism (SCIP *scip, SCIP_ROW *cut, SCIP_ROW **cuts, SCIP_Real *scores, int ncuts, SCIP_Real maxparallel, SCIP_Real paralpenalty)
 
static int filterWithDensity (SCIP *scip, SCIP_ROW **cuts, SCIP_Real maxdensity, int ncuts)
 
static SCIP_DECL_CUTSELCOPY (cutselCopyEnsemble)
 
static SCIP_DECL_CUTSELFREE (cutselFreeEnsemble)
 
static SCIP_DECL_CUTSELINIT (cutselInitEnsemble)
 
static SCIP_DECL_CUTSELEXIT (cutselExitEnsemble)
 
static SCIP_DECL_CUTSELSELECT (cutselSelectEnsemble)
 
SCIP_RETCODE SCIPincludeCutselEnsemble (SCIP *scip)
 
SCIP_RETCODE SCIPselectCutsEnsemble (SCIP *scip, SCIP_ROW **cuts, SCIP_ROW **forcedcuts, SCIP_CUTSELDATA *cutseldata, SCIP_Bool root, int ncuts, int nforcedcuts, int maxselectedcuts, int *nselectedcuts)
 

Macro Definition Documentation

◆ CUTSEL_NAME

#define CUTSEL_NAME   "ensemble"

Definition at line 45 of file cutsel_ensemble.c.

Referenced by SCIP_DECL_CUTSELCOPY(), and SCIPincludeCutselEnsemble().

◆ CUTSEL_DESC

#define CUTSEL_DESC   "weighted sum of many terms with optional filtering and penalties"

Definition at line 46 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ CUTSEL_PRIORITY

#define CUTSEL_PRIORITY   7000

Definition at line 47 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ RANDSEED

#define RANDSEED   0x5EED

Definition at line 49 of file cutsel_ensemble.c.

Referenced by SCIP_DECL_CUTSELINIT().

◆ DEFAULT_MINSCORE

#define DEFAULT_MINSCORE   0.0

minimum score s.t. a cut can be selected

Definition at line 51 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_EFFICACYWEIGHT

#define DEFAULT_EFFICACYWEIGHT   0.75

weight of normed-efficacy in score calculation

Definition at line 52 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_DIRCUTOFFDISTWEIGHT

#define DEFAULT_DIRCUTOFFDISTWEIGHT   0.0

weight of normed-directed cutoff distance in score calculation

Definition at line 53 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_OBJPARALWEIGHT

#define DEFAULT_OBJPARALWEIGHT   0.25

weight of objective parallelism in score calculation

Definition at line 54 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_INTSUPPORTWEIGHT

#define DEFAULT_INTSUPPORTWEIGHT   0.45

weight of integral support in cut score calculation

Definition at line 55 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_EXPIMPROVWEIGHT

#define DEFAULT_EXPIMPROVWEIGHT   0.1

weight of normed-expected improvement in cut score calculation

Definition at line 56 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_PSCOSTWEIGHT

#define DEFAULT_PSCOSTWEIGHT   0.75

weight of normalised pseudo-costs in cut score calculation

Definition at line 57 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_NLOCKSWEIGHT

#define DEFAULT_NLOCKSWEIGHT   0.25

weight of normalised number of locks in cut score calculation

Definition at line 58 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXSPARSITYBONUS

#define DEFAULT_MAXSPARSITYBONUS   0.5

score given to a cut with complete sparsity

Definition at line 59 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_SPARSITYENDBONUS

#define DEFAULT_SPARSITYENDBONUS   0.2

the density at which a cut no longer receives additional score

Definition at line 60 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_GOODNUMERICBONUS

#define DEFAULT_GOODNUMERICBONUS   0.0

bonus provided for good numerics

Definition at line 61 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXCOEFRATIOBONUS

#define DEFAULT_MAXCOEFRATIOBONUS   10000

maximum coefficient ratio of cut for which numeric bonus is given

Definition at line 62 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_PENALISELOCKS

#define DEFAULT_PENALISELOCKS   TRUE

whether having less locks should be rewarded instead of more

Definition at line 63 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_PENALISEOBJPARAL

#define DEFAULT_PENALISEOBJPARAL   TRUE

whether objective parallelism should be penalised not rewarded

Definition at line 64 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_FILTERPARALCUTS

#define DEFAULT_FILTERPARALCUTS   FALSE

should cuts be filtered so no two parallel cuts are added

Definition at line 65 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXPARAL

#define DEFAULT_MAXPARAL   0.95

threshold for when two cuts are considered parallel to each other

Definition at line 66 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_PENALISEPARALCUTS

#define DEFAULT_PENALISEPARALCUTS   TRUE

should two parallel cuts be penalised instead of outright filtered

Definition at line 67 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_PARALPENALTY

#define DEFAULT_PARALPENALTY   0.25

penalty for weaker of two parallel cuts if penalising parallel cuts

Definition at line 68 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_FILTERDENSECUTS

#define DEFAULT_FILTERDENSECUTS   TRUE

should cuts over a given density threshold be filtered

Definition at line 69 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXCUTDENSITY

#define DEFAULT_MAXCUTDENSITY   0.425

max allowed cut density if filtering dense cuts

Definition at line 70 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXNONZEROROOTROUND

#define DEFAULT_MAXNONZEROROOTROUND   4.5

max nonzeros per round (root). Gets multiplied by num LP cols

Definition at line 71 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXNONZEROTREEROUND

#define DEFAULT_MAXNONZEROTREEROUND   9.5

max nonzeros per round (tree). Gets multiplied by num LP cols

Definition at line 72 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXCUTS

#define DEFAULT_MAXCUTS   200

maximum number of cuts that can be considered by this cut selector

Definition at line 73 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

◆ DEFAULT_MAXNUMVARS

#define DEFAULT_MAXNUMVARS   50000

maximum number of variables that a problem can have while calling this cut selector

Definition at line 74 of file cutsel_ensemble.c.

Referenced by SCIPincludeCutselEnsemble().

Function Documentation

◆ scoring()

static SCIP_RETCODE scoring ( SCIP scip,
SCIP_ROW **  cuts,
SCIP_CUTSELDATA cutseldata,
SCIP_Real scores,
SCIP_Bool  root,
int  ncuts 
)
static

returns the maximum score of cuts; if scores is not NULL, then stores the individual score of each cut in scores

Parameters
scipSCIP data structure
cutsarray with cuts to score
cutseldatacut selector data
scoresarray to store the score of cuts or NULL
rootwhether we are at the root node or not
ncutsnumber of cuts in cuts array

Definition at line 117 of file cutsel_ensemble.c.

References ABS, density, LOG1P, MAX, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPcolGetPrimsol(), SCIPcolGetVar(), SCIPepsilon(), SCIPfreeBufferArray, SCIPgetBestSol(), SCIPgetCutEfficacy(), SCIPgetCutLPSolCutoffDistance(), SCIPgetNLPCols(), SCIPgetRowFeasibility(), SCIPgetRowMaxCoef(), SCIPgetRowMinCoef(), SCIPgetRowNumIntCols(), SCIPgetRowObjParallelism(), SCIPgetVarPseudocostScore(), SCIPisInfinity(), SCIPisSumLE(), SCIPrandomGetReal(), SCIProwGetCols(), SCIProwGetLhs(), SCIProwGetNNonz(), SCIProwGetNorm(), SCIProwGetRhs(), SCIProwGetVals(), SCIPsumepsilon(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), and SQR.

Referenced by SCIPselectCutsEnsemble().

◆ selectBestCut()

static void selectBestCut ( SCIP_ROW **  cuts,
SCIP_Real scores,
int  ncuts 
)
static

move the cut with the highest score to the first position in the array; there must be at least one cut

Parameters
cutsarray with cuts to perform selection algorithm
scoresarray with scores of cuts to perform selection algorithm
ncutsnumber of cuts in given array

Definition at line 331 of file cutsel_ensemble.c.

References NULL, SCIP_Real, SCIPswapPointers(), and SCIPswapReals().

Referenced by SCIPselectCutsEnsemble().

◆ filterWithParallelism()

static int filterWithParallelism ( SCIP_ROW cut,
SCIP_ROW **  cuts,
SCIP_Real scores,
int  ncuts,
SCIP_Real  maxparallel 
)
static

filters the given array of cuts to enforce a maximum parallelism constraint w.r.t the given cut; moves filtered cuts to the end of the array and returns number of selected cuts

Parameters
cutcut to filter orthogonality with
cutsarray with cuts to perform selection algorithm
scoresarray with scores of cuts to perform selection algorithm
ncutsnumber of cuts in given array
maxparallelmaximal parallelism for all cuts that are not good

Definition at line 363 of file cutsel_ensemble.c.

References NULL, SCIP_Real, SCIProwGetParallelism(), SCIPswapPointers(), and SCIPswapReals().

Referenced by SCIPselectCutsEnsemble().

◆ penaliseWithParallelism()

static int penaliseWithParallelism ( SCIP scip,
SCIP_ROW cut,
SCIP_ROW **  cuts,
SCIP_Real scores,
int  ncuts,
SCIP_Real  maxparallel,
SCIP_Real  paralpenalty 
)
static

penalises any cut too parallel to cut by reducing the parallel cut's score.

Parameters
scipSCIP data structure
cutcut to filter orthogonality with
cutsarray with cuts to perform selection algorithm
scoresarray with scores of cuts to perform selection algorithm
ncutsnumber of cuts in given array
maxparallelmaximal parallelism for all cuts that are not good
paralpenaltypenalty for weaker of two parallel cuts if penalising parallel cuts

Definition at line 395 of file cutsel_ensemble.c.

References NULL, SCIP_Real, SCIProwGetParallelism(), SCIPsumepsilon(), SCIPswapPointers(), and SCIPswapReals().

Referenced by SCIPselectCutsEnsemble().

◆ filterWithDensity()

static int filterWithDensity ( SCIP scip,
SCIP_ROW **  cuts,
SCIP_Real  maxdensity,
int  ncuts 
)
static

filters the given array of cuts to enforce a maximum density constraint, Moves filtered cuts to the end of the array and returns number of selected cuts

Parameters
scipSCIP data structure
cutsarray with cuts to perform selection algorithm
maxdensitymaximum density s.t. a cut is not filtered
ncutsnumber of cuts in given array

Definition at line 435 of file cutsel_ensemble.c.

References NULL, SCIP_Real, SCIPgetNLPCols(), SCIProwGetNNonz(), and SCIPswapPointers().

Referenced by SCIPselectCutsEnsemble().

◆ SCIP_DECL_CUTSELCOPY()

static SCIP_DECL_CUTSELCOPY ( cutselCopyEnsemble  )
static

copy method for cut selector plugin (called when SCIP copies plugins)

Definition at line 472 of file cutsel_ensemble.c.

References CUTSEL_NAME, NULL, SCIP_CALL, SCIP_OKAY, SCIPcutselGetName(), and SCIPincludeCutselEnsemble().

◆ SCIP_DECL_CUTSELFREE()

static SCIP_DECL_CUTSELFREE ( cutselFreeEnsemble  )
static

destructor of cut selector to free user data (called when SCIP is exiting) ! [SnippetCutselFreeEnsemble]

Definition at line 487 of file cutsel_ensemble.c.

References NULL, SCIP_OKAY, SCIPcutselGetData(), SCIPcutselSetData(), and SCIPfreeBlockMemory.

◆ SCIP_DECL_CUTSELINIT()

static SCIP_DECL_CUTSELINIT ( cutselInitEnsemble  )
static

! [SnippetCutselFreeEnsemble] initialization method of cut selector (called after problem was transformed)

Definition at line 503 of file cutsel_ensemble.c.

References NULL, RANDSEED, SCIP_CALL, SCIP_OKAY, SCIPcreateRandom(), SCIPcutselGetData(), and TRUE.

◆ SCIP_DECL_CUTSELEXIT()

static SCIP_DECL_CUTSELEXIT ( cutselExitEnsemble  )
static

deinitialization method of cut selector (called before transformed problem is freed)

Definition at line 517 of file cutsel_ensemble.c.

References NULL, SCIP_OKAY, SCIPcutselGetData(), and SCIPfreeRandom().

◆ SCIP_DECL_CUTSELSELECT()

static SCIP_DECL_CUTSELSELECT ( cutselSelectEnsemble  )
static

cut selection method of cut selector

Definition at line 532 of file cutsel_ensemble.c.

References NULL, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_SUCCESS, SCIPcutselGetData(), SCIPgetNVars(), and SCIPselectCutsEnsemble().