Scippy

SCIP

Solving Constraint Integer Programs

heur_locks.c File Reference

Detailed Description

rounding locks primal heuristic

Author
Michael Winkler
Gerald Gamrath

Definition in file heur_locks.c.

#include <assert.h>
#include <string.h>
#include "scip/heur_locks.h"

Go to the source code of this file.

Macros

#define HEUR_NAME   "locks"
 
#define HEUR_DESC   "heuristic that fixes variables based on their rounding locks"
 
#define HEUR_DISPCHAR   'k'
 
#define HEUR_PRIORITY   3000
 
#define HEUR_FREQ   0
 
#define HEUR_FREQOFS   0
 
#define HEUR_MAXDEPTH   -1
 
#define HEUR_TIMING   SCIP_HEURTIMING_BEFORENODE
 
#define HEUR_USESSUBSCIP   TRUE
 
#define DEFAULT_MAXNODES   5000LL
 
#define DEFAULT_ROUNDUPPROBABILITY   0.67
 
#define DEFAULT_MINFIXINGRATE   0.65
 
#define DEFAULT_MINIMPROVE   0.01
 
#define DEFAULT_MINNODES   500LL
 
#define DEFAULT_NODESOFS   500LL
 
#define DEFAULT_NODESQUOT   0.1
 
#define DEFAULT_MAXPROPROUNDS   2
 
#define DEFAULT_UPDATELOCKS   TRUE
 
#define DEFAULT_COPYCUTS   TRUE
 
#define DEFAULT_USEFINALSUBMIP   TRUE
 
#define DEFAULT_RANDSEED   73
 
#define heurInitsolLocks   NULL
 
#define heurExitsolLocks   NULL
 

Functions

static SCIP_RETCODE createNewSol (SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_SOL *newsol, SCIP_SOL *subsol, SCIP_Bool *success)
 
static SCIP_DECL_HEURCOPY (heurCopyLocks)
 
static SCIP_DECL_HEURFREE (heurFreeLocks)
 
static SCIP_DECL_HEURINIT (heurInitLocks)
 
static SCIP_DECL_HEUREXIT (heurExitLocks)
 
SCIP_RETCODE SCIPapplyLockFixings (SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_Bool *cutoff, SCIP_Bool *allrowsfulfilled)
 
static SCIP_DECL_HEUREXEC (heurExecLocks)
 
SCIP_RETCODE SCIPincludeHeurLocks (SCIP *scip)
 

Macro Definition Documentation

◆ HEUR_NAME

#define HEUR_NAME   "locks"

Definition at line 29 of file heur_locks.c.

Referenced by SCIP_DECL_HEUREXEC(), and SCIPapplyLockFixings().

◆ HEUR_DESC

#define HEUR_DESC   "heuristic that fixes variables based on their rounding locks"

Definition at line 30 of file heur_locks.c.

◆ HEUR_DISPCHAR

#define HEUR_DISPCHAR   'k'

Definition at line 31 of file heur_locks.c.

◆ HEUR_PRIORITY

#define HEUR_PRIORITY   3000

Definition at line 32 of file heur_locks.c.

◆ HEUR_FREQ

#define HEUR_FREQ   0

Definition at line 33 of file heur_locks.c.

◆ HEUR_FREQOFS

#define HEUR_FREQOFS   0

Definition at line 34 of file heur_locks.c.

◆ HEUR_MAXDEPTH

#define HEUR_MAXDEPTH   -1

Definition at line 35 of file heur_locks.c.

◆ HEUR_TIMING

#define HEUR_TIMING   SCIP_HEURTIMING_BEFORENODE

Definition at line 36 of file heur_locks.c.

◆ HEUR_USESSUBSCIP

#define HEUR_USESSUBSCIP   TRUE

does the heuristic use a secondary SCIP instance?

Definition at line 37 of file heur_locks.c.

◆ DEFAULT_MAXNODES

#define DEFAULT_MAXNODES   5000LL

maximum number of nodes to regard in the subproblem

Definition at line 39 of file heur_locks.c.

◆ DEFAULT_ROUNDUPPROBABILITY

#define DEFAULT_ROUNDUPPROBABILITY   0.67

probability for rounding a variable up in case of ties

Definition at line 40 of file heur_locks.c.

◆ DEFAULT_MINFIXINGRATE

#define DEFAULT_MINFIXINGRATE   0.65

minimum percentage of variables that have to be fixed

Definition at line 41 of file heur_locks.c.

◆ DEFAULT_MINIMPROVE

