32 #define HEUR_NAME "completesol" 33 #define HEUR_DESC "primal heuristic trying to complete given partial solutions" 34 #define HEUR_DISPCHAR 'h' 35 #define HEUR_PRIORITY 0 37 #define HEUR_FREQOFS 0 38 #define HEUR_MAXDEPTH 0 39 #define HEUR_TIMING SCIP_HEURTIMING_BEFOREPRESOL | SCIP_HEURTIMING_BEFORENODE 40 #define HEUR_USESSUBSCIP TRUE 43 #define DEFAULT_MAXNODES 5000LL 44 #define DEFAULT_MAXUNKRATE 0.85 45 #define DEFAULT_ADDALLSOLS FALSE 46 #define DEFAULT_MINNODES 50LL 47 #define DEFAULT_NODESOFS 500LL 48 #define DEFAULT_NODESQUOT 0.1 49 #define DEFAULT_LPLIMFAC 2.0 50 #define DEFAULT_OBJWEIGHT 1.0 51 #define DEFAULT_BOUNDWIDENING 0.1 54 #define DEFAULT_MINIMPROVE 0.01 55 #define DEFAULT_MINOBJWEIGHT 1e-3 56 #define DEFAULT_IGNORECONT FALSE 57 #define DEFAULT_BESTSOLS 5 58 #define DEFAULT_MAXPROPROUNDS 10 59 #define DEFAULT_MAXLPITER -1LL 60 #define DEFAULT_MAXCONTVARS -1 61 #define DEFAULT_BEFOREPRESOL TRUE 64 #define EVENTHDLR_NAME "Completesol" 65 #define EVENTHDLR_DESC "LP event handler for " HEUR_NAME " heuristic" 103 assert(eventhdlr != NULL);
104 assert(eventdata != NULL);
106 assert(event != NULL);
110 assert(heurdata != NULL);
143 assert(scip != NULL);
144 assert(subscip != NULL);
145 assert(subvars != NULL);
146 assert(heurdata != NULL);
166 cutoff = MIN(upperbound, cutoff);
167 SCIPdebugMsg(scip,
"set cutoff=%g for sub-SCIP\n", cutoff);
173 if(
SCIPisEQ(scip, heurdata->objweight, 1.0) )
180 epsobj = (1.0 - heurdata->objweight)/heurdata->objweight;
194 for( i = 0; i < nvars; i++ )
205 if( objcons == NULL )
242 if( tightened[idx] ==
FALSE )
254 frac = MIN(frac, 1-frac);
306 if( objcons != NULL )
331 assert(scip != NULL);
332 assert(subscip != NULL);
333 assert(subvars != NULL);
334 assert(subsol != NULL);
347 for( v = 0; v < nvars; v++ )
376 assert(scip != NULL);
436 assert(scip != NULL);
437 assert(heurdata != NULL);
438 assert(vars != NULL);
441 assert(tightened != NULL);
445 SCIPdebugMsg(scip,
"> start probing along the solution values\n");
452 incontsection =
FALSE;
461 for( v = 0; v < nvars && !abortearly; v++ )
476 if( ndomredssum > 0.3*nvars )
496 #ifdef SCIP_MORE_DEBUG 513 #ifdef SCIP_MORE_DEBUG 526 #ifdef SCIP_MORE_DEBUG 564 #ifdef SCIP_MORE_DEBUG 582 offset =
REALABS(heurdata->boundwidening * (newub-newlb));
587 offset =
REALABS(heurdata->boundwidening * (solval-newlb));
591 offset =
REALABS(heurdata->boundwidening * (newub-solval));
596 newub =
SCIPceil(scip, solval) + offset;
597 newlb =
SCIPfloor(scip, solval) - offset;
632 SCIPdebugMsg(scip,
"> subproblem is infeasible within the local bounds\n");
636 #ifdef SCIP_MORE_DEBUG 637 SCIPdebugMsg(scip,
"> tighten lower bound of variable <%s>: %g to %g\n",
646 #ifdef SCIP_MORE_DEBUG 647 SCIPdebugMsg(scip,
"> tighten upper bound of variable <%s>: %g to %g (ndomreds=%lld)\n",
690 SCIPdebugMsg(scip,
"> subproblem is infeasible within the local bounds\n");
694 #ifdef SCIP_MORE_DEBUG 695 SCIPdebugMsg(scip,
"> tighten upper bound of variable <%s>: %g to %g\n",
704 #ifdef SCIP_MORE_DEBUG 705 SCIPdebugMsg(scip,
"> tighten lower bound of variable <%s>: %g to %g (ndomreds=%lld)\n",
717 ndomredssum += ndomreds;
720 SCIPdebugMsg(scip,
"> found %d bound tightenings and %lld induced domain reductions (abort=%u).\n", nbndtightenings,
721 ndomredssum, abortearly);
753 assert(scip != NULL);
754 assert(subscip != NULL);
755 assert(heur != NULL);
756 assert(heurdata != NULL);
757 assert(result != NULL);
758 assert(partialsol != NULL);
770 SCIP_CALL(
SCIPcopyConsCompression(scip, subscip, varmapf, NULL,
"completesol", NULL, NULL, 0,
FALSE,
FALSE,
TRUE, &valid) );
771 SCIPdebugMsg(scip,
"Copying the SCIP instance returned with valid=%d.\n", valid);
775 if( eventhdlr == NULL )
785 for( i = 0; i < nvars; i++ )
788 assert(subvars[i] != NULL);
798 SCIPdebugMsg(scip,
"Error while creating completesol subproblem w.r.t. partial solution <%p>.\n", (
void*)partialsol);
818 heurdata->nodelimit = heurdata->maxnodes;
861 SCIPdebugMsg(scip,
"solving subproblem: nstallnodes=%" SCIP_LONGINT_FORMAT
", maxnodes=%" SCIP_LONGINT_FORMAT
"\n", nstallnodes, heurdata->maxnodes);
874 SCIPwarningMessage(scip,
"Error while presolving subproblem in %s heuristic; sub-SCIP terminated with code <%d>\n",
HEUR_NAME, retcode);
883 SCIPdebugMsg(scip,
"presolved instance has bin=%d, int=%d, cont=%d variables\n",
887 if( heurdata->maxcontvars >= 0 &&
SCIPgetNContVars(subscip) > heurdata->maxcontvars )
889 SCIPdebugMsg(scip,
"presolved instance has too many continuous variables (maxcontvars: %d)\n", heurdata->maxcontvars);
908 SCIPwarningMessage(scip,
"Error while solving subproblem in %s heuristic; sub-SCIP terminated with code <%d>\n",
HEUR_NAME, retcode);
927 for( i = 0; i < nsubsols && (!success || heurdata->addallsols); i++ )
934 SCIPstatisticPrintf(
"%s statistic: fixed %6.3f integer variables, needed %6.1f seconds, %" SCIP_LONGINT_FORMAT
" nodes, solution %10.4f found at node %" SCIP_LONGINT_FORMAT
"\n",
962 assert(scip != NULL);
963 assert(heur != NULL);
964 assert(heurdata != NULL);
965 assert(result != NULL);
966 assert(partialsol != NULL);
970 SCIPdebugMsg(scip,
"+---+ Start Completesol heuristic +---+\n");
997 retcode =
setupAndSolve(scip, subscip, heur, heurdata, result, nstallnodes, partialsol, tightened);
1023 assert(heur != NULL);
1038 assert(heur != NULL);
1039 assert(
scip != NULL);
1043 assert(heurdata != NULL);
1067 assert( heur != NULL );
1068 assert(
scip != NULL );
1069 assert( result != NULL );
1074 if( nodeinfeasible )
1079 assert( heurdata != NULL );
1111 nstallnodes += heurdata->nodesofs;
1114 nstallnodes = MIN(nstallnodes, heurdata->maxnodes);
1117 if( nstallnodes < heurdata->minnodes )
1119 SCIPdebugMsg(
scip,
"skipping Complete: nstallnodes=%" SCIP_LONGINT_FORMAT
", minnodes=%" SCIP_LONGINT_FORMAT
"\n",
1120 nstallnodes, heurdata->minnodes);
1132 for( s = 0; s < npartialsols; s++ )
1138 sol = partialsols[s];
1139 assert(sol != NULL);
1144 for( v = 0; v < nvars; v++ )
1161 if( heurdata->ignorecont )
1164 unknownrate = nunknown/((
SCIP_Real)nvars);
1165 SCIPdebugMsg(
scip,
"%d (rate %.4f) unknown solution values\n", nunknown, unknownrate);
1168 if( unknownrate > heurdata->maxunknownrate )
1187 for( v = 0; v < norigvars; v++ )
1224 assert(heurdata != NULL);
1231 assert(heur != NULL);
1240 "maximum number of nodes to regard in the subproblem",
1244 "minimum number of nodes required to start the subproblem",
1248 "maximal rate of unknown solution values",
1252 "should all subproblem solutions be added to the original SCIP?",
1256 "number of nodes added to the contingent of the total nodes",
1260 "contingent of sub problem nodes in relation to the number of nodes of the original problem",
1264 "factor by which the limit on the number of LP depends on the node limit",
1268 "weight of the original objective function (1: only original objective)",
1272 "bound widening factor applied to continuous variables (0: fix variables to given solution values, 1: relax to global bounds)",
1276 "factor by which the incumbent should be improved at least",
1280 "should number of continuous variables be ignored?",
1284 "heuristic stops, if the given number of improving solutions were found (-1: no limit)",
1288 "maximal number of iterations in propagation (-1: no limit)",
1292 "should the heuristic run before presolving?",
1296 "maximal number of LP iterations (-1: no limit)",
1300 "maximal number of continuous variables after presolving",
enum SCIP_Result SCIP_RESULT
int SCIPgetNIntVars(SCIP *scip)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
#define SCIP_EVENTTYPE_LPSOLVED
SCIP_RETCODE SCIPsetSeparating(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
#define DEFAULT_NODESQUOT
static SCIP_RETCODE createSubproblem(SCIP *scip, SCIP *subscip, SCIP_HEURDATA *heurdata, SCIP_VAR **subvars, SCIP_SOL *partialsol, SCIP_Bool *tightened, SCIP_Bool *success)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
int SCIPgetProbingDepth(SCIP *scip)
#define DEFAULT_MINOBJWEIGHT
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
#define SCIPallocClearBufferArray(scip, ptr, num)
primal heuristic trying to complete given partial solutions
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_Longint SCIPheurGetNBestSolsFound(SCIP_HEUR *heur)
int SCIPgetNOrigVars(SCIP *scip)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
#define SCIP_HEURTIMING_BEFORENODE
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)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
#define DEFAULT_MINIMPROVE
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
#define DEFAULT_MAXPROPROUNDS
SCIP_SOL ** SCIPgetSols(SCIP *scip)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
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)
int SCIPgetNPartialSols(SCIP *scip)
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)
static SCIP_DECL_HEURCOPY(heurCopyCompletesol)
SCIP_Real SCIPinfinity(SCIP *scip)
#define DEFAULT_ADDALLSOLS
int SCIPsnprintf(char *t, int len, const char *s,...)
#define DEFAULT_BOUNDWIDENING
enum SCIP_Retcode SCIP_RETCODE
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_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
SCIP_VAR ** SCIPgetOrigVars(SCIP *scip)
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)
SCIP_RETCODE SCIPchgVarLbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
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)
SCIP_RETCODE SCIPcreate(SCIP **scip)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_NODE * SCIPgetRootNode(SCIP *scip)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_SOL ** SCIPgetPartialSols(SCIP *scip)
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)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
int SCIPgetNContVars(SCIP *scip)
SCIP_RETCODE SCIPcreateOrigSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
enum SCIP_BranchDir SCIP_BRANCHDIR
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
static SCIP_DECL_EVENTEXEC(eventExecCompletesol)
SCIP_RETCODE SCIPsolve(SCIP *scip)
const char * SCIPheurGetName(SCIP_HEUR *heur)
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 SCIPpropagateProbing(SCIP *scip, int maxproprounds, SCIP_Bool *cutoff, SCIP_Longint *ndomredsfound)
SCIP_RETCODE SCIPfixVarProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval)
SCIP_RETCODE SCIPsetBoolParam(SCIP *scip, const char *name, SCIP_Bool value)
SCIP_RETCODE SCIPpresolve(SCIP *scip)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define DEFAULT_MAXCONTVARS
SCIP_RETCODE SCIPendProbing(SCIP *scip)
struct SCIP_EventData SCIP_EVENTDATA
const char * SCIPvarGetName(SCIP_VAR *var)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
SCIP_Bool SCIPisNLPEnabled(SCIP *scip)
static SCIP_RETCODE tightenVariables(SCIP *scip, SCIP_HEURDATA *heurdata, SCIP_VAR **vars, int nvars, SCIP_SOL *sol, SCIP_Bool *tightened, SCIP_Bool *success)
static SCIP_RETCODE setupAndSolve(SCIP *scip, SCIP *subscip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata, SCIP_RESULT *result, SCIP_Longint nstallnodes, SCIP_SOL *partialsol, SCIP_Bool *tightened)
static SCIP_DECL_HEURFREE(heurFreeCompletesol)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
static SCIP_RETCODE applyCompletesol(SCIP *scip, SCIP_HEUR *heur, SCIP_HEURDATA *heurdata, SCIP_RESULT *result, SCIP_Longint nstallnodes, SCIP_SOL *partialsol)
#define SCIPstatisticPrintf
#define SCIP_HEURTIMING_BEFOREPRESOL
SCIP_Longint SCIPheurGetNCalls(SCIP_HEUR *heur)
#define DEFAULT_MAXUNKRATE
#define DEFAULT_IGNORECONT
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
#define DEFAULT_MAXLPITER
#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 SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
int SCIPgetNImplVars(SCIP *scip)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_Longint SCIPsolGetNodenum(SCIP_SOL *sol)
#define DEFAULT_OBJWEIGHT
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_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_RETCODE SCIPincludeHeurCompletesol(SCIP *scip)
int SCIPgetNSols(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
static SCIP_RETCODE createNewSol(SCIP *scip, SCIP *subscip, SCIP_VAR **subvars, SCIP_HEUR *heur, SCIP_SOL *subsol, SCIP_Bool *success)
#define SCIP_MAXTREEDEPTH
#define DEFAULT_BEFOREPRESOL
int SCIPgetNBinVars(SCIP *scip)
static SCIP_RETCODE chgProbingBound(SCIP *scip, SCIP_VAR *var, SCIP_Real newval, SCIP_BRANCHDIR branchdir, SCIP_Bool *success)
int SCIPgetNVars(SCIP *scip)
static SCIP_DECL_HEUREXEC(heurExecCompletesol)
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 SCIPaddVar(SCIP *scip, SCIP_VAR *var)
int SCIPgetNConss(SCIP *scip)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_SOLORIGIN SCIPsolGetOrigin(SCIP_SOL *sol)
SCIP_NODESEL * SCIPfindNodesel(SCIP *scip, const char *name)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_RETCODE SCIPcheckCopyLimits(SCIP *sourcescip, SCIP_Bool *success)
SCIP_OBJSENSE SCIPgetObjsense(SCIP *scip)
SCIP_RETCODE SCIPtransformProb(SCIP *scip)
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_Real SCIPsumepsilon(SCIP *scip)
SCIP_RETCODE SCIPinterruptSolve(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_RETCODE SCIPstartProbing(SCIP *scip)
SCIP_Bool SCIPsolIsPartial(SCIP_SOL *sol)
common defines and data types used in all packages of SCIP
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Longint SCIPgetNLPs(SCIP *scip)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarUbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
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_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)