prop_pseudoobj.c
Go to the documentation of this file.
22 * This propagator propagates the objective function using the cutoff bound and the pseudo objective value. The pseudo
23 * objective value can be seen as minimum activity of the linear objective function. Using this, this propagator checks
24 * if variables with non-zero objective coefficients can exceed the cutoff bound. If this is the case the corresponding
30 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
60 #define PROP_TIMING SCIP_PROPTIMING_BEFORELP | SCIP_PROPTIMING_DURINGLPLOOP | SCIP_PROPTIMING_AFTERLPLOOP
63 #define PROP_DELAY FALSE /**< should propagation method be delayed, if other propagators found reductions? */
64 #define PROP_PRESOL_PRIORITY +6000000 /**< priority of the presolving method (>= 0: before, < 0: after constraint handlers); combined with presolvers */
65 #define PROP_PRESOL_MAXROUNDS -1 /**< maximal number of presolving rounds the presolver participates in (-1: no
67 #define PROP_PRESOLTIMING SCIP_PRESOLTIMING_FAST /* timing of the presolving method (fast, medium, or exhaustive) */
72 #define DEFAULT_MINUSELESS 100 /**< minimal number of successive non-binary variable propagator whithout a
74 #define DEFAULT_MAXVARSFRAC 0.1 /**< maximal fraction of non-binary variables with non-zero objective
76 #define DEFAULT_PROPFULLINROOT TRUE /**< do we want to propagate all non-binary variables if we are propagating the root node? */
78 #define DEFAULT_FORCE FALSE /**< should the propagator be forced even if active pricer are present? Note that
82 #define DEFAULT_MAXNEWVARS 1000 /**< number of variable added after the propagator is reinitialized? */
83 #define DEFAULT_PROPUSEIMPLICS TRUE /**< use implications to strengthen the propagation of binary variable (increasing the objective change)? */
84 #define DEFAULT_RESPROPUSEIMPLICS TRUE /**< use implications to strengthen the resolve propagation of binary variable (increasing the objective change)? */
85 #define DEFAULT_MAXIMPLVARS 50000 /**< maximum number of binary variables the implications are used if turned on (-1: unlimited)? */
97 SCIP_Real maxobjchg; /**< maximum objective contribution if variables x is fixed to zero or one */
101 };
102 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) */
109 SCIP_VAR** minactvars; /**< binary variables with non-zero objective contribution w.r.t. minimum activity of the objective function */
110 SCIP_OBJIMPLICS** minactimpls; /**< implication data structure for the binary variables w.r.t. minimum activity */
111 SCIP_VAR** maxactvars; /**< binary variables with non-zero objective contribution w.r.t. maximum activity of the objective function */
112 SCIP_Real* maxactchgs; /**< the maximal potential change of the objective if the binary variable
116 SCIP_HASHTABLE* addedvars; /**< hash table used during resolving of a bound change (conflict analysis) */
124 int maxpseudoobjactinf; /**< number of coefficients contributing with infinite value to maxpseudoobjact */
125 int nminactvars; /**< number of binary variables with non-zero objective contribution w.r.t. minimum activity of the objective function */
126 int nmaxactvars; /**< number of binary variables with non-zero objective contribution w.r.t. maximum activity of the objective function */
132 int glbfirstnonfixed; /**< index of first globally non-fixed binary variable in minactvars array */
133 int maxactfirstnonfixed;/**< index of first globally non-fixed binary variable in maxctvars array */
137 int maximplvars; /**< maximum number of binary variables the implications are used if turned on (-1: unlimited)? */
142 SCIP_Bool propfullinroot; /**< do we want to propagate all non-binary variables if we are propagating the root node */
146 SCIP_Bool propuseimplics; /**< use implications to strengthen the propagation of binary variable (increasing the objective change)? */
147 SCIP_Bool respropuseimplics; /**< use implications to strengthen the resolve propagation of binary variable (increasing the objective change)? */
255 * (ii) the locks which indicate most effect -- for the variables with a positive (negative) objective coefficient the
256 * down (up) lock is used since this lock indicates that tightened of the upper (lower) bound will triegger
344 /** creates an objective implication data structure, fixes (globally) variables which are implied by lower and upper
352 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays, or NULL */
353 SCIP_Bool* collectedlbvars, /**< temporary buffer to mark collected variables for lower bound fixing, or NULL */
354 SCIP_Bool* collectedubvars, /**< temporary buffer to mark collected variables for upper bound fixing, or NULL */
516 assert(0 <= pos);
534 objimplics->objvars[objimplics->nlbimpls] = objimplics->objvars[objimplics->nlbimpls + objimplics->nubimpls];
557 /** catch bound change events if the variable has a non-zero objective coefficient to check if the maximum activity of
567 {
579 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_GUBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) );
583 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_GLBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) );
598 {
611 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_GUBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) );
615 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_GLBCHANGED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) );
645 /* drop bound relax event which is caught for all binary variables which are used for propagation the objective
648 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDRELAXED, eventhdlr, (SCIP_EVENTDATA*)propdata, -1) );
661 /* drop events which are needed for evaluating the maximum activity of the objective function */
674 /* drop events which are needed for evaluating the maximum activity of the objective function */
768 /** returns the objective change provided by the implication variable by fixing it to the given bound
769 * w.r.t. minimum activity of the objective function; additionally it collects all contributors for that objective
776 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */
824 /** returns the objective change provided by the implications of the given variable by fixing it to the given bound
825 * w.r.t. minimum activity of the objective function; additionally it collects all contributors for that objective
828 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to
829 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by the
834 * 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)
836 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{bestbound}(x)) \cdot \mbox{objval}(x)
844 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */
849 int* ncontributors, /**< pointer to store number of contributor to the objective contribution */
897 /* check if the clique was previously detected to be useless with respect to minimum activity */
934 (*objchg) += collectMinactImplicVar(scip, implvar, binobjvarmap, collectedvars, nbinobjvars, contributors, ncontributors);
949 /** returns the objective change provided by the implications of the given variable by fixing it to the given bound
952 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to
953 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by the
958 * 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)
960 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{bestbound}(x)) \cdot \mbox{objval}(x)
963 * This can be done w.r.t. global variable bounds (local == FALSE), w.r.t. local variable bounds (local == TRUE &&
971 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node, or NULL */
1026 /* check if variable is global fixed; if so remove it from the objective implication data structure and
1037 assert(SCIPvarGetObj(implvar) > 0.0 || SCIPvarsHaveCommonClique(var, (SCIP_Bool) bound, implvar, TRUE, TRUE));
1038 assert(SCIPvarGetObj(implvar) < 0.0 || SCIPvarsHaveCommonClique(var, (SCIP_Bool) bound, implvar, FALSE, TRUE));
1048 /** computes for the given binary variable the objective contribution by fixing it to given bound w.r.t. minimum
1049 * activity of the objective function; additionally it collects all contributors for that objective change;
1056 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */
1061 int* ncontributors, /**< pointer to store number of contributor to the objective contribution */
1075 SCIP_CALL( collectMinactImplicVars(scip, var, bound, binobjvarmap, collectedvars, nbinobjvars, contributors, uselesscliques, ncontributors, objchg) );
1080 /** computes for the given binary variable the objective contribution by fixing it to given bound w.r.t. minimum
1081 * activity of the objective function; this can be done w.r.t. global variable bounds (local == FALSE), w.r.t. local
1082 * variable bounds (local == TRUE && bdchgidx == NULL), and w.r.t. given time stamp (local == TRUE && bdchgidx != NULL)
1089 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node, or NULL */
1106 /** returns the global (that means w.r.t. global bounds of the variables) objective change provided by all cliques of
1107 * the given variable by fixing it to the given bound w.r.t. maximum activity of the objective function
1109 * Let I(0) and I(1) be all implications of the given variable which follow by fixing it to given bound and evaluate to
1110 * fixing the implication variable to zero (I(0)) or one (I(1)), respectively. The objective change provided by these
1115 * 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)
1117 * sum_{x\in I(0) \cup I(1)} (\mbox{impliedbound}(x) - \mbox{worstbound}(x)) \cdot \mbox{objval}(x)
1127 {
1171 /* @todo move this memory allocation to SCIP_SET and add a memory list there, to decrease the number of
1203 /* ignore binary variable which are either fixed and were the objective contribution will not be zero */
1205 (SCIPvarGetLbGlobal(clqvar) < 0.5 && SCIPvarGetUbGlobal(clqvar) > 0.5) && !SCIPisZero(scip, SCIPvarGetObj(clqvar)) )
1256 SCIPdebugMsg(scip, "objective contribution when variable <%s> fixed to %u using cliques is %g\n", SCIPvarGetName(var),
1292 if( boundtypes[v] == SCIP_BOUNDTYPE_LOWER && SCIPvarGetWorstBoundType(implvar) == SCIP_BOUNDTYPE_LOWER && SCIPisFeasGT(scip, bounds[v], lb) )
1294 else if( boundtypes[v] == SCIP_BOUNDTYPE_UPPER && SCIPvarGetWorstBoundType(implvar) == SCIP_BOUNDTYPE_UPPER && SCIPisFeasLT(scip, bounds[v], ub) )
1300 SCIPdebugMsg(scip, "objective contribution when variable <%s> fixed to %u using cliques and implications is %g\n", SCIPvarGetName(var),
1307 /** computes for the given binary variable the gloabl (that means w.r.t. global bounds of the variables) objective
1317 )
1325 /* check if the implications should be used to increase the objective contribution for given variable */
1341 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */
1342 SCIP_Bool* collectedvars, /**< temporary buffer to mark collected variables which should be reset */
1346 {
1368 SCIP_OBJIMPLICS** objimplics, /**< pointer to store the objective implication data structure w.r.t. minimum activity */
1370 SCIP_HASHMAP* binobjvarmap, /**< hash map mapping binary variables with none-zero objective to position in collected variables arrays */
1371 SCIP_Bool* collectedlbvars, /**< temporary buffer to mark collected variables for lower bound fixing */
1372 SCIP_Bool* collectedubvars, /**< temporary buffer to mark collected variables for upper bound fixing */
1407 /* get contribution of variable by fixing it to its lower bound w.r.t. minimum activity of the objective function */
1408 SCIP_CALL( collectMinactObjchg(scip, var, SCIP_BOUNDTYPE_LOWER, binobjvarmap, collectedlbvars, nbinobjvars,
1415 /* ignore implications if the variable has a zero objective coefficient and implications only one variable, since
1427 /* get contribution of variable by fixing it to its upper bound w.r.t. minimum activity of the objective function */
1428 SCIP_CALL( collectMinactObjchg(scip, var, SCIP_BOUNDTYPE_UPPER, binobjvarmap, collectedubvars, nbinobjvars,
1435 /* ignore implications if the variable has a zero objective coefficient and implications only one variable, since
1441 resetContributors(binobjvarmap, collectedubvars, &contributors[nlbcontributors], nubcontributors);
1449 /* creates an objective implication data structure, fixes (globally) variables which are implied by lower and upper
1452 SCIP_CALL( objimplicsCreate(scip, objimplics, contributors, binobjvarmap, collectedlbvars, collectedubvars, lbobjchg, ubobjchg, nlbcontributors, nubcontributors) );
1461 resetContributors(binobjvarmap, collectedubvars, &contributors[nlbcontributors], nubcontributors);
1473 SCIP_CALL( objimplicsCreate(scip, objimplics, NULL, NULL, NULL, NULL, lbobjchg, ubobjchg, 0, 0) );
1486 SCIP_Bool* isnotzero /**< pointer to store if the objective change is unequal to zero or not */
1487 )
1497 /* get contribution of variable by fixing it to its lower bound w.r.t. maximum activity of the objective function */
1501 /* get contribution of variable by fixing it to its upper bound w.r.t. maximum activity of the objective function */
1551 /* count and collect variable problem indices of variables with non-zero objective coefficient */
1610 /* we store both lb and ub contributors in array contributors, and both could be nbinobjvars, we need twice that size */
1635 /* collect the variables with non-zero objective contribution and catch global bound tighten events that decrease the
1651 /* check that the binary implications are applied for binary variables which are globally fixed */
1658 SCIP_CALL( collectMinactVar(scip, var, &objimplics, useimplics, binobjvarmap, collectedlbvars, collectedubvars,
1672 /* catch bound relax event for the binary variable to handel the firstnonfixed index correctly */
1673 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDRELAXED, eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) );
1693 /* catch bound change events if the variable has a non-zero objective coefficient to check if the maximum
1716 /* catch bound change events if the variable has a non-zero objective coefficient to check if the maximum
1746 /* sort binary variables with respect to the absolute value of their maximal potential objective contribution for
1749 SCIPsortDownPtrPtr((void**)propdata->minactimpls, (void**)propdata->minactvars, objimplicsComp, nminactvars);
1751 SCIPdebugMsg(scip, "%d binary variables with non-zero objective contribution w.r.t. the minimum activity of the objective function\n", nminactvars);
1764 /* sort binary variables with respect to the absolute value of their maximal potential objective contribution for
1769 SCIPdebugMsg(scip, "%d binary variables with non-zero objective contribution w.r.t. the maximum activity of the objective function\n", nmaxactvars);
1783 /* sort continuous variables with respect to the absolute value of their objective coefficient */
1784 SCIPsortDownPtr((void**)(&propdata->objintvars[nobjintvars - nobjcontvars]), varCompObj, nobjcontvars);
1786 SCIPdebugMsg(scip, "%d integer variables and %d continuous variables with non-zero objective contribution\n",
1809 /* due to scaling after presolving we need to update the global pseudoactivity and the cutoffbound */
1813 assert(SCIPgetDepth(scip) > 0 || SCIPisFeasEQ(scip, propdata->glbpseudoobjval, SCIPgetPseudoObjval(scip)));
1827 /** adds for the given non-binary variable a conflict bound depending on its objective contribution */
1832 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
1833 SCIP_Real* reqpseudoobjval /**< pointer to store the remaining minimum activity which has to be proven */
1835 {
1850 /* check if the local lower bound (at time stamp bdchgidx) is larger than the global lower bound */
1853 SCIPdebugMsg(scip, " add bound change <%s>[%g] >= <%g>\n", SCIPvarGetName(var), objval, loclb);
1871 /* check if the local upper bound (at time stamp bdchgidx) is smaller than the global upper bound */
1874 SCIPdebugMsg(scip, " add bound change <%s>[%g] <= <%g>\n", SCIPvarGetName(var), objval, locub);
1887 /** check for the given implication variables if they also contribute to the required minimum activity */
1894 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
1895 SCIP_HASHTABLE* addedvars, /**< hash table containing variables which are already added directly or implicitly due to implications */
1896 SCIP_Real* reqpseudoobjval, /**< pointer to store the remaining minimum activity which has to be proven */
1914 /* we need to take the bounds after the bdchgidx here, since the variable of the bound change may be the implied one;
1915 * we already counted its contribution before, so we want to see it as fixed here, which it is after the bound change.
1923 SCIPdebugMsg(scip, " implicated variables <%s>[%g] bdchgidx [%g,%g] -> remaining <%g>\n", SCIPvarGetName(var), SCIPvarGetObj(var), lb, ub, *reqpseudoobjval);
1934 /** adds for the given binary variable a conflict bound depending on its objective contribution */
1939 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
1941 SCIP_HASHTABLE* addedvars, /**< hash table containing variables which are already add directly or implicitly due to implications */
1943 SCIP_Real* reqpseudoobjval /**< pointer to store the remaining minimum activity which has to be proven */
1968 SCIP_CALL( getConflictImplics(scip, objimplics->objvars, objimplics->nlbimpls, objimplics->nlbimpls + objimplics->nubimpls,
1972 /* check if the binary variable has a positive contribution (positive objective coefficient since it is fixed to
1977 SCIPdebugMsg(scip, " add bound change <%s>[%g] >= <%g> bdchgidx [%g,%g]\n", SCIPvarGetName(var), objval, lb, lb, ub);
1998 /* check if the binary variable has a positive contribution (negative objective coefficient since it is fixed to
2003 SCIPdebugMsg(scip, " add bound change <%s>[%g] <= <%g> bdchgidx=[%g,%g]\n", SCIPvarGetName(var), objval, ub, lb, ub);
2020 /** resolves a propagation by supplying the variables whose bound changes increased the pseudo objective value above the
2030 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
2031 SCIP_HASHTABLE* addedvars, /**< hash table which contains variables which are already added or implicitly given as reason for the resolve, or NULL */
2044 assert(SCIPisEQ(scip, SCIPgetVarLbAtIndex(scip, var, bdchgidx, TRUE), SCIPgetVarUbAtIndex(scip, var, bdchgidx, TRUE)));
2053 /* get the objective contribution if we would fix the binary inference variable to its other bound */
2070 SCIP_CALL( getConflictImplics(scip, objimplics->objvars, start, end, bdchgidx, addedvars, cutoffbound, &foundimplics) );
2094 /* in case the variable is integral we just need to prove the newbound plus/minus (1 - epsilon) since the this bound
2105 /* adjust the cutoff bound by the portion the inference variable contributes to the presudo objective activity
2116 /** resolves a propagation by supplying the variables whose bound changes increased the pseudo objective value above the
2124 SCIP_VAR* infervar, /**< variable that was deduced, or NULL for conflict analysis initialization */
2127 SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */
2145 * @note The global pseudo objective activity can be minus infinity. In that case all variable are part of the
2148 * @note If the global pseudo objective activity is greater than the required minactivity, the local bound change
2149 * which has to explained is actually (now) a global one. That means, the reason/explanation is empty
2160 /* clear hash table for storing variables which are not needed to add the reason due to global implications or
2171 SCIP_CALL( adjustCutoffbound(scip, propdata, infervar, inferinfo, boundtype, bdchgidx, addedvars, &cutoffbound) );
2177 SCIPdebugMsg(scip, "resolve propagation global pseudo objective <%g>, cutoff bounda <%g>, required minactivity <%g>\n",
2184 * collect all variables which contribute positively to the pseudo objective value (minimum activity) until we
2205 /* if the required minimum activity is minus infinity, we have to add all variables which contribute the local
2239 SCIP_CALL( addConflictBinvar(scip, var, bdchgidx, minactimpls[v], addedvars, propdata->respropuseimplics, &reqpseudoobjval) );
2307 /* depending on the objective contribution we can try to tighten the lower or upper bound of the variable */
2314 SCIP_CALL( SCIPinferVarUbProp(scip, var, newbd, prop, inferinfo, FALSE, &infeasible, tightened) );
2319 SCIPdebugMsg(scip, " -> new (local) upper bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n",
2330 SCIPdebugMsg(scip, " -> new (global) upper bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n",
2341 SCIP_CALL( SCIPinferVarLbProp(scip, var, newbd, prop, inferinfo, FALSE, &infeasible, tightened) );
2346 SCIPdebugMsg(scip, " -> new (local) lower bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n",
2357 SCIPdebugMsg(scip, " -> new (global) lower bound of variable <%s>[%g,%g]: %g, objective change <%g>, pseudo objective <%g>, cutoff bound <%g>\n",
2395 SCIP_CALL( getMinactObjchg(scip, var, objimplics, NULL, SCIP_BOUNDTYPE_LOWER, local, &lbobjchg) );
2399 SCIP_CALL( getMinactObjchg(scip, var, objimplics, NULL, SCIP_BOUNDTYPE_UPPER, local, &ubobjchg) );
2408 /* if the lbobjchg and ubobjchg are both able to fix the variable to its upper (1.0) or lower (0.0) bound,
2411 * @note There is no need to use SCIPisFeasLT() in case the objective is integral since the cutoff bound in that case
2412 * is the upper bound minus 1 plus the SCIPcutoffbounddelta() (which is MIN(100.0 * feastol, 0.0001)). However,
2413 * if the objective is not integral we have to check w.r.t. an epsilon to avoid numerical problems.
2415 if( SCIPisFeasLT(scip, cutoffbound, pseudoobjval + ubobjchg) && SCIPisFeasLT(scip, cutoffbound, pseudoobjval + lbobjchg) )
2425 /* add all variable whose best bound changes increased the pseudo objective value above to cutoff bound */
2426 SCIP_CALL( resolvePropagation(scip, propdata, pseudoobjval, NULL, -1, SCIP_BOUNDTYPE_UPPER, NULL) );
2442 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, pos, objchg, cutoffbound, pseudoobjval, local, tightened) );
2448 /** globally propagates if a new cutoff bound or global pseudo objective value (minimum activity of the objective
2458 {
2470 /* this method should not be called in the root node of the search tree since the standard propagation already does
2485 /* check if the global pseudo objective value (minimum activity of the objective function) is greater or equal to
2511 /* check if the variables is already globally fixed; if so continue with the potential candidate */
2516 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) );
2518 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective
2519 * contribution w.r.t. minimum activity (pseudo objective value) of the objective function; these values are the
2520 * increase in the pseudo objective activity we would get if we fix the variable to its worse bound; hence, we can
2525 SCIPdebugMsg(scip, "interrupt global pseudo objective propagation w.r.t. cutoff bound <%.15g> for binary variables after %d from %d binary variables\n",
2533 /* @note The variable might not be globally fixed right away since this would destroy the local internal
2534 * data structure of a search node; the bound change is in that case pending; hence we cannot assert
2543 for( ; v < nminactvars && cutoffbound - pseudoobjval < propdata->minactimpls[v]->maxobjchg; ++v )
2548 /* check if the variables is already globally fixed; if so continue with the potential candidate */
2553 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) );
2573 /* check if the variable is already locally fixed; in that case we just continue with the next potential
2580 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, FALSE) );
2595 SCIP_CALL( propagateCutoffboundVar(scip, NULL, var, -1, SCIPvarGetObj(var), cutoffbound, pseudoobjval, FALSE, &tightened) );
2632 /* always propagate the binary variables completely; note that the variables before the firstnonfixed indexed are
2657 /* check if the variable is already locally fixed; in that case we just continue with the next potential
2664 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) );
2666 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective
2667 * contribution w.r.t. minimum activity of the objective function; These values are the increase in the pseudo
2668 * objective activity (minimum activity of the objective function) we would get if we fix the variable to its
2669 * worse bound; hence, we can stop if for a variable this potential increase is not enough too exceed the cutoff
2674 SCIPdebugMsg(scip, "interrupt local pseudo objective propagation w.r.t. cutoff bound <%.15g> for binary variables after %d from %d binary variables\n",
2689 for( ; v < nminactvars && cutoffbound - pseudoobjval < propdata->minactimpls[v]->maxobjchg; ++v )
2694 /* check if the variable is already locally fixed; in that case we just continue with the next potential
2701 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) );
2723 /* check if the variable is already locally fixed; in that case we just continue with the next potential
2730 SCIP_CALL( propagateCutoffboundBinvar(scip, prop, var, v, cutoffbound, pseudoobjval, &tightened, cutoff, TRUE) );
2762 /* get current pseudo objective value (minimum activity of the objective function) and cutoff bound */
2770 /* @note A new global pseudo objective value could be used to retrieve global fixings. There is, however, no need to
2771 * check if a new global pseudo objective value is available. This is the case since a new (better) global
2772 * pseudo activity implies that a global bound change was performed. That causes that the root node of the
2773 * search tree gets marked for repropagation. That will result in a propagation call of the pseudo objective
2790 * @note there is no need to propagate the cutoff bound if we are in the root node since this will be done by the
2800 /* we are done with solving since a global pseudo activity is greater or equal to the cutoff bound */
2815 /* check if the pseudo objective value (minimum activity of the objective function) is greater or equal to the cutoff
2820 SCIPdebugMsg(scip, "pseudo objective value <%g> exceeds cutoff bound <%g>\n", pseudoobjval, cutoffbound);
2830 /* add all variable whose best bound changes increased the pseudo objective value above the cutoff bound */
2831 SCIP_CALL( resolvePropagation(scip, propdata, cutoffbound, NULL, -1, SCIP_BOUNDTYPE_UPPER, NULL) );
2841 SCIPdebugMsg(scip, "propagating pseudo objective function (pseudoobj: %g, cutoffbound: %g)\n", pseudoobjval, cutoffbound);
2844 SCIP_CALL( propagateCutoffboundBinvars(scip, prop, cutoffbound, pseudoobjval, &nchgbds, &cutoff) );
2852 /* tighten domains of non-binary variables, if they would increase the pseudo objective value above the cutoff
2877 SCIP_CALL( propagateCutoffboundVar(scip, NULL, var, -1, objval, cutoffbound, pseudoobjval, FALSE, &tightened) );
2918 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, -1, objval, cutoffbound, pseudoobjval, TRUE, &tightened) );
3080 }
3082 /** propagates the global domain of the given binary variable against the lower bound (c*x >= lowerbound) */
3101 /*@todo Instead of running always over all implications use SCIP_OBJIMPLICS in the same way as for the propagation of
3105 /* get contribution of variable by fixing it to its lower bound w.r.t. maximum activity of the objective function */
3109 /* get contribution of variable by fixing it to its upper bound w.r.t. maximum activity of the objective function */
3116 /* if the maximum activity of the objective function without the contribution of the given variable shrinks below the
3117 * global lower bound, the contribution of the variable is need; hence, we can fix it to corresponding bound globally
3119 if( SCIPisFeasLT(scip, maxpseudoobjact + lbobjchg, lowerbound) && SCIPisFeasLT(scip, maxpseudoobjact + ubobjchg, lowerbound) )
3121 /* fixing the variable to zero or one leads to decreases of the maximum activity below the lower bound, hence, we
3138 /** propagates the global domains of the given variable with non-zero objective coefficient against the lower bound
3160 /* get residual pseudo objective activity, that is the pseudo objective activity without the given variable */
3235 /* if the lower bound did not change since the last propagation as well as the global bounds of the variables with a
3238 if( SCIPisLE(scip, lowerbound, propdata->lastlowerbound) && propdata->maxpseudoobjact < SCIP_INVALID )
3244 /* if more than one variable contributes an infinity to the maximal pseudo activity we can do nothing */
3257 /* if the maximum pseudo objective activity is smaller than the lower bound the problem is infeasible */
3283 /* check if the variables is already globally fixed; if so continue with the next potential candidate */
3288 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) );
3290 /* the binary variables are sorted in non-increasing manner w.r.t. the absolute value of their objective
3291 * contribution w.r.t. maximum activity of the objective function; These values are the decrease we would
3292 * get with the maximum pseudo objective activity if we fix the variable to its best bound; hence, we can
3293 * stop if for a variable this potential decrease is not enough anymore to fall below the lower bound.
3295 * @note In case a fixing was performed. The variable might not be globally fixed right away since this would
3296 * destroy the local internal data structure of a search node; the bound change is in that case pending;
3302 SCIPdebugMsg(scip, "interrupt pseudo objective propagation w.r.t. lower bound <%.15g> for binary variables after %d from %d binary variables\n",
3310 /* update maximum pseudo activity since the previous global bound change might invalidated the maximum
3321 for( ; v < nmaxactvars && maxpseudoobjact - lowerbound < propdata->maxactchgs[v] && !cutoff; ++v )
3327 /* check if the variables is already globally fixed; if so continue with the potential candidate */
3332 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) );
3336 /* update maximum pseudo activity since the previous global bound change might invalidated the maximum
3353 /* check if the variables is already globally fixed; if so continue with the next potential candidate */
3358 SCIP_CALL( propagateLowerboundBinvar(scip, var, lowerbound, maxpseudoobjact, propdata->propuseimplics, &cutoff, &tightened) );
3435 /** solving process initialization method of propagator (called when branch and bound process is about to begin) */
3452 SCIP_CALL( SCIPcatchEvent(scip, SCIP_EVENTTYPE_VARADDED, propdata->eventhdlr, (SCIP_EVENTDATA*)propdata, NULL) );
3459 /** solving process deinitialization method of propagator (called before branch and bound process data is freed) */
3471 SCIP_CALL( SCIPdropEvent(scip, SCIP_EVENTTYPE_VARADDED, propdata->eventhdlr, (SCIP_EVENTDATA*)propdata, -1) );
3537 * (loop backwards, since a variable fixing can change the current and the subsequent slots in the vars array)
3546 SCIP_CALL( propagateCutoffboundVar(scip, NULL, vars[v], -1, objval, cutoffbound, pseudoobjval, FALSE, &tightened) );
3590 /* check if enough new variable are added (due to column generation to reinitialized the propagator data) */
3607 if( (*result) != SCIP_CUTOFF && (propdata->nmaxactvars > 0 || propdata->nobjintvars > 0) && SCIPgetStage(scip) == SCIP_STAGE_SOLVING )
3637 SCIPdebugMsg(scip, "resolve bound change <%s> %s <%g>(%g), cutoff bound <%g>\n", SCIPvarGetName(infervar),
3638 boundtype == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", SCIPgetVarLbAtIndex(scip, infervar, bdchgidx, TRUE),
3642 SCIP_CALL( resolvePropagation(scip, propdata, cutoffbound, infervar, inferinfo, boundtype, bdchgidx) );
3712 /* include event handler for gloabl bound change events and variable added event (in case of pricing) */
3713 SCIP_CALL( SCIPincludeEventhdlrBasic(scip, &propdata->eventhdlr, EVENTHDLR_NAME, EVENTHDLR_DESC,
3723 SCIP_CALL( SCIPincludePropBasic(scip, &prop, PROP_NAME, PROP_DESC, PROP_PRIORITY, PROP_FREQ, PROP_DELAY, PROP_TIMING,
3733 SCIP_CALL( SCIPsetPropPresol(scip, prop, propPresolPseudoobj, PROP_PRESOL_PRIORITY, PROP_PRESOL_MAXROUNDS, PROP_PRESOLTIMING) );
3739 "minimal number of successive non-binary variable propagator whithout a bound reduction before aborted",
3744 "maximal fraction of non-binary variables with non-zero objective without a bound reduction before aborted",
3769 "use implications to strengthen the propagation of binary variable (increasing the objective change)?",
3774 "use implications to strengthen the resolve propagation of binary variable (increasing the objective change)?",
3799 SCIP_CALL( propagateCutoffboundVar(scip, prop, var, -1, objval, cutoffbound, pseudoobjval, TRUE, tightened) );
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:438
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:2030
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:973
Definition: type_result.h:33
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
Definition: scip_conflict.c:292
Definition: struct_var.h:99
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
Definition: misc.c:2486
public methods for SCIP parameter handling
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition: scip_var.c:1996
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:490
Definition: struct_scip.h:59
SCIP_Bool SCIPisDualfeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:959
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_var.c:5876
SCIP_EXPORT int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
Definition: var.c:3250
public methods for memory management
Definition: type_conflict.h:50
#define SCIPallocClearBufferArray(scip, ptr, num)
Definition: scip_mem.h:113
Pseudo objective propagator.
static SCIP_RETCODE propagateLowerbound(SCIP *scip, SCIP_PROP *prop, SCIP_RESULT *result)
Definition: prop_pseudoobj.c:3213
public methods for implications, variable bounds, and cliques
SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element)
Definition: misc.c:2598
public methods for conflict handler plugins and conflict analysis
Definition: type_result.h:49
static SCIP_RETCODE propdataExit(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:724
SCIP_RETCODE SCIPpropagateCutoffboundVar(SCIP *scip, SCIP_PROP *prop, SCIP_VAR *var, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, SCIP_Bool *tightened)
Definition: prop_pseudoobj.c:3792
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:1371
static SCIP_DECL_PROPINITSOL(propInitsolPseudoobj)
Definition: prop_pseudoobj.c:3443
Definition: struct_var.h:198
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
Definition: scip_conflict.c:314
static void updateMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:2994
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
Definition: misc.c:3131
SCIP_EXPORT SCIP_VAR ** SCIPvarGetImplVars(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:17957
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
Definition: event.c:315
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_var.c:5991
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:1942
static SCIP_RETCODE getMaxactObjchg(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_Bool useimplics, SCIP_Real *objchg)
Definition: prop_pseudoobj.c:1317
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
Definition: scip_conflict.c:343
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:799
public methods for problem variables
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_param.c:48
SCIP_EXPORT SCIP_Real * SCIPvarGetImplBounds(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:17986
SCIP_RETCODE SCIPanalyzeConflict(SCIP *scip, int validdepth, SCIP_Bool *success)
Definition: scip_conflict.c:663
static SCIP_RETCODE propagateCutoffbound(SCIP *scip, SCIP_PROP *prop, SCIP_RESULT *result)
Definition: prop_pseudoobj.c:2748
public methods for SCIP variables
static void resetContributors(SCIP_HASHMAP *binobjvarmap, SCIP_Bool *collectedvars, SCIP_VAR **contributors, int ncontributors)
Definition: prop_pseudoobj.c:1346
static SCIP_Real getMaxObjPseudoactivityResidual(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_VAR *var)
Definition: prop_pseudoobj.c:3047
SCIP_EXPORT void SCIPsortDownRealPtr(SCIP_Real *realarray, void **ptrarray, int len)
SCIP_RETCODE SCIPsetPropCopy(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPCOPY((*propcopy)))
Definition: scip_prop.c:142
public methods for numerical tolerances
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:2235
public methods for querying solving statistics
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:464
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
Definition: misc.c:3220
public methods for the branch-and-bound tree
static SCIP_RETCODE addConflictBounds(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Real *reqpseudoobjval)
Definition: prop_pseudoobj.c:1835
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
Definition: misc.c:3362
Definition: struct_misc.h:128
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:1058
static SCIP_RETCODE objimplicsDelPos(SCIP *scip, SCIP_OBJIMPLICS *objimplics, int pos)
Definition: prop_pseudoobj.c:516
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:2374
static SCIP_RETCODE getMaxactImplicObjchg(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE bound, SCIP_Real *objchg)
Definition: prop_pseudoobj.c:1127
SCIP_EXPORT int SCIPvarGetNImpls(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:17940
public methods for event handler plugins and event handlers
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:773
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
Definition: scip_event.c:277
SCIP_EXPORT SCIP_BOUNDTYPE SCIPvarGetWorstBoundType(SCIP_VAR *var)
Definition: var.c:17787
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:846
SCIP_EXPORT void SCIPsortDownPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
static SCIP_DECL_PROPPRESOL(propPresolPseudoobj)
Definition: prop_pseudoobj.c:3490
SCIP_RETCODE SCIPsetPropFree(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPFREE((*propfree)))
Definition: scip_prop.c:158
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:2126
static SCIP_RETCODE dropObjEvent(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_EVENTHDLR *eventhdlr, SCIP_VAR *var)
Definition: prop_pseudoobj.c:598
SCIP_RETCODE SCIPsetPropExitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPEXITSOL((*propexitsol)))
Definition: scip_prop.c:222
static SCIP_RETCODE objimplicsFree(SCIP *scip, SCIP_OBJIMPLICS **objimplics)
Definition: prop_pseudoobj.c:488
Definition: type_result.h:42
Definition: grphload.c:88
SCIP_Bool SCIPisDualfeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:972
Definition: struct_prop.h:37
static SCIP_RETCODE propagateCutoffboundGlobally(SCIP *scip, SCIP_PROP *prop, int *nchgbds, SCIP_Bool *cutoff)
Definition: prop_pseudoobj.c:2458
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
Definition: scip_conflict.c:410
Definition: prop_pseudoobj.c:99
public data structures and miscellaneous methods
static SCIP_DECL_PROPEXITSOL(propExitsolPseudoobj)
Definition: prop_pseudoobj.c:3467
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
Definition: scip_event.c:391
static SCIP_DECL_PROPRESPROP(propRespropPseudoobj)
Definition: prop_pseudoobj.c:3629
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:1091
static SCIP_Real getMaxObjPseudoactivityResidualValue(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_Real contrib)
Definition: prop_pseudoobj.c:3009
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
Definition: misc.c:3013
static void calcMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:2944
static SCIP_RETCODE propdataInit(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:1524
static SCIP_RETCODE collectMaxactVar(SCIP *scip, SCIP_VAR *var, SCIP_Bool useimplics, SCIP_Real *objchg, SCIP_Bool *isnotzero)
Definition: prop_pseudoobj.c:1487
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:354
static SCIP_RETCODE propagateCutoffboundBinvars(SCIP *scip, SCIP_PROP *prop, SCIP_Real cutoffbound, SCIP_Real pseudoobjval, int *nfixedvars, SCIP_Bool *cutoff)
Definition: prop_pseudoobj.c:2615
SCIP_EXPORT SCIP_BOUNDTYPE SCIPvarGetBestBoundType(SCIP_VAR *var)
Definition: var.c:17774
static SCIP_Real getVarObjchg(SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BOUNDTYPE bound)
Definition: prop_pseudoobj.c:760
SCIP_EXPORT SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:18025
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:825
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:1895
static void checkImplicsApplied(SCIP *scip, SCIP_VAR *var)
Definition: prop_pseudoobj.c:164
static SCIP_RETCODE catchObjEvent(SCIP *scip, SCIP_PROPDATA *propdata, SCIP_EVENTHDLR *eventhdlr, SCIP_VAR *var)
Definition: prop_pseudoobj.c:567
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: scip_event.c:95
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_param.c:130
public methods for the LP relaxation, rows and columns
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition: scip_var.c:2132
public methods for variable pricer plugins
SCIP_RETCODE SCIPsetPropResprop(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPRESPROP((*propresprop)))
Definition: scip_prop.c:303
SCIP_EXPORT int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
Definition: var.c:3193
methods for sorting joint arrays of various types
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:779
Definition: struct_misc.h:80
public methods for managing events
general public methods
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:812
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
Definition: scip_event.c:311
Definition: type_lp.h:48
public methods for the probing mode
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:786
public methods for message output
Definition: type_var.h:84
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_param.c:74
static SCIP_DECL_HASHKEYVAL(cliqueGetHashkeyVal)
Definition: prop_pseudoobj.c:341
Definition: struct_implics.h:66
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:451
public methods for message handling
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:3148
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:477
SCIP_RETCODE SCIPsetPropPresol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPPRESOL((*proppresol)), int presolpriority, int presolmaxrounds, SCIP_PRESOLTIMING presoltiming)
Definition: scip_prop.c:270
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:2272
SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition: scip_var.c:6329
SCIP_EXPORT SCIP_BOUNDTYPE * SCIPvarGetImplTypes(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:17972
Definition: type_retcode.h:45
public methods for propagator plugins
SCIP_EXPORT SCIP_Bool SCIPvarsHaveCommonClique(SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics)
Definition: var.c:11244
Definition: type_set.h:44
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
Definition: scip_event.c:345
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
Definition: scip_mem.h:98
SCIP_RETCODE SCIPincludePropPseudoobj(SCIP *scip)
Definition: prop_pseudoobj.c:3704
static SCIP_RETCODE dropVarEvents(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:629
SCIP_EXPORT void SCIPsortDownPtrPtr(void **ptrarray1, void **ptrarray2, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
SCIP_EXPORT int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
Definition: var.c:18014
Definition: type_retcode.h:43
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_prop.c:105
Definition: objbenders.h:33
SCIP_RETCODE SCIPsetPropInitsol(SCIP *scip, SCIP_PROP *prop, SCIP_DECL_PROPINITSOL((*propinitsol)))
Definition: scip_prop.c:206
public methods for global and local (sub)problems
Definition: type_result.h:39
Definition: struct_event.h:195
static SCIP_Real getMaxObjPseudoactivity(SCIP *scip, SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:3080
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:3090
SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition: scip_var.c:6209
public methods for propagators
static void checkGlbfirstnonfixed(SCIP_PROPDATA *propdata)
Definition: prop_pseudoobj.c:211
memory allocation routines