46 assert(heur1 != NULL);
47 assert(heur2 != NULL);
77 assert(paramdata != NULL);
91 assert(diveset != NULL);
127 assert(diveset != NULL);
159 assert(heur != NULL);
160 assert(diveset != NULL);
161 assert(diveset->
heur == NULL);
163 diveset->
heur = heur;
203 unsigned int initialseed,
212 const char* divesetname;
215 assert(divesetptr != NULL);
217 assert(divesetgetscore != NULL);
218 assert(heur != NULL);
219 assert(blkmem != NULL);
222 diveset = *divesetptr;
235 diveset->
heur = NULL;
238 diveset->divesetgetscore = divesetgetscore;
249 paramname,
"minimal relative depth to start diving",
254 "maximal relative depth to start diving",
260 "maximal fraction of diving LP iterations compared to node LP iterations",
266 "additional number of allowed LP iterations",
272 "maximal quotient (curlowerbound - lowerbound)/(cutoffbound - lowerbound) where diving is performed (0.0: no limit)",
278 "maximal quotient (curlowerbound - lowerbound)/(avglowerbound - lowerbound) where diving is performed (0.0: no limit)",
284 "maximal UBQUOT when no solution was found yet (0.0: no limit)",
290 "maximal AVGQUOT when no solution was found yet (0.0: no limit)",
296 "use one level of backtracking if infeasibility is encountered?",
301 "percentage of immediate domain changes during probing to trigger LP resolve",
307 "LP solve frequency for diving heuristics (0: only after enough domain changes have been found)",
314 "should only LP branching candidates be considered instead of the slower but " 315 "more general constraint handler diving variable selection?",
326 return diveset->
heur;
334 assert(diveset != NULL);
345 assert(diveset != NULL);
355 assert(diveset != NULL);
357 return diveset->
name;
389 assert(diveset != NULL);
399 assert(diveset != NULL);
409 assert(diveset != NULL);
419 assert(diveset != NULL);
429 assert(diveset != NULL);
439 assert(diveset != NULL);
449 assert(diveset != NULL);
459 assert(diveset != NULL);
469 assert(diveset != NULL);
479 assert(diveset != NULL);
489 assert(diveset != NULL);
499 assert(diveset != NULL);
565 assert(diveset != NULL);
575 assert(diveset != NULL);
586 assert(diveset != NULL);
598 assert(diveset != NULL);
609 assert(diveset != NULL);
636 assert(diveset != NULL);
637 assert(diveset->
name != NULL);
658 assert(diveset->divesetgetscore != NULL);
659 assert(candscore != NULL);
660 assert(roundup != NULL);
661 assert(divecand != NULL);
664 SCIP_CALL( diveset->divesetgetscore(set->scip, diveset, divetype, divecand, divecandsol, divecandfrac,
665 candscore, roundup) );
678 assert(heur != NULL);
680 assert(set->scip != NULL);
682 if( heur->heurcopy != NULL )
685 SCIP_CALL( heur->heurcopy(set->scip, heur) );
719 assert(heur != NULL);
720 assert(name != NULL);
721 assert(desc != NULL);
723 assert(freqofs >= 0);
724 assert(heurexec != NULL);
729 (*heur)->dispchar = dispchar;
730 (*heur)->priority = priority;
731 (*heur)->freq = freq;
732 (*heur)->freqofs = freqofs;
733 (*heur)->maxdepth = maxdepth;
734 (*heur)->delaypos = -1;
735 (*heur)->timingmask = timingmask;
736 (*heur)->usessubscip = usessubscip;
737 (*heur)->heurcopy = heurcopy;
738 (*heur)->heurfree = heurfree;
739 (*heur)->heurinit = heurinit;
740 (*heur)->heurexit = heurexit;
741 (*heur)->heurinitsol = heurinitsol;
742 (*heur)->heurexitsol = heurexitsol;
743 (*heur)->heurexec = heurexec;
744 (*heur)->heurdata = heurdata;
748 (*heur)->nsolsfound = 0;
749 (*heur)->nbestsolsfound = 0;
750 (*heur)->initialized =
FALSE;
751 (*heur)->divesets = NULL;
752 (*heur)->ndivesets = 0;
758 &(*heur)->priority,
TRUE, priority, INT_MIN/4, INT_MAX/4,
761 (void)
SCIPsnprintf(paramdesc,
SCIP_MAXSTRLEN,
"frequency for calling primal heuristic <%s> (-1: never, 0: only at depth freqofs)", name);
784 assert(heur != NULL);
785 assert(*heur != NULL);
786 assert(!(*heur)->initialized);
788 assert((*heur)->divesets != NULL || (*heur)->ndivesets == 0);
791 if( (*heur)->heurfree != NULL )
793 SCIP_CALL( (*heur)->heurfree(set->scip, *heur) );
796 for( d = 0; d < (*heur)->ndivesets; ++d )
798 assert((*heur)->divesets[d] != NULL);
818 assert(heur != NULL);
827 if( set->misc_resetstat )
838 if( heur->heurinit != NULL )
843 SCIP_CALL( heur->heurinit(set->scip, heur) );
867 assert(heur != NULL);
876 if( heur->heurexit != NULL )
881 SCIP_CALL( heur->heurexit(set->scip, heur) );
897 assert(heur != NULL);
903 set->heurssorted =
FALSE;
907 if( heur->heurinitsol != NULL )
912 SCIP_CALL( heur->heurinitsol(set->scip, heur) );
927 assert(heur != NULL);
931 if( heur->heurexitsol != NULL )
936 SCIP_CALL( heur->heurexitsol(set->scip, heur) );
949 int lpstateforkdepth,
960 execute = heur->
freq >= 0;
968 execute = (heur->
freq > 0 && depth >= heur->
freqofs 979 execute = execute || (depth == heur->
freqofs && heur->
freq == 0);
985 execute = execute || (heur->
delaypos >= 0);
1002 execute = execute && (heur->
timingmask & heurtiming) > 0;
1013 int lpstateforkdepth,
1023 assert(heur != NULL);
1024 assert(heur->heurexec != NULL);
1025 assert(heur->
freq >= -1);
1028 assert(
set != NULL);
1029 assert(set->scip != NULL);
1030 assert(primal != NULL);
1032 assert(ndelayedheurs != NULL);
1033 assert(result != NULL);
1060 SCIP_CALL( heur->heurexec(set->scip, heur, heurtiming, nodeinfeasible, result) );
1072 SCIPerrorMessage(
"execution method of primal heuristic <%s> returned invalid result <%d>\n",
1073 heur->
name, *result);
1085 set->heurssorted =
FALSE;
1093 SCIPsetDebugMsg(
set,
"delaying execution of primal heuristic <%s> in depth %d (delaypos: %d), heur was%s delayed before, had delaypos %d\n",
1097 if( heur->
delaypos != *ndelayedheurs )
1100 set->heurssorted =
FALSE;
1113 assert(heur != NULL);
1124 assert(heur != NULL);
1137 assert(heur != NULL);
1139 heur->heurcopy = heurcopy;
1148 assert(heur != NULL);
1150 heur->heurfree = heurfree;
1159 assert(heur != NULL);
1161 heur->heurinit = heurinit;
1170 assert(heur != NULL);
1172 heur->heurexit = heurexit;
1181 assert(heur != NULL);
1183 heur->heurinitsol = heurinitsol;
1192 assert(heur != NULL);
1194 heur->heurexitsol = heurexitsol;
1202 assert(heur != NULL);
1212 assert(heur != NULL);
1222 assert(heur != NULL);
1232 assert(heur != NULL);
1243 assert(heur != NULL);
1253 assert(heur != NULL);
1263 assert(heur != NULL);
1275 assert(heur != NULL);
1276 assert(
set != NULL);
1279 set->heurssorted =
FALSE;
1287 assert(heur != NULL);
1298 assert(heur != NULL);
1308 assert(heur != NULL);
1318 assert(heur != NULL);
1328 assert(heur != NULL);
1338 assert(heur != NULL);
1348 assert(heur != NULL);
1358 assert(heur != NULL);
1369 assert(heur != NULL);
1380 assert(heur != NULL);
1390 assert(heur != NULL);
1400 assert(heur != NULL);
1410 assert(heur != NULL);
1454 int currentdistance;
1463 assert(scip != NULL);
1464 assert(startvars != NULL);
1465 assert(nstartvars >= 1);
1466 assert(distances != NULL);
1467 assert(maxdistance >= 0);
1472 nbinintvars = nbinvars + nintvars;
1478 if( vargraph == NULL )
1481 localvargraph =
TRUE;
1484 localvargraph =
FALSE;
1489 for( i = 0; i < nvars; ++i )
1498 for( i = 0; i < nstartvars; ++i )
1501 assert(probindex >= 0);
1503 distances[probindex] = 0;
1504 queue[i] = probindex;
1507 if( probindex < nbinintvars )
1511 nextlvlidx = nvars - 1;
1520 currvar = vars[queue[currlvlidx]];
1522 currentdistance = distances[varpos];
1523 assert(currentdistance >= 0);
1526 assert(currentdistance <= maxdistance);
1529 if( currentdistance == maxdistance )
1532 assert(varpos >= 0);
1535 for( c = 0; c < vargraph->
nvarconss[varpos]; ++c )
1559 for( v = 0; v < nconsvars; ++v )
1563 assert(nextvar != NULL);
1568 assert(nextvarpos >= 0);
1571 if( distances[nextvarpos] == -1 )
1573 distances[nextvarpos] = currentdistance + 1;
1574 queue[nextlvlidx] = nextvarpos;
1575 nextlvlidx -= increment;
1578 if( nextvarpos < nbinintvars )
1588 queue[currlvlidx] = -1;
1589 currlvlidx += increment;
1592 if( currlvlidx == nvars || currlvlidx == 0 || queue[currlvlidx] == -1 || currlvlidx == nextlvlidx )
1595 if( nvarshit >= maxvars || nbinintvarshit >= maxbinintvars )
1601 if( increment == +1 )
1603 currlvlidx = nvars - 1;
1610 nextlvlidx = nvars - 1;
1615 while( queue[currlvlidx] != -1 && distances[queue[currlvlidx]] >= currentdistance );
1640 int* nrelaxedconstraints
1650 assert(scip != NULL);
1651 assert(vargraph != NULL);
1659 if( nrelaxedconstraints != NULL )
1660 *nrelaxedconstraints = 0;
1662 relaxlimit = (int)(relaxdensity * nvars);
1664 for( c = 0; c < nconss; ++c )
1682 if( relaxdenseconss && nconsvars >= relaxlimit )
1684 if( nrelaxedconstraints != NULL )
1685 ++(*nrelaxedconstraints);
1697 for( v = 0; v < nconsvars; ++v )
1712 if( vargraph->
varconss[varpos] == NULL )
1744 int* nrelaxedconstraints
1750 assert(scip != NULL);
1751 assert(vargraph != NULL);
1762 SCIPhashKeyEqPtr, SCIPhashKeyValPtr, NULL) );
1783 assert(scip != NULL);
1784 assert(vargraph != NULL);
1788 for( v = nvars - 1; v >= 0; --v )
enum SCIP_Result SCIP_RESULT
SCIP_Bool onlylpbranchcands
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
SCIP_HEURTIMING SCIPheurGetTimingmask(SCIP_HEUR *heur)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
void SCIPheurSetInitsol(SCIP_HEUR *heur, SCIP_DECL_HEURINITSOL((*heurinitsol)))
static SCIP_DECL_PARAMCHGD(paramChgdHeurPriority)
#define SCIP_DECL_HEURINITSOL(x)
int SCIPdivesetGetMinSolutionDepth(SCIP_DIVESET *diveset)
int SCIPheurGetPriority(SCIP_HEUR *heur)
SCIP_Real SCIPheurGetSetupTime(SCIP_HEUR *heur)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define BMSfreeMemoryArrayNull(ptr)
SCIP_RETCODE SCIPdivesetGetScore(SCIP_DIVESET *diveset, SCIP_SET *set, SCIP_DIVETYPE divetype, SCIP_VAR *divecand, SCIP_Real divecandsol, SCIP_Real divecandfrac, SCIP_Real *candscore, SCIP_Bool *roundup)
SCIP_Longint SCIPdivesetGetNBacktracks(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_Longint totalnbacktracks
#define SCIPallocClearBufferArray(scip, ptr, num)
SCIP_PARAMDATA * SCIPparamGetData(SCIP_PARAM *param)
SCIP_Bool SCIPdivesetUseBacktrack(SCIP_DIVESET *diveset)
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
void SCIPvariableGraphFree(SCIP *scip, SCIP_VGRAPH **vargraph)
internal methods for clocks and timing issues
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
unsigned int SCIP_HEURTIMING
int SCIPcalcMemGrowSize(SCIP *scip, int num)
void SCIPheurSetExitsol(SCIP_HEUR *heur, SCIP_DECL_HEUREXITSOL((*heurexitsol)))
struct SCIP_ParamData SCIP_PARAMDATA
SCIP_Real SCIPdivesetGetUbQuot(SCIP_DIVESET *diveset)
int SCIPdivesetGetMaxLPIterOffset(SCIP_DIVESET *diveset)
SCIP_DIVESET ** SCIPheurGetDivesets(SCIP_HEUR *heur)
SCIP_Real SCIPdivesetGetAvgQuotNoSol(SCIP_DIVESET *diveset)
static SCIP_RETCODE heurAddDiveset(SCIP_HEUR *heur, SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPheurFree(SCIP_HEUR **heur, SCIP_SET *set, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPheurExec(SCIP_HEUR *heur, SCIP_SET *set, SCIP_PRIMAL *primal, int depth, int lpstateforkdepth, SCIP_HEURTIMING heurtiming, SCIP_Bool nodeinfeasible, int *ndelayedheurs, SCIP_RESULT *result)
#define SCIP_DECL_HEURCOPY(x)
enum SCIP_Retcode SCIP_RETCODE
#define SCIP_DECL_HEUREXEC(x)
SCIP_Real SCIPdivesetGetMaxRelDepth(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPheurInitsol(SCIP_HEUR *heur, SCIP_SET *set)
int SCIPheurGetFreqofs(SCIP_HEUR *heur)
int SCIPvarGetProbindex(SCIP_VAR *var)
SCIP_Longint SCIPdivesetGetNSols(SCIP_DIVESET *diveset)
void SCIPheurSetPriority(SCIP_HEUR *heur, SCIP_SET *set, int priority)
struct SCIP_HeurData SCIP_HEURDATA
SCIP_Longint SCIPdivesetGetNLPIterations(SCIP_DIVESET *diveset)
#define BMSallocMemoryArray(ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
SCIP_Bool SCIPheurUsesSubscip(SCIP_HEUR *heur)
unsigned int SCIP_DIVETYPE
SCIP_Real SCIPdivesetGetMinRelDepth(SCIP_DIVESET *diveset)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
internal methods for handling parameter settings
SCIP_RETCODE SCIPheurCopyInclude(SCIP_HEUR *heur, SCIP_SET *set)
static SCIP_RETCODE fillVariableGraph(SCIP *scip, SCIP_VGRAPH *vargraph, SCIP_Bool relaxdenseconss, SCIP_Real relaxdensity, int *nrelaxedconstraints)
int SCIPdivesetGetNSolutionCalls(SCIP_DIVESET *diveset)
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
SCIP_Real SCIPdivesetGetAvgSolutionDepth(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPheurCreate(SCIP_HEUR **heur, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, char dispchar, int priority, int freq, int freqofs, int maxdepth, SCIP_HEURTIMING timingmask, SCIP_Bool usessubscip, SCIP_DECL_HEURCOPY((*heurcopy)), SCIP_DECL_HEURFREE((*heurfree)), SCIP_DECL_HEURINIT((*heurinit)), SCIP_DECL_HEUREXIT((*heurexit)), SCIP_DECL_HEURINITSOL((*heurinitsol)), SCIP_DECL_HEUREXITSOL((*heurexitsol)), SCIP_DECL_HEUREXEC((*heurexec)), SCIP_HEURDATA *heurdata)
#define SCIPfreeBufferArray(scip, ptr)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define BMSfreeMemory(ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIP_DECL_DIVESETGETSCORE(x)
void SCIPheurSetFreq(SCIP_HEUR *heur, int freq)
SCIP_Bool SCIPdivesetUseOnlyLPBranchcands(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPdivesetReset(SCIP_DIVESET *diveset, SCIP_SET *set)
internal methods for collecting primal CIP solutions and primal informations
#define SCIP_HEURTIMING_AFTERPSEUDOPLUNGE
SCIP_Real SCIPdivesetGetMaxLPIterQuot(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
SCIP_Real maxdiveavgquotnosol
void SCIPdivesetUpdateLPStats(SCIP_DIVESET *diveset, SCIP_STAT *stat, SCIP_Longint niterstoadd)
SCIP_RETCODE SCIPsetHeurPriority(SCIP *scip, SCIP_HEUR *heur, int priority)
SCIP_HEUR * SCIPdivesetGetHeur(SCIP_DIVESET *diveset)
SCIP_RETCODE SCIPvariableGraphCreate(SCIP *scip, SCIP_VGRAPH **vargraph, SCIP_Bool relaxdenseconss, SCIP_Real relaxdensity, int *nrelaxedconstraints)
int SCIPdivesetGetMaxSolutionDepth(SCIP_DIVESET *diveset)
SCIP_HEURTIMING timingmask
const char * SCIPheurGetName(SCIP_HEUR *heur)
#define BMSfreeMemoryArray(ptr)
int SCIPheurGetMaxdepth(SCIP_HEUR *heur)
SCIP_RETCODE SCIPgetConsNVars(SCIP *scip, SCIP_CONS *cons, int *nvars, SCIP_Bool *success)
SCIP_Longint nbestsolsfound
#define SCIP_HEURTIMING_AFTERLPNODE
void SCIPclockReset(SCIP_CLOCK *clck)
int SCIPdivesetGetMaxDepth(SCIP_DIVESET *diveset)
SCIP_Real SCIPdivesetGetAvgQuot(SCIP_DIVESET *diveset)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
SCIP_Real SCIPdivesetGetAvgDepth(SCIP_DIVESET *diveset)
const char * SCIPheurGetDesc(SCIP_HEUR *heur)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
void SCIPheurSetCopy(SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy)))
internal miscellaneous methods
SCIP_Real lpresolvedomchgquot
void SCIPrandomFree(SCIP_RANDNUMGEN **randnumgen, BMS_BLKMEM *blkmem)
SCIP_RANDNUMGEN * randnumgen
int SCIPheurGetFreq(SCIP_HEUR *heur)
void SCIPrandomSetSeed(SCIP_RANDNUMGEN *randnumgen, unsigned int initseed)
internal methods for global SCIP settings
#define SCIP_HEURTIMING_DURINGPRESOLLOOP
void SCIPhashtableRemoveAll(SCIP_HASHTABLE *hashtable)
#define SCIP_HEURTIMING_BEFOREPRESOL
SCIP_RETCODE SCIPsetAddIntParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, 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_Real SCIPdivesetGetLPResolveDomChgQuot(SCIP_DIVESET *diveset)
int SCIPheurGetNDivesets(SCIP_HEUR *heur)
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
static void divesetFree(SCIP_DIVESET **divesetptr, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPdivesetSupportsType(SCIP_DIVESET *diveset, SCIP_DIVETYPE divetype)
SCIP_Longint nlpiterations
SCIP_RETCODE SCIPgetConsVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **vars, int varssize, SCIP_Bool *success)
#define BMSduplicateMemoryArray(ptr, source, num)
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
#define BMSfreeBlockMemory(mem, ptr)
SCIP_Longint totalsoldepth
#define SCIPallocBufferArray(scip, ptr, num)
datastructures for primal heuristics
public data structures and miscellaneous methods
SCIP_Longint ndivesetlpiterations
SCIP_RETCODE SCIPvariablegraphBreadthFirst(SCIP *scip, SCIP_VGRAPH *vargraph, SCIP_VAR **startvars, int nstartvars, int *distances, int maxdistance, int maxvars, int maxbinintvars)
void SCIPdivesetUpdateStats(SCIP_DIVESET *diveset, SCIP_STAT *stat, int depth, int nprobingnodes, int nbacktracks, SCIP_Longint nsolsfound, SCIP_Longint nbestsolsfound, SCIP_Bool leavesol)
SCIP_Real SCIPdivesetGetUbQuotNoSol(SCIP_DIVESET *diveset)
SCIP_RANDNUMGEN * SCIPdivesetGetRandnumgen(SCIP_DIVESET *diveset)
void SCIPclockFree(SCIP_CLOCK **clck)
SCIP_Bool SCIPheurShouldBeExecuted(SCIP_HEUR *heur, int depth, int lpstateforkdepth, SCIP_HEURTIMING heurtiming, SCIP_Bool *delayed)
SCIP_RETCODE SCIPheurInit(SCIP_HEUR *heur, SCIP_SET *set)
void SCIPheurSetFree(SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
void SCIPheurEnableOrDisableClocks(SCIP_HEUR *heur, SCIP_Bool enable)
SCIP_DIVETYPE divetypemask
#define SCIP_MAXTREEDEPTH
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
int SCIPgetNVars(SCIP *scip)
int SCIPparamGetInt(SCIP_PARAM *param)
void SCIPdivesetSetWorkSolution(SCIP_DIVESET *diveset, SCIP_SOL *sol)
SCIP_HASHTABLE * visitedconss
SCIP_DECL_SORTPTRCOMP(SCIPheurComp)
int SCIPgetNConss(SCIP *scip)
void SCIPheurSetExit(SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit)))
#define SCIP_DECL_HEUREXIT(x)
SCIP_RETCODE SCIPheurExit(SCIP_HEUR *heur, SCIP_SET *set)
public methods for message output
#define SCIP_DECL_HEURINIT(x)
#define SCIP_HEURTIMING_AFTERPSEUDONODE
SCIP_Longint nbestsolsfound
void SCIPheurSetInit(SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit)))
char SCIPheurGetDispchar(SCIP_HEUR *heur)
SCIP_RETCODE SCIPrandomCreate(SCIP_RANDNUMGEN **randnumgen, BMS_BLKMEM *blkmem, unsigned int initialseed)
SCIP_Longint nbestsolsfound
void SCIPheurSetTimingmask(SCIP_HEUR *heur, SCIP_HEURTIMING timingmask)
#define SCIP_DECL_HEURFREE(x)
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
SCIP_Longint SCIPheurGetNSolsFound(SCIP_HEUR *heur)
SCIP_Longint SCIPdivesetGetSolSuccess(SCIP_DIVESET *diveset)
SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPdivesetCreate(SCIP_DIVESET **divesetptr, SCIP_HEUR *heur, const char *name, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_Real minreldepth, SCIP_Real maxreldepth, SCIP_Real maxlpiterquot, SCIP_Real maxdiveubquot, SCIP_Real maxdiveavgquot, SCIP_Real maxdiveubquotnosol, SCIP_Real maxdiveavgquotnosol, SCIP_Real lpresolvedomchgquot, int lpsolvefreq, int maxlpiterofs, unsigned int initialseed, SCIP_Bool backtrack, SCIP_Bool onlylpbranchcands, SCIP_DIVETYPE divetypemask, SCIP_DECL_DIVESETGETSCORE((*divesetgetscore)))
int SCIPsetInitializeRandomSeed(SCIP_SET *set, int initialseedvalue)
#define SCIP_HEURTIMING_AFTERLPPLUNGE
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define BMSallocBlockMemory(mem, ptr)
SCIP_Bool SCIPheurIsInitialized(SCIP_HEUR *heur)
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPsetAddRealParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, 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_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
internal methods for primal heuristics
SCIP_RETCODE SCIPheurExitsol(SCIP_HEUR *heur, SCIP_SET *set)
SCIP_Real SCIPheurGetTime(SCIP_HEUR *heur)
SCIP_RETCODE SCIPsetAddBoolParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
#define SCIP_DECL_HEUREXITSOL(x)
int SCIPdivesetGetNCalls(SCIP_DIVESET *diveset)
SCIP_SOL * SCIPdivesetGetWorkSolution(SCIP_DIVESET *diveset)
SCIP_Real maxdiveubquotnosol
SCIP_Longint SCIPdivesetGetNProbingNodes(SCIP_DIVESET *diveset)
int SCIPdivesetGetLPSolveFreq(SCIP_DIVESET *diveset)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Longint totaldivesetdepth
const char * SCIPdivesetGetName(SCIP_DIVESET *diveset)
int SCIPdivesetGetMinDepth(SCIP_DIVESET *diveset)