prop_pseudoobj.c
Go to the documentation of this file.
21 * This propagator propagates the objective function using the cutoff bound and the pseudo objective value. The pseudo 22 * objective value can be seen as minimum activity of the linear objective function. Using this, this propagator checks 23 * if variables with non-zero objective coefficients can exceed the cutoff bound. If this is the case the corresponding 29 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 39 #define PROP_TIMING SCIP_PROPTIMING_BEFORELP | SCIP_PROPTIMING_AFTERLPLOOP | SCIP_PROPTIMING_DURINGLPLOOP 42 #define PROP_DELAY FALSE /**< should propagation method be delayed, if other propagators found reductions? */ 43 #define PROP_PRESOL_PRIORITY +6000000 /**< priority of the presolving method (>= 0: before, < 0: after constraint handlers); combined with presolvers */ 44 #define PROP_PRESOL_MAXROUNDS -1 /**< maximal number of presolving rounds the presolver participates in (-1: no 46 #define PROP_PRESOLTIMING SCIP_PRESOLTIMING_FAST /* timing of the presolving method (fast, medium, or exhaustive) */ 51 #define DEFAULT_MINUSELESS 100 /**< minimal number of successive none binary variable propagator whithout a 53 #define DEFAULT_MAXVARSFRAC 0.1 /**< maximal fraction of none binary variables with non-zero objective 55 #define DEFAULT_PROPFULLINROOT TRUE /**< do we want to propagate all non-binary variables if we are propagating the root node? */ 57 #define DEFAULT_FORCE FALSE /**< should the propagator be forced even if active pricer are present? Note that 61 #define DEFAULT_MAXNEWVARS 1000 /**< number of variable added after the propagator is reinitialized? */ 62 #define DEFAULT_PROPUSEIMPLICS TRUE /**< use implications to strengthen the propagation of binary variable (increasing the objective change)? */ 63 #define DEFAULT_RESPROPUSEIMPLICS TRUE /**< use implications to strengthen the resolve propagation of binary variable (increasing the objective change)? */ 64 #define DEFAULT_MAXIMPLVARS 50000 /**< maximum number of binary variables the implications are used if turned on (-1: unlimited)? */ 76 SCIP_Real maxobjchg; /**< maximum objective contribution if variables x is fixed to zero or one */ 80 }; 81 typedef struct SCIP_ObjImplics SCIP_OBJIMPLICS; /**< implications in the form x == 0 or x == 1 ==> y == 0 or y == 1 for (x and y binary) */ 88 SCIP_VAR** minactvars; /**< binary variables with non-zero objective contribution w.r.t. minimum activity of the objective function */ 89 SCIP_OBJIMPLICS** minactimpls; /**< implication data structure for the binary variables w.r.t. minimum activity */ 90 SCIP_VAR** maxactvars; /**< binary variables with non-zero objective contribution w.r.t. maximum activity of the objective function */ 94 SCIP_HASHTABLE* addedvars; /**< hash table used during resolving of a bound change (conflict analysis) */ 101 int maxpseudoobjactinf; /**< number of coefficients contributing with infinite value to maxpseudoobjact */ 102 int nminactvars; /**< number of binary variables with non-zero objective contribution w.r.t. minimum activity of the objective function */ 103 int nmaxactvars; /**< number of binary variables with non-zero objective contribution w.r.t. maximum activity of the objective function */ 108 int glbfirstnonfixed; /**< index of first globally non-fixed binary variable in minactvars array */ 109 int maxactfirstnonfixed;/**< index of first globally non-fixed binary variable in maxctvars array */ 113 int maximplvars; /**< maximum number of binary variables the implications are used if turned on (-1: unlimited)? */ 115 SCIP_Bool propfullinroot; /**< do we want to propagate all non-binary variables if we are propagating the root node */ 119 SCIP_Bool propuseimplics; /**< use implications to strengthen the propagation of binary variable (increasing the objective change)? */ 120 SCIP_Bool respropuseimplics; /**< use implications to strengthen the resolve propagation of binary variable (increasing the objective change)? */ 229 * (ii) the locks which indicate most effect -- for the variables with a positive (negative) objective coefficient the 230 * down (up) lock is used since this lock indicates that tightened of the upper (lower) bound will triegger 319 /** creates an objective implication data structure, fixes (globally) variables which are implied by lower and upper 327 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays, or NULL */ 328 SCIP_Bool* collectedlbvars, /**< temporary buffer to mark collected variables for lower bound fixing, or NULL */ 329 SCIP_Bool* collectedubvars, /**< temporary buffer to mark collected variables for upper bound fixing, or NULL */ 491 assert(0 <= pos); 509 objimplics->objvars[objimplics->nlbimpls] = objimplics->objvars[objimplics->nlbimpls + objimplics->nubimpls]; 532 /** catch bound change events if the variable has a non-zero objective coefficient to check if the maximum activity of 542 { 554 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_GUBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) ); 558 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_GLBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) ); 573 { 586 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_GUBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) ); 590 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_GLBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) ); 620 /* drop bound relax event which is caught for all binary variables which are used for propagation the objective 623 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDRELAXED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) ); 636 /* drop events which are needed for evaluating the maximum activity of the objective function */ 649 /* drop events which are needed for evaluating the maximum activity of the objective function */ 741 /** returns the objective change provided by the implication variable by fixing it to the given bound 742 * w.r.t. minimum activity of the objective function; additionally it collects all contributors for that objective 749 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */ 797 /** returns the objective change provided by the implications of the given variable by fixing it to the given bound 798 * w.r.t. minimum activity of the objective function; additionally it collects all contributors for that objective 801 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to 802 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by the 807 * sum_{x\in I(1)} (1 - \mbox{bestbound}(x)) \cdot \mbox{objval}(x) - sum_{x\in I(1)} \mbox{bestbound}(x) \cdot \mbox{objval}(x) 809 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{bestbound}(x)) \cdot \mbox{objval}(x) 817 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */ 822 int* ncontributors, /**< pointer to store number of contributor to the objective contribution */ 869 /* check if the clique was previously detected to be useless with respect to minimum activity */ 906 (*objchg) += collectMinactImplicVar(scip, implvar, binobjvarmap, collectedvars, nbinobjvars, contributors, ncontributors); 921 /** returns the objective change provided by the implications of the given variable by fixing it to the given bound 924 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to 925 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by the 930 * sum_{x\in I(1)} (1 - \mbox{bestbound}(x)) \cdot \mbox{objval}(x) - sum_{x\in I(1)} \mbox{bestbound}(x) \cdot \mbox{objval}(x) 932 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{bestbound}(x)) \cdot \mbox{objval}(x) 935 * This can be done w.r.t. global variable bounds (local == FALSE), w.r.t. local variable bounds (local == TRUE && 943 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node, or NULL */ 998 /* check if variable is global fixed; if so remove it from the objective implication data structure and 1009 assert(SCIPvarGetObj(implvar) > 0.0 || SCIPvarsHaveCommonClique(var, (SCIP_Bool) bound, implvar, TRUE, TRUE)); 1010 assert(SCIPvarGetObj(implvar) < 0.0 || SCIPvarsHaveCommonClique(var, (SCIP_Bool) bound, implvar, FALSE, TRUE)); 1020 /** computes for the given binary variable the objective contribution by fixing it to given bound w.r.t. minimum 1021 * activity of the objective function; additionally it collects all contributors for that objective change; 1028 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */ 1033 int* ncontributors, /**< pointer to store number of contributor to the objective contribution */ 1047 SCIP_CALL( collectMinactImplicVars(scip, var, bound, binobjvarmap, collectedvars, nbinobjvars, contributors, uselesscliques, ncontributors, objchg) ); 1052 /** computes for the given binary variable the objective contribution by fixing it to given bound w.r.t. minimum 1053 * activity of the objective function; this can be done w.r.t. global variable bounds (local == FALSE), w.r.t. local 1054 * variable bounds (local == TRUE && bdchgidx == NULL), and w.r.t. given time stamp (local == TRUE && bdchgidx != NULL) 1061 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node, or NULL */ 1078 /** returns the global (that means w.r.t. global bounds of the variables) objective change provided by all cliques of 1079 * the given variable by fixing it to the given bound w.r.t. maximum activity of the objective function 1081 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to 1082 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by these 1087 * sum_{x\in I(1)} (1 - \mbox{worstbound}(x)) \cdot \mbox{objval}(x) - sum_{x\in I(1)} \mbox{worst}(x) \cdot \mbox{objval}(x) 1089 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{worstbound}(x)) \cdot \mbox{objval}(x) 1099 { 1143 /* @todo move this memory allocation to SCIP_SET and add a memory list there, to decrease the number of 1175 /* ignore binary variable which are either fixed and were the objective contribution will not be zero */ 1177 (SCIPvarGetLbGlobal(clqvar) < 0.5 && SCIPvarGetUbGlobal(clqvar) > 0.5) && !SCIPisZero(scip, SCIPvarGetObj(clqvar)) ) 1228 SCIPdebugMessage("objective contribution when variable <%s> fixed to %u using cliques is %g\n", SCIPvarGetName(var), 1264 if( boundtypes[v] == SCIP_BOUNDTYPE_LOWER && SCIPvarGetWorstBoundType(implvar) == SCIP_BOUNDTYPE_LOWER && SCIPisFeasGT(scip, bounds[v], lb) ) 1266 else if( boundtypes[v] == SCIP_BOUNDTYPE_UPPER && SCIPvarGetWorstBoundType(implvar) == SCIP_BOUNDTYPE_UPPER && SCIPisFeasLT(scip, bounds[v], ub) ) 1272 SCIPdebugMessage("objective contribution when variable <%s> fixed to %u using cliques and implications is %g\n", SCIPvarGetName(var), 1279 /** computes for the given binary variable the gloabl (that means w.r.t. global bounds of the variables) objective 1289 ) 1297 /* check if the implications should be used to increase the objective contribution for given variable */ 1313 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */ 1314 SCIP_Bool* collectedvars, /**< temporary buffer to mark collected variables which should be reset */ 1318 { 1340 SCIP_OBJIMPLICS** objimplics, /**< pointer to store the objective implication data structure w.r.t. minimum activity */ 1342 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */ 1343 SCIP_Bool* collectedlbvars, /**< temporary buffer to mark collected variables for lower bound fixing */ 1344 SCIP_Bool* collectedubvars, /**< temporary buffer to mark collected variables for upper bound fixing */ 1379 /* get contribution of variable by fixing it to its lower bound w.r.t. minimum activity of the objective function */ 1380 SCIP_CALL( collectMinactObjchg(scip, var, SCIP_BOUNDTYPE_LOWER, binobjvarmap, collectedlbvars, nbinobjvars, 1387 /* ignore implications if the variable has a zero objective coefficient and implications only one variable, since 1399 /* get contribution of variable by fixing it to its upper bound w.r.t. minimum activity of the objective function */ 1400 SCIP_CALL( collectMinactObjchg(scip, var, SCIP_BOUNDTYPE_UPPER, binobjvarmap, collectedubvars, nbinobjvars, 1407 /* ignore implications if the variable has a zero objective coefficient and implications only one variable, since 1413 resetContributors(binobjvarmap, collectedubvars, &contributors[nlbcontributors], nubcontributors); 1421 /* creates an objective implication data structure, fixes (globally) variables which are implied by lower and upper 1424 SCIP_CALL( objimplicsCreate(scip, objimplics, contributors, binobjvarmap, collectedlbvars, collectedubvars, lbobjchg, ubobjchg, nlbcontributors, nubcontributors) ); 1433 resetContributors(binobjvarmap, collectedubvars, &contributors[nlbcontributors], nubcontributors); 1445 SCIP_CALL( objimplicsCreate(scip, objimplics, NULL, NULL, NULL, NULL, lbobjchg, ubobjchg, 0, 0) ); 1458 SCIP_Bool* isnotzero /**< pointer to store if the objective change is unequal to zero or not */ 1459 ) 1469 /* get contribution of variable by fixing it to its lower bound w.r.t. maximum activity of the objective function */ 1473 /* get contribution of variable by fixing it to its upper bound w.r.t. maximum activity of the objective function */ 1521 SCIP_CALL( SCIPhashmapCreate(&binobjvarmap, SCIPblkmem(scip), SCIPcalcHashtableSize(SCIPgetNObjVars(scip) * 5)) ); 1523 /* count and collect variable problem indices of variables with non-zero objective coefficient */ 1589 SCIP_CALL( SCIPhashtableCreate(&uselesscliques, SCIPblkmem(scip), SCIPcalcHashtableSize(ncliques), 1603 /* collect the variables with non-zero objective contribution and catch global bound tighten events that decrease the 1619 /* check that the binary implications are applied for binary variables which are globally fixed */ 1626 SCIP_CALL( collectMinactVar(scip, var, &objimplics, useimplics, binobjvarmap, collectedlbvars, collectedubvars, 1640 /* catch bound relax event for the binary variable to handel the firstnonfixed index correctly */ 1641 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDRELAXED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) ); 1661 /* catch bound change events if the variable has a non-zero objective coefficient to check if the maximum 1684 /* catch bound change events if the variable has a non-zero objective coefficient to check if the maximum 1713 /* sort binary variables with respect to the absolute value of their maximal potential objective contribution for 1716 SCIPsortDownPtrPtr((void**)propdata->minactimpls, (void**)propdata->minactvars, objimplicsComp, nminactvars); 1718 SCIPdebugMessage("%d binary variables with non-zero objective contribution w.r.t. the minimum activity of the objective function\n", nminactvars); 1730 /* sort binary variables with respect to the absolute value of their maximal potential objective contribution for 1735 SCIPdebugMessage("%d binary variables with non-zero objective contribution w.r.t. the maximum activity of the objective function\n", nmaxactvars); 1748 /* sort continuous variables with respect to the absolute value of their objective coefficient */ 1749 SCIPsortDownPtr((void**)(&propdata->objintvars[nobjintvars - nobjcontvars]), varCompObj, nobjcontvars); 1751 SCIPdebugMessage("%d integer variables and %d continuous variables with non-zero objective contribution\n", 1774 /* due to scaling after presolving we need to update the global pseudoactivity and the cutoffbound */ 1778 assert(SCIPgetDepth(scip) > 0 || SCIPisFeasEQ(scip, propdata->glbpseudoobjval, SCIPgetPseudoObjval(scip))); 1783 SCIP_CALL( SCIPhashtableCreate(&propdata->addedvars, SCIPblkmem(scip), SCIPcalcHashtableSize(5*nvars), 1793 /** adds for the given none binary variable a conflict bound depending on its objective contribution */ 1798 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 1799 SCIP_Real* reqpseudoobjval /**< pointer to store the remaining minimum activity which has to be proven */ 1801 { 1816 /* check if the local lower bound (at time stamp bdchgidx) is larger than the global lower bound */ 1837 /* check if the local upper bound (at time stamp bdchgidx) is smaller than the global upper bound */ 1853 /** check for the given implication variables of they also contribute to the required minimum activity */ 1860 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 1861 SCIP_HASHTABLE* addedvars, /**< hash table containing variables which are already add directly or implicitly due to implications */ 1862 SCIP_Real* reqpseudoobjval, /**< pointer to store the remaining minimum activity which has to be proven */ 1886 SCIPdebugMessage(" implicated variables <%s>[%g] bdchgidx [%g,%g] -> remaining <%g>\n", SCIPvarGetName(var), SCIPvarGetObj(var), lb, ub, *reqpseudoobjval); 1897 /** adds for the given binary variable a conflict bound depending on its objective contribution */ 1902 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 1904 SCIP_HASHTABLE* addedvars, /**< hash table containing variables which are already add directly or implicitly due to implications */ 1906 SCIP_Real* reqpseudoobjval /**< pointer to store the remaining minimum activity which has to be proven */ 1930 SCIP_CALL( getConflictImplics(scip, objimplics->objvars, objimplics->nlbimpls, objimplics->nlbimpls + objimplics->nubimpls, 1934 /* check if the binary variable has a positive contribution (positive objective coefficient since it is fixed to 1939 SCIPdebugMessage(" add bound change <%s>[%g] >= <%g> bdchgidx [%g,%g]\n", SCIPvarGetName(var), objval, lb, lb, ub); 1959 /* check if the binary variable has a positive contribution (negative objective coefficient since it is fixed to 1964 SCIPdebugMessage(" add bound change <%s>[%g] <= <%g> bdchgidx=[%g,%g]\n", SCIPvarGetName(var), objval, ub, lb, ub); 1981 /** resolves a propagation by supplying the variables whose bound changes increased the pseudo objective value above the 1991 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 1992 SCIP_HASHTABLE* addedvars, /**< hash table which contains variable which are already added or implict given as reason for the resolve, or NULL */ 2006 assert(SCIPisEQ(scip, SCIPvarGetLbAtIndex(var, bdchgidx, TRUE), SCIPvarGetUbAtIndex(var, bdchgidx, TRUE))); 2015 /* get the objective contribution if we would fix the binray inference variable to its other bound */ 2030 SCIP_CALL( getConflictImplics(scip, objimplics->objvars, start, end, bdchgidx, addedvars, cutoffbound, &foundimplics) ); 2053 /* in case the variable is integral we just need to prove the newbound plus/minus (1 - epsilon) since the this bound 2064 /* adjust the cutoff bound by the portion the inference variable contributes to the presudo objective activitiy 2075 /** resolves a propagation by supplying the variables whose bound changes increased the pseudo objective value above the 2083 SCIP_VAR* infervar, /**< variable that was deduced, or NULL for conflict analysis initialization */ 2086 SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */ 2104 * @note The global pseudo objective activity can be minus infinity. In that case all variable are part of the 2107 * @note If the global pseudo objective activity is greater than the required minactivity, the local bound change 2108 * which has to explained is actually (now) a global one. That means, the reason/explanation is empty 2119 /* clear hash table for storing variables which are not needed to add the reason due to global implications or 2130 SCIP_CALL( adjustCutoffbound(scip, propdata, infervar, inferinfo, boundtype, bdchgidx, addedvars, &cutoffbound) ); 2136 SCIPdebugMessage("resolve propagation global pseudo objective <%g>, cutoff bounda <%g>, required minactivity <%g>\n", 2143 * collect all variables which contribute positively to the pseudo objective value (minimum activity) until we 2164 /* if the required minimum activity is minus infinity, we have to add all variables which contribute the local 2198 SCIP_CALL( addConflictBinvar(scip, var, bdchgidx, minactimpls[v], addedvars, propdata->respropuseimplics, &reqpseudoobjval) ); 2266 /* depending on the objective contribution we can try to tighten the lower or upper bound of the variable */ 2273 SCIP_CALL( SCIPinferVarUbProp(scip, var, newbd, prop, inferinfo, FALSE, &infeasible, tightened) ); 2278 SCIPdebugMessage(" -> new (local) upper bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n", 2289 SCIPdebugMessage(" -> new (global) upper bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n", 2300 SCIP_CALL( SCIPinferVarLbProp(scip, var, newbd, prop, inferinfo, FALSE, &infeasible, tightened) ); 2305 SCIPdebugMessage(" -> new (local) lower bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n", 2316 SCIPdebugMessage(" -> new (global) lower bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n", 2354 SCIP_CALL( getMinactObjchg(scip, var, objimplics, NULL, SCIP_BOUNDTYPE_LOWER, local, &lbobjchg) ); 2358 SCIP_CALL( getMinactObjchg(scip, var, objimplics, NULL, SCIP_BOUNDTYPE_UPPER, local, &ubobjchg) ); 2367 /* if the lbobjchg and ubobjchg are both able to fix the variable to its upper (1.0) or lower (0.0) bound, 2370 * @note There is no need to use SCIPisFeasLT() in case the objective is integral since the cutoff bound in that case 2371 * is the upper bound minus 1 plus the SCIPcutoffbounddelta() (which is MIN(100.0 * feastol, 0.0001)). However, 2372 * if the objective is not integral we have to check w.r.t. an epsilon to avoid numerical problems. 2374 if( SCIPisFeasLT(scip, cutoffbound, pseudoobjval + ubobjchg) && SCIPisFeasLT(scip, cutoffbound, pseudoobjval + lbobjchg) ) 2384 /* add all variable whose best bound changes increased the pseudo objective value above to cutoff bound */ 2385 SCIP_CALL( resolvePropagation(scip, propdata, pseudoobjval, NULL, -1, SCIP_BOUNDTYPE_UPPER, NULL) ); 2401 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, pos, objchg, cutoffbound, pseudoobjval, local, tightened) ); 2407 /** globally propagates if a new cutoff bound or global pseudo objective value (minimum activity of the objective 2417 { 2429 /* this method should not be called in the root node of the search tree since the standard propagation already does 2444 /* check if the global pseudo objective value (minimum activity of the objective function) is greater or equal to 2470 /* check if the variables is already globally fixed; if so continue with the potential candidate */ 2475 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) ); 2477 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective 2478 * contribution w.r.t. minimum activity (pseudo objective value) of the objective function; these values are the 2479 * increase in the pseudo objective activity we would get if we fix the variable to its worse bound; hence, we can 2484 SCIPdebugMessage("interrupt global pseudo objective propagation w.r.t. cutoff bound <%.15g> for binary variables after %d from %d binary variables\n", 2492 /* @note The variable might not be globally fixed right away since this would destroy the local internal 2493 * data structure of a search node; the bound change is in that case pending; hence we cannot assert 2502 for( ; v < nminactvars && cutoffbound - pseudoobjval < propdata->minactimpls[v]->maxobjchg; ++v ) 2507 /* check if the variables is already globally fixed; if so continue with the potential candidate */ 2512 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) ); 2532 /* check if the variable is already locally fixed; in that case we just continue with the next potential 2539 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) ); 2554 SCIP_CALL( propagateCutoffboundVar(scip, NULL, var, -1, SCIPvarGetObj(var), cutoffbound, pseudoobjval, FALSE, &tightened) ); 2591 /* always propagate the binary variables completely; note that the variables before the firstnonfixed indexed are 2616 /* check if the variable is already locally fixed; in that case we just continue with the next potential 2623 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) ); 2625 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective 2626 * contribution w.r.t. minimum activity of the objective function; These values are the increase in the pseudo 2627 * objective activity (minimum activity of the objective function) we would get if we fix the variable to its 2628 * worse bound; hence, we can stop if for a variable this potential increase is not enough too exceed the cutoff 2633 SCIPdebugMessage("interrupt local pseudo objective propagation w.r.t. cutoff bound <%.15g> for binary variables after %d from %d binary variables\n", 2648 for( ; v < nminactvars && cutoffbound - pseudoobjval < propdata->minactimpls[v]->maxobjchg; ++v ) 2653 /* check if the variable is already locally fixed; in that case we just continue with the next potential 2660 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) ); 2682 /* check if the variable is already locally fixed; in that case we just continue with the next potential 2689 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) ); 2721 /* get current pseudo objective value (minimum activity of the objective function) and cutoff bound */ 2729 /* @note A new global pseudo objective value could be used to retrieve global fixings. There is, however, no need to 2730 * check if a new global pseudo objective value is available. This is the case since a new (better) global 2731 * pseudo activity implicis that a global bound change was performed. That causes that the root node of the 2732 * search tree get marked for repropagation. That will result in propagation call of the pseudo objective 2749 * @note there is no need to propagate the cutoff bound if we are in the root node since this will be done by the 2759 /* we are done with solving since a global pseudo activity is greater or equal to the cutoff bound */ 2774 /* check if the pseudo objective value (minimum activity of the objective function) is greater or equal to the cutoff 2779 SCIPdebugMessage("pseudo objective value <%g> exceeds cutoff bound <%g>\n", pseudoobjval, cutoffbound); 2789 /* add all variable whose best bound changes increased the pseudo objective value above to cutoff bound */ 2790 SCIP_CALL( resolvePropagation(scip, propdata, cutoffbound, NULL, -1, SCIP_BOUNDTYPE_UPPER, NULL) ); 2800 SCIPdebugMessage("propagating pseudo objective function (pseudoobj: %g, cutoffbound: %g)\n", pseudoobjval, cutoffbound); 2803 SCIP_CALL( propagateCutoffboundBinvars(scip, prop, cutoffbound, pseudoobjval, &nchgbds, &cutoff) ); 2811 /* tighten domains of none binary variables, if they would increase the pseudo objective value above the cutoff 2836 SCIP_CALL( propagateCutoffboundVar(scip, NULL, var, -1, objval, cutoffbound, pseudoobjval, FALSE, &tightened) ); 2877 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, -1, objval, cutoffbound, pseudoobjval, TRUE, &tightened) ); 3040 } 3042 /** propagates the global domain of the given binary variable against the lower bound (c*x >= lowerbound) */ 3061 /*@todo Instead of running always over all implications use SCIP_OBJIMPLICS in the same way as for the propagation of 3065 /* get contribution of variable by fixing it to its lower bound w.r.t. maximum activity of the objective function */ 3069 /* get contribution of variable by fixing it to its upper bound w.r.t. maximum activity of the objective function */ 3076 /* if the maximum activity of the objective function without the contribution of the given variable shrinks below the 3077 * global lower bound, the contribution of the variable is need; hence, we can fix it to corresponding bound globally 3079 if( SCIPisFeasLT(scip, maxpseudoobjact + lbobjchg, lowerbound) && SCIPisFeasLT(scip, maxpseudoobjact + ubobjchg, lowerbound) ) 3081 /* fixing the variable to zero or one leads to decreases of the maximum activity below the lower bound, hence, we 3098 /** propagates the global domains of the given variable with non-zero objective coefficient against the lower bound 3120 /* get residual pseudo objective activity, that is the pseudo objective activity without the given variable */ 3195 /* if the lower bound did not change since the last propagation as well as the global bounds of the variables with a 3198 if( SCIPisLE(scip, lowerbound, propdata->lastlowerbound) && propdata->maxpseudoobjact < SCIP_INVALID ) 3204 /* if more than one variable contributes an infinity to the maximal pseudo activity we can do nothing */ 3217 /* if the maximum pseudo objective activity is smaller than the lower bound the problem is infeasible */ 3243 /* check if the variables is already globally fixed; if so continue with the next potential candidate */ 3248 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) ); 3250 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective 3251 * contribution w.r.t. maximum activity of the objective function; These values are the decrease we would 3252 * get with the maximum pseudo objective activity if we fix the variable to its best bound; hence, we can 3253 * stop if for a variable this potential decrease is not enough anymore too fall below the lower bound. 3255 * @note In case a fixing was performed. The variable might not be globally fixed right away since this would 3256 * destroy the local internal data structure of a search node; the bound change is in that case pending; 3262 SCIPdebugMessage("interrupt pseudo objective propagation w.r.t. lower bound <%.15g> for binary variables after %d from %d binary variables\n", 3270 /* update maximum pseudo activity since the previous global bound change might invalidated the maximum 3281 for( ; v < nmaxactvars && maxpseudoobjact - lowerbound < propdata->maxactchgs[v] && !cutoff; ++v ) 3287 /* check if the variables is already globally fixed; if so continue with the potential candidate */ 3292 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) ); 3296 /* update maximum pseudo activity since the previous global bound change might invalidated the maximum 3313 /* check if the variables is already globally fixed; if so continue with the next potential candidate */ 3318 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) ); 3395 /** solving process initialization method of propagator (called when branch and bound process is about to begin) */ 3412 SCIP_CALL( SCIPcatchEvent(scip, SCIP_EVENTTYPE_VARADDED, propdata->eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) ); 3419 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */ 3431 SCIP_CALL( SCIPdropEvent(scip, SCIP_EVENTTYPE_VARADDED, propdata->eventhdlr, (SCIP_EVENTDATA*)propdata, -1) ); 3498 * (loop backwards, since a variable fixing can change the current and the subsequent slots in the vars array) 3507 SCIP_CALL( propagateCutoffboundVar(scip, NULL, vars[v], -1, objval, cutoffbound, pseudoobjval, FALSE, &tightened) ); 3551 /* check if enough new variable are added (due to column generation to reinitialized the propagator data) */ 3568 if( (*result) != SCIP_CUTOFF && (propdata->nmaxactvars > 0 || propdata->nobjintvars > 0) && SCIPgetStage(scip) == SCIP_STAGE_SOLVING ) 3598 SCIPdebugMessage("resolve bound change <%s> %s <%g>(%g), cutoff bound <%g>\n", SCIPvarGetName(infervar), 3599 boundtype == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", SCIPvarGetLbAtIndex(infervar, bdchgidx, TRUE), 3603 SCIP_CALL( resolvePropagation(scip, propdata, cutoffbound, infervar, inferinfo, boundtype, bdchgidx) ); 3674 /* include event handler for gloabl bound change events and variable added event (in case of pricing) */ 3675 SCIP_CALL( SCIPincludeEventhdlrBasic(scip, &propdata->eventhdlr, EVENTHDLR_NAME, EVENTHDLR_DESC, 3685 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING, 3695 SCIP_CALL( SCIPsetPropPresol(scip, prop, propPresolPseudoobj, PROP_PRESOL_PRIORITY, PROP_PRESOL_MAXROUNDS, PROP_PRESOLTIMING) ); 3701 "minimal number of successive none binary variable propagator whithout a bound reduction before aborted", 3706 "maximal fraction of none binary variables with non-zero objective without a bound reduction before aborted", 3731 "use implications to strengthen the propagation of binary variable (increasing the objective change)?", 3736 "use implications to strengthen the resolve propagation of binary variable (increasing the objective change)?", 3761 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, -1, objval, cutoffbound, pseudoobjval, TRUE, tightened) );
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 adjustCutoffbound(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, int inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_HASHTABLE *addedvars, SCIP_Real *cutoffbound) Definition: prop_pseudoobj.c:1991 static SCIP_RETCODE getMinactImplicObjchg(SCIP *scip, SCIP_VAR *var, SCIP_OBJIMPLICS *objimplics, SCIP_BDCHGIDX *bdchgidx, SCIP_BOUNDTYPE bound, SCIP_Bool local, SCIP_Real *objchg) Definition: prop_pseudoobj.c:945 Definition: type_result.h:33 Definition: struct_var.h:97 Definition: struct_scip.h:53 SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1567 Pseudo objective propagator. static SCIP_RETCODE propagateLowerbound(SCIP *scip, SCIP_PROP *prop, SCIP_RESULT *result) Definition: prop_pseudoobj.c:3173 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41920 SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17420 Definition: type_result.h:49 static SCIP_RETCODE propdataExit(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:697 static SCIP_RETCODE collectMinactVar(SCIP *scip, SCIP_VAR *var, SCIP_OBJIMPLICS **objimplics, SCIP_Bool useimplics, SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedlbvars, SCIP_Bool *collectedubvars, int nbinobjvars, SCIP_VAR **contributors, SCIP_HASHTABLE *uselesscliques, SCIP_Bool *collect) Definition: prop_pseudoobj.c:1343 static SCIP_DECL_PROPINITSOL(propInitsolPseudoobj) Definition: prop_pseudoobj.c:3403 void SCIPsortDownRealPtr(SCIP_Real *realarray, void **ptrarray, int len) Definition: struct_var.h:196 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:24320 static void updateMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:2953 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_RETCODE addConflictBinvar(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_OBJIMPLICS *objimplics, SCIP_HASHTABLE *addedvars, SCIP_Bool respropuseimplics, SCIP_Real *reqpseudoobjval) Definition: prop_pseudoobj.c:1905 SCIP_RETCODE SCIPsetPropCopy(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPCOPY((*propcopy))) Definition: scip.c:6945 static SCIP_RETCODE getMaxactObjchg(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_Bool useimplics, SCIP_Real *objchg) Definition: prop_pseudoobj.c:1289 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15737 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 * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin) Definition: misc.c:2116 static SCIP_RETCODE propagateCutoffbound(SCIP *scip, SCIP_PROP *prop, SCIP_RESULT *result) Definition: prop_pseudoobj.c:2707 static void resetContributors(SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedvars, SCIP_VAR **contributors, int ncontributors) Definition: prop_pseudoobj.c:1318 static SCIP_Real getMaxObjPseudoactivityResidual(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var) Definition: prop_pseudoobj.c:3006 SCIP_RETCODE SCIPincludePropPseudoobj(SCIP *scip) Definition: prop_pseudoobj.c:3665 SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr) Definition: misc.c:1480 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 SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: scip.c:3573 static SCIP_RETCODE addConflictBounds(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real *reqpseudoobjval) Definition: prop_pseudoobj.c:1801 SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success) Definition: scip.c:24689 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 collectMinactObjchg(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedvars, int nbinobjvars, SCIP_VAR **contributors, SCIP_HASHTABLE *uselesscliques, int *ncontributors, SCIP_Real *objchg) Definition: prop_pseudoobj.c:1030 static SCIP_RETCODE objimplicsDelPos(SCIP *scip, SCIP_OBJIMPLICS *objimplics, int pos) Definition: prop_pseudoobj.c:491 Definition: type_result.h:35 static SCIP_RETCODE propagateCutoffboundBinvar(SCIP *scip, SCIP_PROP *prop, SCIP_VAR *var, int pos, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, SCIP_Bool *tightened, SCIP_Bool *cutoff, SCIP_Bool local) Definition: prop_pseudoobj.c:2333 static SCIP_RETCODE getMaxactImplicObjchg(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_Real *objchg) Definition: prop_pseudoobj.c:1099 #define SCIPfreeBlockMemoryArrayNull(scip, ptr, num) Definition: scip.h:20574 void SCIPsortDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15859 Definition: type_lp.h:47 static SCIP_RETCODE collectMinactImplicVars(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedvars, int nbinobjvars, SCIP_VAR **contributors, SCIP_HASHTABLE *uselesscliques, int *ncontributors, SCIP_Real *objchg) Definition: prop_pseudoobj.c:819 SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41907 static SCIP_DECL_PROPPRESOL(propPresolPseudoobj) Definition: prop_pseudoobj.c:3450 void SCIPsortDownPtrPtr(void **ptrarray1, void **ptrarray2, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_BOUNDTYPE * SCIPvarGetImplTypes(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17367 Definition: type_retcode.h:33 static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_Real cutoffbound, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx) Definition: prop_pseudoobj.c:2085 static SCIP_RETCODE dropObjEvent(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_EVENTHDLR *eventhdlr, SCIP_VAR *var) Definition: prop_pseudoobj.c:573 SCIP_Bool SCIPvarsHaveCommonClique(SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics) Definition: var.c:10742 SCIP_RETCODE SCIPsetPropPresol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPPRESOL((*proppresol)), int presolpriority, int presolmaxrounds, SCIP_PRESOLTIMING presoltiming) Definition: scip.c:7073 static SCIP_RETCODE objimplicsFree(SCIP *scip, SCIP_OBJIMPLICS **objimplics) Definition: prop_pseudoobj.c:463 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 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41946 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 static SCIP_RETCODE propagateCutoffboundGlobally(SCIP *scip, SCIP_PROP *prop, int *nchgbds, SCIP_Bool *cutoff) Definition: prop_pseudoobj.c:2417 Definition: prop_pseudoobj.c:78 SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop))) Definition: scip.c:7106 static SCIP_DECL_PROPEXITSOL(propExitsolPseudoobj) Definition: prop_pseudoobj.c:3427 SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree))) Definition: scip.c:6961 static SCIP_DECL_PROPRESPROP(propRespropPseudoobj) Definition: prop_pseudoobj.c:3590 static SCIP_RETCODE getMinactObjchg(SCIP *scip, SCIP_VAR *var, SCIP_OBJIMPLICS *objimplics, SCIP_BDCHGIDX *bdchgidx, SCIP_BOUNDTYPE bound, SCIP_Bool local, SCIP_Real *objchg) Definition: prop_pseudoobj.c:1063 static SCIP_Real getMaxObjPseudoactivityResidualValue(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_Real contrib) Definition: prop_pseudoobj.c:2968 static void calcMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:2903 SCIP_RETCODE SCIPpropagateCutoffboundVar(SCIP *scip, SCIP_PROP *prop, SCIP_VAR *var, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, SCIP_Bool *tightened) Definition: prop_pseudoobj.c:3754 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 static SCIP_RETCODE propdataInit(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:1496 static SCIP_RETCODE collectMaxactVar(SCIP *scip, SCIP_VAR *var, SCIP_Bool useimplics, SCIP_Real *objchg, SCIP_Bool *isnotzero) Definition: prop_pseudoobj.c:1459 static SCIP_RETCODE objimplicsCreate(SCIP *scip, SCIP_OBJIMPLICS **objimplics, SCIP_VAR **objvars, SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedlbvars, SCIP_Bool *collectedubvars, SCIP_Real maxlbobjchg, SCIP_Real maxubobjchg, int nlbimpls, int nubimpls) Definition: prop_pseudoobj.c:329 static SCIP_RETCODE propagateCutoffboundBinvars(SCIP *scip, SCIP_PROP *prop, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, int *nfixedvars, SCIP_Bool *cutoff) Definition: prop_pseudoobj.c:2574 SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx) Definition: scip.c:24369 static SCIP_Real getVarObjchg(SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BOUNDTYPE bound) Definition: prop_pseudoobj.c:733 SCIP_BOUNDTYPE SCIPvarGetWorstBoundType(SCIP_VAR *var) Definition: var.c:17182 static SCIP_RETCODE getConflictImplics(SCIP *scip, SCIP_VAR **vars, int start, int end, SCIP_BDCHGIDX *bdchgidx, SCIP_HASHTABLE *addedvars, SCIP_Real *reqpseudoobjval, SCIP_Bool *foundimplics) Definition: prop_pseudoobj.c:1861 static void checkImplicsApplied(SCIP *scip, SCIP_VAR *var) Definition: prop_pseudoobj.c:137 static SCIP_RETCODE catchObjEvent(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_EVENTHDLR *eventhdlr, SCIP_VAR *var) Definition: prop_pseudoobj.c:542 SCIP_RETCODE SCIPsetPropInitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINITSOL((*propinitsol))) Definition: scip.c:7009 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_Real collectMinactImplicVar(SCIP *scip, SCIP_VAR *var, SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedvars, int nbinobjvars, SCIP_VAR **contributors, int *ncontributors) Definition: prop_pseudoobj.c:752 Definition: struct_misc.h:80 SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:36588 Definition: type_lp.h:48 const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:278 SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41933 static SCIP_DECL_HASHKEYVAL(cliqueGetHashkeyVal) Definition: prop_pseudoobj.c:315 static void propdataReset(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:667 SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:21260 Definition: struct_implics.h:64 static SCIP_RETCODE propagateLowerboundVar(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var, SCIP_Real lowerbound, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: prop_pseudoobj.c:3108 SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:41959 static SCIP_RETCODE propagateCutoffboundVar(SCIP *scip, SCIP_PROP *prop, SCIP_VAR *var, int inferinfo, SCIP_Real objchg, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, SCIP_Bool local, SCIP_Bool *tightened) Definition: prop_pseudoobj.c:2231 Definition: type_retcode.h:45 Definition: type_set.h:42 SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1692 static void checkGlbfirstnonfixed(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:184 SCIP_Real * SCIPvarGetImplBounds(SCIP_VAR *var, SCIP_Bool varfixing) Definition: var.c:17381 static SCIP_RETCODE dropVarEvents(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:604 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 Definition: objbranchrule.h:33 SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: scip.c:3629 Definition: type_result.h:39 Definition: struct_event.h:185 static SCIP_Real getMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata) Definition: prop_pseudoobj.c:3040 static SCIP_RETCODE propagateLowerboundBinvar(SCIP *scip, SCIP_VAR *var, SCIP_Real lowerbound, SCIP_Real maxpseudoobjact, SCIP_Bool useimplics, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: prop_pseudoobj.c:3050 SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:36554 |