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 1010 SCIP_CALL( SCIPtightenVarLbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) ); 1014 SCIP_CALL( SCIPtightenVarUbGlobal(scip, genvbound->var, boundval, FALSE, &infeas, &tightened) ); 1017 /* tighten bound locally and start conflict analysis in case of infeasibility; as inferinfo we pass the index of the 1024 SCIP_CALL( SCIPinferVarLbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) ); 1037 SCIP_CALL( SCIPinferVarUbProp(scip, genvbound->var, boundval, prop, genvbound->index, FALSE, &infeas, &tightened) ); 1084 SCIPdebugPrintf("(component %d, index %d) ", eventdata->startcomponents[i], eventdata->startindices[i]); 1097 { 1120 { 1167 { 1185 SCIP_CALL( SCIPdropVarEvent(scip, propdata->lbevents[i]->var, SCIP_EVENTTYPE_LBTIGHTENED, propdata->eventhdlr, 1192 SCIP_CALL( SCIPdropVarEvent(scip, propdata->ubevents[i]->var, SCIP_EVENTTYPE_UBTIGHTENED, propdata->eventhdlr, 1208 /** returns the corresponding event data entry in the corresponding array, if there is one; if not: allocates a new 1234 SCIP_CALL( SCIPallocMemoryArray(scip, &((*eventdata)->startcomponents), propdata->ncomponents) ); 1259 /** adds an event to the event array lbevents (if boundtype == SCIP_BOUNDTYPE_LOWER) or ubevents (if boundtype == 1284 if( eventdata->nstarts > 0 && eventdata->startcomponents[eventdata->nstarts - 1] == startcomponent ) 1286 /* if there is already a starting index for startcomponent stored at the last entry of eventdata->startindices, 1287 * it should be smaller; this relies on the implementation of setUpEvents(), calling addEventData() in 1310 { 1329 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) ); 1330 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubeventsmap), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) ); 1340 for( j = propdata->componentsstart[i]; j < propdata->componentsstart[i+1]; j++ ) /*lint !e679*/ 1386 SCIP_CALL( SCIPcatchVarEvent(scip, eventdata->var, SCIP_EVENTTYPE_LBTIGHTENED, propdata->eventhdlr, eventdata, 1405 SCIP_CALL( SCIPcatchVarEvent(scip, eventdata->var, SCIP_EVENTTYPE_UBTIGHTENED, propdata->eventhdlr, eventdata, 1422 * there is an arc from genvbound1 to genvbound2 iff c1 = +1 and x_i1 appears with positive coefficient in RHS2 or 1423 * c1 = -1 and x_i1 appears with negative coefficient in RHS2; in this case, a bound change of x_i1 deduced from 1426 * The method computes the strongly connected components and sorts them topologically. The order of the nodes in an 1434 { 1466 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->lbgenvbounds, genvbound->vars[j]))->index; 1472 int from = ((GENVBOUND*) SCIPhashmapGetImage(propdata->ubgenvbounds, genvbound->vars[j]))->index; 1485 SCIP_CALL( SCIPallocMemoryArray(scip, &(propdata->componentsstart), propdata->ncomponents + 1) ); 1488 SCIP_CALL( SCIPallocMemoryArray(scip, &strongcomponents, SCIPdigraphGetNNodes(graph)) ); /*lint !e666*/ 1489 SCIP_CALL( SCIPallocMemoryArray(scip, &strongcompstartidx, SCIPdigraphGetNNodes(graph)) ); /*lint !e666*/ 1507 SCIP_CALL( SCIPdigraphComputeDirectedComponents(graph, i, strongcomponents, strongcompstartidx, 1607 /* if the genvbounds are not sorted, i.e. if root node processing has not been finished, yet, we just propagate in 1641 SCIPdebugMessage("starting in component %d at index %d\n", startingcomponents[i], startingindices[i]); 1653 SCIPdebugMessage("applying genvbound with index %d, component %d\n", j, startingcomponents[i]); 1674 { 1691 SCIP_CALL( SCIPhashmapCreate(&(propdata->lbgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) ); 1692 SCIP_CALL( SCIPhashmapCreate(&(propdata->ubgenvbounds), SCIPblkmem(scip), SCIPcalcHashtableSize(nprobvars)) ); 1703 ) 1712 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds; 1714 /* e.g., during presolving after a restart, new variables might have been created; in this case, we need to extend 1715 * the genvboundstore; the new size may even exceed 2*SCIPgetNVars() if we have genvbounds with nonactive left-hand 1722 SCIP_CALL( SCIPreallocMemoryArray(scip, &(propdata->genvboundstore), propdata->genvboundstoresize) ); 1751 /* we only sort after the root node is finished; this avoids having to sort again after adding more genvbounds; if 1783 if( propdata->global && SCIPgetDepth(scip) > 0 && SCIPisFeasLT(scip, SCIPgetCutoffbound(scip), propdata->lastcutoff) ) 1791 /* within the tree, the objective function should not change anymore, hence the cutoff bound should be a stable 1803 /* if genvbounds are already sorted, check if bound change events were caught; otherwise apply all genvbounds */ 1804 if( !propdata->issorted || ( SCIPgetCurrentNode(scip) == propdata->lastnodecaught && propdata->nindices > 0 ) ) 1815 /* adds all genvbounds in the genvboundstore as constraints to the problem; afterwards clears the genvboundstore */ 1821 { 1840 SCIP_CALL( SCIPcreateVarBasic(scip, &propdata->cutoffboundvar, name, -SCIPinfinity(scip), ub, 0.0, SCIP_VARTYPE_CONTINUOUS) ); 1845 /* lock the variable because it should not be subject to dual presolving reductions; because we create the 1846 * linear constraints as non-check constraints, the cutoffboundvar will not be locked by the linear constraint 1854 /* now iterate over all genvbounds in the store and construct a linear constraint for each of them */ 1892 SCIPdebugPrintf("%e%s <= %e\n", vals[genvbound->ncoefs + 1], SCIPvarGetName(vars[genvbound->ncoefs + 1]), -1.0*genvbound->constant); 1897 SCIP_CALL( SCIPcreateConsLinear(scip, &cons, name, nvars, vars, vals, -SCIPinfinity(scip), -genvbound->constant, 1945 /** adds a generalized variable bound to the genvbounds propagator; if there is already a genvbound for the bound 1995 /* check if there already is a genvbound corresponding to this bound, freeing its data and overwriting it */ 2048 /* the cutoff bound is valid w.r.t. the current objective function in the transformed problem; during presolving, 2049 * however, the objective function can change (e.g., when a variable is fixed, its contribution in the objective 2050 * is subtracted from the cutoff bound and added to the objective offset); we solve this by transforming the 2051 * contribution of the cutoff bound in the generalized variable bound to the original problem as follows: 2057 * +/- var >= ... + (z / SCIPgetTransObjscale()) * origcutoffbound + (constant - z * SCIPgetTransObjoffset()) 2059 * with SCIPgetCutoffbound() = origcutoffbound / SCIPgetTransObjscale() - SCIPgetTransObjoffset(); in the 2060 * propagation later, we will use (SCIPgetCutoffbound() + SCIPgetTransObjoffset()) * SCIPgetTransObjscale(), see 2177 /** presolving initialization method of propagator (called when presolving is about to begin) */ 2194 SCIPdebugMessage("propinitpre in problem <%s>: locking cutoffboundvar (current downlocks=%d, uplocks=%d)\n", 2205 /** presolving deinitialization method of propagator (called after presolving has been finished) */ 2216 SCIPdebugMessage("propexitpre in problem <%s>: removing fixed, aggregated, negated, and multi-aggregated variables from right-hand side\n", 2235 /* replace non-active by active variables and update constant; note that this may result in coefficients where 2238 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, genvbound->ncoefs, &genvbound->constant, &requiredsize, TRUE) ); 2247 SCIP_CALL( SCIPgetProbvarLinearSum(scip, genvbound->vars, genvbound->coefs, &genvbound->ncoefs, requiredsize, &genvbound->constant, &requiredsize, TRUE) ); 2256 hashmap = genvbound->boundtype == SCIP_BOUNDTYPE_LOWER ? propdata->lbgenvbounds : propdata->ubgenvbounds; 2320 SCIP_CALL( SCIPtightenVarUbGlobal(scip, propdata->cutoffboundvar, newub, FALSE, &infeasible, &tightened) ); 2324 SCIPdebugMessage("tightened UB of cutoffboundvar to %e (old: %e, infeas: %u, tightened: %u)\n", 2332 SCIPdebugMessage("propexec in problem <%s> at depth %d%s\n", SCIPgetProbName(scip), SCIPgetDepth(scip), 2338 /**@todo is it really no performance issue to be called each time when there are no genvbounds, e.g., for MIPs? */ 2343 /* add the genvbounds in the genvboundstore as constraints to the problem; afterwards clear the genvboundstore */ 2353 /* when called in presolving stage the result is set to SCIP_SUCCESS instead of SCIP_REDUCEDDOM, this is corrected 2381 /* as inferinfo we passed the index of the genvbound that was used for propagation; the genvbound might have been 2382 * replaced, but also the new genvbound at this position has the same variable on the left-hand side 2392 SCIPerrorMessage("generalized variable bounds propagator received inferinfo out of range; propagation not resolved, safe to continue\n"); 2404 SCIPerrorMessage("generalized variable bounds propagator received incorrect inferinfo; propagation not resolved, but it's safe to continue\n"); 2413 /* if left-hand side variable is integral, it suffices to explain a bound change greater than boundval - 1 */ 2433 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */ 2564 componentidx = ((int)(size_t) SCIPhashmapGetImage(propdata->startmap, (void*)(size_t) (component + 1))) - 1; /*lint !e776*/ 2609 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, 2638 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:7057 SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol))) Definition: scip.c:7025 SCIP_RETCODE SCIPsetPropInit(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINIT((*propinit))) Definition: scip.c:6977 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:1952 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:17373 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:1742 static SCIP_RETCODE initPropdata(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1674 static SCIP_RETCODE applyGenVBounds(SCIP *scip, SCIP_PROP *prop, SCIP_Bool global, SCIP_RESULT *result, int *nchgbds) Definition: prop_genvbounds.c:1583 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41920 static SCIP_RETCODE dropAndFreeEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1167 SCIP_RETCODE SCIPdigraphComputeUndirectedComponents(SCIP_DIGRAPH *digraph, int minsize, int *components, int *ncomponents) Definition: misc.c:6077 Definition: type_result.h:49 static SCIP_RETCODE freeAllEventData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1120 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:24320 static SCIP_RETCODE freeEventData(SCIP *scip, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1097 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:15817 SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize) Definition: misc.c:2057 SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7778 static SCIP_DECL_PROPEXITSOL(propExitsolGenvbounds) Definition: prop_genvbounds.c:2439 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:6253 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15737 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:20841 void SCIPdigraphGetComponent(SCIP_DIGRAPH *digraph, int compidx, int **nodes, int *nnodes) Definition: misc.c:6266 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:2116 static SCIP_RETCODE fillGlobalStartingData(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:498 SCIP_RETCODE SCIPdigraphTopoSortComponents(SCIP_DIGRAPH *digraph) Definition: misc.c:6189 Definition: struct_tree.h:122 static SCIP_DECL_PROPEXITPRE(propExitpreGenvbounds) Definition: prop_genvbounds.c:2211 static SCIP_RETCODE addEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, int startindex, int startcomponent, SCIP_BOUNDTYPE boundtype) Definition: prop_genvbounds.c:1267 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:3547 SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2159 SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success) Definition: scip.c:24689 SCIP_RETCODE SCIPdigraphCreate(SCIP_DIGRAPH **digraph, int nnodes) Definition: misc.c:5596 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:36622 Definition: struct_misc.h:101 static SCIP_RETCODE addNewGenVBound(SCIP *scip, SCIP_PROPDATA *propdata, GENVBOUND *genvbound) Definition: prop_genvbounds.c:1703 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:15859 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:2519 #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:2602 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:7073 Definition: type_result.h:42 SCIP_RETCODE SCIPsetPropInitpre(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINITPRE((*propinitpre))) Definition: scip.c:7041 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:20944 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41946 SCIP_RETCODE SCIPdigraphAddArc(SCIP_DIGRAPH *digraph, int startnode, int endnode, void *data) Definition: misc.c:5814 Definition: struct_prop.h:36 static SCIP_RETCODE createConstraints(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1821 SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:21150 SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var) Definition: scip.c:23119 SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop))) Definition: scip.c:7106 static SCIP_RETCODE setUpEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1310 SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree))) Definition: scip.c:6961 #define SCIPduplicateMemoryArray(scip, ptr, source, num) Definition: scip.h:20540 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:6908 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:6398 SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb) Definition: scip.c:24403 static SCIP_DECL_PROPINITPRE(propInitpreGenvbounds) Definition: prop_genvbounds.c:2183 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:36668 SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2177 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:16099 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:21260 SCIP_Real SCIPgetConflictVarLb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24635 static SCIP_RETCODE getEventData(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_EVENTDATA **eventdata) Definition: prop_genvbounds.c:1216 static SCIP_RETCODE sortGenVBounds(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_genvbounds.c:1434 SCIP_RETCODE SCIPaddConflictRelaxedUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedub) Definition: scip.c:24471 SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup) Definition: scip.c:19399 static SCIP_DECL_PROPRESPROP(propRespropGenvbounds) Definition: prop_genvbounds.c:2370 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2094 Definition: type_retcode.h:43 SCIP_Real SCIPgetConflictVarUb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24659 Definition: objbranchrule.h:33 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:2148 Definition: type_result.h:39 Definition: struct_event.h:185 generalized variable bounds propagator Definition: type_var.h:56 |