#define DEFAULT_MINIMPROVE   0.01

factor by which locks heuristic should at least improve the incumbent

Definition at line 42 of file heur_locks.c.

◆ DEFAULT_MINNODES

#define DEFAULT_MINNODES   500LL

minimum number of nodes to regard in the subproblem

Definition at line 47 of file heur_locks.c.

◆ DEFAULT_NODESOFS

#define DEFAULT_NODESOFS   500LL

number of nodes added to the contingent of the total nodes

Definition at line 48 of file heur_locks.c.

◆ DEFAULT_NODESQUOT

#define DEFAULT_NODESQUOT   0.1

subproblem nodes in relation to nodes of the original problem

Definition at line 49 of file heur_locks.c.

◆ DEFAULT_MAXPROPROUNDS

#define DEFAULT_MAXPROPROUNDS   2

maximum number of propagation rounds during probing

Definition at line 50 of file heur_locks.c.

◆ DEFAULT_UPDATELOCKS

#define DEFAULT_UPDATELOCKS   TRUE

should the locks be updated based on LP rows?

Definition at line 51 of file heur_locks.c.

◆ DEFAULT_COPYCUTS

#define DEFAULT_COPYCUTS   TRUE

should all active cuts from the cutpool of the original scip be copied to constraints of the subscip?

Definition at line 52 of file heur_locks.c.

◆ DEFAULT_USEFINALSUBMIP

#define DEFAULT_USEFINALSUBMIP   TRUE

should a final sub-MIP be solved to construct a feasible solution if the LP was not roundable?

Definition at line 55 of file heur_locks.c.

◆ DEFAULT_RANDSEED

#define DEFAULT_RANDSEED   73

initial random seed

Definition at line 58 of file heur_locks.c.

◆ heurInitsolLocks

#define heurInitsolLocks   NULL

Definition at line 198 of file heur_locks.c.

◆ heurExitsolLocks

#define heurExitsolLocks   NULL

Definition at line 199 of file heur_locks.c.

Function Documentation

◆ createNewSol()

static SCIP_RETCODE createNewSol ( SCIP scip,
SCIP subscip,
SCIP_VAR **  subvars,
SCIP_SOL newsol,
SCIP_SOL subsol,
SCIP_Bool success 
)
static

creates a new solution for the original problem by copying the solution of the subproblem

Parameters
sciporiginal SCIP data structure
subscipSCIP structure of the subproblem
subvarsthe variables of the subproblem
newsolworking solution
subsolsolution of the subproblem
successused to store whether new solution was found or not

Definition at line 86 of file heur_locks.c.

References FALSE, SCIP_CALL, SCIP_DECL_HEURCOPY(), SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPfreeBufferArray, SCIPgetNOrigVars(), SCIPgetSolVals(), SCIPgetVarsData(), SCIPsetSolVals(), SCIPtrySol(), and TRUE.

Referenced by SCIP_DECL_HEUREXEC().

◆ SCIP_DECL_HEURCOPY()

static SCIP_DECL_HEURCOPY ( heurCopyLocks  )
static

copy method for primal heuristic plugins (called when SCIP copies plugins)

Definition at line 130 of file heur_locks.c.

Referenced by createNewSol().

◆ SCIP_DECL_HEURFREE()

static SCIP_DECL_HEURFREE ( heurFreeLocks  )
static

free method for primal heuristic plugins (called when SCIP is exiting)

Definition at line 144 of file heur_locks.c.

◆ SCIP_DECL_HEURINIT()

static SCIP_DECL_HEURINIT ( heurInitLocks  )
static

initialization method of primal heuristic (called after problem was transformed)

Definition at line 162 of file heur_locks.c.

◆ SCIP_DECL_HEUREXIT()

static SCIP_DECL_HEUREXIT ( heurExitLocks  )
static

deinitialization method of primal heuristic (called before transformed problem is freed)

Definition at line 182 of file heur_locks.c.

◆ SCIPapplyLockFixings()

SCIP_RETCODE SCIPapplyLockFixings ( SCIP scip,
SCIP_HEURDATA heurdata,
SCIP_Bool cutoff,
SCIP_Bool allrowsfulfilled 
)

apply fix-and-propagate scheme based on variable locks

Note
probing mode of SCIP needs to be enabled before
Parameters
scipSCIP data structure
heurdataprimal heuristic data
cutoffpointer to store if a cutoff was detected
allrowsfulfilledpointer to store if all rows became redundant

Definition at line 205 of file heur_locks.c.

