32 #define HEUR_NAME "lpface" 33 #define HEUR_DESC "LNS heuristic that searches the optimal LP face inside a sub-MIP" 34 #define HEUR_DISPCHAR '_' 35 #define HEUR_PRIORITY -1104000 37 #define HEUR_FREQOFS 0 38 #define HEUR_MAXDEPTH -1 39 #define HEUR_TIMING SCIP_HEURTIMING_AFTERLPNODE 40 #define HEUR_USESSUBSCIP TRUE 42 #define DEFAULT_MAXNODES 5000LL 43 #define DEFAULT_MINNODES 50LL 44 #define DEFAULT_MINFIXINGRATE 0.1 45 #define DEFAULT_NODESOFS 200LL 46 #define DEFAULT_NODESQUOT 0.1 47 #define DEFAULT_LPLIMFAC 2.0 48 #define DEFAULT_USELPROWS TRUE 50 #define DEFAULT_COPYCUTS TRUE 52 #define DEFAULT_DUALBASISEQUATIONS FALSE 53 #define DEFAULT_KEEPSUBSCIP FALSE 54 #define DEFAULT_MINPATHLEN 5 57 #define EVENTHDLR_NAME "Lpface" 58 #define EVENTHDLR_DESC "LP event handler for " HEUR_NAME " heuristic" 83 unsigned int nfailures;
94 char subscipobjective;
133 assert(nvars >= nbinvars + nintvars);
136 for( i = 0; i < nvars; i++ )
164 if( (redcost > 0 &&
SCIPisFeasEQ(scip, solval, lbglobal)) ||
167 SCIPdebugMsg(scip,
"Fixing variable <%s> (obj: %g), local bounds [%.1g, %.1g], redcost %9.5g, LP sol val %9.5g\n",
181 heurdata->nvarsfixed = fixingcounter;
186 *success = (fixingcounter < nvars && fixingrate >= heurdata->minfixingrate);
188 SCIPdebugMsg(scip,
" LP face heuristic fixed %senough variables (%d out of %d)\n",
189 *success ?
"":
"not ", fixingcounter, nvars);
212 for( i = 0; i < nrows; i++ )
251 for( j = 0; j < nnonz; j++ )
260 if( dualsol > 0.0 &&
SCIPisFeasEQ(scip, rowsolactivity, lhs) )
262 else if( dualsol < 0.0 &&
SCIPisFeasEQ(scip, rowsolactivity, rhs) )
305 if( *success && heurdata->uselprows )
316 for( i = 0; i < nvars; ++i)
353 assert(scip != NULL);
354 assert(subscip != NULL);
355 assert(subvars != NULL);
356 assert(subsol != NULL);
379 SCIPdebugMsg(scip,
"trying to transfer LP face solution with solution value %16.9g to main problem\n",
390 SCIPdebugMsg(scip,
"Transfer was %s successful\n", *success ?
"" :
"not");
405 heurdata->nfailures++;
406 heurdata->nextnodenumber = (heurdata->nfailures <= 25
428 nodelimit += heurdata->nodesofs;
431 nodelimit -= heurdata->usednodes;
434 nodelimit = MIN(nodelimit, heurdata->maxnodes);
437 if( heurdata->subscipdata->subscip != NULL )
489 heurdata->nodelimit = nodelimit;
586 assert(subscipdata != NULL);
589 if( subscipdata->
subscip != NULL )
597 if( subscipdata->
subvars != NULL )
618 assert(scip != NULL);
619 assert(subscipdata != NULL);
620 assert(subscip != NULL);
621 assert(subvars != NULL);
624 assert(subscipdata->
subscip == NULL);
625 assert(subscipdata->
subvars == NULL);
659 SCIPdebugMsg(scip,
"SCIP info: Time: %.1f (Limit: %.1f) Nodes: %"SCIP_LONGINT_FORMAT
" (Limit: %"SCIP_LONGINT_FORMAT
") Status: %d\n",
660 time, timelimit, nodes, nodelimit, status);
683 switch( heurdata->subscipobjective )
693 downfrac =
SCIPfrac(scip, lpsolval);
694 upfrac = 1.0 - downfrac;
696 objcoeff = downfrac - upfrac;
703 objcoeff = rootlpsolval - lpsolval;
737 assert(eventhdlr != NULL);
738 assert(eventdata != NULL);
740 assert(event != NULL);
744 assert(heurdata != NULL);
747 if(
SCIPgetNLPs(scip) > heurdata->lplimfac * heurdata->nodelimit )
773 assert( subscip != NULL );
774 assert( heurdata!= NULL );
775 assert( vars != NULL );
781 if( heurdata->uselprows )
803 if( heurdata->copycuts )
811 for( i = 0; i < nvars; i++ )
840 *keepthisscip =
FALSE;
867 assert( scip != NULL );
868 assert( subscip != NULL );
869 assert( heur != NULL );
870 assert( heurdata != NULL );
871 assert( subvars != NULL );
875 if( eventhdlr == NULL )
889 *keepthisscip =
FALSE;
898 #ifdef WRITELPFACEPROB 900 char probfilename[] =
"./lpface_prob.mps";
901 char paramfilename[] =
"./lpface_prob.set";
902 SCIPinfoMessage(scip, NULL,
"Writing problem and parameters to file: <%s> <%s>\n", probfilename, paramfilename);
914 SCIP_CALL( subscipGetInfo(scip, subscip) );
934 heurdata->lastlpobjinfeas = focusnodelb;
935 *keepthisscip =
FALSE;
950 for( i = 0; i < nsubsols && !success; ++i )
958 *keepthisscip =
FALSE;
983 assert(scip != NULL);
984 assert(heur != NULL);
999 assert(heur != NULL);
1000 assert(scip != NULL);
1004 assert(heurdata != NULL);
1019 assert(heur != NULL);
1020 assert(scip != NULL);
1024 assert(heurdata != NULL);
1027 heurdata->usednodes = 0;
1028 heurdata->nfailures = 0;
1029 heurdata->nextnodenumber = 0;
1032 heurdata->submipnlpiters = -1;
1033 heurdata->submippresoltime = 0.0;
1034 heurdata->nvarsfixed = -1;
1045 assert(heur != NULL);
1046 assert(scip != NULL);
1050 assert(heurdata != NULL);
1055 assert(heurdata->subscipdata == NULL);
1070 assert(heur != NULL);
1071 assert(scip != NULL);
1075 assert(heurdata != NULL);
1078 assert(heurdata->keepsubscip || heurdata->subscipdata->subscip == NULL);
1079 if( heurdata->subscipdata->subscip != NULL )
1092 #ifdef SCIP_STATISTIC 1099 assert(heur != NULL);
1100 assert(scip != NULL);
1104 assert(heurdata != NULL);
1107 "LP Face heuristic stats: Status: %d Nodes: %d LP iters: %d Fixed: %d Presolving time: %.2f\n",
1108 heurdata->submipstatus, heurdata->usednodes, heurdata->submipnlpiters, heurdata->nvarsfixed, heurdata->submippresoltime);
1113 #define heurExitLpface NULL 1133 assert(heur != NULL);
1134 assert(scip != NULL);
1135 assert(result != NULL);
1139 assert(heurdata != NULL);
1144 if( nodeinfeasible )
1180 if(
SCIPisEQ(scip, heurdata->lastlpobjinfeas, focusnodelb) )
1185 && (!
SCIPisIntegral(scip, focusnodelb) ||
SCIPisLT(scip, focusnodelb, heurdata->lastlpobjinfeas + 1.0)) )
1189 assert(
SCIPisLE(scip, rootlb, focusnodelb));
1194 if(
SCIPisLT(scip, rootlb, focusnodelb) )
1197 int nonimprovingpathlen = 0;
1204 ++nonimprovingpathlen;
1212 if( nonimprovingpathlen < heurdata->minpathlen )
1217 if( nonimprovingpathlen == 0 )
1230 if( nodelimit < heurdata->minnodes )
1240 if( nbinvars == 0 && nintvars == 0 )
1245 keepthisscip = heurdata->keepsubscip;
1248 if( heurdata->subscipdata->subscip != NULL && heurdata->subscipdata->nsubvars != nvars )
1250 SCIPdebugMsg(scip,
"Free subscip of LP face heuristic because variable number %d changed since last call (was %d)\n",
1251 nvars, heurdata->subscipdata->nsubvars);
1255 else if( heurdata->subscipdata->subscip != NULL &&
SCIPisGT(scip, focusnodelb, heurdata->subscipdata->objbound) )
1257 SCIPdebugMsg(scip,
"Free subscip of LP face heuristic because of different dual bound: %16.9g > %16.9g\n",
1265 if( heurdata->subscipdata->subscip != NULL )
1267 subscip = heurdata->subscipdata->subscip;
1268 subvars = heurdata->subscipdata->subvars;
1269 nvars = heurdata->subscipdata->nsubvars;
1272 SCIPdebugMsg(scip,
"Loaded sub-SCIP from previous run:\n");
1273 SCIP_CALL( subscipGetInfo(scip, subscip) );
1278 assert(heurdata->subscipdata->subscip == NULL);
1279 SCIPdebugMsg(scip,
"Creating new sub-Problem for LP face heuristic\n");
1287 retcode =
setupSubscipLpface(scip, subscip, heurdata, subvars, vars, result, &keepthisscip, nvars);
1295 retcode =
solveSubscipLpface(scip, subscip, heur, heurdata, subvars, result, focusnodelb, &keepthisscip);
1301 if( ! keepthisscip )
1304 if( heurdata->subscipdata->subscip == NULL )
1317 if( heurdata->subscipdata->subscip == NULL )
1324 assert(heurdata->subscipdata->subscip == subscip);
1325 assert(heurdata->subscipdata->subvars == subvars);
1326 assert(heurdata->subscipdata->nsubvars == nvars);
1348 heurdata->subscipdata = NULL;
1355 assert(heur != NULL);
1367 "number of nodes added to the contingent of the total nodes",
1371 "maximum number of nodes to regard in the subproblem",
1375 "minimum number of nodes required to start the subproblem",
1379 "contingent of sub problem nodes in relation to the number of nodes of the original problem",
1383 "required percentage of fixed integer variables in sub-MIP to run",
1387 "factor by which the limit on the number of LP depends on the node limit",
1391 "should subproblem be created out of the rows in the LP rows?",
1395 "should dually nonbasic rows be turned into equations?",
1399 "should the heuristic continue solving the same sub-SCIP?",
1403 "if uselprows == FALSE, should all active cuts from cutpool be copied to constraints in subproblem?",
1407 "objective function in the sub-SCIP: (z)ero, (r)oot-LP-difference, (i)nference, LP (f)ractionality, (o)riginal",
1408 &heurdata->subscipobjective,
TRUE,
'z',
"forzi", NULL, NULL) );
1411 "the minimum active search tree path length along which lower bound hasn't changed before heuristic becomes active",
enum SCIP_Result SCIP_RESULT
SCIP_RETCODE SCIPsetHeurExitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXITSOL((*heurexitsol)))
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
SCIP_RETCODE SCIPchgVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
#define SCIP_EVENTTYPE_LPSOLVED
SCIP_RETCODE SCIPsetSeparating(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_Real SCIPgetVarAvgInferences(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
#define DEFAULT_USELPROWS
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_Real SCIPnodeGetLowerbound(SCIP_NODE *node)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
static SCIP_RETCODE createNewSol(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEUR *heur, SCIP_SOL *subsol, int *solindex, SCIP_Bool *success)
SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit)))
int SCIProwGetNNonz(SCIP_ROW *row)
int SCIPgetNOrigVars(SCIP *scip)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPgetColRedcost(SCIP *scip, SCIP_COL *col)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_NODE * SCIPnodeGetParent(SCIP_NODE *node)
static SCIP_Longint calcNodeLimit(SCIP *scip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
SCIP_SOL ** SCIPgetSols(SCIP *scip)
static SCIP_RETCODE createRows(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_Bool dualbasisequations)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
SCIP_RETCODE SCIPincludeHeurLpface(SCIP *scip)
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_Real SCIPinfinity(SCIP *scip)
int SCIPsnprintf(char *t, int len, const char *s,...)
enum SCIP_Retcode SCIP_RETCODE
SCIP_RETCODE SCIPwriteOrigProblem(SCIP *scip, const char *filename, const char *extension, SCIP_Bool genericnames)
SCIP_RETCODE SCIPsetPresolving(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_BRANCHRULE * SCIPfindBranchrule(SCIP *scip, const char *name)
int SCIPvarGetProbindex(SCIP_VAR *var)
SCIP_Bool SCIPisDualfeasZero(SCIP *scip, SCIP_Real val)
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)
#define DEFAULT_KEEPSUBSCIP
#define DEFAULT_NODESQUOT
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define SCIPfreeBufferArray(scip, ptr)
SCIP_RETCODE SCIPcreate(SCIP **scip)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_RETCODE SCIPchgVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
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)
static SCIP_DECL_HEUREXITSOL(heurExitsolLpface)
SCIP_Real SCIPgetPresolvingTime(SCIP *scip)
SCIP_RETCODE SCIPprintStatistics(SCIP *scip, FILE *file)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
SCIP_Real SCIPgetLowerboundRoot(SCIP *scip)
const char * SCIPgetProbName(SCIP *scip)
SCIP_Bool SCIPisLPRelax(SCIP *scip)
static SCIP_RETCODE subscipdataFreeSubscip(SCIP *scip, SUBSCIPDATA *subscipdata)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
static SCIP_DECL_HEURINITSOL(heurInitsolLpface)
static SCIP_RETCODE setupSubscipLpface(SCIP *scip, SCIP *subscip, SCIP_HEURDATA *heurdata, SCIP_VAR **subvars, SCIP_VAR **vars, SCIP_RESULT *result, SCIP_Bool *keepthisscip, int nvars)
SCIP_RETCODE SCIPsetHeurInitsol(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINITSOL((*heurinitsol)))
SCIP_RETCODE SCIPsolve(SCIP *scip)
const char * SCIPheurGetName(SCIP_HEUR *heur)
static SCIP_DECL_HEUREXEC(heurExecLpface)
SCIP_Bool SCIPisParamFixed(SCIP *scip, const char *name)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree)))
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPgetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIPcopyVars(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int nfixedvars, SCIP_Bool global)
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)
struct SCIP_EventData SCIP_EVENTDATA
const char * SCIPvarGetName(SCIP_VAR *var)
#define DEFAULT_MINFIXINGRATE
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
static SCIP_RETCODE setupSubproblem(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEURDATA *heurdata, SCIP_Bool *success)
static void subscipdataReset(SUBSCIPDATA *subscipdata)
SCIP_Real SCIPgetSolTransObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPvarGetLPSol(SCIP_VAR *var)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
#define DEFAULT_DUALBASISEQUATIONS
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
SCIP_RETCODE SCIPgetLongintParam(SCIP *scip, const char *name, SCIP_Longint *value)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
static SCIP_RETCODE fixVariables(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEURDATA *heurdata, SCIP_Bool *success)
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
public data structures and miscellaneous methods
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
static SCIP_DECL_HEURFREE(heurFreeLpface)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
enum SCIP_Status SCIP_STATUS
static SCIP_RETCODE changeSubvariableObjective(SCIP *scip, SCIP *subscip, SCIP_VAR *var, SCIP_VAR *subvar, SCIP_HEURDATA *heurdata)
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)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
int SCIPgetNSols(SCIP *scip)
static SCIP_RETCODE setSubscipLimits(SCIP *scip, SCIP *subscip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata, SCIP_Bool *success)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
Constraint handler for linear constraints in their most general form, .
int SCIPgetNObjVars(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
static SCIP_DECL_EVENTEXEC(eventExecLpface)
SCIP_RETCODE SCIPsetCharParam(SCIP *scip, const char *name, char value)
int SCIPgetNVars(SCIP *scip)
static void updateFailureStatistic(SCIP *scip, SCIP_HEURDATA *heurdata)
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)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_Bool SCIPisObjIntegral(SCIP *scip)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
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_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Longint SCIPgetMemUsed(SCIP *scip)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
#define SCIP_DECL_HEUREXIT(x)
static SCIP_RETCODE setSubscipParameters(SCIP *scip, SCIP *subscip)
SCIP_RETCODE SCIPcopy(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *suffix, SCIP_Bool global, SCIP_Bool enablepricing, SCIP_Bool passmessagehdlr, SCIP_Bool *valid)
#define DEFAULT_MINPATHLEN
SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit)))
SCIP_Real SCIPretransformObj(SCIP *scip, SCIP_Real obj)
SCIP_Longint SCIPgetMemExternEstim(SCIP *scip)
SCIP_NODESEL * SCIPfindNodesel(SCIP *scip, const char *name)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
static SCIP_RETCODE solveSubscipLpface(SCIP *scip, SCIP *subscip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata, SCIP_VAR **subvars, SCIP_RESULT *result, SCIP_Real focusnodelb, SCIP_Bool *keepthisscip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_Bool SCIPallColsInLP(SCIP *scip)
SCIP_Real SCIPfrac(SCIP *scip, SCIP_Real val)
static SCIP_RETCODE subscipdataCopySubscip(SCIP *scip, SUBSCIPDATA *subscipdata, SCIP *subscip, SCIP_VAR **subvars, int nvars)
SCIP_RETCODE SCIPsetSolVals(SCIP *scip, SCIP_SOL *sol, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
SCIP_Real SCIPgetNodeLowerbound(SCIP *scip, SCIP_NODE *node)
SCIP_RETCODE SCIPtransformProb(SCIP *scip)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
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 SCIPwriteParams(SCIP *scip, const char *filename, SCIP_Bool comments, SCIP_Bool onlychanged)
SCIP_RETCODE SCIPinterruptSolve(SCIP *scip)
SCIP_RETCODE SCIPgetLPRowsData(SCIP *scip, SCIP_ROW ***rows, int *nrows)
#define SCIP_CALL_ABORT(x)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
static SCIP_DECL_HEURINIT(heurInitLpface)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Longint SCIPgetNLPs(SCIP *scip)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
int SCIPsolGetIndex(SCIP_SOL *sol)
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)
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)
LNS heuristic that tries to compute integral solution on optimal LP face.
SCIP_Real SCIPgetRowActivity(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
static SCIP_DECL_HEURCOPY(heurCopyLpface)