81#define HEUR_NAME "gins"
82#define HEUR_DESC "gins works on k-neighborhood in a variable-constraint graph"
83#define HEUR_DISPCHAR SCIP_HEURDISPCHAR_LNS
84#define HEUR_PRIORITY -1103000
87#define HEUR_MAXDEPTH -1
88#define HEUR_TIMING SCIP_HEURTIMING_AFTERNODE
89#define HEUR_USESSUBSCIP TRUE
91#define DEFAULT_NODESOFS 500
92#define DEFAULT_MAXNODES 5000
93#define DEFAULT_MINIMPROVE 0.01
94#define DEFAULT_MINNODES 50
95#define DEFAULT_MINFIXINGRATE 0.66
96#define DEFAULT_NODESQUOT 0.15
97#define DEFAULT_NWAITINGNODES 100
98#define DEFAULT_USELPROWS FALSE
100#define DEFAULT_COPYCUTS TRUE
102#define DEFAULT_BESTSOLLIMIT 3
103#define DEFAULT_FIXCONTVARS FALSE
104#define DEFAULT_POTENTIAL 'r'
105#define DEFAULT_MAXDISTANCE 3
107#define DEFAULT_RANDSEED 71
108#define DEFAULT_RELAXDENSECONSS FALSE
110#define DEFAULT_USEROLLINGHORIZON TRUE
111#define DEFAULT_ROLLHORIZONLIMFAC 0.4
113#define DEFAULT_USEDECOMP TRUE
114#define DEFAULT_USEDECOMPROLLHORIZON FALSE
115#define DEFAULT_USESELFALLBACK TRUE
116#define DEFAULT_OVERLAP 0.0
117#define DEFAULT_CONSECUTIVEBLOCKS TRUE
184 SCIP_Real minfixingrate;
187 SCIP_Real minimprove;
190 SCIP_Real rollhorizonlimfac;
199 SCIP_Bool allblocksunsuitable;
200 SCIP_Bool fixcontvars;
204 int sumneighborhoodvars;
205 int sumdiscneighborhoodvars;
209 SCIP_Bool consecutiveblocks;
210 SCIP_Bool relaxdenseconss;
212 SCIP_Bool userollinghorizon;
215 SCIP_Bool usedecomprollhorizon;
216 SCIP_Bool useselfallback;
220 int nrelaxedconstraints;
222 SCIP_Longint nextnodenumber;
223 SCIP_Longint targetnodes;
415 if( *decomphorizon ==
NULL )
432 *decomphorizon =
NULL;
459 return decomphorizon->
init;
614 SCIPdebugMsg(
scip,
"Initialized decomposition horizon for %d blocks (%d suitable)\n",
674 SCIPdebugMsg(
scip,
"New potential based sorting with trailing block: 0 (label %d, potential %.4g)\n",
675 decomphorizon->blocklabels[decomphorizon->blockindices[0]], decomphorizon->potential[decomphorizon->blockindices[0]]);
758 SCIPdebugMsg(
scip,
"Potential based selection chooses interval starting from block %d with potential %.1g\n",
833 if( pos == decomphorizon->
nblocks )
893 return decomphorizon->
vars;
911 (*rollinghorizon)->distancessize = size;
912 (*rollinghorizon)->variablegraph =
NULL;
913 (*rollinghorizon)->lastdistance = -1;
914 (*rollinghorizon)->niterations = 0;
915 (*rollinghorizon)->nused = 0;
962 if( *taboolist ==
NULL )
1062 if( (*rollinghorizon)->variablegraph !=
NULL )
1104 if( distances[
i] == -1 )
1119 assert(maxdistance >= 0);
1181 if( distances[
i] == -1 || distances[
i] > maxdistance )
1190 fixedvars[*nfixings] =
vars[
i];
1259 (*choosevardistance)--;
1275 return heurdata->sumdiscneighborhoodvars / (
MAX(1.0, (SCIP_Real)
heurdata->nneighborhoods));
1396 if(
heurdata->allblocksunsuitable )
1398 SCIPdebugMsg(
scip,
"Skip initial variable selection because all blocks are unsuitable for solution %d\n",
1426 SCIP_Real potential;
1482 SCIPdebugMsg(
scip,
"Could not find suitable block for variable selection.\n");
1585 int neighborhoodsize;
1609 SCIPdebugMsg(
scip,
"No active variable left to perform breadth-first search\n");
1632 neighborhoodsize = 0;
1635 for( v =
nvars - 1; v >= 0; --v )
1654 SCIPdebugMsg(
scip,
"Too many or too few discrete variables in neighboorhood: %d (%d)\n",
1685 heurdata->sumneighborhoodvars += neighborhoodsize;
1697 SCIPdebugMsg(
scip,
"Stopping with maxpotential %15.9f and selected variable %s\n",
1828 SCIPdebugMsg(
scip,
"Blocks %d (label %d)-- %d (label %d) marked with incumbent solution\n",
1890 SCIPdebugMsg(
scip,
"Fix %s variables (%scluding linking variables) except blocks %d (label %d) -- %d (label %d)\n",
1891 heurdata->fixcontvars ?
"all" :
"discrete",
1902 for(
p = 0;
p < 2; ++
p )
1925 fixedvars[*nfixings] =
var;
2000 if( decomphorizon !=
NULL )
2043 if(
heurdata->usedecomprollhorizon )
2046 if( decomp !=
NULL )
2086 SCIPdebugMsg(
scip,
"Selected variable <%s> as central variable for a <%d>-neighborhood\n",
2137 SCIP_Real upperbound;
2227 SCIP_Longint maxnnodes;
2481 decomphorizon =
heurdata->decomphorizon;
2483 if( decomphorizon ==
NULL &&
heurdata->userollinghorizon )
2582 else if( decomphorizon !=
NULL )
2639 "number of nodes added to the contingent of the total nodes",
2643 "maximum number of nodes to regard in the subproblem",
2647 "minimum number of nodes required to start the subproblem",
2651 "number of nodes without incumbent change that heuristic should wait",
2655 "contingent of sub problem nodes in relation to the number of nodes of the original problem",
2659 "percentage of integer variables that have to be fixed",
2663 "factor by which " HEUR_NAME " should at least improve the incumbent",
2667 "should subproblem be created out of the rows in the LP rows?",
2671 "if uselprows == FALSE, should all active cuts from cutpool be copied to constraints in subproblem?",
2675 "should continuous variables outside the neighborhoods be fixed?",
2679 "limit on number of improving incumbent solutions in sub-CIP",
2683 "maximum distance to selected variable to enter the subproblem, or -1 to select the distance "
2684 "that best approximates the minimum fixing rate from below",
2688 "the reference point to compute the neighborhood potential: (r)oot, (l)ocal lp, or (p)seudo solution",
2692 "should the heuristic solve a sequence of sub-MIP's around the first selected variable",
2696 "should dense constraints (at least as dense as 1 - minfixingrate) be ignored by connectivity graph?",
2700 "limiting percentage for variables already used in sub-SCIPs to terminate rolling horizon approach",
2704 "overlap of blocks between runs - 0.0: no overlap, 1.0: shift by only 1 block",
2708 "should user decompositions be considered, if available?",
2712 "should user decompositions be considered for initial selection in rolling horizon, if available?",
2716 "should random initial variable selection be used if decomposition was not successful?",
2720 "should blocks be treated consecutively (sorted by ascending label?)",
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPtranslateSubSols(SCIP *scip, SCIP *subscip, SCIP_HEUR *heur, SCIP_VAR **subvars, SCIP_Bool *success, int *solindex)
SCIP_RETCODE SCIPcheckCopyLimits(SCIP *sourcescip, SCIP_Bool *success)
SCIP_RETCODE SCIPmergeVariableStatistics(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR **sourcevars, SCIP_VAR **targetvars, int nvars)
SCIP_RETCODE SCIPcopyLimits(SCIP *sourcescip, SCIP *targetscip)
void SCIPgetDecomps(SCIP *scip, SCIP_DECOMP ***decomps, int *ndecomps, SCIP_Bool original)
int SCIPdecompGetNBlocks(SCIP_DECOMP *decomp)
void SCIPdecompGetVarsLabels(SCIP_DECOMP *decomp, SCIP_VAR **vars, int *labels, int nvars)
SCIP_Bool SCIPdecompIsOriginal(SCIP_DECOMP *decomp)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
int SCIPgetNIntVars(SCIP *scip)
int SCIPgetNImplVars(SCIP *scip)
int SCIPgetNContVars(SCIP *scip)
SCIP_RETCODE SCIPsetObjlimit(SCIP *scip, SCIP_Real objlimit)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
int SCIPgetNVars(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNBinVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint value)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPsetSubscipsOff(SCIP *scip, SCIP_Bool quiet)
SCIP_RETCODE SCIPsetPresolving(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_RETCODE SCIPsetCharParam(SCIP *scip, const char *name, char value)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsetBoolParam(SCIP *scip, const char *name, SCIP_Bool value)
SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
SCIP_RETCODE SCIPsetSeparating(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_RETCODE SCIPincludeHeurGins(SCIP *scip)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur,)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
SCIP_RETCODE SCIPincludeHeurBasic(SCIP *scip, SCIP_HEUR **heur, const char *name, const char *desc, char dispchar, int priority, int freq, int freqofs, int maxdepth, SCIP_HEURTIMING timingmask, SCIP_Bool usessubscip, SCIP_DECL_HEUREXEC((*heurexec)), SCIP_HEURDATA *heurdata)
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur,)
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
SCIP_RETCODE SCIPsetHeurExitsol(SCIP *scip, SCIP_HEUR *heur,)
SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur,)
SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur,)
const char * SCIPheurGetName(SCIP_HEUR *heur)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_NODESEL * SCIPfindNodesel(SCIP *scip, const char *name)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
int SCIPgetNSols(SCIP *scip)
SCIP_Bool SCIPsolIsOriginal(SCIP_SOL *sol)
int SCIPsolGetIndex(SCIP_SOL *sol)
SCIP_Longint SCIPgetSolNodenum(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_Longint SCIPgetNTotalNodes(SCIP *scip)
SCIP_RETCODE SCIPcopyLargeNeighborhoodSearch(SCIP *sourcescip, SCIP *subscip, SCIP_HASHMAP *varmap, const char *suffix, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int nfixedvars, SCIP_Bool uselprows, SCIP_Bool copycuts, SCIP_Bool *success, SCIP_Bool *valid)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPsumepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
void SCIPvariableGraphFree(SCIP *scip, SCIP_VGRAPH **vargraph)
SCIP_RETCODE SCIPvariablegraphBreadthFirst(SCIP *scip, SCIP_VGRAPH *vargraph, SCIP_VAR **startvars, int nstartvars, int *distances, int maxdistance, int maxvars, int maxbinintvars)
SCIP_RETCODE SCIPvariableGraphCreate(SCIP *scip, SCIP_VGRAPH **vargraph, SCIP_Bool relaxdenseconss, SCIP_Real relaxdensity, int *nrelaxedconstraints)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
int SCIPrandomGetInt(SCIP_RANDNUMGEN *randnumgen, int minrandval, int maxrandval)
void SCIPsortInd(int *indarray, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
SCIP_Bool SCIPsortedvecFindInt(int *intarray, int val, int len, int *pos)
void SCIPsortIntPtr(int *intarray, void **ptrarray, int len)
void SCIPsortInt(int *intarray, int len)
SCIPfreeRandom(scip, &heurdata->randnumgen)
#define DEFAULT_RELAXDENSECONSS
static SCIP_Bool decompHorizonBlockUsedRecently(SCIP *scip, DECOMPHORIZON *decomphorizon, int blockpos)
#define DEFAULT_FIXCONTVARS
static void tabooListReset(TABOOLIST *taboolist)
static void freeTabooList(SCIP *scip, TABOOLIST **taboolist)
#define DEFAULT_NODESQUOT
static SCIP_Bool checkFixingrate(SCIP *scip, SCIP_HEURDATA *heurdata, int nfixings)
static SCIP_RETCODE setLimits(SCIP *sourcescip, SCIP *subscip, SOLVELIMITS *solvelimits)
#define DEFAULT_NWAITINGNODES
#define DEFAULT_POTENTIAL
static SCIP_RETCODE selectNextVariable(SCIP *scip, SCIP_HEURDATA *heurdata, ROLLINGHORIZON *rollinghorizon, int *distances, SCIP_VAR **selvar, int *selvarmaxdistance)
static int countLabel(int *labels, int start, int nlabels)
static SCIP_RETCODE fixNonNeighborhoodVariables(SCIP *scip, SCIP_HEURDATA *heurdata, ROLLINGHORIZON *rollinghorizon, SCIP_SOL *sol, SCIP_VAR **vars, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int *distances, int maxdistance, int *nfixings)
static SCIP_Real heurdataAvgDiscreteNeighborhoodSize(SCIP_HEURDATA *heurdata)
static SCIP_RETCODE createTabooList(SCIP *scip, TABOOLIST **taboolist, int initialsize)
static SCIP_RETCODE decompHorizonInitialize(SCIP *scip, DECOMPHORIZON *decomphorizon, SCIP_HEURDATA *heurdata)
#define DEFAULT_MAXDISTANCE
static SCIP_Bool isVariableInNeighborhood(SCIP_VAR *var, int *distances, int maxdistance)
static SCIP_Bool decompHorizonNext(SCIP *scip, DECOMPHORIZON *decomphorizon, SCIP_HEURDATA *heurdata, int maxblocksize, int *blockintervalstart, int *blockintervalend, int *nextblocklabel, SCIP_Bool *fixlinkvars)
#define DEFAULT_USESELFALLBACK
static void decompHorizonSetOverlapInterval(DECOMPHORIZON *decomphorizon, int leftborder, int rightborder)
static SCIP_RETCODE setupSubScip(SCIP *scip, SCIP *subscip, SOLVELIMITS *solvelimits, SCIP_HEUR *heur)
static SCIP_Bool decompHorizonIsInitialized(DECOMPHORIZON *decomphorizon)
#define DEFAULT_MINFIXINGRATE
#define DEFAULT_ROLLHORIZONLIMFAC
static void decompHorizonFree(SCIP *scip, DECOMPHORIZON **decomphorizon)
static SCIP_RETCODE selectInitialVariableRandomly(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VGRAPH *vargraph, int *distances, SCIP_VAR **selvar, int *selvarmaxdistance)
static SCIP_RETCODE determineVariableFixings(SCIP *scip, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int *nfixings, SCIP_HEURDATA *heurdata, ROLLINGHORIZON *rollinghorizon, DECOMPHORIZON *decomphorizon, SCIP_Bool *success)
static SCIP_RETCODE rollingHorizonCreate(SCIP *scip, ROLLINGHORIZON **rollinghorizon)
static void rollingHorizonStoreDistances(ROLLINGHORIZON *rollinghorizon, int *distances)
#define DEFAULT_MINIMPROVE
#define DEFAULT_USELPROWS
static SCIP_RETCODE selectInitialVariableDecomposition(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_DECOMP *decomp, SCIP_VGRAPH *vargraph, int *distances, SCIP_VAR **selvar, int *selvarmaxdistance)
static SCIP_Bool decompHorizonRunAgain(SCIP *scip, DECOMPHORIZON *decomphorizon)
static SCIP_RETCODE determineLimits(SCIP *scip, SCIP_HEUR *heur, SOLVELIMITS *solvelimits, SCIP_Bool *runagain)
static SCIP_RETCODE decompHorizonCreate(SCIP *scip, DECOMPHORIZON **decomphorizon, SCIP_DECOMP *decomp)
static SCIP_RETCODE determineVariableFixingsDecomp(SCIP *scip, DECOMPHORIZON *decomphorizon, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int *nfixings, SCIP_HEURDATA *heurdata, SCIP_Bool *success)
#define DEFAULT_BESTSOLLIMIT
static SCIP_RETCODE determineMaxDistance(SCIP *scip, SCIP_HEURDATA *heurdata, int *distances, int *choosevardistance)
static SCIP_Bool rollingHorizonRunAgain(SCIP *scip, ROLLINGHORIZON *rollinghorizon, SCIP_HEURDATA *heurdata)
static SCIP_Bool tabooListFind(TABOOLIST *taboolist, int elem)
static int decompHorizonGetFirstPosBestPotential(SCIP *scip, DECOMPHORIZON *decomphorizon, SCIP_HEURDATA *heurdata, int maxblocksize)
static void updateFailureStatistic(SCIP *scip, SCIP_HEURDATA *heurdata)
#define DEFAULT_USEROLLINGHORIZON
#define DEFAULT_USEDECOMP
#define DEFAULT_CONSECUTIVEBLOCKS
static SCIP_VAR ** decomphorizonGetVars(DECOMPHORIZON *decomphorizon)
static void rollingHorizonFree(SCIP *scip, ROLLINGHORIZON **rollinghorizon)
static void decompHorizonMarkInterval(SCIP *scip, DECOMPHORIZON *decomphorizon, SCIP_HEURDATA *heurdata, SCIP_SOL *sol, int blockstartpos, int blockendpos)
static SCIP_DECOMP * chooseDecomp(SCIP *scip)
static SCIP_Real getPotential(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_SOL *sol, SCIP_VAR **vars, int nvars)
static int taboolistgetNElems(TABOOLIST *taboolist)
#define DEFAULT_USEDECOMPROLLHORIZON
static int * tabooListGetLastK(TABOOLIST *taboolist, int k)
static SCIP_RETCODE tabooListAdd(SCIP *scip, TABOOLIST *taboolist, int elem)
static SCIP_Real getFixVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
LNS heuristic that tries to delimit the search region to a neighborhood in the constraint graph.
SCIPcreateRandom(scip, &heurdata->randnumgen, DEFAULT_RANDSEED, TRUE))
assert(minobj< SCIPgetCutoffbound(scip))
methods commonly used by primal heuristics
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public methods for decompositions
public methods for primal heuristics
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for primal CIP solutions
public methods for problem variables
public methods for branching rule plugins and branching
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for decompositions
public methods for primal heuristic plugins and divesets
public methods for memory management
public methods for message handling
public methods for node selector plugins
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for random numbers
public methods for solutions
public methods for querying solving statistics
public methods for timing
SCIP_VGRAPH * variablegraph
SCIP_Longint stallnodelimit
#define SCIP_DECOMP_LINKVAR
#define SCIP_DECL_HEURCOPY(x)
struct SCIP_HeurData SCIP_HEURDATA
#define SCIP_DECL_HEURINIT(x)
#define SCIP_DECL_HEUREXIT(x)
#define SCIP_DECL_HEURFREE(x)
#define SCIP_DECL_HEUREXITSOL(x)
#define SCIP_DECL_HEUREXEC(x)
#define SCIP_DECL_SORTINDCOMP(x)
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STATUS_STALLNODELIMIT
@ SCIP_VARTYPE_CONTINUOUS