Detailed Descriptionvariable upper and lower bound propagator This propagator uses global bound information provided by SCIP to deduce global and local bound changes. It can take into account
The propagator does not look at a variable in whole, but at one point in time only handles one specific bound (lower or upper) of a variable and deduces changes for lower or upper bounds of other variables. The concept is as follows: 1) Extract variable bound data Implications and cliques are stored in a way such that given a variable and its new value, we can access all bound changes that can be deduced from setting the variable to that value. However, for variable bounds, this currently does not hold, they are only stored in the other direction, i.e. for a bound of a given variable, we have a list of all other bounds of variables that directly influence the bound of the given variable and a linear function describing how they do this. For the propagation, we need the other direction, thus we store it in the propagator data when the branch-and-bound solving process is about to begin. 2) Topological sorting of bounds of variable We compute a topological order of the bounds of variables. This is needed to define an order in which we will regard bounds of variables in the propagation process in order to avoid unneccessarily regarding the same variable bound multiple times because it was changed in the meantime when propagating another bound of a variable. Therefore, we implictly regard a directed graph, in which each node corresponds to a bound of a variable and there exists a directed edge from one node to another, if the bound corresponding to the former node influences the bound corresponding to the latter node. This is done by iteratively running a DFS until all nodes were visited. Note that there might be cycles in the graph, which are randomly broken, so the order is only almost topological. 3) Collecting bound changes For each bound of a variable, which can trigger bound changes of other variables, the propagator catches all events informing about a global change of the bound or a local toghtening of the bound. The event handler then adds the bound of the variable to a priority queue, with the key in the priority queue corresponding to the position of the bound in the topological sort. 4) Propagating Bounds As long as there are bounds contained in the priority queue, the propagator pops one bound from the queue, which is the one most at the beginning of the topological sort, so it should not be influenced by propagating other bounds currently contained in the queue. Starting at this bound, all implication, clique, and variable bound information is used to deduce tigther bounds for other variables and change the bounds, if a tighter one is found. These bound changes trigger an event that will lead to adding the corresponding bound to the priority queue, if it is not contained, yet. The process is iterated until the priority queue contains no more bounds. Definition in file prop_vbounds.c. Go to the source code of this file.
Macro Definition Documentation
Definition at line 80 of file prop_vbounds.c. Referenced by SCIP_DECL_PROPCOPY(), SCIPexecPropVbounds(), SCIPincludePropVbounds(), and SCIPisPropagatedVbounds().
Definition at line 81 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
Definition at line 82 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
propagator priority Definition at line 83 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
propagator frequency Definition at line 84 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should propagation method be delayed, if other propagators found reductions? Definition at line 85 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
Definition at line 94 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
Definition at line 95 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should bound widening be used to initialize conflict analysis? Definition at line 104 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should implications be propagated? Definition at line 105 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should cliques be propagated? Definition at line 106 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should variable bounds be propagated? Definition at line 107 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should the bounds be topologically sorted in advance? Definition at line 108 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
should cliques be regarded for the topological sort? Definition at line 109 of file prop_vbounds.c. Referenced by SCIPincludePropVbounds().
Definition at line 124 of file prop_vbounds.c. Referenced by varGetLbIndex().
Definition at line 125 of file prop_vbounds.c. Referenced by varGetUbIndex().
Definition at line 126 of file prop_vbounds.c. Referenced by catchEvents(), dfs(), dropEvents(), initData(), propagateVbounds(), SCIP_DECL_EVENTEXEC(), and SCIP_DECL_PROPRESPROP().
Definition at line 127 of file prop_vbounds.c. Referenced by initData(), and propagateVbounds().
Definition at line 128 of file prop_vbounds.c. Referenced by catchEvents(), dfs(), dropEvents(), initData(), propagateVbounds(), and SCIP_DECL_EVENTEXEC().
Definition at line 129 of file prop_vbounds.c. Referenced by dfs().
Definition at line 130 of file prop_vbounds.c. Referenced by propagateVbounds(), resolvePropagation(), SCIP_DECL_PROPRESPROP(), tightenVarLb(), and tightenVarUb().
Definition at line 131 of file prop_vbounds.c. Referenced by dfs(), and SCIP_DECL_EVENTEXEC().
Definition at line 404 of file prop_vbounds.c. Referenced by addVbound(). Typedef Documentation
Definition at line 187 of file prop_vbounds.c. Function Documentation
converts an integer into an inference information
Definition at line 191 of file prop_vbounds.c. Referenced by SCIP_DECL_PROPRESPROP().
converts an inference information into an int
Definition at line 204 of file prop_vbounds.c. Referenced by tightenVarLb(), and tightenVarUb().
returns the propagation rule stored in the inference information
Definition at line 213 of file prop_vbounds.c. References SCIP_BOUNDTYPE_LOWER, and SCIP_BOUNDTYPE_UPPER. Referenced by SCIP_DECL_PROPRESPROP().
returns the position stored in the inference information
Definition at line 224 of file prop_vbounds.c. Referenced by SCIP_DECL_PROPRESPROP().
constructs an inference information out of a position of a variable and a boundtype
Definition at line 233 of file prop_vbounds.c. References SCIP_BOUNDTYPE_LOWER, and SCIP_BOUNDTYPE_UPPER. Referenced by tightenVarLb(), and tightenVarUb().
Definition at line 256 of file prop_vbounds.c. References getLbIndex, SCIPhashmapExists(), and SCIPhashmapGetImage(). Referenced by dfs(), initData(), SCIP_DECL_PROPRESPROP(), tightenVarLb(), and tightenVarUb().
Definition at line 268 of file prop_vbounds.c. References getUbIndex, SCIPhashmapExists(), and SCIPhashmapGetImage(). Referenced by dfs(), initData(), SCIP_DECL_PROPRESPROP(), tightenVarLb(), and tightenVarUb().
reset propagation data
Definition at line 280 of file prop_vbounds.c. Referenced by SCIP_DECL_PROPEXITSOL(), and SCIPincludePropVbounds().
catches events for variables
Definition at line 298 of file prop_vbounds.c. References getVarIndex, isIndexLowerbound, NULL, SCIP_Bool, SCIP_CALL, SCIP_EVENTTYPE_GLBCHANGED, SCIP_EVENTTYPE_GUBCHANGED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, SCIPcatchVarEvent(), SCIPvarGetNCliques(), and SCIPvarGetNImpls(). Referenced by initData().
drops events for variables
Definition at line 358 of file prop_vbounds.c. References getVarIndex, isIndexLowerbound, NULL, SCIP_Bool, SCIP_CALL, SCIP_EVENTTYPE_GLBCHANGED, SCIP_EVENTTYPE_GUBCHANGED, SCIP_EVENTTYPE_LBTIGHTENED, SCIP_EVENTTYPE_UBTIGHTENED, SCIP_OKAY, and SCIPdropVarEvent(). Referenced by SCIP_DECL_PROPEXITSOL().
Definition at line 408 of file prop_vbounds.c. References INITMEMSIZE, NULL, SCIP_CALL, SCIP_OKAY, SCIPcalcMemGrowSize(), and SCIPreallocMemoryArray. Referenced by initData().
comparison method for two indices in the topoorder array, preferring higher indices because the order is reverse topological Definition at line 456 of file prop_vbounds.c.
performs depth-first-search in the implicitly given directed graph from the given start index
Definition at line 466 of file prop_vbounds.c. References FALSE, getBoundString, getVarIndex, indexGetBoundString, isIndexLowerbound, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_OKAY, SCIPcliqueGetNVars(), SCIPcliqueGetValues(), SCIPcliqueGetVars(), SCIPdebugMessage, SCIPvarGetCliques(), SCIPvarGetImplIds(), SCIPvarGetImplTypes(), SCIPvarGetImplVars(), SCIPvarGetName(), SCIPvarGetNCliques(), SCIPvarGetNImpls(), SCIPvarIsActive(), TRUE, varGetLbIndex(), and varGetUbIndex(). Referenced by topologicalSort().
sort the bounds of variables topologically
Definition at line 723 of file prop_vbounds.c. References BMSclearMemoryArray, dfs(), NULL, SCIP_CALL, SCIP_OKAY, SCIPallocBufferArray, and SCIPfreeBufferArray. Referenced by initData().
initializes the internal data for the variable bounds propagator
Definition at line 772 of file prop_vbounds.c. References addVbound(), BMSclearMemoryArray, catchEvents(), getBoundtype, getVarIndex, isIndexLowerbound, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_BINARY, SCIPallocBlockMemoryArray, SCIPblkmem(), SCIPcalcHashtableSize(), SCIPdebugMessage, SCIPduplicateBlockMemoryArray, SCIPgetNVars(), SCIPgetProbName(), SCIPgetProbvarSum(), SCIPgetVars(), SCIPhashmapCreate(), SCIPhashmapInsert(), SCIPisPositive(), SCIPpqueueCreate(), SCIPpropGetData(), SCIPvarGetName(), SCIPvarGetNVlbs(), SCIPvarGetNVubs(), SCIPvarGetType(), SCIPvarGetVlbCoefs(), SCIPvarGetVlbConstants(), SCIPvarGetVlbVars(), SCIPvarGetVubCoefs(), SCIPvarGetVubConstants(), SCIPvarGetVubVars(), SCIPvarHasImplic(), SCIPvarIsActive(), topologicalSort(), TRUE, varGetLbIndex(), and varGetUbIndex(). Referenced by propagateVbounds().
resolves a propagation by adding the variable which implied that bound change
Definition at line 941 of file prop_vbounds.c. References getBoundtypeString, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIPABORT, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPdebugMessage, SCIPerrorMessage, and SCIPvarGetName(). Referenced by analyzeConflictLowerbound(), analyzeConflictUpperbound(), and SCIP_DECL_PROPRESPROP().
relaxes bound of give variable as long as the given inference bound still leads to a cutoff and add that bound change to the conflict set
Definition at line 976 of file prop_vbounds.c. References SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIPaddConflictRelaxedLb(), and SCIPaddConflictRelaxedUb(). Referenced by analyzeConflictLowerbound(), analyzeConflictUpperbound(), and SCIP_DECL_PROPRESPROP().
compute the relaxed bound which is sufficient to propagate the inference lower bound of given variable
Definition at line 999 of file prop_vbounds.c. References SCIP_Real, SCIPadjustedVarLb(), SCIPfeastol(), SCIPisEQ(), and SCIPvarIsIntegral(). Referenced by analyzeConflictLowerbound(), and SCIP_DECL_PROPRESPROP().
analyzes an infeasibility which was reached by updating the lower bound of the inference variable above its upper bound
Definition at line 1025 of file prop_vbounds.c. References computeRelaxedLowerbound(), FALSE, NULL, relaxVbdvar(), resolvePropagation(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_STAGE_SOLVING, SCIPaddConflictRelaxedUb(), SCIPaddConflictUb(), SCIPadjustedVarLb(), SCIPanalyzeConflict(), SCIPdebugMessage, SCIPfeastol(), SCIPgetConflictVarUb(), SCIPgetStage(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPisEQ(), SCIPisGT(), SCIPvarGetUbAtIndex(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), and TRUE. Referenced by tightenVarLb().
compute the relaxed bound which is sufficient to propagate the inference upper bound of given variable
Definition at line 1109 of file prop_vbounds.c. References SCIP_Real, SCIPadjustedVarUb(), SCIPfeastol(), SCIPisEQ(), and SCIPvarIsIntegral(). Referenced by analyzeConflictUpperbound(), and SCIP_DECL_PROPRESPROP().
analyzes an infeasibility which was reached by updating the upper bound of the inference variable below its lower bound
Definition at line 1134 of file prop_vbounds.c. References computeRelaxedUpperbound(), FALSE, NULL, relaxVbdvar(), resolvePropagation(), SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_STAGE_SOLVING, SCIPaddConflictLb(), SCIPaddConflictRelaxedLb(), SCIPadjustedVarUb(), SCIPanalyzeConflict(), SCIPdebugMessage, SCIPfeastol(), SCIPgetConflictVarLb(), SCIPgetStage(), SCIPinitConflictAnalysis(), SCIPisConflictAnalysisApplicable(), SCIPisEQ(), SCIPisLT(), SCIPvarGetLbAtIndex(), SCIPvarGetLbLocal(), SCIPvarIsIntegral(), and TRUE. Referenced by tightenVarUb().
Definition at line 1219 of file prop_vbounds.c. References analyzeConflictLowerbound(), FALSE, getBoundtypeString, getInferInfo(), inferInfoToInt(), NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CUTOFF, SCIP_OKAY, SCIP_Real, SCIPcutoffNode(), SCIPdebugMessage, SCIPgetRootNode(), SCIPinferVarLbProp(), SCIPisGT(), SCIPtightenVarLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), TRUE, varGetLbIndex(), and varGetUbIndex(). Referenced by propagateVbounds().
Definition at line 1303 of file prop_vbounds.c. References analyzeConflictUpperbound(), FALSE, getBoundtypeString, getInferInfo(), inferInfoToInt(), NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CUTOFF, SCIP_OKAY, SCIP_Real, SCIPcutoffNode(), SCIPdebugMessage, SCIPgetRootNode(), SCIPinferVarUbProp(), SCIPisLT(), SCIPtightenVarUbGlobal(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), TRUE, varGetLbIndex(), and varGetUbIndex(). Referenced by propagateVbounds().
performs propagation of variables lower and upper bounds, implications, and cliques
Definition at line 1387 of file prop_vbounds.c. References FALSE, getBoundtype, getBoundtypeString, getVarIndex, initData(), isIndexLowerbound, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_STAGE_PRESOLVING, SCIPcliqueGetNVars(), SCIPcliqueGetValues(), SCIPcliqueGetVars(), SCIPdebugMessage, SCIPgetStage(), SCIPinRepropagation(), SCIPisEQ(), SCIPpqueueInsert(), SCIPpqueueNElems(), SCIPpqueueRemove(), SCIPpropGetData(), SCIPvarGetCliques(), SCIPvarGetImplBounds(), SCIPvarGetImplIds(), SCIPvarGetImplTypes(), SCIPvarGetImplVars(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetNCliques(), SCIPvarGetNImpls(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsActive(), SCIPvarIsBinary(), tightenVarLb(), tightenVarUb(), and TRUE. Referenced by SCIP_DECL_PROPEXEC(), and SCIPexecPropVbounds().
copy method for propagator plugins (called when SCIP copies plugins) Definition at line 1663 of file prop_vbounds.c. References NULL, PROP_NAME, SCIP_CALL, SCIP_OKAY, SCIPincludePropVbounds(), and SCIPpropGetName().
destructor of propagator to free user data (called when SCIP is exiting) Definition at line 1677 of file prop_vbounds.c. References NULL, SCIP_OKAY, SCIPfreeMemory, SCIPpropGetData(), and SCIPpropSetData().
solving process deinitialization method of propagator (called before branch and bound process data is freed) Definition at line 1692 of file prop_vbounds.c. References dropEvents(), NULL, resetPropdata(), SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemoryArray, SCIPfreeMemoryArray, SCIPhashmapFree(), SCIPpqueueFree(), and SCIPpropGetData().
execution method of propagator Definition at line 1743 of file prop_vbounds.c. References FALSE, propagateVbounds(), SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, and SCIP_REDUCEDDOM.
propagation conflict resolving method of propagator Definition at line 1760 of file prop_vbounds.c. References computeRelaxedLowerbound(), computeRelaxedUpperbound(), getBoundtypeString, getVarIndex, inferInfoGetBoundtype(), inferInfoGetPos(), intToInferInfo(), NULL, relaxVbdvar(), resolvePropagation(), SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_SUCCESS, SCIPdebugMessage, SCIPisZero(), SCIPpropGetData(), SCIPvarGetName(), SCIPvarIsBinary(), varGetLbIndex(), and varGetUbIndex().
execution method of bound change event handler Definition at line 1839 of file prop_vbounds.c. References getVarIndex, indexGetBoundString, isIndexLowerbound, NULL, SCIP_CALL, SCIP_EVENTTYPE_GLBCHANGED, SCIP_EVENTTYPE_GUBCHANGED, SCIP_OKAY, SCIP_VARTYPE_BINARY, SCIPdebugMessage, SCIPeventGetNewbound(), SCIPeventGetType(), SCIPeventGetVar(), SCIPeventhdlrGetData(), SCIPgetNVars(), SCIPpqueueInsert(), SCIPpqueueNElems(), SCIPvarGetName(), SCIPvarGetType(), SCIPvarIsBinary(), and TRUE.
creates the vbounds propagator and includes it in SCIP
Definition at line 1887 of file prop_vbounds.c. References DEFAULT_DOTOPOSORT, DEFAULT_SORTCLIQUES, DEFAULT_USEBDWIDENING, DEFAULT_USECLIQUES, DEFAULT_USEIMPLICS, DEFAULT_USEVBOUNDS, EVENTHDLR_DESC, EVENTHDLR_NAME, FALSE, NULL, PROP_DELAY, PROP_DESC, PROP_FREQ, PROP_NAME, PROP_PRIORITY, PROP_TIMING, resetPropdata(), SCIP_CALL, SCIP_OKAY, SCIPaddBoolParam(), SCIPallocMemory, SCIPincludeEventhdlrBasic(), SCIPincludePropBasic(), SCIPsetPropCopy(), SCIPsetPropExitsol(), SCIPsetPropFree(), and SCIPsetPropResprop(). Referenced by SCIP_DECL_PROPCOPY(), and SCIPincludeDefaultPlugins(). returns TRUE if the propagator has the status that all variable lower and upper bounds are propgated
Definition at line 1938 of file prop_vbounds.c. References NULL, PROP_NAME, SCIPfindProp(), SCIPpqueueNElems(), and SCIPpropGetData().
performs propagation of variables lower and upper bounds
Definition at line 1955 of file prop_vbounds.c. References NULL, PROP_NAME, propagateVbounds(), SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_OKAY, SCIP_REDUCEDDOM, and SCIPfindProp(). |