47 #define VBOUNDVARIANT_NOOBJ 0x001u 48 #define VBOUNDVARIANT_BESTBOUND 0x002u 49 #define VBOUNDVARIANT_WORSTBOUND 0x004u 51 #define HEUR_NAME "vbounds" 52 #define HEUR_DESC "LNS heuristic uses the variable lower and upper bounds to determine the search neighborhood" 53 #define HEUR_DISPCHAR 'V' 54 #define HEUR_PRIORITY 2500 56 #define HEUR_FREQOFS 0 57 #define HEUR_MAXDEPTH -1 58 #define HEUR_TIMING SCIP_HEURTIMING_BEFORENODE 59 #define HEUR_USESSUBSCIP TRUE 61 #define DEFAULT_MAXNODES 5000LL 62 #define DEFAULT_MININTFIXINGRATE 0.65 63 #define DEFAULT_MINMIPFIXINGRATE 0.65 65 #define DEFAULT_MINIMPROVE 0.01 67 #define DEFAULT_MINNODES 500LL 68 #define DEFAULT_NODESOFS 500LL 69 #define DEFAULT_NODESQUOT 0.1 70 #define DEFAULT_MAXPROPROUNDS 2 71 #define DEFAULT_MAXBACKTRACKS 10 72 #define DEFAULT_COPYCUTS TRUE 74 #define DEFAULT_USELOCKFIXINGS FALSE 79 #define DEFAULT_FEASVARIANT (VBOUNDVARIANT_BESTBOUND | VBOUNDVARIANT_WORSTBOUND) 82 #define DEFAULT_TIGHTENVARIANT (VBOUNDVARIANT_NOOBJ | VBOUNDVARIANT_BESTBOUND | VBOUNDVARIANT_WORSTBOUND) 132 #define getLbIndex(idx) (2*(idx)) 133 #define getUbIndex(idx) (2*(idx)+1) 134 #define getVarIndex(idx) ((idx)/2) 135 #define getBoundtype(idx) (((idx) % 2 == 0) ? SCIP_BOUNDTYPE_LOWER : SCIP_BOUNDTYPE_UPPER) 136 #define isIndexLowerbound(idx) ((idx) % 2 == 0) 137 #define getOtherBoundIndex(idx) (((idx) % 2 == 0) ? (idx) + 1 : (idx) - 1) 150 heurdata->vbvars = NULL;
151 heurdata->vbbounds = NULL;
152 heurdata->nvbvars = 0;
153 heurdata->initialized =
FALSE;
154 heurdata->applicable =
FALSE;
169 int* stacknextcliquevar,
191 assert(startnode >= 0);
193 assert(visited != NULL);
194 assert(visited[startnode] ==
FALSE);
195 assert(dfsstack != NULL);
196 assert(dfsnodes != NULL);
197 assert(ndfsnodes != NULL);
202 dfsstack[0] = startnode;
203 stacknextcliquevar[0] = 0;
204 stacknextedge[0] = 0;
210 while( stacksize > 0 )
213 curridx = dfsstack[stacksize - 1];
216 assert(visited[curridx] == (stacknextedge[stacksize - 1] != 0));
217 visited[curridx] =
TRUE;
223 if( stacknextedge[stacksize - 1] >= 0 )
240 for( i = stacknextedge[stacksize - 1]; i < nvbvars; ++i )
256 assert(!visited[idx]);
259 dfsstack[stacksize] = idx;
260 stacknextedge[stacksize] = 0;
261 stacknextcliquevar[stacksize] = 0;
262 stacknextedge[stacksize - 1] = i + 1;
271 stacknextedge[stacksize - 1] = -1;
281 for( j = -stacknextedge[stacksize - 1] - 1; j < ncliques; ++j )
288 if( stacknextcliquevar[stacksize - 1] == 0 )
295 stacknextedge[stacksize - 1] = -j - 2;
296 stacknextcliquevar[stacksize - 1] = 0;
317 for( i = 0; i < ncliquevars; ++i )
319 if( cliquevars[i] == startvar )
333 if( idx >= 0 && !visited[idx] )
335 if( i < ncliquevars - 1 )
337 stacknextedge[stacksize - 1] = -j - 1;
338 stacknextcliquevar[stacksize - 1] = i + 1;
342 stacknextedge[stacksize - 1] = -j - 2;
343 stacknextcliquevar[stacksize - 1] = 0;
352 assert(!visited[idx]);
355 dfsstack[stacksize] = idx;
356 stacknextedge[stacksize] = 0;
357 stacknextcliquevar[stacksize] = 0;
369 maxstacksize =
MAX(maxstacksize, stacksize);
377 dfsnodes[(*ndfsnodes)] = curridx;
381 visited[curridx] =
FALSE;
398 int* stacknextcliquevar;
404 assert(scip != NULL);
419 for( i = 0; i < nbounds; ++i )
423 SCIP_CALL(
dfs(scip, i, visited, dfsstack, stacknextedge, stacknextcliquevar, cliqueexit, vbvars, nvbvars) );
426 assert(*nvbvars <= nbounds);
457 heurdata->usednodes = 0;
458 heurdata->initialized =
TRUE;
470 if( nvbs > 0 && nvbs >= 0.1 * heurdata->minintfixingrate * nvars )
476 for( v = 0; v < nvbs; ++v )
485 heurdata->nvbvars = nvbs;
486 heurdata->applicable =
TRUE;
502 minimprove = heurdata->minimprove;
518 heurdata->cutoffbound = MIN(upperbound, cutoffbound);
550 for( v = 0; v < nvbvars && !(*infeasible); ++v )
553 bound = heurdata->vbbounds[v];
618 SCIPdebugMsg(scip,
"fixing %d: variable <%s> (obj=%g) to lower bound <%g> (%d pseudo cands)\n",
637 SCIPdebugMsg(scip,
"fixing %d: variable <%s> (obj=%g) to upper bound <%g> (%d pseudo cands)\n",
649 assert(lastvar != NULL);
685 SCIPdebugMessage(
"backtrack %d was %sfeasible\n", nbacktracks, (*infeasible ?
"in" :
""));
690 SCIPdebugMsg(scip,
"probing was infeasible after %d backtracks\n", nbacktracks);
694 else if( nbacktracks > heurdata->maxbacktracks )
696 SCIPdebugMsg(scip,
"interrupt probing after %d backtracks\n", nbacktracks);
702 *backtracked = (nbacktracks > 0);
722 assert( scip != NULL );
723 assert( subscip != NULL );
724 assert( subvars != NULL );
725 assert( subsol != NULL );
770 assert(scip != NULL);
771 assert(subscip != NULL);
772 assert(heurdata != NULL);
777 SCIP_CALL(
SCIPcopyConsCompression(scip, subscip, varmap, NULL,
"_vbounds", NULL, NULL, 0,
FALSE,
FALSE,
TRUE, NULL) );
779 if( heurdata->copycuts )
787 for( i = 0; i < nvars; i++ )
847 minimprove = heurdata->minimprove;
854 cutoffbound = (1-minimprove) *
SCIPgetUpperbound(scip) + minimprove * lowerbound;
863 heurdata->cutoffbound = MIN(upperbound, cutoffbound);
869 SCIPdebugMsg(scip,
"setting objlimit for subscip to %g\n", heurdata->cutoffbound);
880 SCIPdebugMsg(scip,
"vbounds heuristic presolved subproblem at time %g : %d vars, %d cons; fixing value = %g\n",
895 SCIPdebugMsg(scip,
"solving subproblem: nstallnodes=%" SCIP_LONGINT_FORMAT
", maxnodes=%" SCIP_LONGINT_FORMAT
"\n", nstallnodes, heurdata->maxnodes);
909 for( i = 0; i < nsubsols && !success; ++i )
968 assert(heur != NULL);
969 assert(heurdata != NULL);
975 if( skipobj1 != NULL )
977 if( skipobj2 != NULL )
985 if( nvbvars < nvars * heurdata->minintfixingrate )
1001 nstallnodes += heurdata->nodesofs;
1004 nstallnodes -= heurdata->usednodes;
1005 nstallnodes = MIN(nstallnodes, heurdata->maxnodes);
1007 SCIPdebugMsg(scip,
"apply variable bounds heuristic at node %lld on %d variable bounds, tighten: %d obj: %d\n",
1011 if( nstallnodes < heurdata->minnodes )
1013 SCIPdebugMsg(scip,
"skipping " HEUR_NAME ": nstallnodes=%" SCIP_LONGINT_FORMAT
", minnodes=%" SCIP_LONGINT_FORMAT
"\n", nstallnodes, heurdata->minnodes);
1045 #ifdef COLLECTSTATISTICS 1055 if( skipobj1 != NULL )
1056 *skipobj1 = allobj1;
1058 if( skipobj2 != NULL )
1059 *skipobj2 = allobj2;
1067 SCIPdebugMsg(scip,
"npscands=%d, oldnpscands=%d, heurdata->minintfixingrate=%g\n", npscands, oldnpscands, heurdata->minintfixingrate);
1070 if( npscands > oldnpscands * (1.0 - heurdata->minintfixingrate) )
1072 if( heurdata->uselockfixings && npscands <= 2.0 * oldnpscands * (1.0 - heurdata->minintfixingrate) )
1080 SCIPdebugMsg(scip,
"cutoff or timeout in locks fixing\n");
1086 SCIPdebugMsg(scip,
"after lockfixings: npscands=%d, oldnpscands=%d, allrowsfulfilled=%u, heurdata->minintfixingrate=%g\n",
1087 npscands, oldnpscands, allrowsfulfilled, heurdata->minintfixingrate);
1089 if( !allrowsfulfilled && npscands > oldnpscands * (1 - heurdata->minintfixingrate) )
1124 SCIPwarningMessage(scip,
"Error while solving LP in vbound heuristic; LP solve terminated with code <%d>\n",
1136 SCIPdebugMsg(scip,
" -> error=%u, status=%d\n", lperror, lpstatus);
1154 SCIPdebugMsg(scip,
"vbound heuristic found roundable primal solution: obj=%g\n",
1201 retcode =
setupAndSolveSubscip(scip, subscip, heurdata, vars, nvars, sol, nstallnodes, lowerbound,
1202 &nprevars, &wasfeas, result);
1212 #ifdef SCIP_STATISTIC 1214 SCIPstatisticMessage(
"vbound: tighten=%u obj=%d nvars=%d presolnvars=%d ratio=%.2f infeas=%u found=%d time=%.4f\n",
1215 tighten, obj, nvars, nprevars, (nvars - nprevars) / (
SCIP_Real)nvars, cutoff,
1245 assert(scip != NULL);
1246 assert(heur != NULL);
1279 assert(heurdata != NULL);
1282 for( v = 0; v < heurdata->nvbvars; ++v )
1308 assert( heur != NULL );
1309 assert( scip != NULL );
1310 assert( result != NULL );
1318 assert(heurdata != NULL);
1320 if( !heurdata->initialized )
1325 if( !heurdata->applicable )
1344 &skipobj1, &skipobj2, result) );
1360 &skipobj1, &skipobj2, result) );
1403 assert(heur != NULL);
1412 "minimum percentage of integer variables that have to be fixed",
1416 "minimum percentage of variables that have to be fixed within sub-SCIP (integer and continuous)",
1420 "maximum number of nodes to regard in the subproblem",
1424 "number of nodes added to the contingent of the total nodes",
1428 "minimum number of nodes required to start the subproblem",
1432 "contingent of sub problem nodes in relation to the number of nodes of the original problem",
1436 "factor by which " HEUR_NAME " heuristic should at least improve the incumbent",
1440 "maximum number of propagation rounds during probing (-1 infinity)",
1444 "should all active cuts from cutpool be copied to constraints in subproblem?",
1448 "should more variables be fixed based on variable locks if the fixing rate was not reached?",
1452 "maximum number of backtracks during the fixing process",
1456 "which variants of the vbounds heuristic that try to stay feasible should be called? (0: off, 1: w/o looking at obj, 2: only fix to best bound, 4: only fix to worst bound",
1460 "which tightening variants of the vbounds heuristic should be called? (0: off, 1: w/o looking at obj, 2: only fix to best bound, 4: only fix to worst bound",
enum SCIP_Result SCIP_RESULT
SCIP_RETCODE SCIPsetHeurExitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXITSOL((*heurexitsol)))
enum SCIP_BoundType SCIP_BOUNDTYPE
int SCIPgetNIntVars(SCIP *scip)
#define DEFAULT_NODESQUOT
SCIP_RETCODE SCIPlinkLPSol(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_RETCODE SCIPsetSeparating(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_Real * SCIPvarGetVlbCoefs(SCIP_VAR *var)
SCIP_VAR ** SCIPcliqueGetVars(SCIP_CLIQUE *clique)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth)
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
SCIP_RETCODE SCIPincludeHeurVbounds(SCIP *scip)
#define DEFAULT_MININTFIXINGRATE
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
int SCIPgetProbingDepth(SCIP *scip)
#define SCIPallocClearBufferArray(scip, ptr, num)
int SCIPvarGetNVlbs(SCIP_VAR *var)
static void heurdataReset(SCIP_HEURDATA *heurdata)
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
internal methods for clocks and timing issues
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
int SCIPgetNOrigVars(SCIP *scip)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
int SCIPgetNPseudoBranchCands(SCIP *scip)
SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing)
#define VBOUNDVARIANT_BESTBOUND
#define getOtherBoundIndex(idx)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPstopClock(SCIP *scip, SCIP_CLOCK *clck)
#define isIndexLowerbound(idx)
static SCIP_RETCODE initializeCandsLists(SCIP *scip, SCIP_HEURDATA *heurdata)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
int SCIPcliqueGetIndex(SCIP_CLIQUE *clique)
#define VBOUNDVARIANT_WORSTBOUND
SCIP_SOL ** SCIPgetSols(SCIP *scip)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPcopyLimits(SCIP *sourcescip, SCIP *targetscip)
SCIP_RETCODE SCIPcopyConsCompression(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *suffix, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int nfixedvars, SCIP_Bool global, SCIP_Bool enablepricing, SCIP_Bool passmessagehdlr, SCIP_Bool *valid)
SCIP_RETCODE SCIPcutoffNode(SCIP *scip, SCIP_NODE *node)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_RETCODE SCIPapplyLockFixings(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_Bool *cutoff, SCIP_Bool *allrowsfulfilled)
enum SCIP_Retcode SCIP_RETCODE
static SCIP_RETCODE applyVboundsFixings(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VAR **vars, int nvbvars, SCIP_Bool tighten, int obj, SCIP_Bool *allobj1, SCIP_Bool *allobj2, SCIP_Bool *backtracked, SCIP_Bool *infeasible)
#define SCIPstatisticMessage
int SCIPvarGetNVubs(SCIP_VAR *var)
SCIP_RETCODE SCIPsetPresolving(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
#define DEFAULT_MINIMPROVE
int SCIPvarGetProbindex(SCIP_VAR *var)
struct SCIP_HeurData SCIP_HEURDATA
static SCIP_RETCODE createNewSol(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_SOL *newsol, SCIP_SOL *subsol, SCIP_Bool *success)
#define SCIPfreeBlockMemory(scip, ptr)
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_RETCODE SCIPchgVarLbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_VAR ** SCIPvarGetVlbVars(SCIP_VAR *var)
SCIP_RETCODE SCIPfreeClock(SCIP *scip, SCIP_CLOCK **clck)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPconstructLP(SCIP *scip, SCIP_Bool *cutoff)
#define DEFAULT_MAXBACKTRACKS
#define SCIPfreeBufferArray(scip, ptr)
enum SCIP_LPSolStat SCIP_LPSOLSTAT
SCIP_RETCODE SCIPcreate(SCIP **scip)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define SCIPallocBlockMemory(scip, ptr)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
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 SCIPprintStatistics(SCIP *scip, FILE *file)
int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
#define DEFAULT_FEASVARIANT
const char * SCIPgetProbName(SCIP *scip)
SCIP_Bool SCIPisLPConstructed(SCIP *scip)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_RETCODE SCIPsolve(SCIP *scip)
const char * SCIPheurGetName(SCIP_HEUR *heur)
SCIP_RETCODE SCIPcreateClock(SCIP *scip, SCIP_CLOCK **clck)
static SCIP_RETCODE setupAndSolveSubscip(SCIP *scip, SCIP *subscip, SCIP_HEURDATA *heurdata, SCIP_VAR **vars, int nvars, SCIP_SOL *sol, SCIP_Longint nstallnodes, SCIP_Real lowerbound, int *nprevars, SCIP_Bool *wasfeas, SCIP_RESULT *result)
static SCIP_RETCODE topologicalSort(SCIP *scip, int *vbvars, int *nvbvars)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_RETCODE SCIPpropagateProbing(SCIP *scip, int maxproprounds, SCIP_Bool *cutoff, SCIP_Longint *ndomredsfound)
SCIP_RETCODE SCIPgetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_RETCODE SCIPfixVarProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval)
SCIP_RETCODE SCIPsetBoolParam(SCIP *scip, const char *name, SCIP_Bool value)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_RETCODE SCIPpresolve(SCIP *scip)
SCIP_RETCODE SCIPcopyCuts(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, int *ncutsadded)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
static SCIP_DECL_HEURCOPY(heurCopyVbounds)
SCIP_RETCODE SCIPendProbing(SCIP *scip)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value)
#define DEFAULT_MINMIPFIXINGRATE
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_RETCODE SCIPsolveProbingLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
static SCIP_RETCODE dfs(SCIP *scip, int startnode, SCIP_Shortbool *visited, int *dfsstack, int *stacknextedge, int *stacknextcliquevar, int *cliqueexit, int *dfsnodes, int *ndfsnodes)
SCIP_Real * SCIPvarGetVubCoefs(SCIP_VAR *var)
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
static SCIP_DECL_HEUREXEC(heurExecVbounds)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
#define DEFAULT_TIGHTENVARIANT
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_RETCODE SCIPcheckSol(SCIP *scip, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *feasible)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
int SCIPgetNImplVars(SCIP *scip)
static SCIP_DECL_HEUREXITSOL(heurExitsolVbounds)
SCIP_RETCODE SCIProundSol(SCIP *scip, SCIP_SOL *sol, SCIP_Bool *success)
SCIP_RETCODE SCIPsetObjlimit(SCIP *scip, SCIP_Real objlimit)
int SCIPgetDepth(SCIP *scip)
SCIP_Bool * SCIPcliqueGetValues(SCIP_CLIQUE *clique)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
void SCIPenableVarHistory(SCIP *scip)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
LNS heuristic uses the variable lower and upper bounds to determine the search neighborhood.
int SCIPgetNSols(SCIP *scip)
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
SCIP_RETCODE SCIPflushLP(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPtrySol(SCIP *scip, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
#define SCIP_MAXTREEDEPTH
int SCIPgetNBinVars(SCIP *scip)
SCIP_Bool SCIPinProbing(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
#define getBoundtype(idx)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
int SCIPgetNConss(SCIP *scip)
#define DEFAULT_USELOCKFIXINGS
int SCIPgetNCliques(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_VAR ** SCIPvarGetVubVars(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPcheckCopyLimits(SCIP *sourcescip, SCIP_Bool *success)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPsetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy)))
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_RETCODE SCIPnewProbingNode(SCIP *scip)
int SCIPcliqueGetNVars(SCIP_CLIQUE *clique)
SCIP_Real SCIPsumepsilon(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_RETCODE SCIPstartProbing(SCIP *scip)
#define SCIP_CALL_ABORT(x)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
static SCIP_DECL_HEURFREE(heurFreeVbounds)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
#define VBOUNDVARIANT_NOOBJ
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarUbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPstartClock(SCIP *scip, SCIP_CLOCK *clck)
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 SCIPsetSubscipsOff(SCIP *scip, SCIP_Bool quiet)
SCIP_RETCODE SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint value)
static SCIP_RETCODE applyVbounds(SCIP *scip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata, SCIP_VAR **vbvars, int nvbvars, SCIP_Bool tighten, int obj, SCIP_Bool *skipobj1, SCIP_Bool *skipobj2, SCIP_RESULT *result)
#define DEFAULT_MAXPROPROUNDS
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_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)