All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
prop_obbt.c File Reference Detailed Descriptionoptimization-based bound tightening propagator Definition in file prop_obbt.c. #include <assert.h> #include <string.h> #include "scip/prop_obbt.h" #include "scip/prop_genvbounds.h" #include "scip/debug.h" Go to the source code of this file.
Macro Definition Documentation
Definition at line 44 of file prop_obbt.c. Referenced by SCIP_DECL_PROPEXEC(), SCIP_DECL_PROPEXITSOL(), SCIP_DECL_PROPFREE(), SCIP_DECL_PROPINITSOL(), and SCIPincludePropObbt().
Definition at line 45 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
Definition at line 46 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
propagator frequency Definition at line 48 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
should propagation method be delayed, if other propagators found reductions? Definition at line 49 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
should obbt try to provide genvbounds if possible? Definition at line 51 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
should coefficients in filtering be normalized w.r.t. the domains sizes? Definition at line 52 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
try to filter bounds in so-called filter rounds by solving auxiliary LPs? Definition at line 54 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
feasibility tolerance for reduced costs used in obbt; this value is used if SCIP's dual feastol is greater Definition at line 56 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
maximum condition limit used in LP solver (-1.0: no limit) Definition at line 58 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
minimal number of filtered bounds to apply another filter round Definition at line 59 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
multiple of root node LP iterations used as total LP iteration limit for obbt (<= 0: no limit ) Definition at line 61 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
maximal number of bounds evaluated without success per group (-1: no limit) Definition at line 63 of file prop_obbt.c. Referenced by SCIPincludePropObbt().
base that is used to calculate a bounds score value Definition at line 66 of file prop_obbt.c. Referenced by getScore().
Definition at line 67 of file prop_obbt.c. Referenced by SCIP_DECL_PROPINITSOL(). Typedef DocumentationDefinition at line 84 of file prop_obbt.c.
Definition at line 92 of file prop_obbt.c. Function Documentation
solves the LP and handles errors
Definition at line 125 of file prop_obbt.c. References FALSE, NULL, SCIP_LPSOLSTAT_ERROR, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_ITERLIMIT, SCIP_LPSOLSTAT_NOTSOLVED, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_LPSOLSTAT_OPTIMAL, SCIP_LPSOLSTAT_TIMELIMIT, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_OKAY, SCIPdebugMessage, SCIPgetLPSolstat(), SCIPsolveDiveLP(), SCIPwarningMessage(), and TRUE. Referenced by filterRound(), and findNewBounds().
adds the objective cutoff to the LP; must be in diving mode
Definition at line 196 of file prop_obbt.c. References FALSE, NULL, SCIP_CALL, SCIP_MAXSTRLEN, SCIP_OKAY, SCIPaddRowDive(), SCIPaddVarToRow(), SCIPcacheRowExtensions(), SCIPcreateEmptyRowUnspec(), SCIPdebugMessage, SCIPflushRowExtensions(), SCIPgetCutoffbound(), SCIPgetVarsData(), SCIPinDive(), SCIPinfinity(), SCIPisInfinity(), SCIProwIsInLP(), SCIPsnprintf(), and SCIPvarGetObj(). Referenced by applyObbt(). determines, whether a variable is already locally fixed
Definition at line 246 of file prop_obbt.c. References SCIPisFeasEQ(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal(). Referenced by applyObbt(), findNewBounds(), getFilterCoef(), and varIsInteresting().
returns number of LP iterations left (-1: no limit )
Definition at line 256 of file prop_obbt.c. References MAX, MIN, NULL, SCIP_Longint, SCIPdebugMessage, and SCIPgetNLPIterations(). Referenced by filterBounds(), and findNewBounds().
returns the objective coefficient for a variable's bound that will be chosen during filtering
Definition at line 286 of file prop_obbt.c. References NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_Real, SCIPisInfinity(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), and varIsFixedLocal(). Referenced by filterBounds().
trying to filter some bounds using the existing LP solution
Definition at line 331 of file prop_obbt.c. References Bound::boundtype, Bound::filtered, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPgetLPSolstat(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPvarGetLbLocal(), SCIPvarGetLPSol(), SCIPvarGetUbLocal(), TRUE, and Bound::var. Referenced by applyObbt(), and findNewBounds().
enforces one round of filtering
Definition at line 385 of file prop_obbt.c. References Bound::boundtype, Bound::filtered, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPchgVarObjDive(), SCIPdebugMessage, SCIPgetVarObjDive(), SCIPgetVarsData(), SCIPinDive(), SCIPisFeasGE(), SCIPisFeasLE(), SCIPisNegative(), SCIPisPositive(), SCIPvarGetLbLocal(), SCIPvarGetLPSol(), SCIPvarGetUbLocal(), solveLP(), TRUE, and Bound::var. Referenced by filterBounds().
filter some bounds that are not improvable by solving auxiliary LPs
Definition at line 468 of file prop_obbt.c. References filterRound(), getFilterCoef(), getIterationsLeft(), NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_Longint, SCIP_OKAY, SCIPchgVarObjDive(), SCIPdebugMessage, SCIPgetNLPIterations(), SCIPgetVarsData(), and SCIPinDive(). Referenced by applyObbt().
applies possible bound changes that were found
Definition at line 557 of file prop_obbt.c. References Bound::boundtype, FALSE, Bound::found, Bound::newval, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_OKAY, SCIP_REDUCEDDOM, SCIPdebug, SCIPdebugMessage, SCIPinDive(), SCIPtightenVarLb(), SCIPtightenVarUb(), and Bound::var. Referenced by applyObbt().
tries to tighten a bound in diving mode
Definition at line 620 of file prop_obbt.c. References Bound::boundtype, FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPceil(), SCIPchgVarLbDive(), SCIPchgVarUbDive(), SCIPfloor(), SCIPgetVarLbDive(), SCIPgetVarUbDive(), SCIPinDive(), SCIPisLbBetter(), SCIPisUbBetter(), SCIPvarIsIntegral(), TRUE, and Bound::var. Referenced by findNewBounds().
creates a genvbound if the dual LP solution provides such information Consider the problem min { +/- x_i : obj * x <= z, lb <= Ax <= ub, l <= x <= u }, where z is the current cutoff bound. Let (mu, nu, gamma, alpha, beta) >= 0 be the optimal solution of the dual of problem (P), where the variables correspond to the primal inequalities in the following way: Ax >= lb <-> mu -Ax >= -ub <-> nu -obj * x >= -z <-> gamma x >= l <-> alpha -x >= -u <-> beta Fixing these multipliers, by weak duality, we obtain the inequality +/- x_i >= lb*mu - ub*nu - z*gamma + l*alpha - u*beta that holds for all primal feasible points x with objective value at least z. Setting c = lb*mu - ub*nu, redcost_k = alpha_k - beta_k we obtain the inequality +/- x_i >= sum ( redcost_k * x_k ) + (-gamma) * cutoff_bound + c, that holds for all primal feasible points with objective value at least cutoff_bound. Therefore, the latter inequality can be added as a generalized variable bound.
Definition at line 710 of file prop_obbt.c. References Bound::boundtype, NULL, SCIP_CALL, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIP_Real, SCIPallocMemoryArray, SCIPdebugMessage, SCIPfreeMemoryArray, SCIPgenVBoundAdd(), SCIPgetCutoffbound(), SCIPgetDepth(), SCIPgetLPObjval(), SCIPgetLPSolstat(), SCIPgetVarLbDive(), SCIPgetVarRedcost(), SCIPgetVarsData(), SCIPgetVarUbDive(), SCIPinDive(), SCIPisInfinity(), SCIPisPositive(), SCIPisZero(), SCIProwGetDualsol(), SCIPvarGetName(), and Bound::var. Referenced by findNewBounds().
tries to find tighter values for bounds and stores them in the bound data structure
Definition at line 850 of file prop_obbt.c. References BMSclearMemoryArray, Bound::boundtype, createGenVBound(), FALSE, Bound::filtered, filterExistingLP(), BoundGroup::firstbdindex, Bound::found, getIterationsLeft(), BoundGroup::nbounds, Bound::newval, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_Longint, SCIP_OKAY, SCIPallocBufferArray, SCIPchgVarObjDive(), SCIPdebugCheckLbGlobal, SCIPdebugCheckUbGlobal, SCIPdebugMessage, SCIPfreeBufferArray, SCIPgetDepth(), SCIPgetNLPIterations(), SCIPgetVarsData(), SCIPinDive(), SCIPvarGetLbLocal(), SCIPvarGetLPSol(), SCIPvarGetName(), SCIPvarGetUbLocal(), solveLP(), tightenBoundDive(), TRUE, Bound::var, and varIsFixedLocal(). Referenced by applyObbt().
main function of obbt
Definition at line 1009 of file prop_obbt.c. References addObjCutoff(), applyBoundChgs(), FALSE, filterBounds(), filterExistingLP(), findNewBounds(), MAX, NULL, SCIP_Bool, SCIP_CALL, SCIP_DIDNOTFIND, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIPchgDualfeastol(), SCIPdebugMessage, SCIPdualfeastol(), SCIPendDive(), SCIPgetNLPIterations(), SCIPgetRealParam(), SCIPreleaseRow(), SCIProwIsInLP(), SCIPsetRealParam(), SCIPstartDive(), SCIPwarningMessage(), and varIsFixedLocal(). Referenced by SCIP_DECL_PROPEXEC(). computes the score of a bound
Definition at line 1108 of file prop_obbt.c. References Bound::boundtype, NULL, OBBT_SCOREBASE, SCIP_BOUNDTYPE_UPPER, SCIP_VARTYPE_BINARY, SCIP_VARTYPE_CONTINUOUS, SCIP_VARTYPE_IMPLINT, SCIP_VARTYPE_INTEGER, SCIPvarGetType(), and Bound::var. Referenced by initBounds().
comparison method for two bounds w.r.t. their scores Definition at line 1151 of file prop_obbt.c. References Bound::score.
creates groups for the bounds array
Definition at line 1198 of file prop_obbt.c. References BoundGroup::firstbdindex, BoundGroup::nbounds, NULL, SCIP_CALL, SCIP_OKAY, and SCIPallocMemoryArray. Referenced by initBounds(). determines whether a variable is interesting
Definition at line 1256 of file prop_obbt.c. References SCIPgetDepth(), SCIPvarIsBinary(), and varIsFixedLocal(). Referenced by initBounds().
initializes interesting bounds
Definition at line 1269 of file prop_obbt.c. References BMSclearMemoryArray, createGroups(), FALSE, getScore(), NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIPallocBufferArray, SCIPallocMemory, SCIPallocMemoryArray, SCIPdebug, SCIPdebugMessage, SCIPfreeBufferArray, SCIPfreeMemoryArray, SCIPgetNLPVarsNonlinearity(), SCIPgetNNLPVars(), SCIPgetVarsData(), SCIPisNLPConstructed(), SCIPreallocMemoryArray, SCIPsortDownPtr(), and varIsInteresting(). Referenced by SCIP_DECL_PROPEXEC().
solving process initialization method of propagator (called when branch and bound process is about to begin) Definition at line 1383 of file prop_obbt.c. References GENVBOUND_PROP_NAME, NULL, PROP_NAME, SCIP_OKAY, SCIPdebugMessage, SCIPfindProp(), SCIPpropGetData(), and SCIPpropGetName().
execution method of propagator Definition at line 1412 of file prop_obbt.c. References applyObbt(), initBounds(), NULL, PROP_NAME, SCIP_CALL, SCIP_DIDNOTRUN, SCIP_Longint, SCIP_LPSOLSTAT_OPTIMAL, SCIP_LPSOLSTAT_UNBOUNDEDRAY, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPallColsInLP(), SCIPdebugMessage, SCIPgetCurrentNode(), SCIPgetDepth(), SCIPgetLPSolstat(), SCIPgetNRootLPIterations(), SCIPgetProbName(), SCIPgetStage(), SCIPinProbing(), SCIPinRepropagation(), SCIPisNLPConstructed(), SCIPnodeGetNumber(), SCIPpropGetData(), and SCIPpropGetName().
propagation conflict resolving method of propagator Definition at line 1500 of file prop_obbt.c. References SCIP_DIDNOTFIND, and SCIP_OKAY.
solving process deinitialization method of propagator (called before branch and bound process data is freed) Definition at line 1509 of file prop_obbt.c. References NULL, PROP_NAME, SCIP_OKAY, SCIPfreeMemory, SCIPfreeMemoryArray, SCIPpropGetData(), and SCIPpropGetName().
destructor of propagator to free user data (called when SCIP is exiting) Definition at line 1547 of file prop_obbt.c. References NULL, PROP_NAME, SCIP_OKAY, SCIPfreeMemory, SCIPpropGetData(), SCIPpropGetName(), and SCIPpropSetData().
creates the obbt propagator and includes it in SCIP
Definition at line 1570 of file prop_obbt.c. References DEFAULT_APPLY_FILTERROUNDS, DEFAULT_CONDITIONLIMIT, DEFAULT_CREATE_GENVBOUNDS, DEFAULT_DUALFEASTOL, DEFAULT_FILTERING_MIN, DEFAULT_FILTERING_NORM, DEFAULT_ITLIMITFACTOR, DEFAULT_MAXLOOKAHEAD, FALSE, NULL, PROP_DELAY, PROP_DESC, PROP_FREQ, PROP_NAME, PROP_PRIORITY, PROP_TIMING, SCIP_CALL, SCIP_OKAY, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPaddBoolParam(), SCIPaddIntParam(), SCIPaddRealParam(), SCIPallocMemory, SCIPincludePropBasic(), SCIPsetPropExitsol(), SCIPsetPropFree(), SCIPsetPropInitsol(), SCIPsetPropResprop(), and TRUE. Referenced by SCIPincludeDefaultPlugins(). |