32 #define HEUR_NAME "feaspump" 33 #define HEUR_DESC "objective feasibility pump 2.0" 34 #define HEUR_DISPCHAR 'F' 35 #define HEUR_PRIORITY -1000000 37 #define HEUR_FREQOFS 0 38 #define HEUR_MAXDEPTH -1 39 #define HEUR_TIMING SCIP_HEURTIMING_AFTERLPPLUNGE 40 #define HEUR_USESSUBSCIP FALSE 42 #define DEFAULT_MAXLPITERQUOT 0.01 43 #define DEFAULT_MAXLPITEROFS 1000 44 #define DEFAULT_MAXSOLS 10 46 #define DEFAULT_MAXLOOPS 10000 47 #define DEFAULT_MAXSTALLLOOPS 10 48 #define DEFAULT_MINFLIPS 10 49 #define DEFAULT_CYCLELENGTH 3 50 #define DEFAULT_PERTURBFREQ 100 51 #define DEFAULT_OBJFACTOR 0.1 53 #define DEFAULT_ALPHA 1.0 54 #define DEFAULT_ALPHADIFF 1.0 55 #define DEFAULT_BEFORECUTS TRUE 56 #define DEFAULT_USEFP20 FALSE 57 #define DEFAULT_PERTSOLFOUND TRUE 58 #define DEFAULT_STAGE3 FALSE 59 #define DEFAULT_NEIGHBORHOODSIZE 18 60 #define DEFAULT_COPYCUTS TRUE 64 #define MINLPITER 5000 66 #define DEFAULT_RANDSEED 13 126 SCIP_CALL(
SCIPcopyConsCompression(scip, *probingscip, *varmapfw, NULL,
"feaspump", NULL, NULL, 0,
FALSE,
FALSE,
TRUE, success) );
264 assert(mostfracvars != NULL);
265 assert(mostfracvals != NULL);
266 assert(nflipcands != NULL);
273 if( *nflipcands >= maxnflipcands )
275 if( frac <= mostfracvals[*nflipcands-1] )
282 for( i = *nflipcands; i > 0 && mostfracvals[i-1] < frac; i-- )
284 mostfracvars[i] = mostfracvars[i-1];
285 mostfracvals[i] = mostfracvals[i-1];
287 assert(0 <= i && i <= *nflipcands && *nflipcands < maxnflipcands);
290 mostfracvars[i] = var;
291 mostfracvals[i] = frac;
313 assert(heurdata != NULL);
327 newobjcoeff = (1.0 - alpha)/scalingfactor + alpha * orgobjcoeff;
328 else if(
SCIPisEQ(scip, solval, ub) )
329 newobjcoeff = - (1.0 - alpha)/scalingfactor + alpha * orgobjcoeff;
331 newobjcoeff = alpha * orgobjcoeff;
353 for( i = 0; i < nflipcands; i++ )
359 var = mostfracvars[i];
361 roundedsolval =
SCIPgetSolVal(scip, heurdata->roundedsol, var);
367 if( roundedsolval > solval )
374 SCIPdebugMsg(scip,
"1-cycle flip: variable <%s> [%g,%g] LP sol %.15g sol %.15g -> %.15g\n",
399 for( i = 0; i < nbinandintvars; i++ )
418 if( MIN(frac, 1.0 - frac) +
MAX(flipprob, 0.0) > 0.5 )
420 roundedsolval =
SCIPgetSolVal(scip, heurdata->roundedsol, var);
424 if( roundedsolval > solval )
468 rhs = neighborhoodsize;
471 for( i = 0; i < nbinvars; i++ )
494 lhs, rhs,
FALSE,
FALSE,
TRUE,
FALSE,
TRUE,
FALSE,
FALSE,
FALSE,
FALSE,
FALSE) );
524 assert(scip != NULL);
525 assert(subscip != NULL);
537 for( i = 0; i < nvars; i++ )
546 for( i = 0; i < nsubsols && !(*success); ++i )
569 assert(scip != NULL);
570 assert(heur != NULL);
585 assert(heur != NULL);
587 assert(scip != NULL);
591 assert(heurdata != NULL);
605 assert(heur != NULL);
610 assert(heurdata != NULL);
617 heurdata->nlpiterations = 0;
618 heurdata->nsuccess = 0;
633 assert(heur != NULL);
638 assert(heurdata != NULL);
658 assert(heurdata != NULL);
686 if( nstallloops <= 1 )
688 if( nsolsfound == 0 )
689 return 4*maxnlpiterations;
691 return 2*maxnlpiterations;
694 return maxnlpiterations;
757 assert(heur != NULL);
759 assert(scip != NULL);
760 assert(result != NULL);
800 assert(heurdata != NULL);
809 assert(0 <= nfracs && nfracs <= nbinvars + nintvars);
817 maxnlpiterations = (
SCIP_Longint)((1.0 + 10.0*(nsolsfound+1.0)/(ncalls+1.0)) * heurdata->maxlpiterquot * nlpiterations);
818 maxnlpiterations += heurdata->maxlpiterofs;
821 if( heurdata->nlpiterations >= maxnlpiterations )
826 maxnlpiterations += nlpiterations;
829 maxnlpiterations =
MAX(maxnlpiterations, heurdata->nlpiterations +
MINLPITER);
832 maxflips = 3*heurdata->minflips;
833 maxloops = (heurdata->maxloops == -1 ? INT_MAX : heurdata->maxloops);
834 maxstallloops = (heurdata->maxstallloops == -1 ? INT_MAX : heurdata->maxstallloops);
836 SCIPdebugMsg(scip,
"executing feasibility pump heuristic, nlpiters=%" SCIP_LONGINT_FORMAT
", maxnlpit:%" SCIP_LONGINT_FORMAT
", maxflips:%d \n",
837 nlpiterations, maxnlpiterations, maxflips);
844 if( heurdata->usefp20 )
850 if( probingscip != NULL )
863 SCIPwarningMessage(scip,
"Error while solving subproblem in feaspump heuristic; sub-SCIP terminated with code <%d>\n", retcode);
898 SCIPdebugMsg(scip,
"successfully copied SCIP instance -> feasibility pump 2.0 can be used.\n");
902 assert(varmapfw == NULL);
904 SCIPdebugMsg(scip,
"SCIP reached the depth limit -> skip heuristic\n");
916 for( j = 0; j < heurdata->cyclelength; j++ )
922 if( heurdata->stage3 )
936 if( heurdata->objfactor == 1.0 )
937 objfactor = MIN(1.0 - 0.1 / (
SCIP_Real)(1 + nsolsfound), 0.999);
939 objfactor = heurdata->objfactor;
943 objnorm =
MAX(objnorm, 1.0);
944 scalingfactor = SQRT((
SCIP_Real)(nbinvars + nintvars)) / objnorm;
947 alpha = heurdata->alpha;
951 bestnfracs = INT_MAX;
957 && nloops < maxloops && nstallloops < maxstallloops
969 SCIPdebugMsg(scip,
"feasibility pump loop %d: %d fractional variables (alpha: %.4f, stall: %d/%d)\n",
970 nloops, nfracs, alpha, nstallloops, maxstallloops);
977 maxnflipcands =
SCIPrandomGetInt(heurdata->randnumgen, MIN(nfracs/2+1, heurdata->minflips), MIN(nfracs, maxflips));
985 if( heurdata->usefp20 )
989 for( i = 0; i < npseudocands; i++ )
992 pseudocandsfrac[i] = MIN(frac, 1.0-frac);
994 pseudocandsfrac[i] -= 10.0;
999 SCIPdebugMsg(scip,
"iteratively fix and propagate variables\n");
1002 for( i = 0; i < npseudocands; i++ )
1008 var = pseudocands[i];
1026 if( heurdata->usefp20 )
1035 solval =
MAX(solval, lbprobing);
1036 solval = MIN(solval, ubprobing);
1041 assert(
SCIPisFeasLE(probingscip, lbprobing, ubprobing));
1046 SCIPdebugMsg(scip,
" -> reduced %" SCIP_LONGINT_FORMAT
" domains\n", ndomreds);
1064 insertFlipCand(mostfracvars, mostfracvals, &nflipcands, maxnflipcands, var, frac);
1068 if( heurdata->usefp20 )
1074 for( i = nbinvars+nintvars; i < nvars; i++ )
1082 minimum = MIN(heurdata->cyclelength, nloops-1);
1083 for( j = 0; j < heurdata->cyclelength; j++ )
1084 cycles[j] = (nloops > j+1) && (
REALABS(lastalphas[j] - alpha) < heurdata->alphadiff);
1087 for( i = 0; i < nbinvars+nintvars; i++ )
1089 solval =
SCIPgetSolVal(scip, heurdata->roundedsol, vars[i]);
1092 for( j = 0; j < minimum; j++ )
1094 oldsolval =
SCIPgetSolVal(scip, lastroundedsols[j], vars[i]);
1095 cycles[j] = cycles[j] &&
SCIPisFeasEQ(scip, solval, oldsolval);
1102 assert(heurdata->perturbfreq > 0);
1103 if( nloops % heurdata->perturbfreq == 0 || (heurdata->pertsolfound &&
SCIPgetNBestSolsFound(scip) > nbestsolsfound) )
1111 minimum = MIN(heurdata->cyclelength, nloops-1);
1113 for( j = 0; j < minimum; j++ )
1121 SCIPdebugMsg(scip,
" -> avoiding 1-cycle: flipping %d candidates\n", nflipcands);
1126 SCIPdebugMsg(scip,
" -> avoiding %d-cycle by random flip\n", j+1);
1138 SCIPdebugMsg(scip,
" -> solve LP with iteration limit %d\n", iterlimit);
1140 if( heurdata->stage3 )
1159 SCIPwarningMessage(scip,
"Error while solving LP in Feaspump heuristic; LP solve terminated with code <%d>\n", retcode);
1160 SCIPwarningMessage(scip,
"This does not affect the remaining solution procedure --> continue\n");
1165 SCIPdebugMsg(scip,
" -> number of iterations: %" SCIP_LONGINT_FORMAT
"/%" SCIP_LONGINT_FORMAT
", lperror=%u, lpsolstat=%d\n",
1172 if( heurdata->stage3 )
1176 assert(closestsol != NULL);
1180 for( i = 0; i < nbinvars+nintvars; i++ )
1185 roundedval =
SCIPgetSolVal(scip, heurdata->roundedsol, vars[i]);
1187 distance +=
REALABS(roundedval - lpval);
1191 if(
SCIPisLT(scip, distance, mindistance) )
1193 for( i = 0; i < nbinvars+nintvars; i++ )
1198 mindistance = distance;
1204 tmpsol = lastroundedsols[heurdata->cyclelength-1];
1205 for( j = heurdata->cyclelength-1; j > 0; j-- )
1207 lastroundedsols[j] = lastroundedsols[j-1];
1208 lastalphas[j] = lastalphas[j-1];
1210 lastroundedsols[0] = heurdata->roundedsol;
1211 lastalphas[0] = alpha;
1212 heurdata->roundedsol = tmpsol;
1216 if( nfracs < bestnfracs )
1218 bestnfracs = nfracs;
1224 SCIPdebugMsg(scip,
" -> loop finished: %d fractional variables (stall: %d/%d, iterations: %" SCIP_LONGINT_FORMAT
"/%" SCIP_LONGINT_FORMAT
")\n",
1225 nfracs, nstallloops, maxstallloops, heurdata->nlpiterations,
adjustedMaxNLPIterations(maxnlpiterations, nsolsfound, nstallloops));
1234 SCIPdebugMsg(scip,
"feasibility pump found solution (%d fractional variables)\n", nfracs);
1244 if( heurdata->usefp20 )
1254 assert(closestsol != NULL);
1258 if( heurdata->usefp20 )
1260 assert(probingscip != NULL);
1265 assert(probingscip == NULL);
1277 mindistance =
SCIPceil(scip, 2.2*mindistance);
1298 heurdata->nsuccess++;
1301 if( varmapfw != NULL )
1304 if( probingscip != NULL )
1309 if( heurdata->stage3 )
1315 for( j = 0; j < heurdata->cyclelength; j++ )
1326 SCIPdebugMsg(scip,
"feasibility pump finished [%d iterations done].\n", nloops);
1328 #ifdef SCIP_STATISTIC 1336 SCIPstatisticMessage(
"feasibility pump found: 1, objval: %f, iterations: %d, primal bound: %f\n", objval, nloops, primalBound);
1343 SCIPstatisticMessage(
"feasibility pump found: 0, objval: +inf, iterations: %d, primal bound: %f\n", nloops, primalBound);
1372 assert(heur != NULL);
1384 "heuristics/" HEUR_NAME "/maxlpiterquot",
1385 "maximal fraction of diving LP iterations compared to node LP iterations",
1389 "factor by which the regard of the objective is decreased in each round, 1.0 for dynamic",
1393 "initial weight of the objective function in the convex combination",
1397 "threshold difference for the convex parameter to perform perturbation",
1401 "heuristics/" HEUR_NAME "/maxlpiterofs",
1402 "additional number of allowed LP iterations",
1406 "total number of feasible solutions found up to which heuristic is called (-1: no limit)",
1410 "maximal number of pumping loops (-1: no limit)",
1413 "heuristics/" HEUR_NAME "/maxstallloops",
1414 "maximal number of pumping rounds without fractionality improvement (-1: no limit)",
1418 "minimum number of random variables to flip, if a 1-cycle is encountered",
1422 "maximum length of cycles to be checked explicitly in each round",
1426 "number of iterations until a random perturbation is forced",
1429 "radius (using Manhattan metric) of the neighborhood to be searched in stage 3",
1434 "should the feasibility pump be called at root node before cut separation?",
1438 "should an iterative round-and-propagate scheme be used to find the integral points?",
1441 "heuristics/" HEUR_NAME "/pertsolfound",
1442 "should a random perturbation be performed if a feasible solution was found?",
1446 "should we solve a local branching sub-MIP if no solution could be found?",
1449 "should all active cuts from cutpool be copied to constraints in subproblem?",
SCIP_RETCODE SCIPsetHeurExitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXITSOL((*heurexitsol)))
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
#define DEFAULT_NEIGHBORHOODSIZE
#define SCIP_HEURTIMING_DURINGLPLOOP
SCIP_RETCODE SCIPlinkLPSol(SCIP *scip, SCIP_SOL *sol)
SCIP_RETCODE SCIPsetSeparating(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth)
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
static SCIP_DECL_HEURINIT(heurInitFeaspump)
#define DEFAULT_CYCLELENGTH
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
#define DEFAULT_MAXLPITEROFS
static SCIP_RETCODE addLocalBranchingConstraint(SCIP *scip, SCIP *probingscip, SCIP_HASHMAP *varmapfw, SCIP_SOL *bestsol, SCIP_Real neighborhoodsize)
static SCIP_DECL_HEUREXITSOL(heurExitsolFeaspump)
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
static SCIP_RETCODE handleCycle(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VAR **vars, int nbinandintvars, SCIP_Real alpha, SCIP_Real scalingfactor)
SCIP_Longint SCIPgetNSolsFound(SCIP *scip)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed)
SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit)))
int SCIPgetNOrigVars(SCIP *scip)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
SCIP_RETCODE SCIPsetHeuristics(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_SOL ** SCIPgetSols(SCIP *scip)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
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_Real SCIPinfinity(SCIP *scip)
int SCIPsnprintf(char *t, int len, const char *s,...)
enum SCIP_Retcode SCIP_RETCODE
#define SCIPstatisticMessage
SCIP_RETCODE SCIPsetPresolving(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
int SCIPheurGetFreqofs(SCIP_HEUR *heur)
struct SCIP_HeurData SCIP_HEURDATA
#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)
int SCIPrandomGetInt(SCIP_RANDNUMGEN *randnumgen, int minrandval, int maxrandval)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_Real SCIPfeasFrac(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#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)
int SCIPgetNLPBranchCands(SCIP *scip)
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 SCIPcopyParamSettings(SCIP *sourcescip, SCIP *targetscip)
SCIP_Real SCIPgetObjNorm(SCIP *scip)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
const char * SCIPgetProbName(SCIP *scip)
#define DEFAULT_MAXSTALLLOOPS
SCIP_Bool SCIPisLPSolBasic(SCIP *scip)
SCIP_RETCODE SCIPsetHeurInitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINITSOL((*heurinitsol)))
SCIP_RETCODE SCIPsolve(SCIP *scip)
const char * SCIPheurGetName(SCIP_HEUR *heur)
#define DEFAULT_ALPHADIFF
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsolveDiveLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_DECL_HEURFREE(heurFreeFeaspump)
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 SCIPcopyCuts(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, int *ncutsadded)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
SCIP_RETCODE SCIPendProbing(SCIP *scip)
const char * SCIPvarGetName(SCIP_VAR *var)
static SCIP_RETCODE handle1Cycle(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VAR **mostfracvars, int nflipcands, SCIP_Real alpha, SCIP_Real scalingfactor)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
SCIP_Real SCIPvarGetLPSol(SCIP_VAR *var)
SCIP_RETCODE SCIPunfixParam(SCIP *scip, const char *name)
static SCIP_DECL_HEURCOPY(heurCopyFeaspump)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define DEFAULT_BEFORECUTS
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
SCIP_RETCODE SCIPgetPseudoBranchCands(SCIP *scip, SCIP_VAR ***pseudocands, int *npseudocands, int *npriopseudocands)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
SCIP_Longint SCIPgetLastDivenode(SCIP *scip)
#define DEFAULT_OBJFACTOR
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
static SCIP_RETCODE updateVariableRounding(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VAR *var, SCIP_Real solval, SCIP_Real alpha, SCIP_Real scalingfactor)
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
public data structures and miscellaneous methods
SCIP_RETCODE SCIPfreeTransform(SCIP *scip)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
enum SCIP_Status SCIP_STATUS
int SCIPgetNPricers(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_RETCODE SCIPtrySolFree(SCIP *scip, SCIP_SOL **sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
Objective Feasibility Pump 2.0.
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPfreeSol(SCIP *scip, SCIP_SOL **sol)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
int SCIPgetNSols(SCIP *scip)
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
Constraint handler for linear constraints in their most general form, .
static SCIP_DECL_HEUREXEC(heurExecFeaspump)
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
static SCIP_DECL_HEUREXIT(heurExitFeaspump)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
static void insertFlipCand(SCIP_VAR **mostfracvars, SCIP_Real *mostfracvals, int *nflipcands, int maxnflipcands, SCIP_VAR *var, SCIP_Real frac)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPchgVarObjDive(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
#define DEFAULT_PERTURBFREQ
SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit)))
SCIP_Bool SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
SCIP_NODESEL * SCIPfindNodesel(SCIP *scip, const char *name)
SCIP_Longint SCIPgetNBestSolsFound(SCIP *scip)
#define DEFAULT_PERTSOLFOUND
SCIP_Bool SCIPisStopped(SCIP *scip)
#define DEFAULT_MAXLPITERQUOT
void SCIPheurSetTimingmask(SCIP_HEUR *heur, SCIP_HEURTIMING timingmask)
SCIP_RETCODE SCIPincludeHeurFeaspump(SCIP *scip)
void SCIPsortRealPtr(SCIP_Real *realarray, void **ptrarray, int len)
SCIP_RETCODE SCIPunlinkSol(SCIP *scip, SCIP_SOL *sol)
SCIP_RETCODE SCIPcheckCopyLimits(SCIP *sourcescip, SCIP_Bool *success)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_RETCODE SCIPstartDive(SCIP *scip)
SCIP_RETCODE SCIPsetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy)))
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPnewProbingNode(SCIP *scip)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPstartProbing(SCIP *scip)
static SCIP_RETCODE setupSCIPparamsStage3(SCIP *scip, SCIP *probingscip)
static SCIP_DECL_HEURINITSOL(heurInitsolFeaspump)
SCIP_RETCODE SCIPendDive(SCIP *scip)
#define SCIP_CALL_ABORT(x)
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
SCIP_VAR * SCIPvarGetTransVar(SCIP_VAR *var)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
static SCIP_RETCODE setupSCIPparamsFP2(SCIP *scip, SCIP *probingscip)
static SCIP_Longint adjustedMaxNLPIterations(SCIP_Longint maxnlpiterations, SCIP_Longint nsolsfound, int nstallloops)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
static SCIP_RETCODE createNewSols(SCIP *scip, SCIP *subscip, SCIP_HASHMAP *varmapfw, SCIP_HEUR *heur, SCIP_Bool *success)
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)
static SCIP_RETCODE setupProbingSCIP(SCIP *scip, SCIP **probingscip, SCIP_HASHMAP **varmapfw, SCIP_Bool copycuts, SCIP_Bool *success)
SCIP_RETCODE SCIPsetSubscipsOff(SCIP *scip, SCIP_Bool quiet)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint 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_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)