Solving Constraint Integer Programs

heur_locks.c File Reference

Detailed Description

rounding locks primal heuristic

Michael Winkler
Gerald Gamrath

Definition in file heur_locks.c.

#include "blockmemshell/memory.h"
#include "scip/heur_locks.h"
#include "scip/pub_cons.h"
#include "scip/pub_heur.h"
#include "scip/pub_lp.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/pub_var.h"
#include "scip/scip_branch.h"
#include "scip/scip_cons.h"
#include "scip/scip_copy.h"
#include "scip/scip_general.h"
#include "scip/scip_heur.h"
#include "scip/scip_lp.h"
#include "scip/scip_mem.h"
#include "scip/scip_message.h"
#include "scip/scip_numerics.h"
#include "scip/scip_param.h"
#include "scip/scip_prob.h"
#include "scip/scip_probing.h"
#include "scip/scip_randnumgen.h"
#include "scip/scip_sol.h"
#include "scip/scip_solve.h"
#include "scip/scip_solvingstats.h"
#include "scip/scip_timing.h"
#include "scip/scip_tree.h"
#include <string.h>

Go to the source code of this file.


#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 heurInitsolLocks   NULL
#define heurExitsolLocks   NULL


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


#define HEUR_NAME   "locks"

Definition at line 52 of file heur_locks.c.

Referenced by SCIP_DECL_HEUREXEC(), and SCIPapplyLockFixings().


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

Definition at line 53 of file heur_locks.c.


#define HEUR_DISPCHAR   'k'

Definition at line 54 of file heur_locks.c.


#define HEUR_PRIORITY   3000

Definition at line 55 of file heur_locks.c.


#define HEUR_FREQ   0

Definition at line 56 of file heur_locks.c.


#define HEUR_FREQOFS   0

Definition at line 57 of file heur_locks.c.


#define HEUR_MAXDEPTH   -1

Definition at line 58 of file heur_locks.c.



Definition at line 59 of file heur_locks.c.



does the heuristic use a secondary SCIP instance?

Definition at line 60 of file heur_locks.c.



maximum number of nodes to regard in the subproblem

Definition at line 62 of file heur_locks.c.



probability for rounding a variable up in case of ties

Definition at line 63 of file heur_locks.c.



minimum percentage of variables that have to be fixed

Definition at line 64 of file heur_locks.c.



factor by which locks heuristic should at least improve the incumbent

Definition at line 65 of file heur_locks.c.



minimum number of nodes to regard in the subproblem

Definition at line 70 of file heur_locks.c.



number of nodes added to the contingent of the total nodes

Definition at line 71 of file heur_locks.c.



subproblem nodes in relation to nodes of the original problem

Definition at line 72 of file heur_locks.c.



maximum number of propagation rounds during probing

Definition at line 73 of file heur_locks.c.



should the locks be updated based on LP rows?

Definition at line 74 of file heur_locks.c.



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

Definition at line 75 of file heur_locks.c.



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

Definition at line 78 of file heur_locks.c.



initial random seed

Definition at line 81 of file heur_locks.c.

◆ heurInitsolLocks

#define heurInitsolLocks   NULL

Definition at line 227 of file heur_locks.c.

◆ heurExitsolLocks

#define heurExitsolLocks   NULL

Definition at line 228 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 

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

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 109 of file heur_locks.c.

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

Referenced by SCIP_DECL_HEUREXEC().


static SCIP_DECL_HEURCOPY ( heurCopyLocks  )

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

Definition at line 159 of file heur_locks.c.

Referenced by createNewSol().


static SCIP_DECL_HEURFREE ( heurFreeLocks  )

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

Definition at line 173 of file heur_locks.c.


static SCIP_DECL_HEURINIT ( heurInitLocks  )

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

Definition at line 191 of file heur_locks.c.


static SCIP_DECL_HEUREXIT ( heurExitLocks  )

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

Definition at line 211 of file heur_locks.c.

◆ SCIPapplyLockFixings()

SCIP_RETCODE SCIPapplyLockFixings ( SCIP scip,
SCIP_Bool cutoff,
SCIP_Bool allrowsfulfilled 

apply fix-and-propagate scheme based on variable locks

probing mode of SCIP needs to be enabled before
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 234 of file heur_locks.c.

References FALSE, HEUR_NAME, NULL, r, REALABS, SCIP_Bool, SCIP_CALL, SCIP_DECL_HEUREXEC(), SCIP_LOCKTYPE_MODEL, 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(), SCIPvarGetNLocksDownType(), SCIPvarGetNLocksUpType(), SCIPvarGetObj(), SCIPvarGetProbindex(), SCIPvarGetStatus(), SCIPvarGetType(), SCIPvarGetUbLocal(), TRUE, and w.

Referenced by applyVbounds(), and SCIP_DECL_HEUREXEC().


static SCIP_DECL_HEUREXEC ( heurExecLocks  )

execution method of primal heuristic

Definition at line 698 of file heur_locks.c.

References createNewSol(), FALSE, HEUR_NAME, MIN, NULL, SCIP_Bool, SCIP_CALL, SCIP_CALL_ABORT, SCIP_DIDNOTFIND, SCIP_FOUNDSOL, SCIP_Longint, SCIP_LONGINT_FORMAT, 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().