|
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
prop_genvbounds.c
Go to the documentation of this file.
24 /**@todo should we only discard events catched from nodes that are not the current node's ancestors? */
28 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
44 #define PROP_PRESOL_PRIORITY -2000000 /**< priority of the presolving method (>= 0: before, < 0: after
46 #define PROP_PRESOLTIMING SCIP_PRESOLTIMING_FAST /* timing of the presolving method (fast, medium, or exhaustive) */
47 #define PROP_PRESOL_MAXROUNDS -1 /**< maximal number of presolving rounds the presolver participates
50 #define DEFAULT_PROPAGATE_IN_ROOT_NODE TRUE /**< apply genvbounds in root node if no new incumbent was found? */
53 #define DEFAULT_PROPASCONSS FALSE /**< should genvbounds be transformed to (linear) constraints? */
74 SCIP_BOUNDTYPE boundtype; /**< type of bound provided by the genvbound, SCIP_BOUNDTYPE_LOWER/UPPER
76 };
81 {
115 int* gstartcomponents; /**< components corresponding to indices stored in gstartindices array */
149 /* the cutoff bound is valid w.r.t. the current objective function in the transformed problem; during presolving,
150 * however, the objective function can change (e.g., when a variable is fixed, its contribution in the objective is
151 * subtracted from the cutoff bound and added to the objective offset); we solve this by transforming the
152 * contribution of the cutoff bound in the generalized variable bound to the original problem as described in
266 /** calculates the minactivity of a linear combination of variables stored in the current conflict set */
273 SCIP_BDCHGIDX* bdchgidx /**< bound change at which minactivity should be computed; if NULL use local bounds */
300 /* if bdchgidx is not NULL, use the possibly tighter bound already in the current conflict set */
312 /* if bdchgidx is not NULL, use the possibly tighter bound already in the current conflict set */
334 )
341 boundval = getGenVBoundsMinActivity(scip, genvbound->vars, genvbound->coefs, genvbound->ncoefs, global);
344 return (genvbound->boundtype == SCIP_BOUNDTYPE_LOWER) ? -SCIPinfinity(scip) : SCIPinfinity(scip);
387 /* the genvbound must be valid for all cutoff bounds greater equal the objective value of the debug solution */
390 (SCIPgetSolTransObj(scip, debugsol) + SCIPgetTransObjoffset(scip)) * SCIPgetTransObjscale(scip);
416 {
441 SCIP_CALL( SCIPhashmapCreate(&(propdata->startmap), SCIPblkmem(scip), SCIPcalcHashtableSize(propdata->ncomponents)) );
455 {
498 {
546 {
566 {
592 {
606 /** resolves propagation of lower bound on +/- left-hand side variable of a generalized variable bound */
611 SCIP_BDCHGIDX* bdchgidx, /**< the index of the bound change, representing the point of time where the change took place */
640 /* if only the primal bound participates in the propagation, it is globally valid and should not be analyzed */
643 /* when resolving a propagation, bdchgidx is not NULL and boundval should be the bound change performed for the
647 SCIPvarIsIntegral(genvbound->var) ? SCIPfeasCeil(scip, *boundval) : *boundval, SCIPvarGetLbAtIndex(lhsvar, bdchgidx, TRUE)));
649 SCIPvarIsIntegral(genvbound->var) ? SCIPfeasCeil(scip, *boundval) : *boundval, -SCIPvarGetUbAtIndex(lhsvar, bdchgidx, TRUE)));
651 /* when creating an initial conflict, bdchgidx is NULL and +/-boundval must exceed the upper/lower bound of the
669 /* compute minimal activity; if bdchgidx is NULL, we create the initial conflict and use local bounds */
670 minactivity = getGenVBoundsMinActivityConflict(scip, genvbound->vars, genvbound->coefs, genvbound->ncoefs, bdchgidx);
674 /* a genvbound might have been replaced since the propagation took place, hence we have to check that the current
675 * genvbound can explain the propagation at the given bound change index; note that by now, with smaller cutoff
684 /* if bdchgidx is NULL, i.e., we create the initial conflict, we should be able to explain the bound change */
696 assert(SCIPisEQ(scip, SCIPvarGetLbAtIndex(vars[i], bdchgidx, TRUE), SCIPvarGetLbAtIndex(vars[i], bdchgidx, FALSE)));
697 assert(SCIPisEQ(scip, SCIPvarGetUbAtIndex(vars[i], bdchgidx, TRUE), SCIPvarGetUbAtIndex(vars[i], bdchgidx, FALSE)));
712 SCIPdebugMessage("lower bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
715 /* if bound is already enforced by conflict set we do not need to add the bound change; since we used the
720 SCIPdebugMessage("skipping lower bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
734 /* get new bound of variable in conflict set; after possible bound widening in SCIPaddConflictLbRelaxed(),
762 SCIPdebugMessage("upper bound of variable <%s> (genvbound->vars[%d]) in conflict set / at index is %.15g / %.15g\n",
765 /* if bound is already enforced by conflict set we do not need to add the bound change; since we used the
770 SCIPdebugMessage("skipping upper bound of variable <%s> (genvbound->vars[%d]) already enforced in conflict set\n",
784 /* get new bound of variable in conflict set; after possible bound widening in SCIPaddConflictUbRelaxed(),
809 /* boundval should not have been decreased; if this happened nevertheless, maybe due to numerical errors, we quit
814 SCIPdebugMessage("boundval was reduced from %.15g to %.15g; propagation not resolved\n", *boundval, tmpboundval);
831 {
850 /* get minimal right-hand side bound that leads to infeasibility; first try with a factor of 2 for robustness */
855 /* add right-hand side variables that force the lower bound of the left-hand side variable above its upper bound
876 /* initial reason could not be constructed, maybe due to numerics; do not apply conflict analysis */
886 SCIPdebugMessage("skipping upper bound of left-hand side variable <%s> already enforced in conflict set\n",
891 SCIPdebugMessage("adding upper bound of left-hand side variable <%s>\n", SCIPvarGetName(genvbound->var));
902 /* get minimal right-hand side bound that leads to infeasibility; try with a factor of 2 first for robustness */
907 /* add right-hand side variables that force the upper bound of the left-hand side variable below its lower bound
928 /* initial reason could not be constructed, maybe due to numerics; do not apply conflict analysis */
938 SCIPdebugMessage("skipping lower bound of left-hand side variable <%s> already enforced in conflict set\n",
943 SCIPdebugMessage("adding lower bound of left-hand side variable <%s>\n", SCIPvarGetName(genvbound->var));
955 /** apply propagation for one generalized variable bound; also if the left-hand side variable is locally fixed, we
1007 SCIP_CALL( SCIPtightenVarLbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) );
1011 SCIP_CALL( SCIPtightenVarUbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) );
1014 /* tighten bound locally and start conflict analysis in case of infeasibility; as inferinfo we pass the index of the
1021 SCIP_CALL( SCIPinferVarLbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) );
1034 SCIP_CALL( SCIPinferVarUbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) );
1081 SCIPdebugPrintf("(component %d, index %d) ", eventdata->startcomponents[i], eventdata->startindices[i]);
1094 {
1117 {
1164 {
1182 SCIP_CALL( SCIPdropVarEvent(scip, propdata->lbevents[i]->var, SCIP_EVENTTYPE_LBTIGHTENED, propdata->eventhdlr,
1189 SCIP_CALL( SCIPdropVarEvent(scip, propdata->ubevents[i]->var, SCIP_EVENTTYPE_UBTIGHTENED, propdata->eventhdlr,
1205 /** returns the corresponding event data entry in the corresponding array, if there is one; if not: allocates a new
1231 SCIP_CALL( SCIPallocMemoryArray(scip, &((*eventdata)->startcomponents), propdata->ncomponents) );
1256 /** adds an event to the event array lbevents (if boundtype == SCIP_BOUNDTYPE_LOWER) or ubevents (if boundtype ==
1281 if( eventdata->nstarts > 0 && eventdata->startcomponents[eventdata->nstarts - 1] == startcomponent )
1283 /* if there is already a starting index for startcomponent stored at the last entry of eventdata->startindices,
1284 * it should be smaller; this relies on the implementation of setUpEvents(), calling addEventData() in
1307 {
1326 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1327 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1337 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
1423 * The method computes the strongly connected components and sorts them topologically. The order of the nodes in an
1431 {
1463 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->lbgenvbounds, genvbound->vars[j]))->index;
1469 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->ubgenvbounds, genvbound->vars[j]))->index;
1482 SCIP_CALL( SCIPallocMemoryArray(scip, &(propdata->componentsstart), propdata->ncomponents + 1) );
1485 SCIP_CALL( SCIPallocMemoryArray(scip, &strongcomponents, SCIPdigraphGetNNodes(graph)) ); /*lint !e666*/
1486 SCIP_CALL( SCIPallocMemoryArray(scip, &strongcompstartidx, SCIPdigraphGetNNodes(graph)) ); /*lint !e666*/
1504 SCIP_CALL( SCIPdigraphComputeDirectedComponents(graph, i, strongcomponents, strongcompstartidx,
1604 /* if the genvbounds are not sorted, i.e. if root node processing has not been finished, yet, we just propagate in
1638 SCIPdebugMessage("starting in component %d at index %d\n", startingcomponents[i], startingindices[i]);
1650 SCIPdebugMessage("applying genvbound with index %d, component %d\n", j, startingcomponents[i]);
1671 {
1688 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1689 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) );
1700 )
1709 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds;
1711 /* e.g., during presolving after a restart, new variables might have been created; in this case, we need to extend
1712 * the genvboundstore; the new size may even exceed 2*SCIPgetNVars() if we have genvbounds with nonactive left-hand
1719 SCIP_CALL( SCIPreallocMemoryArray(scip, &(propdata->genvboundstore), propdata->genvboundstoresize) );
1748 /* we only sort after the root node is finished; this avoids having to sort again after adding more genvbounds; if
1780 if( propdata->global && SCIPgetDepth(scip) > 0 && SCIPisFeasLT(scip, SCIPgetCutoffbound(scip), propdata->lastcutoff) )
1788 /* within the tree, the objective function should not change anymore, hence the cutoff bound should be a stable
1800 /* if genvbounds are already sorted, check if bound change events were caught; otherwise apply all genvbounds */
1801 if( !propdata->issorted || ( SCIPgetCurrentNode(scip) == propdata->lastnodecaught && propdata->nindices > 0 ) )
1812 /* adds all genvbounds in the genvboundstore as constraints to the problem; afterwards clears the genvboundstore */
1818 {
1837 SCIP_CALL( SCIPcreateVarBasic(scip, &propdata->cutoffboundvar, name, -SCIPinfinity(scip), ub, 0.0, SCIP_VARTYPE_CONTINUOUS) );
1842 /* lock the variable because it should not be subject to dual presolving reductions; because we create the
1843 * linear constraints as non-check constraints, the cutoffboundvar will not be locked by the linear constraint
1851 /* now iterate over all genvbounds in the store and construct a linear constraint for each of them */
1889 SCIPdebugPrintf("%e%s <= %e\n", vals[genvbound->ncoefs + 1], SCIPvarGetName(vars[genvbound->ncoefs + 1]), -1.0*genvbound->constant);
1894 SCIP_CALL( SCIPcreateConsLinear(scip, &cons, name, nvars, vars, vals, -SCIPinfinity(scip), -genvbound->constant,
1942 /** adds a generalized variable bound to the genvbounds propagator; if there is already a genvbound for the bound
1992 /* check if there already is a genvbound corresponding to this bound, freeing its data and overwriting it */
2045 /* the cutoff bound is valid w.r.t. the current objective function in the transformed problem; during presolving,
2046 * however, the objective function can change (e.g., when a variable is fixed, its contribution in the objective
2047 * is subtracted from the cutoff bound and added to the objective offset); we solve this by transforming the
2048 * contribution of the cutoff bound in the generalized variable bound to the original problem as follows:
2054 * +/- var >= ... + (z / SCIPgetTransObjscale()) * origcutoffbound + (constant - z * SCIPgetTransObjoffset())
2056 * with SCIPgetCutoffbound() = origcutoffbound / SCIPgetTransObjscale() - SCIPgetTransObjoffset(); in the
2057 * propagation later, we will use (SCIPgetCutoffbound() + SCIPgetTransObjoffset()) * SCIPgetTransObjscale(), see
2174 /** presolving initialization method of propagator (called when presolving is about to begin) */
2191 SCIPdebugMessage("propinitpre in problem <%s>: locking cutoffboundvar (current downlocks=%d, uplocks=%d)\n",
2202 /** presolving deinitialization method of propagator (called after presolving has been finished) */
2213 SCIPdebugMessage("propexitpre in problem <%s>: removing fixed, aggregated, negated, and multi-aggregated variables from right-hand side\n",
2232 /* replace non-active by active variables and update constant; note that this may result in coefficients where
2235 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, genvbound->ncoefs, &genvbound->constant, &requiredsize, TRUE) );
2244 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, requiredsize, &genvbound->constant, &requiredsize, TRUE) );
2253 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds;
2312 SCIP_CALL( SCIPtightenVarUbGlobal(scip, propdata->cutoffboundvar, newub, FALSE, &infeasible, &tightened) );
2316 SCIPdebugMessage("tightened UB of cutoffboundvar to %e (old: %e, infeas: %u, tightened: %u)\n",
2324 SCIPdebugMessage("propexec in problem <%s> at depth %d%s\n", SCIPgetProbName(scip), SCIPgetDepth(scip),
2330 /**@todo is it really no performance issue to be called each time when there are no genvbounds, e.g., for MIPs? */
2335 /* add the genvbounds in the genvboundstore as constraints to the problem; afterwards clear the genvboundstore */
2345 /* when called in presolving stage the result is set to SCIP_SUCCESS instead of SCIP_REDUCEDDOM, this is corrected
2373 /* as inferinfo we passed the index of the genvbound that was used for propagation; the genvbound might have been
2374 * replaced, but also the new genvbound at this position has the same variable on the left-hand side
2384 SCIPerrorMessage("generalized variable bounds propagator received inferinfo out of range; propagation not resolved, safe to continue\n");
2396 SCIPerrorMessage("generalized variable bounds propagator received incorrect inferinfo; propagation not resolved, but it's safe to continue\n");
2405 /* if left-hand side variable is integral, it suffices to explain a bound change greater than boundval - 1 */
2425 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */
2556 componentidx = ((int)(size_t) SCIPhashmapGetImage(propdata->startmap, (void*)(size_t) (component + 1))) - 1; /*lint !e776*/
2601 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING,
2630 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:7026 SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol))) Definition: scip.c:6994 SCIP_RETCODE SCIPsetPropInit(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINIT((*propinit))) Definition: scip.c:6946 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:963 Definition: struct_var.h:97 static SCIP_RETCODE freeComponentsData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:566 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:1949 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:17456 Definition: struct_scip.h:53 static SCIP_RETCODE freeGenVBound(SCIP *scip, GENVBOUND *genvbound) Definition: prop_genvbounds.c:592 static SCIP_RETCODE execGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_RESULT *result, SCIP_Bool local, int *nchgbds) Definition: prop_genvbounds.c:1739 static SCIP_RETCODE initPropdata(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1671 static SCIP_RETCODE applyGenVBounds(SCIP *scip, SCIP_PROP *prop, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds) Definition: prop_genvbounds.c:1580 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41528 static SCIP_RETCODE dropAndFreeEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1164 SCIP_RETCODE SCIPdigraphComputeUndirectedComponents(SCIP_DIGRAPH *digraph, int minsize, int *components, int *ncomponents) Definition: misc.c:6072 Definition: type_result.h:49 static SCIP_RETCODE freeAllEventData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1117 Definition: struct_var.h:196 static SCIP_RETCODE analyzeGenVBoundConflict(SCIP *scip, GENVBOUND *genvbound) Definition: prop_genvbounds.c:831 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:24307 static SCIP_RETCODE freeEventData(SCIP *scip, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1094 SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype) Definition: scip.c:15903 SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize) Definition: misc.c:2052 SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7747 static SCIP_DECL_PROPEXITSOL(propExitsolGenvbounds) Definition: prop_genvbounds.c:2431 static GENVBOUND * getGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:164 Definition: prop_genvbounds.c:68 int SCIPdigraphGetNComponents(SCIP_DIGRAPH *digraph) Definition: misc.c:6248 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15695 static SCIP_RETCODE resetLocalStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:546 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:20907 void SCIPdigraphGetComponent(SCIP_DIGRAPH *digraph, int compidx, int **nodes, int *nnodes) Definition: misc.c:6261 static SCIP_Real getGenVBoundsMinActivity(SCIP *scip, SCIP_VAR **vars, SCIP_Real *coefs, int nvars, SCIP_Bool global) Definition: prop_genvbounds.c:231 void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2111 static SCIP_RETCODE fillGlobalStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:498 SCIP_RETCODE SCIPdigraphTopoSortComponents(SCIP_DIGRAPH *digraph) Definition: misc.c:6184 Definition: struct_tree.h:122 static SCIP_DECL_PROPEXITPRE(propExitpreGenvbounds) Definition: prop_genvbounds.c:2208 static SCIP_RETCODE addEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, int startindex, int startcomponent, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:1264 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:3516 SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2154 SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success) Definition: scip.c:24676 SCIP_RETCODE SCIPdigraphCreate(SCIP_DIGRAPH **digraph, int nnodes) Definition: misc.c:5591 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:36232 Definition: struct_misc.h:101 static SCIP_RETCODE addNewGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, GENVBOUND *genvbound) Definition: prop_genvbounds.c:1700 Definition: type_result.h:35 Definition: struct_cons.h:36 static SCIP_Real getGenVBoundsBound(SCIP *scip, GENVBOUND *genvbound, SCIP_Bool global) Definition: prop_genvbounds.c:334 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15787 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:612 static SCIP_DECL_EVENTEXEC(eventExecGenvbounds) Definition: prop_genvbounds.c:2511 #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:272 SCIP_RETCODE SCIPincludePropGenvbounds(SCIP *scip) Definition: prop_genvbounds.c:2594 Definition: type_retcode.h:33 SCIP_RETCODE SCIPsetPropPresol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPPRESOL((*proppresol)), int presolpriority, int presolmaxrounds, SCIP_PRESOLTIMING presoltiming) Definition: scip.c:7042 Definition: type_result.h:42 SCIP_RETCODE SCIPsetPropInitpre(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINITPRE((*propinitpre))) Definition: scip.c:7010 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:21010 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41554 SCIP_RETCODE SCIPdigraphAddArc(SCIP_DIGRAPH *digraph, int startnode, int endnode, void *data) Definition: misc.c:5809 Definition: struct_prop.h:36 static SCIP_RETCODE createConstraints(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1818 SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:21216 SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var) Definition: scip.c:23106 SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop))) Definition: scip.c:7075 static SCIP_RETCODE setUpEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1307 SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree))) Definition: scip.c:6930 #define SCIPduplicateMemoryArray(scip, ptr, source, num) Definition: scip.h:20369 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:6877 methods for debugging static SCIP_Real getCutoffboundGenVBound(SCIP *scip) Definition: prop_genvbounds.c:143 Definition: type_set.h:38 Definition: type_var.h:45 SCIP_RETCODE SCIPdigraphComputeDirectedComponents(SCIP_DIGRAPH *digraph, int compidx, int *strongcomponents, int *strongcompstartidx, int *nstrongcomponents) Definition: misc.c:6393 SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb) Definition: scip.c:24390 static SCIP_DECL_PROPINITPRE(propInitpreGenvbounds) Definition: prop_genvbounds.c:2180 Constraint handler for linear constraints in their most general form, . SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:36278 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2172 Definition: type_lp.h:48 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) Definition: cons_linear.c:16236 static SCIP_RETCODE createStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:416 SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:21326 SCIP_Real SCIPgetConflictVarLb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24622 static SCIP_RETCODE getEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1213 static SCIP_RETCODE sortGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1431 SCIP_RETCODE SCIPaddConflictRelaxedUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedub) Definition: scip.c:24458 SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup) Definition: scip.c:19465 static SCIP_DECL_PROPRESPROP(propRespropGenvbounds) Definition: prop_genvbounds.c:2362 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2089 Definition: type_retcode.h:43 SCIP_Real SCIPgetConflictVarUb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24646 Definition: struct_misc.h:171 static SCIP_RETCODE freeStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:455 static SCIP_DECL_PROPPRESOL(propPresolGenvbounds) Definition: prop_genvbounds.c:2145 Definition: type_result.h:39 Definition: struct_event.h:185 generalized variable bounds propagator Definition: type_var.h:56 |