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 )
487 heurdata->nodelimit = nodelimit;
580 assert(subscipdata !=
NULL);
612 assert(scip !=
NULL);
613 assert(subscipdata !=
NULL);
614 assert(subscip !=
NULL);
615 assert(subvars !=
NULL);
653 SCIPdebugMsg(scip,
"SCIP info: Time: %.1f (Limit: %.1f) Nodes: %"SCIP_LONGINT_FORMAT
" (Limit: %"SCIP_LONGINT_FORMAT
") Status: %d\n",
654 time, timelimit, nodes, nodelimit, status);
677 switch( heurdata->subscipobjective )
687 downfrac =
SCIPfrac(scip, lpsolval);
688 upfrac = 1.0 - downfrac;
690 objcoeff = downfrac - upfrac;
697 objcoeff = rootlpsolval - lpsolval;
731 assert(eventhdlr !=
NULL);
732 assert(eventdata !=
NULL);
734 assert(event !=
NULL);
738 assert(heurdata !=
NULL);
741 if(
SCIPgetNLPs(scip) > heurdata->lplimfac * heurdata->nodelimit )
758 assert(scip !=
NULL);
774 assert(heur !=
NULL);
775 assert(scip !=
NULL);
779 assert(heurdata !=
NULL);
794 assert(heur !=
NULL);
795 assert(scip !=
NULL);
799 assert(heurdata !=
NULL);
802 heurdata->usednodes = 0;
803 heurdata->nfailures = 0;
804 heurdata->nextnodenumber = 0;
807 heurdata->submipnlpiters = -1;
808 heurdata->submippresoltime = 0.0;
809 heurdata->nvarsfixed = -1;
820 assert(heur !=
NULL);
821 assert(scip !=
NULL);
825 assert(heurdata !=
NULL);
830 assert(heurdata->subscipdata ==
NULL);
845 assert(heur !=
NULL);
846 assert(scip !=
NULL);
850 assert(heurdata !=
NULL);
853 assert(heurdata->keepsubscip || heurdata->subscipdata->subscip ==
NULL);
854 if( heurdata->subscipdata->subscip !=
NULL )
867 #ifdef SCIP_STATISTIC 874 assert(heur !=
NULL);
875 assert(scip !=
NULL);
879 assert(heurdata !=
NULL);
882 "LP Face heuristic stats: Status: %d Nodes: %d LP iters: %d Fixed: %d Presolving time: %.2f\n",
883 heurdata->submipstatus, heurdata->usednodes, heurdata->submipnlpiters, heurdata->nvarsfixed, heurdata->submippresoltime);
888 #define heurExitLpface NULL 915 assert(heur !=
NULL);
916 assert(scip !=
NULL);
917 assert(result !=
NULL);
921 assert(heurdata !=
NULL);
962 if(
SCIPisEQ(scip, heurdata->lastlpobjinfeas, focusnodelb) )
967 && (!
SCIPisIntegral(scip, focusnodelb) ||
SCIPisLT(scip, focusnodelb, heurdata->lastlpobjinfeas + 1.0)) )
971 assert(
SCIPisLE(scip, rootlb, focusnodelb));
976 if(
SCIPisLT(scip, rootlb, focusnodelb) )
979 int nonimprovingpathlen = 0;
986 ++nonimprovingpathlen;
994 if( nonimprovingpathlen < heurdata->minpathlen )
999 if( nonimprovingpathlen == 0 )
1012 if( nodelimit < heurdata->minnodes )
1022 if( nbinvars == 0 && nintvars == 0 )
1027 keepthisscip = heurdata->keepsubscip;
1030 if( heurdata->subscipdata->subscip !=
NULL && heurdata->subscipdata->nsubvars != nvars )
1032 SCIPdebugMsg(scip,
"Free subscip of LP face heuristic because variable number %d changed since last call (was %d)\n",
1033 nvars, heurdata->subscipdata->nsubvars);
1037 else if( heurdata->subscipdata->subscip !=
NULL &&
SCIPisGT(scip, focusnodelb, heurdata->subscipdata->objbound) )
1039 SCIPdebugMsg(scip,
"Free subscip of LP face heuristic because of different dual bound: %16.9g > %16.9g\n",
1046 if( heurdata->subscipdata->subscip !=
NULL )
1048 subscip = heurdata->subscipdata->subscip;
1049 subvars = heurdata->subscipdata->subvars;
1050 nvars = heurdata->subscipdata->nsubvars;
1053 SCIPdebugMsg(scip,
"Loaded sub-SCIP from previous run:\n");
1054 SCIP_CALL( subscipGetInfo(scip, subscip) );
1059 assert(heurdata->subscipdata->subscip ==
NULL);
1060 SCIPdebugMsg(scip,
"Creating new sub-Problem for LP face heuristic\n");
1071 if( heurdata->uselprows )
1091 if( heurdata->copycuts )
1102 for( i = 0; i < nvars; i++ )
1119 if( eventhdlr ==
NULL )
1139 keepthisscip =
FALSE;
1156 keepthisscip =
FALSE;
1164 #ifdef WRITELPFACEPROB 1166 char probfilename[] =
"./lpface_prob.mps";
1167 char paramfilename[] =
"./lpface_prob.set";
1168 SCIPinfoMessage(scip,
NULL,
"Writing problem and parameters to file: <%s> <%s>\n", probfilename, paramfilename);
1180 SCIP_CALL( subscipGetInfo(scip, subscip) );
1199 heurdata->lastlpobjinfeas = focusnodelb;
1200 keepthisscip =
FALSE;
1214 for( i = 0; i < nsubsols && !success; ++i )
1222 keepthisscip =
FALSE;
1238 if( ! keepthisscip )
1241 if( heurdata->subscipdata->subscip ==
NULL )
1256 if( heurdata->subscipdata->subscip ==
NULL )
1263 assert(heurdata->subscipdata->subscip == subscip);
1264 assert(heurdata->subscipdata->subvars == subvars);
1265 assert(heurdata->subscipdata->nsubvars == nvars);
1287 heurdata->subscipdata =
NULL;
1294 assert(heur !=
NULL);
1306 "number of nodes added to the contingent of the total nodes",
1310 "maximum number of nodes to regard in the subproblem",
1314 "minimum number of nodes required to start the subproblem",
1318 "contingent of sub problem nodes in relation to the number of nodes of the original problem",
1322 "required percentage of fixed integer variables in sub-MIP to run",
1326 "factor by which the limit on the number of LP depends on the node limit",
1330 "should subproblem be created out of the rows in the LP rows?",
1334 "should dually nonbasic rows be turned into equations?",
1338 "should the heuristic continue solving the same sub-SCIP?",
1342 "if uselprows == FALSE, should all active cuts from cutpool be copied to constraints in subproblem?",
1346 "objective function in the sub-SCIP: (z)ero, (r)oot-LP-difference, (i)nference, LP (f)ractionality, (o)riginal",
1347 &heurdata->subscipobjective,
TRUE,
'z',
"forzi",
NULL,
NULL) );
1350 "the minimum active search tree path length along which lower bound hasn't changed before heuristic becomes active",
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)
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)
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)
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)
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)