References FALSE, HEUR_NAME, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_HEUREXEC(), SCIP_MAXTREEDEPTH, SCIP_OKAY, SCIP_Real, SCIP_VARSTATUS_COLUMN, SCIP_VARTYPE_BINARY, SCIPallocBufferArray, SCIPallocClearBufferArray, SCIPbacktrackProbing(), SCIPcolGetNNonz(), SCIPcolGetRows(), SCIPcolGetVals(), SCIPcolGetVar(), SCIPconshdlrGetNCheckConss(), SCIPdebug, SCIPdebugMsg, SCIPduplicateBufferArray, SCIPfindConshdlr(), SCIPfindHeur(), SCIPfixVarProbing(), SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetDepth(), SCIPgetLPRowsData(), SCIPgetNCheckConss(), SCIPgetNConss(), SCIPgetNLPRows(), SCIPgetProbingDepth(), SCIPgetRowMaxActivity(), SCIPgetRowMinActivity(), SCIPgetVarsData(), SCIPheurGetData(), SCIPinProbing(), SCIPisFeasGE(), SCIPisFeasGT(), SCIPisFeasLE(), SCIPisFeasLT(), SCIPisInfinity(), SCIPisPositive(), SCIPisStopped(), SCIPnewProbingNode(), SCIPprintRow(), SCIPpropagateProbing(), SCIPrandomGetReal(), SCIProwGetCols(), SCIProwGetLhs(), SCIProwGetLPPos(), SCIProwGetName(), SCIProwGetNNonz(), SCIProwGetRank(), SCIProwGetRhs(), SCIProwGetVals(), SCIPvarGetCol(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetNLocksDown(), SCIPvarGetNLocksUp(), SCIPvarGetObj(), SCIPvarGetProbindex(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbLocal(), and TRUE.

Referenced by applyVbounds(), and SCIP_DECL_HEUREXEC().

◆ SCIP_DECL_HEUREXEC()

static SCIP_DECL_HEUREXEC ( heurExecLocks  )
static

execution method of primal heuristic

Definition at line 670 of file heur_locks.c.

References createNewSol(), FALSE, HEUR_NAME, SCIP_Bool, SCIP_CALL, SCIP_CALL_ABORT, SCIP_DIDNOTFIND, SCIP_FOUNDSOL, SCIP_Longint, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIP_PARAMSETTING_FAST, SCIP_PARAMSETTING_OFF, SCIP_Real, SCIPallocBufferArray, SCIPapplyLockFixings(), SCIPblkmem(), SCIPcheckCopyLimits(), SCIPcheckSol(), SCIPconstructLP(), SCIPcopy(), SCIPcopyCuts(), SCIPcopyLimits(), SCIPcreate(), SCIPcreateSol(), SCIPcutoffNode(), SCIPdebug, SCIPdebugMsg, SCIPenableVarHistory(), SCIPendProbing(), SCIPfindBranchrule(), SCIPfindConshdlr(), SCIPflushLP(), SCIPfree(), SCIPfreeBufferArray, SCIPfreeSol(), SCIPgetBoolParam(), SCIPgetCurrentNode(), SCIPgetLowerbound(), SCIPgetLPObjval(), SCIPgetLPSolstat(), SCIPgetNConss(), SCIPgetNLPIterations(), SCIPgetNLPRows(), SCIPgetNNodes(), SCIPgetNPseudoBranchCands(), SCIPgetNSols(), SCIPgetNVars(), SCIPgetSols(), SCIPgetSolvingTime(), SCIPgetStatus(), SCIPgetUpperbound(), SCIPgetVarsData(), SCIPhashmapCreate(), SCIPhashmapFree(), SCIPhashmapGetImage(), SCIPheurGetData(), SCIPheurGetNBestSolsFound(), SCIPheurGetNCalls(), SCIPincludeHeurLocks(), SCIPisInfinity(), SCIPisParamFixed(), SCIPisStopped(), SCIPlinkLPSol(), SCIPpresolve(), SCIPprintSol(), SCIPprintStatistics(), SCIProundSol(), SCIPsetBoolParam(), SCIPsetIntParam(), SCIPsetLongintParam(), SCIPsetObjlimit(), SCIPsetPresolving(), SCIPsetSeparating(), SCIPsetSubscipsOff(), SCIPsolve(), SCIPsolveProbingLP(), SCIPstartProbing(), SCIPsumepsilon(), SCIPtrySol(), SCIPwarningMessage(), and TRUE.

Referenced by SCIPapplyLockFixings().