|
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
prop_genvbounds.c
Go to the documentation of this file.
23 /**@todo should we only discard events catched from nodes that are not the current node's ancestors? */
27 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
42 #define PROP_PRESOL_PRIORITY -2000000 /**< priority of the presolving method (>= 0: before, < 0: after
46 #define PROP_PRESOL_MAXROUNDS -1 /**< maximal number of presolving rounds the presolver participates
49 #define DEFAULT_PROPAGATE_IN_ROOT_NODE TRUE /**< apply genvbounds in root node if no new incumbent was found? */
72 SCIP_BOUNDTYPE boundtype; /**< type of bound provided by the genvbound, SCIP_BOUNDTYPE_LOWER/UPPER
74 };
112 int* gstartcomponents; /**< components corresponding to indices stored in gstartindices array */
147 /* the cutoff bound is valid w.r.t. the current objective function in the transformed problem; during presolving,
148 * however, the objective function can change (e.g., when a variable is fixed, its contribution in the objective is
149 * subtracted from the cutoff bound and added to the objective offset); we solve this by transforming the
150 * contribution of the cutoff bound in the generalized variable bound to the original problem as described in
163 )
264 /** calculates the minactivity of a linear combination of variables stored in the current conflict set */
271 SCIP_BDCHGIDX* bdchgidx /**< bound change at which minactivity should be computed; if NULL use local bounds */
298 /* if bdchgidx is not NULL, use the possibly tighter bound already in the current conflict set */
310 /* if bdchgidx is not NULL, use the possibly tighter bound already in the current conflict set */
333 {
339 boundval = getGenVBoundsMinActivity(scip, genvbound->vars, genvbound->coefs, genvbound->ncoefs, global);
342 return (genvbound->boundtype == SCIP_BOUNDTYPE_LOWER) ? -SCIPinfinity(scip) : SCIPinfinity(scip);
385 /* the genvbound must be valid for all cutoff bounds greater equal the objective value of the debug solution */
388 (SCIPgetSolTransObj(scip, debugsol) + SCIPgetTransObjoffset(scip)) * SCIPgetTransObjscale(scip);
439 SCIP_CALL( SCIPhashmapCreate(&(propdata->startmap), SCIPblkmem(scip), SCIPcalcHashtableSize(propdata->ncomponents)) );
604 /** resolves propagation of lower bound on +/- left-hand side variable of a generalized variable bound */
609 SCIP_BDCHGIDX* bdchgidx, /**< the index of the bound change, representing the point of time where the change took place */
638 /* if only the primal bound participates in the propagation, it is globally valid and should not be analyzed */
641 /* when resolving a propagation, bdchgidx is not NULL and boundval should be the bound change performed for the
645 SCIPvarIsIntegral(genvbound->var) ? SCIPfeasCeil(scip, *boundval) : *boundval, SCIPvarGetLbAtIndex(lhsvar, bdchgidx, TRUE)));
647 SCIPvarIsIntegral(genvbound->var) ? SCIPfeasCeil(scip, *boundval) : *boundval, -SCIPvarGetUbAtIndex(lhsvar, bdchgidx, TRUE)));
649 /* when creating an initial conflict, bdchgidx is NULL and +/-boundval must exceed the upper/lower bound of the
667 /* compute minimal activity; if bdchgidx is NULL, we create the initial conflict and use local bounds */
668 minactivity = getGenVBoundsMinActivityConflict(scip, genvbound->vars, genvbound->coefs, genvbound->ncoefs, bdchgidx);
672 /* a genvbound might have been replaced since the propagation took place, hence we have to check that the current
673 * genvbound can explain the propagation at the given bound change index; note that by now, with smaller cutoff
682 /* if bdchgidx is NULL, i.e., we create the initial conflict, we should be able to explain the bound change */
694 assert(SCIPisEQ(scip, SCIPvarGetLbAtIndex(vars[i], bdchgidx, TRUE), SCIPvarGetLbAtIndex(vars[i], bdchgidx, FALSE)));
695 assert(SCIPisEQ(scip, SCIPvarGetUbAtIndex(vars[i], bdchgidx, TRUE), SCIPvarGetUbAtIndex(vars[i], bdchgidx, FALSE)));
710 SCIPdebugMessage("lower bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
713 /* if bound is already enforced by conflict set we do not need to add the bound change; since we used the
718 SCIPdebugMessage("skipping lower bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
732 /* get new bound of variable in conflict set; after possible bound widening in SCIPaddConflictLbRelaxed(),
760 SCIPdebugMessage("upper bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
763 /* if bound is already enforced by conflict set we do not need to add the bound change; since we used the
768 SCIPdebugMessage("skipping upper bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
782 /* get new bound of variable in conflict set; after possible bound widening in SCIPaddConflictUbRelaxed(),
807 /* boundval should not have been decreased; if this happened nevertheless, maybe due to numerical errors, we quit
812 SCIPdebugMessage("boundval was reduced from %.15g to %.15g; propagation not resolved\n", *boundval, tmpboundval);
848 /* get minimal right-hand side bound that leads to infeasibility; first try with a factor of 2 for robustness */
853 /* add right-hand side variables that force the lower bound of the left-hand side variable above its upper bound
874 /* initial reason could not be constructed, maybe due to numerics; do not apply conflict analysis */
884 SCIPdebugMessage("skipping upper bound of left-hand side variable <%s> already enforced in conflict set\n",
889 SCIPdebugMessage("adding upper bound of left-hand side variable <%s>\n", SCIPvarGetName(genvbound->var));
900 /* get minimal right-hand side bound that leads to infeasibility; try with a factor of 2 first for robustness */
905 /* add right-hand side variables that force the upper bound of the left-hand side variable below its lower bound
926 /* initial reason could not be constructed, maybe due to numerics; do not apply conflict analysis */
936 SCIPdebugMessage("skipping lower bound of left-hand side variable <%s> already enforced in conflict set\n",
941 SCIPdebugMessage("adding lower bound of left-hand side variable <%s>\n", SCIPvarGetName(genvbound->var));
953 /** apply propagation for one generalized variable bound; also if the left-hand side variable is locally fixed, we
1005 SCIP_CALL( SCIPtightenVarLbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) );
1009 SCIP_CALL( SCIPtightenVarUbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) );
1012 /* tighten bound locally and start conflict analysis in case of infeasibility; as inferinfo we pass the index of the
1019 SCIP_CALL( SCIPinferVarLbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) );
1032 SCIP_CALL( SCIPinferVarUbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) );
1079 SCIPdebugPrintf("(component %d, index %d) ", eventdata->startcomponents[i], eventdata->startindices[i]);
1180 SCIP_CALL( SCIPdropVarEvent(scip, propdata->lbevents[i]->var, SCIP_EVENTTYPE_LBTIGHTENED, propdata->eventhdlr,
1187 SCIP_CALL( SCIPdropVarEvent(scip, propdata->ubevents[i]->var, SCIP_EVENTTYPE_UBTIGHTENED, propdata->eventhdlr,
1203 /** returns the corresponding event data entry in the corresponding array, if there is one; if not: allocates a new
1229 SCIP_CALL( SCIPallocMemoryArray(scip, &((*eventdata)->startcomponents), propdata->ncomponents) );
1254 /** adds an event to the event array lbevents (if boundtype == SCIP_BOUNDTYPE_LOWER) or ubevents (if boundtype ==
1279 if( eventdata->nstarts > 0 && eventdata->startcomponents[eventdata->nstarts - 1] == startcomponent )
1281 /* if there is already a starting index for startcomponent stored at the last entry of eventdata->startindices,
1282 * it should be smaller; this relies on the implementation of setUpEvents(), calling addEventData() in
1324 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1325 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1335 for( j = propdata->componentsstart[i]; j < propdata->componentsstart[i+1]; j++ ) /*lint !e679*/
1383 SCIP_CALL( SCIPcatchVarEvent(scip, eventdata->var, SCIP_EVENTTYPE_LBTIGHTENED, propdata->eventhdlr, eventdata,
1402 SCIP_CALL( SCIPcatchVarEvent(scip, eventdata->var, SCIP_EVENTTYPE_UBTIGHTENED, propdata->eventhdlr, eventdata,
1419 * there is an arc from genvbound1 to genvbound2 iff c1 = +1 and x_i1 appears with positive coefficient in RHS2 or
1420 * c1 = -1 and x_i1 appears with negative coefficient in RHS2; in this case, a bound change of x_i1 deduced from
1458 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->lbgenvbounds, genvbound->vars[j]))->index;
1464 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->ubgenvbounds, genvbound->vars[j]))->index;
1477 SCIP_CALL( SCIPallocMemoryArray(scip, &(propdata->componentsstart), propdata->ncomponents + 1) );
1567 /* if the genvbounds are not sorted, i.e. if root node processing has not been finished, yet, we just propagate in
1601 SCIPdebugMessage("starting in component %d at index %d\n", startingcomponents[i], startingindices[i]);
1613 SCIPdebugMessage("applying genvbound with index %d, component %d\n", j, startingcomponents[i]);
1651 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1652 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1664 {
1672 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds;
1674 /* e.g., during presolving after a restart, new variables might have been created; in this case, we need to extend
1675 * the genvboundstore; the new size may even exceed 2*SCIPgetNVars() if we have genvbounds with nonactive left-hand
1682 SCIP_CALL( SCIPreallocMemoryArray(scip, &(propdata->genvboundstore), propdata->genvboundstoresize) );
1711 /* we only sort after the root node is finished; this avoids having to sort again after adding more genvbounds; if
1743 if( propdata->global && SCIPgetDepth(scip) > 0 && SCIPisFeasLT(scip, SCIPgetCutoffbound(scip), propdata->lastcutoff) )
1751 /* within the tree, the objective function should not change anymore, hence the cutoff bound should be a stable
1763 /* if genvbounds are already sorted, check if bound change events were caught; otherwise apply all genvbounds */
1764 if( !propdata->issorted || ( SCIPgetCurrentNode(scip) == propdata->lastnodecaught && propdata->nindices > 0 ) )
1780 /** adds a generalized variable bound to the genvbounds propagator; if there is already a genvbound for the bound
1823 /* check if there already is a genvbound corresponding to this bound, freeing its data and overwriting it */
1876 /* the cutoff bound is valid w.r.t. the current objective function in the transformed problem; during presolving,
1877 * however, the objective function can change (e.g., when a variable is fixed, its contribution in the objective
1878 * is subtracted from the cutoff bound and added to the objective offset); we solve this by transforming the
1879 * contribution of the cutoff bound in the generalized variable bound to the original problem as follows:
1885 * +/- var >= ... + (z / SCIPgetTransObjscale()) * origcutoffbound + (constant - z * SCIPgetTransObjoffset())
1887 * with SCIPgetCutoffbound() = origcutoffbound / SCIPgetTransObjscale() - SCIPgetTransObjoffset(); in the
1888 * propagation later, we will use (SCIPgetCutoffbound() + SCIPgetTransObjoffset()) * SCIPgetTransObjscale(), see
2001 /** presolving deinitialization method of propagator (called after presolving has been finished) */
2012 SCIPdebugMessage("propexitpre in problem <%s>: removing fixed, aggregated, negated, and multi-aggregated variables from right-hand side\n",
2032 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, genvbound->ncoefs, &genvbound->constant, &requiredsize, TRUE) );
2041 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, requiredsize, &genvbound->constant, &requiredsize, TRUE) );
2050 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds;
2089 SCIPdebugMessage("propexec in problem <%s> at depth %d%s\n", SCIPgetProbName(scip), SCIPgetDepth(scip),
2095 /**@todo is it really no performance issue to be called each time when there are no genvbounds, e.g., for MIPs? */
2103 /* when called in presolving stage the result is set to SCIP_SUCCESS instead of SCIP_REDUCEDDOM, this is corrected
2129 /* as inferinfo we passed the index of the genvbound that was used for propagation; the genvbound might have been
2130 * replaced, but also the new genvbound at this position has the same variable on the left-hand side
2140 SCIPerrorMessage("generalized variable bounds propagator received inferinfo out of range; propagation not resolved, safe to continue\n");
2152 SCIPerrorMessage("generalized variable bounds propagator received incorrect inferinfo; propagation not resolved, but it's safe to continue\n");
2161 /* if left-hand side variable is integral, it suffices to explain a bound change greater than boundval - 1 */
2181 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */
2302 componentidx = ((int)(size_t) SCIPhashmapGetImage(propdata->startmap, (void*)(size_t) (component + 1))) - 1; /*lint !e776*/
2347 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING,
2372 SCIP_CALL( SCIPincludeEventhdlrBasic(scip, &propdata->eventhdlr, EVENTHDLR_NAME, EVENTHDLR_DESC, eventExecGenvbounds, NULL) );
SCIP_RETCODE SCIPsetPropExitpre(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITPRE((*propexitpre))) Definition: scip.c:6779 SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol))) Definition: scip.c:6747 SCIP_RETCODE SCIPsetPropInit(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINIT((*propinit))) Definition: scip.c:6699 Definition: type_result.h:33 static SCIP_RETCODE applyGenVBound(SCIP *scip, SCIP_PROP *prop, GENVBOUND *genvbound, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds) Definition: prop_genvbounds.c:962 Definition: struct_var.h:97 static SCIP_RETCODE freeComponentsData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:565 SCIP_RETCODE SCIPgenVBoundAdd(SCIP *scip, SCIP_PROP *genvboundprop, SCIP_VAR **vars, SCIP_VAR *var, SCIP_Real *coefs, int ncoefs, SCIP_Real coefcutoffbound, SCIP_Real constant, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:1788 SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples) Definition: scip.c:15614 Definition: struct_scip.h:52 static SCIP_RETCODE freeGenVBound(SCIP *scip, GENVBOUND *genvbound) Definition: prop_genvbounds.c:591 static SCIP_RETCODE execGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_RESULT *result, SCIP_Bool local, int *nchgbds) Definition: prop_genvbounds.c:1703 static SCIP_RETCODE initPropdata(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1635 static SCIP_RETCODE applyGenVBounds(SCIP *scip, SCIP_PROP *prop, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds) Definition: prop_genvbounds.c:1544 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38667 static SCIP_RETCODE dropAndFreeEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1163 SCIP_RETCODE SCIPdigraphComputeUndirectedComponents(SCIP_DIGRAPH *digraph, int minsize, int *components, int *ncomponents) Definition: misc.c:5788 Definition: type_result.h:49 static SCIP_RETCODE freeAllEventData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1116 Definition: struct_var.h:196 static SCIP_RETCODE analyzeGenVBoundConflict(SCIP *scip, GENVBOUND *genvbound) Definition: prop_genvbounds.c:830 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:22044 static SCIP_RETCODE freeEventData(SCIP *scip, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1093 SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize) Definition: misc.c:1864 SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7209 static SCIP_DECL_PROPEXITSOL(propExitsolGenvbounds) Definition: prop_genvbounds.c:2188 static GENVBOUND * getGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:163 Definition: prop_genvbounds.c:67 int SCIPdigraphGetNComponents(SCIP_DIGRAPH *digraph) Definition: misc.c:5964 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15141 static SCIP_RETCODE resetLocalStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:545 SCIP_RETCODE SCIPinferVarLbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18890 void SCIPdigraphGetComponent(SCIP_DIGRAPH *digraph, int compidx, int **nodes, int *nnodes) Definition: misc.c:5977 static SCIP_Real getGenVBoundsMinActivity(SCIP *scip, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_Bool global) Definition: prop_genvbounds.c:230 void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:1923 SCIP_RETCODE SCIPsetPropPresol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPPRESOL((*proppresol)), int presolpriority, int presolmaxrounds, SCIP_Bool presoldelay) Definition: scip.c:6795 static SCIP_RETCODE fillGlobalStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:497 SCIP_RETCODE SCIPdigraphTopoSortComponents(SCIP_DIGRAPH *digraph) Definition: misc.c:5900 Definition: struct_tree.h:119 static SCIP_DECL_PROPEXITPRE(propExitpreGenvbounds) Definition: prop_genvbounds.c:2008 static SCIP_RETCODE addEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, int startindex, int startcomponent, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:1263 Definition: struct_sol.h:50 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) Definition: scip.c:3388 SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:1966 SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success) Definition: scip.c:22393 SCIP_RETCODE SCIPdigraphCreate(SCIP_DIGRAPH **digraph, int nnodes) Definition: misc.c:5326 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:33378 Definition: struct_misc.h:101 static SCIP_RETCODE addNewGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, GENVBOUND *genvbound) Definition: prop_genvbounds.c:1664 Definition: type_result.h:35 static SCIP_Real getGenVBoundsBound(SCIP *scip, GENVBOUND *genvbound, SCIP_Bool global) Definition: prop_genvbounds.c:333 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15233 Definition: type_lp.h:47 static SCIP_RETCODE resolveGenVBoundPropagation(SCIP *scip, GENVBOUND *genvbound, SCIP_BDCHGIDX *bdchgidx, SCIP_Real *boundval, SCIP_Bool *success) Definition: prop_genvbounds.c:611 static SCIP_DECL_EVENTEXEC(eventExecGenvbounds) Definition: prop_genvbounds.c:2259 #define DEFAULT_PROPAGATE_IN_ROOT_NODE Definition: prop_genvbounds.c:53 static SCIP_Real getGenVBoundsMinActivityConflict(SCIP *scip, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_BDCHGIDX *bdchgidx) Definition: prop_genvbounds.c:271 SCIP_RETCODE SCIPincludePropGenvbounds(SCIP *scip) Definition: prop_genvbounds.c:2341 Definition: type_retcode.h:33 Definition: type_result.h:42 SCIP_RETCODE SCIPinferVarUbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18993 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38705 SCIP_RETCODE SCIPdigraphAddArc(SCIP_DIGRAPH *digraph, int startnode, int endnode, void *data) Definition: misc.c:5544 Definition: struct_prop.h:36 SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:19198 SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop))) Definition: scip.c:6830 static SCIP_RETCODE setUpEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1306 SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree))) Definition: scip.c:6683 #define SCIPduplicateMemoryArray(scip, ptr, source, num) Definition: scip.h:19173 SCIP_RETCODE SCIPincludePropBasic(SCIP *scip, SCIP_PROP **propptr, const char *name, const char *desc, int priority, int freq, SCIP_Bool delay, SCIP_PROPTIMING timingmask, SCIP_DECL_PROPEXEC((*propexec)), SCIP_PROPDATA *propdata) Definition: scip.c:6630 methods for debugging Definition: type_set.h:38 Definition: type_var.h:45 SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb) Definition: scip.c:22125 SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:33424 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:1984 Definition: type_lp.h:48 static SCIP_RETCODE createStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:415 SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:19308 SCIP_Real SCIPgetConflictVarLb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:22343 static SCIP_RETCODE getEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1212 static SCIP_RETCODE sortGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1429 SCIP_RETCODE SCIPaddConflictRelaxedUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedub) Definition: scip.c:22189 static SCIP_DECL_PROPRESPROP(propRespropGenvbounds) Definition: prop_genvbounds.c:2119 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:1901 SCIP_Real SCIPgetConflictVarUb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:22365 Definition: struct_misc.h:171 static SCIP_RETCODE freeStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:454 static SCIP_DECL_PROPPRESOL(propPresolGenvbounds) Definition: prop_genvbounds.c:1976 static SCIP_Real getCutoffboundGenVBound(SCIP *scip, GENVBOUND *genvbound) Definition: prop_genvbounds.c:140 Definition: type_result.h:39 Definition: struct_event.h:185 generalized variable bounds propagator |