prop_vbounds.c
Go to the documentation of this file.
22 * This propagator uses global bound information provided by SCIP to deduce global and local bound changes. 25 * - cliques (set of binary variables, each with a corresponding value, of which at most one variable can get the value) 26 * - variable lower/upper bounds (bounds of arbitrary variables that depend linearly on the value of another variable) 28 * The propagator does not look at a variable in whole, but at one point in time only handles one specific bound (lower 29 * or upper) of a variable and deduces changes for lower or upper bounds of other variables. The concept is as follows: 33 * Implications and cliques are stored in a way such that given a variable and its new value, we can access all bound 34 * changes that can be deduced from setting the variable to that value. However, for variable bounds, this currently 35 * does not hold, they are only stored in the other direction, i.e. for a bound of a given variable, we have a list 36 * of all other bounds of variables that directly influence the bound of the given variable and a linear function 38 * For the propagation, we need the other direction, thus we store it in the propagator data when the branch-and-bound 43 * We compute a topological order of the bounds of variables. This is needed to define an order in which we will 44 * regard bounds of variables in the propagation process in order to avoid unneccessarily regarding the same variable 45 * bound multiple times because it was changed in the meantime when propagating another bound of a variable. 46 * Therefore, we implictly regard a directed graph, in which each node corresponds to a bound of a variable and there 47 * exists a directed edge from one node to another, if the bound corresponding to the former node influences the 48 * bound corresponding to the latter node. This is done by iteratively running a DFS until all nodes were visited. 49 * Note that there might be cycles in the graph, which are randomly broken, so the order is only almost topological. 53 * For each bound of a variable, which can trigger bound changes of other variables, the propagator catches all 54 * events informing about a global change of the bound or a local toghtening of the bound. The event handler 55 * then adds the bound of the variable to a priority queue, with the key in the priority queue corresponding 60 * As long as there are bounds contained in the priority queue, the propagator pops one bound from the queue, which 61 * is the one most at the beginning of the topological sort, so it should not be influenced by propagating other 62 * bounds currently contained in the queue. Starting at this bound, all implication, clique, and variable bound 63 * information is used to deduce tigther bounds for other variables and change the bounds, if a tighter one is found. 64 * These bound changes trigger an event that will lead to adding the corresponding bound to the priority queue, 65 * if it is not contained, yet. The process is iterated until the priority queue contains no more bounds. 68 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 85 #define PROP_DELAY FALSE /**< should propagation method be delayed, if other propagators found reductions? */ 104 #define DEFAULT_USEBDWIDENING TRUE /**< should bound widening be used to initialize conflict analysis? */ 117 * The propagator works on indices representing a bound of a variable. This index will be called bound index in the 118 * following. For a given active variable with problem index i (note that active variables have problem indices 119 * between 0 and nactivevariable - 1), the bound index of its lower bound is 2*i, the bound index of its upper 120 * bound is 2*i + 1. The other way around, a given bound index i corresponds to the variable with problem index 122 * The following macros can be used to convert bound index into variable problem index and boundtype and vice versa. 143 SCIP_VAR** vars; /**< array containing all variable which are considered within the propagator */ 154 SCIP_Real** vboundcoefs; /**< array storing for each bound index the coefficients in the variable 157 SCIP_Real** vboundconstants; /**< array storing for each bound index the constants in the variable 162 int nbounds; /**< number of bounds of variables regarded (two times number of active variables) */ 163 SCIP_PQUEUE* propqueue; /**< priority queue to handle the bounds of variables that were changed and have to be propagated */ 164 SCIP_Bool* inqueue; /**< boolean array to store whether a bound of a variable is already contained in propqueue */ 261 assert(SCIPhashmapExists(propdata->varhashmap, var) == ((size_t)SCIPhashmapGetImage(propdata->varhashmap, var) > 0)); 273 assert(SCIPhashmapExists(propdata->varhashmap, var) == ((size_t)SCIPhashmapGetImage(propdata->varhashmap, var) > 0)); 337 if( propdata->nvbounds[idx] == 0 && SCIPvarGetNImpls(var, lower) == 0 && SCIPvarGetNCliques(var, lower) == 0 ) 349 SCIP_CALL( SCIPcatchVarEvent(scip, var, eventtype, eventhdlr, (SCIP_EVENTDATA*) (size_t) v, NULL) ); /*lint !e571*/ 398 SCIP_CALL( SCIPdropVarEvent(scip, var, eventtype, eventhdlr, (SCIP_EVENTDATA*) (size_t) v, -1) ); /*lint !e571*/ 427 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundboundedidx[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 428 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundcoefs[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 429 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundconstants[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 437 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundboundedidx[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 438 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundcoefs[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 439 SCIP_CALL( SCIPreallocMemoryArray(scip, &propdata->vboundconstants[startidx], propdata->vboundsize[startidx]) ); /*lint !e866*/ 452 /** comparison method for two indices in the topoorder array, preferring higher indices because the order is reverse 464 /** performs depth-first-search in the implicitly given directed graph from the given start index */ 506 /* we run until no more bounds indices are on the stack, i.e. all changed bounds were propagated */ 524 /* stacknextedge is negative, if the last visited edge from the current node belongs to a clique; 573 /* we stopped because we found an unhandled node and not because we reached the end of the list */ 619 /* it might happen that implications point to inactive variables (normally, those are removed when a 620 * variable becomes inactive, but in some cases, it cannot be done), we have to ignore these variables 625 /* implication is just a shortcut, so we dont regard it now, because will later go the long way, anyway; 631 idx = (impltypes[i] == SCIP_BOUNDTYPE_LOWER ? varGetLbIndex(propdata, implvars[i]) : varGetUbIndex(propdata, implvars[i])); 638 /* we stopped because we found an unhandled node and not because we reached the end of the list */ 686 /* we stopped because we found an unhandled node and not because we reached the end of the list */ 710 SCIPdebugMessage("topoorder[%d] = %s(%s)\n", *ndfsnodes, getBoundString(lower), SCIPvarGetName(startvar)); 749 /* while there are unvisited nodes, run dfs starting from one of these nodes; the dfs orders are stored in the 750 * topoorder array, later dfs calls are just appended after the stacks of previous dfs calls, which gives us a 757 SCIP_CALL( dfs(scip, propdata, i, propdata->inqueue, dfsstack, stacknextedge, propdata->topoorder, &nsortednodes) ); 812 /* we need to copy the variable since this array is the basis of the propagator and the corresponding variable array 816 SCIP_CALL( SCIPhashmapCreate(&propdata->varhashmap, SCIPblkmem(scip), SCIPcalcHashtableSize(5 * nvars)) ); 820 SCIP_CALL( SCIPhashmapInsert(propdata->varhashmap, propdata->vars[v], (void*)(size_t)(v + 1)) ); 895 /* if the coefficient is positive, the type of bound is the same for the bounded and the bounding variable */ 903 * However, it might happen that vbvar was integer when the variable bound was added, but was converted 904 * to a binary variable later during presolving when its upper bound was changed to 1. In this case, 910 SCIPdebugMessage("varbound <%s> %s %g * <%s> + %g not added to propagator data due to reverse implication\n", 946 SCIP_BDCHGIDX* bdchgidx /**< the index of the bound change, representing the point of time where the change took place, or NULL for the current local bounds */ 972 /** relaxes bound of give variable as long as the given inference bound still leads to a cutoff and add that bound 980 SCIP_BDCHGIDX* bdchgidx, /**< the index of the bound change, representing the point of time where the change took place, or NULL for the current local bounds */ 997 /** compute the relaxed bound which is sufficient to propagate the inference lower bound of given variable */ 1014 /* check the computed relaxed lower/upper bound is a proper reason for the inference bound which has to be explained */ 1021 /** analyzes an infeasibility which was reached by updating the lower bound of the inference variable above its upper 1034 SCIP_Bool canwide /**< can bound widening be used (for vbounds) or not (for inplications or cliques) */ 1040 assert(SCIPisEQ(scip, SCIPvarGetUbLocal(infervar), SCIPvarGetUbAtIndex(infervar, NULL, FALSE))); 1041 assert(SCIPisEQ(scip, SCIPvarGetUbAtIndex(infervar, NULL, TRUE), SCIPvarGetUbAtIndex(infervar, NULL, FALSE))); 1054 SCIPdebugMessage("try to create conflict using bound widening order: inference variable, variable bound variable\n"); 1056 /* initialize conflict analysis, and add all variables of infeasible constraint to conflict candidate queue */ 1080 /* compute the relaxed bound which is sufficient to propagate the inference lower bound of given variable */ 1091 /* initialize conflict analysis, and add all variables of infeasible constraint to conflict candidate queue */ 1107 /** compute the relaxed bound which is sufficient to propagate the inference upper bound of given variable */ 1124 /* check the computed relaxed lower/upper bound is a proper reason for the inference bound which has to be explained */ 1130 /** analyzes an infeasibility which was reached by updating the upper bound of the inference variable below its lower 1143 SCIP_Bool canwide /**< can bound widening be used (for vbounds) or not (for inplications or cliques) */ 1149 assert(SCIPisEQ(scip, SCIPvarGetLbLocal(infervar), SCIPvarGetLbAtIndex(infervar, NULL, FALSE))); 1150 assert(SCIPisEQ(scip, SCIPvarGetLbAtIndex(infervar, NULL, TRUE), SCIPvarGetLbAtIndex(infervar, NULL, FALSE))); 1163 SCIPdebugMessage("try to create conflict using bound widening order: inference variable, variable bound variable\n"); 1165 /* initialize conflict analysis, and add all variables of infeasible constraint to conflict candidate queue */ 1189 /* compute the relaxed bound which is sufficient to propagate the inference upper bound of given variable */ 1200 /* initialize conflict analysis, and add all variables of infeasible constraint to conflict candidate queue */ 1233 SCIP_Bool canwide, /**< can bound widening be used (for vbounds) or not (for inplications or cliques) */ 1265 inferinfo = getInferInfo(boundtype == SCIP_BOUNDTYPE_LOWER ? varGetLbIndex(propdata, vbdvar) : varGetUbIndex(propdata, vbdvar), boundtype); 1267 SCIP_CALL( SCIPinferVarLbProp(scip, var, newlb, prop, inferInfoToInt(inferinfo), force, &infeasible, &tightened) ); 1272 /* the infeasible results comes from the fact that the new lower bound lies above the current upper bound */ 1276 SCIPdebugMessage("tightening%s lower bound of variable <%s> to %g due the %s bound of variable <%s> led to infeasibility\n", 1277 (global ? " global" : ""), SCIPvarGetName(var), newlb, getBoundtypeString(boundtype), SCIPvarGetName(vbdvar)); 1287 SCIP_CALL( analyzeConflictLowerbound(scip, propdata, var, newlb, vbdvar, boundtype, coef, constant, canwide) ); 1293 SCIPdebugMessage("tightened%s lower bound of variable <%s> to %g due the %s bound of variable <%s>\n", 1294 (global ? " global" : ""), SCIPvarGetName(var), newlb, getBoundtypeString(boundtype), SCIPvarGetName(vbdvar)); 1317 SCIP_Bool canwide, /**< can bound widening be used (for vbounds) or not (for inplications or cliques) */ 1349 inferinfo = getInferInfo(boundtype == SCIP_BOUNDTYPE_LOWER ? varGetLbIndex(propdata, vbdvar) : varGetUbIndex(propdata, vbdvar), boundtype); 1351 SCIP_CALL( SCIPinferVarUbProp(scip, var, newub, prop, inferInfoToInt(inferinfo), force, &infeasible, &tightened) ); 1356 /* the infeasible results comes from the fact that the new upper bound lies below the current lower bound */ 1360 SCIPdebugMessage("tightening%s upper bound of variable <%s> to %g due the %s bound of variable <%s> led to infeasibility\n", 1361 (global ? " global" : ""), SCIPvarGetName(var), newub, getBoundtypeString(boundtype), SCIPvarGetName(vbdvar)); 1371 SCIP_CALL( analyzeConflictUpperbound(scip, propdata, var, newub, vbdvar, boundtype, coef, constant, canwide) ); 1377 SCIPdebugMessage("tightened%s upper bound of variable <%s> to %g due the %s bound of variable <%s>\n", 1378 (global ? " global" : ""), SCIPvarGetName(var), newub, getBoundtypeString(boundtype), SCIPvarGetName(vbdvar)); 1415 /* we do not run the propagator in presolving, because we want to avoid doing the expensive creation of the graph twice */ 1451 SCIP_CALL( SCIPpqueueInsert(propdata->propqueue, (void*)(size_t)(v + 1)) ); /*lint !e571 !e776*/ 1458 /* return if no bound changes are in the priority queue (no changed bounds to handle since last propagation) */ 1467 SCIPdebugMessage("varbound propagator: %d elements in the propagation queue\n", SCIPpqueueNElems(propdata->propqueue)); 1469 /* get variable bound of highest priority from priority queue and try to deduce bound changes for other variables; 1496 /* we only propagate binary variables if the lower bound changed to 1.0 or the upper bound changed to 0.0 */ 1505 /* if the lower bound of the startvar was changed, it was fixed to 1.0, otherwise it was fixed to 0.0; 1531 /* it might happen that implications point to inactive variables (normally, those are removed when a 1532 * variable becomes inactive, but in some cases, it cannot be done), we have to ignore these variables 1559 /* if the lower bound of the startvar was changed, it was fixed to 1.0, otherwise it was fixed to 0.0; 1630 SCIP_CALL( tightenVarLb(scip, prop, propdata, boundedvar, newbound, global, startvar, starttype, force, 1635 SCIP_CALL( tightenVarUb(scip, prop, propdata, boundedvar, newbound, global, startvar, starttype, force, 1690 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */ 1797 inferidx = boundtype == SCIP_BOUNDTYPE_LOWER ? varGetLbIndex(propdata, infervar) : varGetUbIndex(propdata, infervar); 1811 /* compute the relaxed bound which is sufficient to propagate the inference bound of given variable */ 1852 SCIPdebugMessage("eventexec (type=%u): try to add sort index %d: %s(%s) to priority queue\n", SCIPeventGetType(event), 1856 if( SCIPeventGetType(event) == SCIP_EVENTTYPE_GUBCHANGED && SCIPvarIsBinary(SCIPeventGetVar(event)) 1860 if( SCIPeventGetType(event) == SCIP_EVENTTYPE_GLBCHANGED && SCIPvarIsBinary(SCIPeventGetVar(event)) 1865 assert(SCIPvarGetType(propdata->vars[getVarIndex(propdata->topoorder[idx])]) != SCIP_VARTYPE_BINARY 1871 SCIP_CALL( SCIPpqueueInsert(propdata->propqueue, (void*)(size_t)(idx + 1)) ); /*lint !e571 !e776*/ 1901 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, 1912 SCIP_CALL( SCIPincludeEventhdlrBasic(scip, &propdata->eventhdlr, EVENTHDLR_NAME, EVENTHDLR_DESC, 1916 "propagating/" PROP_NAME "/usebdwidening", "should bound widening be used to initialize conflict analysis?", 1928 "propagating/" PROP_NAME "/dotoposort", "should the bounds be topologically sorted in advance?", 1931 "propagating/" PROP_NAME "/sortcliques", "should cliques be regarded for the topological sort?", 1937 /** returns TRUE if the propagator has the status that all variable lower and upper bounds are propgated */
SCIP_VAR ** SCIPvarGetImplVars(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17352 SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol))) Definition: scip.c:7025 static SCIP_RETCODE addVbound(SCIP *scip, SCIP_PROPDATA *propdata, int startidx, int endidx, SCIP_Real coef, SCIP_Real constant) Definition: prop_vbounds.c:408 Definition: type_result.h:33 Definition: struct_var.h:97 static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx) Definition: prop_vbounds.c:941 static SCIP_Real computeRelaxedLowerbound(SCIP *scip, SCIP_VAR *var, SCIP_Real inferlb, SCIP_Real coef, SCIP_Real constant) Definition: prop_vbounds.c:999 Definition: struct_scip.h:53 static SCIP_RETCODE dropEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_vbounds.c:358 static SCIP_RETCODE analyzeConflictUpperbound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *infervar, SCIP_Real inferub, SCIP_VAR *vbdvar, SCIP_BOUNDTYPE boundtype, SCIP_Real coef, SCIP_Real constant, SCIP_Bool canwide) Definition: prop_vbounds.c:1134 SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17420 Definition: struct_misc.h:63 Definition: type_result.h:49 Definition: struct_var.h:196 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:24320 SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant) Definition: scip.c:17429 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 Definition: type_var.h:53 SCIP_RETCODE SCIPsetPropCopy(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPCOPY((*propcopy))) Definition: scip.c:6945 SCIP_Bool SCIPvarHasImplic(SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype) Definition: var.c:10413 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15737 static SCIP_BOUNDTYPE inferInfoGetBoundtype(INFERINFO inferinfo) Definition: prop_vbounds.c:213 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 static SCIP_RETCODE analyzeConflictLowerbound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *infervar, SCIP_Real inferlb, SCIP_VAR *vbdvar, SCIP_BOUNDTYPE boundtype, SCIP_Real coef, SCIP_Real constant, SCIP_Bool canwide) Definition: prop_vbounds.c:1025 void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2116 static SCIP_RETCODE dfs(SCIP *scip, SCIP_PROPDATA *propdata, int startnode, SCIP_Bool *visited, int *dfsstack, int *stacknextedge, int *dfsnodes, int *ndfsnodes) Definition: prop_vbounds.c:466 static SCIP_RETCODE tightenVarLb(SCIP *scip, SCIP_PROP *prop, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_Real newlb, SCIP_Bool global, SCIP_VAR *vbdvar, SCIP_BOUNDTYPE boundtype, SCIP_Bool force, SCIP_Real coef, SCIP_Real constant, SCIP_Bool canwide, int *nchgbds, SCIP_RESULT *result) Definition: prop_vbounds.c:1219 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 static SCIP_Real computeRelaxedUpperbound(SCIP *scip, SCIP_VAR *var, SCIP_Real inferub, SCIP_Real coef, SCIP_Real constant) Definition: prop_vbounds.c:1109 SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success) Definition: scip.c:24689 variable upper and lower bound propagator 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 SCIP_RETCODE SCIPincludePropVbounds(SCIP *scip) Definition: prop_vbounds.c:1887 Definition: type_result.h:35 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15859 Definition: type_lp.h:47 SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub) Definition: scip.c:19717 SCIP_BOUNDTYPE * SCIPvarGetImplTypes(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17367 static int varGetUbIndex(SCIP_PROPDATA *propdata, SCIP_VAR *var) Definition: prop_vbounds.c:268 Definition: type_retcode.h:33 SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:288 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:20944 static SCIP_DECL_PROPEXITSOL(propExitsolVbounds) Definition: prop_vbounds.c:1692 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:21150 SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop))) Definition: scip.c:7106 SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree))) Definition: scip.c:6961 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 SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx) Definition: scip.c:24369 Definition: type_set.h:38 SCIP_RETCODE SCIPaddConflictRelaxedLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedlb) Definition: scip.c:24403 SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:36668 static SCIP_RETCODE relaxVbdvar(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd) Definition: prop_vbounds.c:976 static int varGetLbIndex(SCIP_PROPDATA *propdata, SCIP_VAR *var) Definition: prop_vbounds.c:256 static SCIP_RETCODE topologicalSort(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_vbounds.c:723 static INFERINFO getInferInfo(int pos, SCIP_BOUNDTYPE boundtype) Definition: prop_vbounds.c:233 SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem) Definition: misc.c:991 static SCIP_RETCODE tightenVarUb(SCIP *scip, SCIP_PROP *prop, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_Real newub, SCIP_Bool global, SCIP_VAR *vbdvar, SCIP_BOUNDTYPE boundtype, SCIP_Bool force, SCIP_Real coef, SCIP_Real constant, SCIP_Bool canwide, int *nchgbds, SCIP_RESULT *result) Definition: prop_vbounds.c:1303 static SCIP_RETCODE catchEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_vbounds.c:298 SCIP_RETCODE SCIPpqueueCreate(SCIP_PQUEUE **pqueue, int initsize, SCIP_Real sizefac, SCIP_DECL_SORTPTRCOMP((*ptrcomp))) Definition: misc.c:945 Definition: type_lp.h:48 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 Definition: struct_implics.h:64 #define SCIPduplicateBlockMemoryArray(scip, ptr, source, num) Definition: scip.h:20568 SCIP_RETCODE SCIPexecPropVbounds(SCIP *scip, SCIP_Bool force, SCIP_RESULT *result) Definition: prop_vbounds.c:1955 SCIP_RETCODE SCIPaddConflictRelaxedUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedub) Definition: scip.c:24471 static SCIP_RETCODE propagateVbounds(SCIP *scip, SCIP_PROP *prop, SCIP_Bool force, SCIP_RESULT *result) Definition: prop_vbounds.c:1387 SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb) Definition: scip.c:19685 static SCIP_DECL_SORTPTRCOMP(compVarboundIndices) Definition: prop_vbounds.c:456 Definition: type_set.h:42 SCIP_Real * SCIPvarGetImplBounds(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17381 SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx) Definition: scip.c:24436 SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image) Definition: misc.c:2094 static SCIP_DECL_PROPRESPROP(propRespropVbounds) Definition: prop_vbounds.c:1760 Definition: type_retcode.h:43 SCIP_Real SCIPgetConflictVarUb(SCIP *scip, SCIP_VAR *var) Definition: scip.c:24659 Definition: objbranchrule.h:33 Definition: type_result.h:39 Definition: struct_event.h:185 |