|
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
cons_linear.c
Go to the documentation of this file.
17 * @brief Constraint handler for linear constraints in their most general form, \f$lhs <= a^T x <= rhs\f$.
47 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
64 #define CONSHDLR_ENFOPRIORITY -1000000 /**< priority of the constraint handler for constraint enforcing */
65 #define CONSHDLR_CHECKPRIORITY -1000000 /**< priority of the constraint handler for checking feasibility */
66 #define CONSHDLR_SEPAFREQ 0 /**< frequency for separating cuts; zero means to separate only in the root node */
67 #define CONSHDLR_PROPFREQ 1 /**< frequency for propagating domains; zero means only preprocessing propagation */
68 #define CONSHDLR_EAGERFREQ 100 /**< frequency for using all instead of only the useful constraints in separation,
70 #define CONSHDLR_MAXPREROUNDS -1 /**< maximal number of presolving rounds the constraint handler participates in (-1: no limit) */
71 #define CONSHDLR_DELAYSEPA FALSE /**< should separation method be delayed, if other separators found cuts? */
72 #define CONSHDLR_DELAYPROP FALSE /**< should propagation method be delayed, if other propagators found reductions? */
73 #define CONSHDLR_DELAYPRESOL FALSE /**< should presolving method be delayed, if other presolvers found reductions? */
74 #define CONSHDLR_NEEDSCONS TRUE /**< should the constraint handler be skipped, if no constraints are available? */
85 #define DEFAULT_TIGHTENBOUNDSFREQ 1 /**< multiplier on propagation frequency, how often the bounds are tightened */
87 #define DEFAULT_MAXROUNDSROOT -1 /**< maximal number of separation rounds in the root node (-1: unlimited) */
89 #define DEFAULT_MAXSEPACUTSROOT 200 /**< maximal number of cuts separated per separation round in root node */
90 #define DEFAULT_PRESOLPAIRWISE TRUE /**< should pairwise constraint comparison be performed in presolving? */
91 #define DEFAULT_PRESOLUSEHASHING TRUE /**< should hash table be used for detecting redundant constraints in advance */
92 #define DEFAULT_NMINCOMPARISONS 200000 /**< number for minimal pairwise presolving comparisons */
93 #define DEFAULT_MINGAINPERNMINCOMP 1e-06 /**< minimal gain per minimal pairwise presolving comparisons to repeat pairwise
95 #define DEFAULT_SORTVARS TRUE /**< should variables be sorted after presolve w.r.t their coefficient absolute for faster
97 #define DEFAULT_CHECKRELMAXABS FALSE /**< should the violation for a constraint with side 0.0 be checked relative
99 #define DEFAULT_MAXAGGRNORMSCALE 0.0 /**< maximal allowed relative gain in maximum norm for constraint aggregation
101 #define DEFAULT_MAXCARDBOUNDDIST 0.0 /**< maximal relative distance from current node's dual bound to primal bound compared
103 #define DEFAULT_SEPARATEALL FALSE /**< should all constraints be subject to cardinality cut generation instead of only
105 #define DEFAULT_AGGREGATEVARIABLES TRUE /**< should presolving search for redundant variables in equations */
106 #define DEFAULT_SIMPLIFYINEQUALITIES TRUE /**< should presolving try to simplify inequalities */
108 #define DEFAULT_DETECTCUTOFFBOUND TRUE /**< should presolving try to detect constraints parallel to the objective
111 #define DEFAULT_DETECTLOWERBOUND TRUE /**< should presolving try to detect constraints parallel to the objective
114 #define DEFAULT_DETECTPARTIALOBJECTIVE TRUE/**< should presolving try to detect subsets of constraints parallel to the
119 #define MAXSCALEDCOEFINTEGER 1e+05 /**< maximal coefficient value after scaling if all variables are of integral
123 #define HASHSIZE_LINEARCONS 131101 /**< minimal size of hash table in linear constraint tables */
125 #define QUADCONSUPGD_PRIORITY 1000000 /**< priority of the constraint handler for upgrading of quadratic constraints */
126 #define NONLINCONSUPGD_PRIORITY 1000000 /**< priority of the constraint handler for upgrading of nonlinear constraints */
131 {
152 /* @todo add multi-aggregation of variables that are in exactly two equations (, if not numerically an issue),
163 SCIP_Real minactivity; /**< minimal value w.r.t. the variable's local bounds for the constraint's
165 SCIP_Real maxactivity; /**< maximal value w.r.t. the variable's local bounds for the constraint's
171 SCIP_Real glbminactivity; /**< minimal value w.r.t. the variable's global bounds for the constraint's
173 SCIP_Real glbmaxactivity; /**< maximal value w.r.t. the variable's global bounds for the constraint's
175 SCIP_Real lastglbminactivity; /**< last global minimal activity which was computed by complete summation
177 SCIP_Real lastglbmaxactivity; /**< last global maximal activity which was computed by complete summation
179 SCIP_Real maxactdelta; /**< maximal activity contribution of a single variable, or SCIP_INVALID if invalid */
180 SCIP_VAR* maxactdeltavar; /**< variable with maximal activity contribution, or NULL if invalid */
187 int minactivityneginf; /**< number of coefficients contributing with neg. infinite value to minactivity */
188 int minactivityposinf; /**< number of coefficients contributing with pos. infinite value to minactivity */
189 int maxactivityneginf; /**< number of coefficients contributing with neg. infinite value to maxactivity */
190 int maxactivityposinf; /**< number of coefficients contributing with pos. infinite value to maxactivity */
191 int minactivityneghuge; /**< number of coefficients contributing with huge neg. value to minactivity */
192 int minactivityposhuge; /**< number of coefficients contributing with huge pos. value to minactivity */
193 int maxactivityneghuge; /**< number of coefficients contributing with huge neg. value to maxactivity */
194 int maxactivityposhuge; /**< number of coefficients contributing with huge pos. value to maxactivity */
195 int glbminactivityneginf;/**< number of coefficients contrib. with neg. infinite value to glbminactivity */
196 int glbminactivityposinf;/**< number of coefficients contrib. with pos. infinite value to glbminactivity */
197 int glbmaxactivityneginf;/**< number of coefficients contrib. with neg. infinite value to glbmaxactivity */
198 int glbmaxactivityposinf;/**< number of coefficients contrib. with pos. infinite value to glbmaxactivity */
199 int glbminactivityneghuge;/**< number of coefficients contrib. with huge neg. value to glbminactivity */
200 int glbminactivityposhuge;/**< number of coefficients contrib. with huge pos. value to glbminactivity */
201 int glbmaxactivityneghuge;/**< number of coefficients contrib. with huge neg. value to glbmaxactivity */
202 int glbmaxactivityposhuge;/**< number of coefficients contrib. with huge pos. value to glbmaxactivity */
219 unsigned int changed:1; /**< was constraint changed since last aggregation round in preprocessing? */
222 unsigned int upgraded:1; /**< is the constraint upgraded and will it be removed after preprocessing? */
227 unsigned int binvarssorted:1; /**< are binary variables sorted w.r.t. the absolute of their coefficient? */
229 unsigned int hascontvar:1; /**< does the constraint contain at least one continuous variable? */
230 unsigned int hasnonbinvar:1; /**< does the constraint contain at least one non-binary variable? */
231 unsigned int hasnonbinvalid:1; /**< is the information stored in hasnonbinvar and hascontvar valid? */
246 SCIP_LINCONSUPGRADE** linconsupgrades; /**< linear constraint upgrade methods for specializing linear constraints */
247 SCIP_Real maxaggrnormscale; /**< maximal allowed relative gain in maximum norm for constraint aggregation
249 SCIP_Real maxcardbounddist; /**< maximal relative distance from current node's dual bound to primal bound compared
251 SCIP_Real mingainpernmincomp; /**< minimal gain per minimal pairwise presolving comparisons to repeat pairwise comparison round */
254 int tightenboundsfreq; /**< multiplier on propagation frequency, how often the bounds are tightened */
260 SCIP_Bool presolpairwise; /**< should pairwise constraint comparison be performed in presolving? */
261 SCIP_Bool presolusehashing; /**< should hash table be used for detecting redundant constraints in advance */
262 SCIP_Bool separateall; /**< should all constraints be subject to cardinality cut generation instead of only
264 SCIP_Bool aggregatevariables; /**< should presolving search for redundant variables in equations */
265 SCIP_Bool simplifyinequalities;/**< should presolving try to cancel down or delete coefficients in inequalities */
268 SCIP_Bool checkrelmaxabs; /**< should the violation for a constraint with side 0.0 be checked relative
270 SCIP_Bool detectcutoffbound; /**< should presolving try to detect constraints parallel to the objective
273 SCIP_Bool detectlowerbound; /**< should presolving try to detect constraints parallel to the objective
276 SCIP_Bool detectpartialobjective;/**< should presolving try to detect subsets of constraints parallel to
308 {
310 {
316 };
348 }
357 }
375 /** constructs an inference information out of a propagation rule and a position number, returns info as int */
436 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &consdata->eventdata, consdata->varssize, newsize) );
524 }
551 SCIPwarningMessage(scip, "Try to add already known upgrade message %p for constraint handler %s.\n", linconsupgd, conshdlrname);
574 SCIP_CALL( conshdlrdataEnsureLinconsupgradesSize(scip, conshdlrdata, conshdlrdata->nlinconsupgrades+1) );
592 /** installs rounding locks for the given variable associated to the given coefficient in the linear constraint */
625 /** removes rounding locks for the given variable associated to the given coefficient in the linear constraint */
799 return (SCIPgetStage(scip) >= SCIP_STAGE_TRANSFORMED && SCIPgetStage(scip) < SCIP_STAGE_FREETRANS);
942 SCIP_CALL( SCIPgetTransformedVars(scip, (*consdata)->nvars, (*consdata)->vars, (*consdata)->vars) );
972 {
1014 SCIP_CALL( SCIPwriteVarsLinearsum(scip, file, consdata->vars, consdata->vals, consdata->nvars, TRUE) );
1090 pseudoactivityneginf = 0;
1095 bound = (SCIPvarGetBestBoundType(consdata->vars[i]) == SCIP_BOUNDTYPE_LOWER) ? SCIPvarGetLbLocal(consdata->vars[i]) : SCIPvarGetUbLocal(consdata->vars[i]);
1141 bound = (consdata->vals[i] > 0.0 ) ? SCIPvarGetLbLocal(consdata->vars[i]) : SCIPvarGetUbLocal(consdata->vars[i]);
1143 && !SCIPisHugeValue(scip, consdata->vals[i] * bound) && !SCIPisHugeValue(scip, -consdata->vals[i] * bound) )
1168 bound = (consdata->vals[i] > 0.0 ) ? SCIPvarGetUbLocal(consdata->vars[i]) : SCIPvarGetLbLocal(consdata->vars[i]);
1170 && !SCIPisHugeValue(scip, consdata->vals[i] * bound) && !SCIPisHugeValue(scip, -consdata->vals[i] * bound) )
1195 bound = (consdata->vals[i] > 0.0 ) ? SCIPvarGetLbGlobal(consdata->vars[i]) : SCIPvarGetUbGlobal(consdata->vars[i]);
1197 consdata->glbminactivity += consdata->vals[i] * bound;
1221 bound = (consdata->vals[i] > 0.0 ) ? SCIPvarGetUbGlobal(consdata->vars[i]) : SCIPvarGetLbGlobal(consdata->vars[i]);
1223 consdata->glbmaxactivity += consdata->vals[i] * bound;
1249 {
1257 /** checks the type of all variables of the constraint and sets hasnonbinvar and hascontvar flags accordingly */
1406 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1454 * lower bound + neg. coef: update maxactivity, positive and negative infinity counters have to be switched
1456 * upper bound + neg. coef: update minactivity, positive and negative infinity counters have to be switched
1510 * lower bound + neg. coef: update maxactivity, positive and negative infinity counters have to be switched
1512 * upper bound + neg. coef: update minactivity, positive and negative infinity counters have to be switched
1573 /* if the bound changed to -infinity, increase the counter for negative infinite contributions */
1601 /* if the bound changed to +infinity, increase the counter for positive infinite contributions */
1624 * but checking here that the bound is not huge again would not handle a change from a huge to an infinite bound
1628 /* if the bound changed to +infinity, increase the counter for positive infinite contributions */
1631 /* if the bound changed to -infinity, increase the counter for negative infinite contributions */
1634 /* if the contribution of this variable is too large and positive, increase the corresponding counter */
1639 /* if the contribution of this variable is too large and negative, increase the corresponding counter */
1654 * but checking here that the bound is not huge again would not handle a change from a huge to an infinite bound
1658 /* if the bound changed to +infinity, increase the counter for positive infinite contributions */
1661 /* if the bound changed to -infinity, increase the counter for negative infinite contributions */
1664 /* if the contribution of this variable is too large and positive, increase the corresponding counter */
1669 /* if the contribution of this variable is too large and negative, increase the corresponding counter */
1713 /* update the activity, if the current value is valid and there was a change in the finite part */
1762 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1771 consdataUpdateActivities(scip, consdata, var, oldlb, newlb, val, SCIP_BOUNDTYPE_LOWER, FALSE, checkreliability);
1773 assert(!SCIPisInfinity(scip, -consdata->minactivity) && !SCIPisInfinity(scip, consdata->minactivity));
1774 assert(!SCIPisInfinity(scip, -consdata->maxactivity) && !SCIPisInfinity(scip, consdata->maxactivity));
1787 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1796 consdataUpdateActivities(scip, consdata, var, oldub, newub, val, SCIP_BOUNDTYPE_UPPER, FALSE, checkreliability);
1798 assert(!SCIPisInfinity(scip, -consdata->minactivity) && !SCIPisInfinity(scip, consdata->minactivity));
1799 assert(!SCIPisInfinity(scip, -consdata->maxactivity) && !SCIPisInfinity(scip, consdata->maxactivity));
1811 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1819 consdataUpdateActivities(scip, consdata, NULL, oldlb, newlb, val, SCIP_BOUNDTYPE_LOWER, TRUE, checkreliability);
1821 assert(!SCIPisInfinity(scip, -consdata->glbminactivity) && !SCIPisInfinity(scip, consdata->glbminactivity));
1822 assert(!SCIPisInfinity(scip, -consdata->glbmaxactivity) && !SCIPisInfinity(scip, consdata->glbmaxactivity));
1834 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1842 consdataUpdateActivities(scip, consdata, NULL, oldub, newub, val, SCIP_BOUNDTYPE_UPPER, TRUE, checkreliability);
1844 assert(!SCIPisInfinity(scip, -consdata->glbminactivity) && !SCIPisInfinity(scip, consdata->glbminactivity));
1845 assert(!SCIPisInfinity(scip, -consdata->glbmaxactivity) && !SCIPisInfinity(scip, consdata->glbmaxactivity));
1849 /** updates minimum and maximum activity and maximum absolute value for coefficient addition */
1856 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1865 {
1882 consdataUpdateActivitiesLb(scip, consdata, var, 0.0, SCIPvarGetLbLocal(var), val, checkreliability);
1883 consdataUpdateActivitiesUb(scip, consdata, var, 0.0, SCIPvarGetUbLocal(var), val, checkreliability);
1884 consdataUpdateActivitiesGlbLb(scip, consdata, 0.0, SCIPvarGetLbGlobal(var), val, checkreliability);
1885 consdataUpdateActivitiesGlbUb(scip, consdata, 0.0, SCIPvarGetUbGlobal(var), val, checkreliability);
1889 /** updates minimum and maximum activity for coefficient deletion, invalidates maximum absolute value if necessary */
1896 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1905 {
1925 consdataUpdateActivitiesLb(scip, consdata, var, SCIPvarGetLbLocal(var), 0.0, val, checkreliability);
1926 consdataUpdateActivitiesUb(scip, consdata, var, SCIPvarGetUbLocal(var), 0.0, val, checkreliability);
1927 consdataUpdateActivitiesGlbLb(scip, consdata, SCIPvarGetLbGlobal(var), 0.0, val, checkreliability);
1928 consdataUpdateActivitiesGlbUb(scip, consdata, SCIPvarGetUbGlobal(var), 0.0, val, checkreliability);
1932 /** updates minimum and maximum activity for coefficient change, invalidates maximum absolute value if necessary */
1940 SCIP_Bool checkreliability /**< should the reliability of the recalculated activity be checked? */
1996 /* reset maximal activity delta, so that it will be recalculated on the next real propagation */
2002 /* @todo do something more clever here, e.g. if oldval * newval >= 0, do the update directly */
2083 /** gets minimal activity for constraint and given values of counters for infinite and huge contributions
2084 * and (if needed) delta to subtract from stored finite part of activity in case of a residual activity
2097 SCIP_Bool goodrelax, /**< should a good relaxation be computed or are relaxed acticities ignored, anyway? */
2101 SCIP_Bool* issettoinfinity /**< pointer to store whether minactivity was set to infinity or calculated */
2128 /* if we have neg. huge contributions, we only know that -infty is a relaxation of the minactivity */
2135 /* we do not need a good relaxation and we have positve huge contributions, so we just return -infty as activity */
2166 * times the minimum value counting as "huge" plus finite (and non-huge) part of minactivity - delta
2184 /** gets maximal activity for constraint and given values of counters for infinite and huge contributions
2185 * and (if needed) delta to subtract from stored finite part of activity in case of a residual activity
2198 SCIP_Bool goodrelax, /**< should a good relaxation be computed or are relaxed acticities ignored, anyway? */
2202 SCIP_Bool* issettoinfinity /**< pointer to store whether maxactivity was set to infinity or calculated */
2229 /* if we have pos. huge contributions, we only know that +infty is a relaxation of the maxactivity */
2236 /* we do not need a good relaxation and we have positve huge contributions, so we just return +infty as activity */
2267 * times the minimum value counting as "huge" plus the finite (and non-huge) part of maxactivity minus delta
2294 SCIP_Bool* minisrelax, /**< pointer to store whether the returned minactivity is just a relaxation,
2297 SCIP_Bool* maxisrelax /**< pointer to store whether the returned maxactivity is just a relaxation,
2301 {
2423 SCIP_Bool* minisrelax, /**< pointer to store whether the returned residual minactivity is just a
2426 SCIP_Bool* maxisrelax, /**< pointer to store whether the returned residual maxactivity is just a
2429 SCIP_Bool* isminsettoinfinity, /**< pointer to store whether minresactivity was set to infinity or calculated */
2430 SCIP_Bool* ismaxsettoinfinity /**< pointer to store whether maxresactivity was set to infinity or calculated */
2478 /* get/compute minactivity by calling getMinActivity() with updated counters for infinite and huge values
2479 * and contribution of variable set to zero that has to be subtracted from finite part of activity
2516 consdata->minactivityposhuge, consdata->minactivityneghuge, absval * minactbound, FALSE, goodrelax,
2520 /* get/compute maxactivity by calling getMaxActivity() with updated counters for infinite and huge values
2521 * and contribution of variable set to zero that has to be subtracted from finite part of activity
2558 consdata->maxactivityposhuge, consdata->maxactivityneghuge, absval * maxactbound, FALSE, goodrelax,
2570 SCIP_Real* glbminactivity, /**< pointer to store the minimal activity, or NULL, if not needed */
2571 SCIP_Real* glbmaxactivity, /**< pointer to store the maximal activity, or NULL, if not needed */
2572 SCIP_Bool* minisrelax, /**< pointer to store whether the returned minactivity is just a relaxation,
2575 SCIP_Bool* maxisrelax, /**< pointer to store whether the returned maxactivity is just a relaxation,
2578 SCIP_Bool* isminsettoinfinity, /**< pointer to store whether minresactivity was set to infinity or calculated */
2579 SCIP_Bool* ismaxsettoinfinity /**< pointer to store whether maxresactivity was set to infinity or calculated */
2634 SCIP_Real* minresactivity, /**< pointer to store the minimal residual activity, or NULL, if not needed */
2635 SCIP_Real* maxresactivity, /**< pointer to store the maximal residual activity, or NULL, if not needed */
2636 SCIP_Bool* minisrelax, /**< pointer to store whether the returned residual minactivity is just a
2639 SCIP_Bool* maxisrelax, /**< pointer to store whether the returned residual maxactivity is just a
2642 SCIP_Bool* isminsettoinfinity, /**< pointer to store whether minresactivity was set to infinity or calculated */
2643 SCIP_Bool* ismaxsettoinfinity /**< pointer to store whether maxresactivity was set to infinity or calculated */
2685 /* get/compute minactivity by calling getMinActivity() with updated counters for infinite and huge values
2686 * and contribution of variable set to zero that has to be subtracted from finite part of activity
2692 getMinActivity(scip, consdata, consdata->glbminactivityposinf - 1, consdata->glbminactivityneginf,
2700 getMinActivity(scip, consdata, consdata->glbminactivityposinf, consdata->glbminactivityneginf - 1,
2733 /* get/compute maxactivity by calling getMaxActivity() with updated counters for infinite and huge values
2734 * and contribution of variable set to zero that has to be subtracted from finite part of activity
2740 getMaxActivity(scip, consdata, consdata->glbmaxactivityposinf, consdata->glbmaxactivityneginf - 1,
2748 getMaxActivity(scip, consdata, consdata->glbmaxactivityposinf - 1, consdata->glbmaxactivityneginf,
2793 {
2816 else if( (SCIPisInfinity(scip, solval) && negsign) || (SCIPisInfinity(scip, -solval) && !negsign) )
2823 SCIPdebugMessage("activity of linear constraint: %.15g, %d positive infinity values, %d negative infinity values \n", activity, nposinf, nneginf);
2926 /** index comparison method of linear constraints: compares two indices of the variable set in the linear constraint */
3063 /* count binary variables and permute variables such that binaries appear first in the sorted vars array */
3112 assert((v >= consdata->nbinvars && !SCIPvarIsBinary(vars[v])) || (v < consdata->nbinvars && SCIPvarIsBinary(vars[v])));
3203 /* the left hand side switched from -infinity to a non-infinite value -> install rounding locks */
3228 /* the left hand side switched from a non-infinite value to -infinity -> remove rounding locks */
3249 /* check whether the left hand side is increased, if and only if that's the case we maybe can propagate, tighten and add more cliques */
3319 /* the right hand side switched from infinity to a non-infinite value -> install rounding locks */
3344 /* the right hand side switched from a non-infinite value to infinity -> remove rounding locks */
3365 /* check whether the right hand side is decreased, if and only if that's the case we maybe can propagate, tighten and add more cliques */
3510 && (SCIPvarCompare(consdata->vars[consdata->nvars-2], consdata->vars[consdata->nvars-1]) <= 0);
3597 consdata->sorted = consdata->sorted && (pos + 2 >= consdata->nvars || (SCIPvarCompare(consdata->vars[pos], consdata->vars[pos + 1]) <= 0));
3601 /* if at most one variable is left, the activities should be recalculated (to correspond exactly to the bounds
3613 /* if the variable defining the maximal activity delta was removed from the constraint, the maximal activity
3739 /* because SCIPisScalingIntegral uses another integrality check as SCIPfeasFloor, we add an additional 0.5 before
3747 SCIPwarningMessage(scip, "coefficient %.15g of variable <%s> in linear constraint <%s> scaled to zero (scalar: %.15g)\n",
3769 /* because SCIPisScalingIntegral uses another integrality check as SCIPfeasFloor, we add an additional 0.5 before
3781 /* because SCIPisScalingIntegral uses another integrality check as SCIPfeasCeil, we subtract 0.5 before ceiling up
3813 assert(nconss >= 0);
3843 * Apply the following rules in the given order, until the sign of the factor is determined. Later rules only apply,
3848 * 4. the number of positive coefficients must not be smaller than the number of negative coefficients
3851 * Try to identify a rational representation of the fractional coefficients, and multiply all coefficients
3936 SCIPdebugMessage("divide linear constraint with %g, because all coefficents are in absolute value the same\n", maxabsval);
3979 epsilon = SCIPepsilon(scip) * 0.9; /* slightly decrease epsilon to be safe in rational conversion below */
4038 /* 3. the absolute value of the right hand side must be greater than that of the left hand side */
4047 /* 4. the number of positive coefficients must not be smaller than the number of negative coefficients */
4100 /* it might be that we have really big coefficients, but all are integral, in that case we want to divide them by
4120 SCIPdebugMessage("scale linear constraint with %"SCIP_LONGINT_FORMAT" to make coefficients integral\n", scm);
4159 SCIPdebugMessage("divide linear constraint by greatest common divisor %"SCIP_LONGINT_FORMAT"\n", gcd);
4228 /* if the variable defining the maximal activity delta was removed from the constraint, the maximal activity
4436 if( SCIPisEQ(scip, lhssubtrahend, consdata->lhs) && SCIPisFeasGE(scip, REALABS(lhssubtrahend), 1.0) )
4453 if( SCIPisEQ(scip, rhssubtrahend, consdata->rhs ) && SCIPisFeasGE(scip, REALABS(rhssubtrahend), 1.0) )
4468 /* if aggregated variables have been replaced, multiple entries of the same variable are possible and we have
4487 /** for each variable in the linear constraint, except the inferred variable, adds one bound to the conflict analysis'
4488 * candidate store (bound depends on sign of coefficient and whether the left or right hand side was the reason for the
4489 * inference variable's bound change); the conflict analysis can be initialized with the linear constraint being the
4497 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
4522 /* for each variable, add the bound to the conflict queue, that is responsible for the minimal or maximal
4523 * residual value, depending on whether the left or right hand side is responsible for the bound change:
4528 /* if the variable is integral we only need to add reason bounds until the propagation could be applied */
4541 /* calculate the minimal and maximal global activity of all other variables involved in the constraint */
4546 consdataGetGlbActivityResiduals(scip, consdata, infervar, vals[inferpos], FALSE, &minresactivity, NULL,
4549 consdataGetGlbActivityResiduals(scip, consdata, infervar, vals[inferpos], FALSE, NULL, &maxresactivity,
4563 if( (reasonisrhs && !isminsettoinfinity && !minisrelax) || (!reasonisrhs && !ismaxsettoinfinity && !maxisrelax) ) /*lint !e644*/
4570 /* calculate the residual capacity that would be left, if the variable would be set to one more / one less
4626 /* rhs is reason and coeff is positive, or lhs is reason and coeff is negative -> lower bound */
4628 rescap -= vals[i] * (SCIPvarGetLbAtIndex(vars[i], bdchgidx, FALSE) - SCIPvarGetLbGlobal(vars[i]));
4632 /* lhs is reason and coeff is positive, or rhs is reason and coeff is negative -> upper bound */
4634 rescap -= vals[i] * (SCIPvarGetUbAtIndex(vars[i], bdchgidx, FALSE) - SCIPvarGetUbGlobal(vars[i]));
4654 /* rhs is reason and coeff is positive, or lhs is reason and coeff is negative -> lower bound is responsible */
4659 /* lhs is reason and coeff is positive, or rhs is reason and coeff is negative -> upper bound is responsible */
4667 /** resolves a propagation on the given variable by supplying the variables needed for applying the corresponding
4678 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */
4679 SCIP_RESULT* result /**< pointer to store the result of the propagation conflict resolving call */
4720 /* the bound of the variable was tightened, because the minimal or maximal residual activity of the linear
4721 * constraint (only taking the other variables into account) didn't leave enough space for a larger
4730 /* the bound of the variable was tightened, because the minimal or maximal residual activity of the linear
4731 * constraint (only taking the other variables into account) didn't leave enough space for a larger
4741 SCIPerrorMessage("invalid inference information %d in linear constraint <%s> at position %d for %s bound of variable <%s>\n",
4752 /** analyzes conflicting bounds on given constraint, and adds conflict constraint to problem */
4761 if( (SCIPgetStage(scip) != SCIP_STAGE_SOLVING && !SCIPinProbing(scip)) || !SCIPisConflictAnalysisApplicable(scip) )
4767 /* add the conflicting bound for each variable of infeasible constraint to conflict candidate queue */
4792 + consdata->minactivityneghuge
4816 SCIP_Bool force /**< should a possible bound change be forced even if below bound strengthening tolerance */
4840 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
4841 SCIPconsGetName(cons), SCIPvarGetName(var), lb, oldub, consdata->vals[pos], consdata->minactivity, consdata->maxactivity, consdata->lhs, consdata->rhs, newub);
4846 SCIP_CALL( SCIPinferVarUbCons(scip, var, newub, cons, getInferInt(proprule, pos), force, &infeasible, &tightened) );
4885 SCIP_Bool force /**< should a possible bound change be forced even if below bound strengthening tolerance */
4909 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, activity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
4910 SCIPconsGetName(cons), SCIPvarGetName(var), oldlb, ub, consdata->vals[pos], consdata->minactivity, consdata->maxactivity, consdata->lhs, consdata->rhs, newlb);
4915 SCIP_CALL( SCIPinferVarLbCons(scip, var, newlb, cons, getInferInt(proprule, pos), force, &infeasible, &tightened) );
4951 SCIP_Bool force /**< should a possible bound change be forced even if below bound strengthening tolerance */
5014 /* if the minactivity is larger than the right hand side by feasibility epsilon, the constraint is infeasible */
5026 /* if the slack is zero in tolerances (or negative, but not enough to make the constraint infeasible), we set
5063 /* if the maxactivity is smaller than the left hand side by feasibility epsilon, the constraint is infeasible */
5075 /* if the slack is zero in tolerances (or negative, but not enough to make the constraint infeasible), we set
5111 /* if the minactivity is larger than the right hand side by feasibility epsilon, the constraint is infeasible */
5123 /* if the slack is zero in tolerances (or negative, but not enough to make the constraint infeasible), we set
5159 /* if the maxactivity is smaller than the left hand side by feasibility epsilon, the constraint is infeasible */
5171 /* if the slack is zero in tolerances (or negative, but not enough to make the constraint infeasible), we set
5211 SCIP_Bool force /**< should a possible bound change be forced even if below bound strengthening tolerance */
5254 consdataGetActivityResiduals(scip, consdata, var, val, FALSE, &minresactivity, &maxresactivity,
5275 ((force && SCIPisLT(scip, newub, ub)) || (SCIPvarIsIntegral(var) && SCIPisFeasLT(scip, newub, ub)) || SCIPisUbBetter(scip, newub, lb, ub)) )
5286 (!SCIPisUbBetter(scip, newub, lb, ub) && (!SCIPisFeasLT(scip, newub, ub) || !SCIPvarIsIntegral(var))
5293 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newub=%.15g\n",
5294 SCIPconsGetName(cons), SCIPvarGetName(var), lb, ub, val, minresactivity, maxresactivity, lhs, rhs, newub);
5310 ub = SCIPvarGetUbLocal(var); /* get bound again: it may be additionally modified due to integrality */
5327 ((force && SCIPisGT(scip, newlb, lb)) || (SCIPvarIsIntegral(var) && SCIPisFeasGT(scip, newlb, lb)) || SCIPisLbBetter(scip, newlb, lb, ub)) )
5342 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
5343 SCIPconsGetName(cons), SCIPvarGetName(var), lb, ub, val, minresactivity, maxresactivity, lhs, rhs, newlb);
5359 lb = SCIPvarGetLbLocal(var); /* get bound again: it may be additionally modified due to integrality */
5377 ((force && SCIPisGT(scip, newlb, lb)) || (SCIPvarIsIntegral(var) && SCIPisFeasGT(scip, newlb, lb)) || SCIPisLbBetter(scip, newlb, lb, ub)) )
5388 || (!SCIPisLbBetter(scip, newlb, lb, ub) && (!SCIPisFeasGT(scip, newlb, lb) || !SCIPvarIsIntegral(var))
5395 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g] -> newlb=%.15g\n",
5396 SCIPconsGetName(cons), SCIPvarGetName(var), lb, ub, val, minresactivity, maxresactivity, lhs, rhs, newlb);
5412 lb = SCIPvarGetLbLocal(var); /* get bound again: it may be additionally modified due to integrality */
5428 ((force && SCIPisLT(scip, newub, ub)) || (SCIPvarIsIntegral(var) && SCIPisFeasLT(scip, newub, ub)) || SCIPisUbBetter(scip, newub, lb, ub)) )
5443 SCIPdebugMessage("linear constraint <%s>: tighten <%s>, old bds=[%.15g,%.15g], val=%.15g, resactivity=[%.15g,%.15g], sides=[%.15g,%.15g], newub=%.15g\n",
5444 SCIPconsGetName(cons), SCIPvarGetName(var), lb, ub, val, minresactivity, maxresactivity, lhs, rhs, newub);
5460 ub = SCIPvarGetUbLocal(var); /* get bound again: it may be additionally modified due to integrality */
5553 consdataGetActivityBounds(scip, consdata, FALSE, &minactivity, &maxactivity, &minisrelax, &maxisrelax);
5557 slack = (SCIPisInfinity(scip, consdata->rhs) || SCIPisInfinity(scip, -minactivity)) ? SCIPinfinity(scip) : (consdata->rhs - minactivity);
5558 surplus = (SCIPisInfinity(scip, -consdata->lhs) || SCIPisInfinity(scip, maxactivity)) ? SCIPinfinity(scip) : (maxactivity - consdata->lhs);
5568 /* as long as the bounds might be tightened again, try to tighten them; abort after a maximal number of rounds */
5570 for( nrounds = 0; (force || !consdata->boundstightened) && nrounds < MAXTIGHTENROUNDS; ++nrounds )
5575 /* try to tighten the bounds of each variable in the constraint. During solving process, the binary variable
5601 && !SCIPisFeasEQ(scip, SCIPvarGetUbLocal(consdata->vars[v]), SCIPvarGetLbLocal(consdata->vars[v])) )
5609 assert(*cutoff || SCIPisFeasEQ(scip, SCIPvarGetLbLocal(consdata->vars[0]), SCIPvarGetUbLocal(consdata->vars[0])));
5621 SCIP_Bool checklprows, /**< has linear constraint to be checked, if it is already in current LP? */
5622 SCIP_Bool checkrelmaxabs, /**< should the violation for a constraint with side 0.0 be checked relative
5654 SCIPdebugMessage(" consdata activity=%.15g (lhs=%.15g, rhs=%.15g, row=%p, checklprows=%u, rowinlp=%u, sol=%p, hascurrentnodelp=%u)\n",
5659 /* the activity of pseudo solutions may be invalid if it comprises positive and negative infinity contributions; we
5670 else if( SCIPisFeasLT(scip, activity, consdata->lhs) || SCIPisFeasGT(scip, activity, consdata->rhs) )
5683 /* the (much) more complicated check: we try to disregard random noise and violations of a 0.0 side which are
5732 SCIPdebugMessage(" lhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
5786 SCIPdebugMessage(" rhs violated absolutely (violation=%16.9g), but feasible when using relative tolerance w.r.t. maximum absolute value (%16.9g)\n",
5848 SCIP_CALL( SCIPcreateEmptyRowCons(scip, &consdata->row, SCIPconsGetHdlr(cons), SCIPconsGetName(cons), consdata->lhs, consdata->rhs,
5851 SCIP_CALL( SCIPaddVarsToRow(scip, consdata->row, consdata->nvars, consdata->vars, consdata->vals) );
5903 /** separates linear constraint: adds linear constraint as cut, if violated by given solution */
5911 SCIP_Bool separateall, /**< should all constraints be subject to cardinality cut generation instead of only
5933 SCIP_CALL( checkCons(scip, cons, sol, (sol != NULL), conshdlrdata->checkrelmaxabs, &violated) );
5946 /* we only want to call the knapsack cardinality cut separator for rows that have a non-zero dual solution */
6032 /* increase age of constraint; age is reset to zero, if a conflict or a propagation was found */
6056 consdataGetActivityBounds(scip, consdata, TRUE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
6060 SCIPdebugMessage("linear constraint <%s> is infeasible (rhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
6071 SCIPdebugMessage("linear constraint <%s> is infeasible (lhs): activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
6080 else if( SCIPisGE(scip, minactivity, consdata->lhs) && SCIPisLE(scip, maxactivity, consdata->rhs) )
6082 SCIPdebugMessage("linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
6137 fixval = SCIPselectSimpleValue(lb - 0.9 * SCIPepsilon(scip), ub + 0.9 * SCIPepsilon(scip), MAXDNOM);
6138 SCIPdebugMessage("converting variable <%s> with fixed bounds [%.15g,%.15g] into fixed variable fixed at %.15g\n",
6175 * a) if the constraint has a finite right hand side and the negative infinity counters for the minactivity are zero
6176 * then add the variables as a clique for which all successive pairs of coefficients fullfill the following
6181 * and also add the binary to binary implication also for non-successive variables for which the same argument
6186 * e.g. 5.3 x1 + 3.6 x2 + 3.3 x3 + 2.1 x4 <= 5.5 (all x are binary) would lead to the clique (x1, x2, x3) and the
6189 * b) if the constraint has a finite left hand side and the positive infinity counters for the maxactivity are zero
6190 * then add the variables as a clique for which all successive pairs of coefficients fullfill the follwoing
6195 * and also add the binary to binary implication also for non-successive variables for which the same argument
6202 * c) the constraint has a finite right hand side and a finite minactivity then add the variables as a negated
6203 * clique(clique on the negated variables) for which all successive pairs of coefficients fullfill the following
6208 * and also add the binary to binary implication also for non-successive variables for which the
6213 * e.g. -4 x1 -3 x2 - 2 x3 + 2 x4 <= -4 would lead to the (negated) clique (~x1, ~x2) and the binary to binary
6216 * d) the constraint has a finite left hand side and a finite maxactivity then add the variables as a negated
6217 * clique(clique on the negated variables) for which all successive pairs of coefficients fullfill the following
6222 * and also add the binary to binary implication also for non-successive variables for which the same argument
6229 * 2. if the linear constraint represents a set-packing or set-partitioning constraint, the whole constraint is added
6280 * for now we only add binary to non-binary implications, and this is only done for the binary variable with the
6281 * maximal absolute contribution and also only if this variable would force all other variables to their bound
6289 /* @todo we might extract implications/cliques if SCIPvarIsBinary() variables exist and we have integer variables
6307 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
6309 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
6310 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
6314 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
6377 /* if the right hand side and the minimal activity are finite and changing the variable with the biggest
6378 * influence to their bound forces all other variables to be at their minimal contribution, we can add these
6381 if( finiterhs && finiteminact && SCIPisEQ(scip, consdata->glbminactivity, consdata->rhs - maxabscontrib) )
6393 SCIP_CALL( SCIPaddVarImplication(scip, vars[position], posval, vars[v], SCIP_BOUNDTYPE_UPPER, SCIPvarGetLbGlobal(vars[v]), &infeasible, &nbdchgs) );
6400 SCIP_CALL( SCIPaddVarImplication(scip, vars[position], posval, vars[v], SCIP_BOUNDTYPE_LOWER, SCIPvarGetUbGlobal(vars[v]), &infeasible, &nbdchgs) );
6412 /* stop when reaching a 'real' binary variable because the variables are sorted after their type */
6418 /* if the left hand side and the maximal activity are finite and changing the variable with the biggest
6419 * influence to their bound forces all other variables to be at their minimal contribution, we can add these
6422 if( finitelhs && finitemaxact && SCIPisEQ(scip, consdata->glbmaxactivity, consdata->lhs - maxabscontrib) )
6434 SCIP_CALL( SCIPaddVarImplication(scip, vars[position], posval, vars[v], SCIP_BOUNDTYPE_LOWER, SCIPvarGetUbGlobal(vars[v]), &infeasible, &nbdchgs) );
6441 SCIP_CALL( SCIPaddVarImplication(scip, vars[position], posval, vars[v], SCIP_BOUNDTYPE_UPPER, SCIPvarGetLbGlobal(vars[v]), &infeasible, &nbdchgs) );
6453 /* stop when reaching a 'real' binary variable because the variables are sorted after their type */
6462 SCIPdebugMessage("extracted %d implications from constraint %s which led to %d bound changes, %scutoff detetcted\n", nimpls, SCIPconsGetName(cons), *nchgbds - oldnchgbds, *cutoff ? "" : "no ");
6467 /* did we find some boundchanges, then we need to remove fixings and tighten the bounds further */
6516 finitenegminact = (consdata->glbminactivityneginf == 0 && consdata->glbminactivityneghuge == 0);
6518 finiteposminact = (consdata->glbminactivityposinf == 0 && consdata->glbminactivityposhuge == 0);
6519 finiteposmaxact = (consdata->glbmaxactivityposinf == 0 && consdata->glbmaxactivityposhuge == 0);
6523 /* 1. we wheck whether some variables do not fit together into this constraint and add the corresponding clique
6526 if( (finiterhs || finitelhs) && (finitenegminact || finiteposminact || finitenegmaxact || finiteposmaxact) )
6563 /* setppc constraints will be handled later; we need at least two binary variables with same sign to extract
6599 #if 0 /* assertion should only holds when constraints were fully propagated and boundstightened */
6600 /* check that it is possible to choose binvar[i], otherwise it should have been fixed to zero */
6638 /* iterate up to the end with j and up to the front with lastfit, and check for different cliques */
6675 /* did we find some boundchanges, then we need to remove fixings and tighten the bounds further */
6748 #if 0 /* assertion should only holds when constraints were fully propagated and boundstightened */
6749 /* check that it is possible to choose binvar[i], otherwise it should have been fixed to zero */
6789 /* iterate up to the front with j and up to the end with lastfit, and check for different cliques */
6800 SCIP_CALL( SCIPaddClique(scip, &(clqvars[lastfit - jstart - 2]), NULL, i - lastfit + 2, &infeasible, &nbdchgs) );
6828 /* did we find some boundchanges, then we need to remove fixings and tighten the bounds further */
6908 #if 0 /* assertion should only holds when constraints were fully propagated and boundstightened */
6949 /* iterate up to the front with j and up to the end with lastfit, and check for different cliques */
6960 SCIP_CALL( SCIPaddClique(scip, &(clqvars[lastfit - jstart - 2]), values, i - lastfit + 2, &infeasible, &nbdchgs) );
6990 /* did we find some boundchanges, then we need to remove fixings and tighten the bounds further */
7068 #if 0 /* assertion should only holds when constraints were fully propagated and boundstightened */
7107 /* iterate up to the end with j and up to the front with lastfit, and check for different cliques */
7153 /* check if all variables are binary, if the coefficients are +1 or -1, and if the right hand side is equal
7154 * to 1 - number of negative coefficients, or if the left hand side is equal to number of positive coefficients - 1
7250 /** tightens coefficients of binary, integer, and implicit integer variables due to activity bounds in presolving:
7257 * xi fixed to its bounds, but with a reduced ai and tightened sides to tighten the LP relaxation
7266 * xi fixed to its bounds, but with a reduced ai and tightened sides to tighten the LP relaxation
7274 * A deviation of only one from their bound makes the lhs/rhs feasible (i.e., redundant), even if all other
7275 * variables are set to their "worst" bound. If all variables which are not surely non-redundant cannot make
7276 * the lhs/rhs redundant, even if they are set to their "best" bound, they can be removed from the constraint.
7277 * E.g., for binary variables and an inequality x_1 +x_2 +10y_1 +10y_2 >= 5, setting either of the y_i to one
7278 * suffices to fulfill the inequality, whereas the x_i do not contribute to feasibility and can be removed.
7280 * @todo use also some tightening procedures for (knapsack) constraints with non-integer coefficients, see
7293 SCIP_Real minactivity; /* minimal value w.r.t. the variable's local bounds for the constraint's
7295 SCIP_Real maxactivity; /* maximal value w.r.t. the variable's local bounds for the constraint's
7330 consdataGetActivityBounds(scip, consdata, TRUE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
7352 SCIPisGE(scip, minactivity + val, consdata->lhs) && SCIPisLE(scip, maxactivity - val, consdata->rhs) )
7369 if( !SCIPisInfinity(scip, -consdata->lhs) && consdata->minactivityneginf + consdata->minactivityneginf == 0 )
7372 lval -= otherval > 0.0 ? otherval * SCIPvarGetLbLocal(consdata->vars[1-i]) : otherval * SCIPvarGetUbLocal(consdata->vars[1-i]);
7375 if( !SCIPisInfinity(scip,consdata->rhs) && consdata->maxactivityneginf + consdata->maxactivityneginf == 0 )
7378 rval += otherval > 0.0 ? otherval * SCIPvarGetUbLocal(consdata->vars[1-i]) : otherval * SCIPvarGetLbLocal(consdata->vars[1-i]);
7393 SCIPdebugMessage("linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
7410 consdataGetActivityBounds(scip, consdata, TRUE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
7414 SCIPdebugMessage("linear constraint <%s>: change lhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->lhs, newlhs);
7423 SCIPdebugMessage("linear constraint <%s>: change rhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->rhs, newrhs);
7458 SCIPisGE(scip, minactivity - val, consdata->lhs) && SCIPisLE(scip, maxactivity + val, consdata->rhs) )
7475 if( !SCIPisInfinity(scip,-consdata->lhs) && consdata->minactivityneginf + consdata->minactivityneginf == 0 )
7478 lval += otherval > 0.0 ? otherval * SCIPvarGetLbLocal(consdata->vars[1-i]) : otherval * SCIPvarGetUbLocal(consdata->vars[1-i]);
7481 if( !SCIPisInfinity(scip,consdata->rhs) && consdata->maxactivityneginf + consdata->maxactivityneginf == 0 )
7484 rval -= otherval > 0.0 ? otherval * SCIPvarGetUbLocal(consdata->vars[1-i]) : otherval * SCIPvarGetLbLocal(consdata->vars[1-i]);
7499 SCIPdebugMessage("linear constraint <%s>: change coefficient %+.15g<%s> to %+.15g<%s>, act=[%.15g,%.15g], side=[%.15g,%.15g]\n",
7516 consdataGetActivityBounds(scip, consdata, TRUE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
7520 SCIPdebugMessage("linear constraint <%s>: change lhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->lhs, newlhs);
7529 SCIPdebugMessage("linear constraint <%s>: change rhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->rhs, newrhs);
7572 /* if the lhs is finite, we will check in the following whether the not non-redundant variables can make lhs feasible;
7573 * this is not valid, if the minactivity is -\infty (aggrlhs would be minus infinity in the following computation)
7574 * or if huge values contributed to the minactivity, because the minactivity is then just a relaxation
7575 * (<= the exact minactivity), and we might falsely claim variables to be redundant in the following
7578 if( !SCIPisInfinity(scip, -consdata->lhs) && (SCIPisInfinity(scip, -minactivity) || minactisrelax) )
7581 /* if the rhs is finite, we will check in the following whether the not non-redundant variables can make rhs feasible;
7582 * this is not valid, if the maxactivity is \infty (aggrrhs would be infinity in the following computation)
7583 * or if huge values contributed to the maxactivity, because the maxactivity is then just a relaxation
7584 * (>= the exact maxactivity), and we might falsely claim variables to be redundant in the following
7587 if( !SCIPisInfinity(scip, consdata->rhs) && (SCIPisInfinity(scip, maxactivity) || maxactisrelax) )
7591 * surely non-redundant variables are all those where a deviation from the bound makes the lhs/rhs redundant
7596 /* check if the constraint contains variables which are redundant. The reasoning is the following:
7597 * Each non-redundant variable can make the lhs/rhs feasible with a deviation of only one in the bound.
7629 SCIPisLT(scip, minactivity + val, consdata->lhs) || SCIPisGT(scip, maxactivity - val, consdata->rhs) )
7633 SCIPdebugMessage("linear constraint <%s>: remove variable <%s> with coefficient <%g> from constraint since it is redundant\n",
7643 consdataGetActivityBounds(scip, consdata, FALSE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
7645 /* we return above if the condition does not hold and deleting a variable cannot increase the number of
7656 SCIPisLT(scip, minactivity - val, consdata->lhs) || SCIPisGT(scip, maxactivity + val, consdata->rhs) )
7658 SCIPdebugMessage("linear constraint <%s>: remove variable <%s> with coefficient <%g> from constraint since it is redundant\n",
7668 consdataGetActivityBounds(scip, consdata, FALSE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
7670 /* we return above if the condition does not hold and deleting a variable cannot increase the number of
7678 /* the following update step is needed in every iteration cause otherwise it is possible that the surely none-
7680 * e.g. y_1 + 16y_2 >= 25, y1 with bounds [9,12], y2 with bounds [0,2], minactivity would be 9, it follows that
7681 * y_2 is surely not redundant and y_1 is redundant so we would first delete y1 and without updating the sides
7689 SCIPdebugMessage("linear constraint <%s>: change lhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->lhs, newlhs);
7696 SCIPdebugMessage("linear constraint <%s>: change rhs %.15g to %.15g\n", SCIPconsGetName(cons), consdata->rhs, newrhs);
7708 /* processes equality with only one variable by fixing the variable and deleting the constraint */
7764 /* processes equality with exactly two variables by aggregating one of the variables and deleting the constraint */
7795 SCIP_CALL( SCIPaggregateVars(scip, consdata->vars[0], consdata->vars[1], consdata->vals[0], consdata->vals[1],
7822 /** calculates the new lhs and rhs of the constraint after the given variable is aggregated out */
7872 /* processes equality with more than two variables by multi-aggregating one of the variables and converting the equality
7873 * into an inequality; if multi-aggregation is not possible, tries to identify one continuous or integer variable that
7876 * @todo Check whether a more clever way of avoiding aggregation of variables containing implicitly integer variables
7931 SCIPdebugMessage("linear constraint <%s>: try to multi-aggregate equality\n", SCIPconsGetName(cons));
7935 * maxnlocksstay: maximal sum of lock numbers if the constraint does not become redundant after the aggregation
7936 * maxnlocksremove: maximal sum of lock numbers if the constraint can be deleted after the aggregation
7943 /* If the constraint becomes redundant, 3 non-zeros are removed, and we get 1 additional non-zero for each
7944 * constraint the variable appears in. Thus, the variable must appear in at most 3 other constraints.
7950 /* If the constraint becomes redundant, 4 non-zeros are removed, and we get 2 additional non-zeros for each
7951 * constraint the variable appears in. Thus, the variable must appear in at most 2 other constraints.
7957 /* If the constraint is redundant but has more than 4 variables, we can only accept one other constraint. */
8008 assert(!SCIPconsIsChecked(cons) || SCIPvarGetNLocksDown(var) >= 1); /* because variable is locked in this equality */
8053 /* check, if variable is used in too many other constraints, even if this constraint could be deleted */
8102 consdataGetActivityResiduals(scip, consdata, var, val, FALSE, &minresactivity, &maxresactivity,
8105 /* do not perform the multi-aggregation due to numerics, if we have huge contributions in the residual
8112 removescons = (SCIPisFeasLE(scip, newlhs, minresactivity) && SCIPisFeasLE(scip, maxresactivity, newrhs));
8117 if( !isminsettoinfinity && SCIPisUpdateUnreliable(scip, minresactivity, consdata->lastminactivity) )
8120 if( !ismaxsettoinfinity && SCIPisUpdateUnreliable(scip, maxresactivity, consdata->lastmaxactivity)
8124 removescons = (SCIPisFeasLE(scip, newlhs, minresactivity) && SCIPisFeasLE(scip, maxresactivity, newrhs));
8131 /* if the constraint does not become redundant, only accept the variable if it does not appear in
8150 /* if all coefficients and variables are integral, the right hand side must also be integral */
8163 /* check whether the the infimum and the supremum of the multi-aggregation can be get infinite */
8201 /* If the infimum and the supremum of a multi-aggregation are both infinite, then the multi-aggregation might not be resolvable.
8202 * E.g., consider the equality z = x-y. If x and y are both fixed to +infinity, the value for z is not determined */
8205 SCIPdebugMessage("do not perform multi-aggregation: infimum and supremum are both infinite\n");
8209 /* if the slack variable is of integer type, and the constraint itself may take fractional values,
8253 SCIPdebugMessage("linear constraint <%s>: multi-aggregate <%s> ==", SCIPconsGetName(cons), SCIPvarGetName(slackvar));
8259 SCIPdebugPrintf(" %+.15g, bounds of <%s>: [%.15g,%.15g], nlocks=%d, maxnlocks=%d, removescons=%u\n",
8260 aggrconst, SCIPvarGetName(slackvar), SCIPvarGetLbGlobal(slackvar), SCIPvarGetUbGlobal(slackvar),
8274 SCIPdebugMessage("linear constraint <%s>: infeasible multi-aggregation\n", SCIPconsGetName(cons));
8284 SCIPdebugMessage("linear constraint <%s>: redundant after multi-aggregation\n", SCIPconsGetName(cons));
8301 /* upgrade continuous variable to an implicit one, if the absolute value of the coefficient is one */
8305 SCIPdebugMessage("linear constraint <%s>: converting continuous variable <%s> to implicit integer variable\n",
8310 SCIPdebugMessage("infeasible upgrade of variable <%s> to integral type, domain is empty\n", SCIPvarGetName(var));
8316 /* aggregate continuous variable to an implicit one, if the absolute value of the coefficient is unequal to one */
8317 /* @todo check if the aggregation coefficient should be in some range(, which is not too big) */
8331 SCIP_CALL( SCIPcreateVar(scip, &newvar, newvarname, -SCIPinfinity(scip), SCIPinfinity(scip), 0.0,
8332 SCIP_VARTYPE_IMPLINT, SCIPvarIsInitial(var), SCIPvarIsRemovable(var), NULL, NULL, NULL, NULL, NULL) );
8347 SCIPdebugMessage("linear constraint <%s>: aggregating continuous variable <%s> to newly created implicit integer variable <%s>, aggregation factor = %g\n",
8351 SCIP_CALL( SCIPaggregateVars(scip, var, newvar, absval, -1.0, 0.0, &infeasible, &redundant, &aggregated) );
8355 SCIPdebugMessage("infeasible aggregation of variable <%s> to implicit variable <%s>, domain is empty\n",
8372 /* we do not have any event on vartype changes, so we need to manually force this constraint to be presolved
8383 /* this seems to help for rococo instances, but does not for rout (where all coefficients are +/- 1.0)
8396 SCIPdebugMessage("linear constraint <%s>: converting integer variable <%s> to implicit integer variable\n",
8401 SCIPdebugMessage("infeasible upgrade of variable <%s> to integral type, domain is empty\n", SCIPvarGetName(var));
8412 /** checks if the given variables and their coefficient are equal (w.r.t. scaling factor) to the objective function */
8451 /* if a variable has a zero objective coefficient the linear constraint is not a subset of the objective
8489 /** check if the linear equality constraint is equal to a subset of the objective function; if so we can remove the
8518 /* check if the linear equality constraints does not have more variables than the objective function */
8530 /* checks if the variables and their coefficients are equal (w.r.t. scaling factor) to the objective function */
8542 SCIPdebugMessage("linear equality constraint <%s> == %g (offset %g) is a subset of the objective function\n",
8558 /** updates the cutoff if the given primal bound (which is implied by the given constraint) is better */
8568 /* increase the cutoff bound value by an epsilon to ensue that solution with the value of the cutoff bound are still
8574 {
8586 /* we cannot disable the enforcement and propagation on ranged rows, because the cutoffbound could only have
8591 /* in case the cutoff bound is worse then the currently known one, we additionally avoid enforcement and
8602 /** check if the linear constraint is parallel to objective function; if so update the cutoff bound and avoid that the
8633 /* check if the linear inequality constraints has the same number of variables as the objective function and if the
8642 /* checks if the variables and their coefficients are equal (w.r.t. scaling factor) to the objective function */
8658 SCIPdebugMessage("constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
8670 SCIPdebugMessage("constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
8679 /* avoid that the linear constraint enters the LP since it is parallel to the objective function */
8692 SCIPdebugMessage("constraint <%s> is parallel to objective function and provides a lower bound <%g>\n",
8704 SCIPdebugMessage("constraint <%s> is parallel to objective function and provides a cutoff bound <%g>\n",
8713 /* avoid that the linear constraint enters the LP since it is parallel to the objective function */
8776 /** returns whether the linear sum of all variables/coefficients except the given one divided by the given value is always
8794 {
8795 if( v != pos && (!SCIPvarIsIntegral(consdata->vars[v]) || !SCIPisIntegral(scip, consdata->vals[v]/val)) )
8847 /* applies dual presolving for variables that are locked only once in a direction, and this locking is due to a
8877 * otherwise we would have to check for variables with nlocks == 0, and these are already processed by the
8889 /* search for a single-locked variable which can be multi-aggregated; if a valid continuous variable was found, we
8896 /* We only want to multi-aggregate variables, if they appear in maximal one additional constraint,
8898 * - If there are only two variables in the constraint from which the multi-aggregation arises, no fill-in will be
8900 * - If there are three variables in the constraint, multi-aggregation in three additional constraints will remove
8901 * six nonzeros (three from the constraint and the three entries of the multi-aggregated variable) and add
8903 * - If there at most four variables in the constraint, multi-aggregation in two additional constraints will remove
8904 * six nonzeros (four from the constraint and the two entries of the multi-aggregated variable) and add
8916 /* if this constraint has both sides, it also provides a lock for the other side and thus we can allow one more lock */
8932 isint = (SCIPvarGetType(var) == SCIP_VARTYPE_BINARY || SCIPvarGetType(var) == SCIP_VARTYPE_INTEGER);
8938 /* better do not multi-aggregate binary variables, since most plugins rely on their binary variables to be either
8956 * - fix x_i to the smallest value for this constraint: x_i := lhs/a_i - \sum_{j \neq i} a_j/a_i * x_j
8960 * - fix x_i to the largest value for this constraint: x_i := lhs/a_i - \sum_{j \neq i} a_j/a_i * x_j
8964 * - fix x_i to the largest value for this constraint: x_i := rhs/a_i - \sum_{j \neq i} a_j/a_i * x_j
8968 * - fix x_i to the smallest value for this constraint: x_i := rhs/a_i - \sum_{j \neq i} a_j/a_i * x_j
8970 * but: all this is only applicable, if the aggregated value is inside x_i's bounds for all possible values
8996 consdataGetActivityResiduals(scip, consdata, var, val, FALSE, &minresactivity, &maxresactivity,
9009 calculateMinvalAndMaxval(scip, consdata->lhs, val, minresactivity, maxresactivity, &minval, &maxval);
9024 if( !isminsettoinfinity && SCIPisUpdateUnreliable(scip, minresactivity, consdata->lastminactivity) )
9032 if( !ismaxsettoinfinity && SCIPisUpdateUnreliable(scip, maxresactivity, consdata->lastmaxactivity) )
9044 /* check again if lhs/a_i - \sum_{j \neq i} a_j/a_i * x_j is always inside the bounds of x_i */
9045 calculateMinvalAndMaxval(scip, consdata->lhs, val, minresactivity, maxresactivity, &minval, &maxval);
9052 /* if the variable is integer, we have to check whether the integrality condition would always be satisfied
9055 if( !isint || (SCIPisIntegral(scip, consdata->lhs/val) && consdataIsResidualIntegral(scip, consdata, i, val)) )
9069 calculateMinvalAndMaxval(scip, consdata->rhs, val, minresactivity, maxresactivity, &minval, &maxval);
9084 if( !isminsettoinfinity && SCIPisUpdateUnreliable(scip, minresactivity, consdata->lastminactivity) )
9091 if( !ismaxsettoinfinity && SCIPisUpdateUnreliable(scip, maxresactivity, consdata->lastmaxactivity) )
9100 /* check again if rhs/a_i - \sum_{j \neq i} a_j/a_i * x_j is always inside the bounds of x_i */
9101 calculateMinvalAndMaxval(scip, consdata->rhs, val, minresactivity, maxresactivity, &minval, &maxval);
9107 /* if the variable is integer, we have to check whether the integrality condition would always be satisfied
9110 if( !isint || (SCIPisIntegral(scip, consdata->rhs/val) && consdataIsResidualIntegral(scip, consdata, i, val)) )
9147 (SCIPvarGetType(bestvar) == SCIP_VARTYPE_BINARY || SCIPvarGetType(bestvar) == SCIP_VARTYPE_INTEGER));
9155 SCIPdebugMessage("linear constraint <%s> (dual): multi-aggregate <%s> ==", SCIPconsGetName(cons), SCIPvarGetName(bestvar));
9210 SCIPdebugPrintf(" %+.15g, bounds of <%s>: [%.15g,%.15g]\n", aggrconst, SCIPvarGetName(bestvar),
9227 /* @todo if multi-aggregate makes them numerical trouble, avoid them if the coefficients differ to much, see
9230 SCIP_CALL( SCIPmultiaggregateVar(scip, bestvar, naggrs, aggrvars, aggrcoefs, aggrconst, &infeasible, &aggregated) );
9234 /* If the infimum and the supremum of a multi-aggregation are both infinite, then the multi-aggregation might not be resolvable.
9235 * E.g., consider the equality z = x-y. If x and y are both fixed to +infinity, the value for z is not determined */
9236 SCIPdebugMessage("do not perform multi-aggregation: infimum and supremum are both infinite\n");
9245 SCIPdebugMessage("linear constraint <%s>: infeasible multi-aggregation\n", SCIPconsGetName(cons));
9468 /** sorting method for constraint data, compares two variables on given indices, continuous variables will be sorted to
9469 * the end and for all other variables the sortation will be in non-increasing order of their absolute value of the
9502 /* for all non-continuous variables, the variables are sorted after decreasing absolute coefficients */
9506 /** tries to simplify coefficients and delete variables in ranged row of the form lhs <= a^Tx <= rhs, e.g. using the greatest
9509 * 1. lhs <= a^Tx <= rhs, forall a_i >= lhs, a_i <= rhs, and forall pairs a_i + a_j > rhs then we can change this
9587 if( SCIPisGE(scip, minval, lhs) && SCIPisLE(scip, maxval, rhs) && SCIPisGT(scip, minval + secondminval, rhs) )
9606 /** tries to simplify coefficients and delete variables in constraints of the form lhs <= a^Tx <= rhs
9611 * 1. We try to determine parts of the constraint which will not change anything on (in-)feasibility of the constraint
9617 * e.g. 5.2x1 + 5.1x2 + 3x3 <= 8.3 => will be changed to 5x1 + 5x2 + 3x3 <= 8 if all x are binary
9621 * e.g. 10x1 + 5y2 + 5x3 + 3x4 <= 15 => will be changed to 2x1 + y2 + x3 + x4 <= 3 if all xi are binary and y2 is
9698 /* @todo the following might be too hard, check which steps can be applied and what code must be corrected
9705 /* @todo: change the following: due to vartype changes, the status of the normalization can be wrong, need an event
9742 /* if we have a normalized inequality (not ranged) the one side should be positive, @see normalizeCons() */
9749 /* call sorting method, order continuous variables to the end and all other variables after non-increasing absolute
9763 assert(consdata->validmaxabsval ? (SCIPisFeasEQ(scip, consdata->maxabsval, REALABS(vals[0])) || SCIPvarGetType(vars[nvars - 1]) == SCIP_VARTYPE_CONTINUOUS) : TRUE);
9773 if( SCIPisEQ(scip, REALABS(vals[0]), 1.0) && ((hasrhs && SCIPisIntegral(scip, rhs)) || (haslhs && SCIPisIntegral(scip, lhs))) )
9799 /* we now determine coefficients as large as the side of the constraint to might retrieve a better reduction were we
9803 * c1: +5x1 + 5x2 + 3x3 + 3x4 + x5 >= 5 (x5 is redundant and does not change (in-)feasibility of this constraint)
9804 * c2: +4x1 + 4x2 + 3x3 + 3x4 + x5 >= 4 (gcd (without the coefficient of x5) after the large coefficients is 3
9805 * c3: +30x1 + 29x2 + 14x3 + 14z1 + 7x5 + 7x6 <= 30 (gcd (without the coefficient of x2) after the large coefficients is 7
9810 * c2: +6x1 + 6x2 + 3x3 + 3x4 + 3x5 >= 6 (will be changed to c2: +2x1 + 2x2 + x3 + x4 + x5 >= 2)
9811 * c3: +28x1 + 28x2 + 14x3 + 14z1 + 7x5 + 7x6 <= 28 (will be changed to c3: +4x1 + 4x2 + 2x3 + 2z1 + x5 + x6 <= 4)
9814 /* if the minimal activity is negative and we found more than one variable with a coefficient bigger than the left
9817 * e.g. 7x1 + 7x2 - 4x3 - 4x4 >= 7 => xi = 1 forall i is not a solution, but if we would do a change on the
9818 * coeffcients due to the gcd on the "small" coeffcients we would get 8x1 + 8x2 - 4x3 - 4x4 >= 8 were xi = 1
9829 /* if we have integer variable with "side"-coefficients but also with a lower bound greater than 0 we stop this
9850 /* all but one variable are processed or the next variables is continuous we cannot perform the extra coefficient
9877 /* find and remove redundant variables which do not interact with the (in-)feasible of a constraints
9966 if( (offsetv == -1 && hasrhs && maxactsub <= siderest && SCIPisFeasGT(scip, minactsub, siderest - gcd)) || (haslhs && SCIPisFeasLT(scip, maxactsub, siderest) && minactsub >= siderest - gcd) )
9992 SCIPdebugMessage("stopped at pos %d (of %d), subactivities [%g, %g], redundant = %u, hasrhs = %u, siderest = %g, gcd = %"SCIP_LONGINT_FORMAT", offset position for 'side' coefficients = %d\n", v, nvars, minactsub, maxactsub, redundant, hasrhs, siderest, gcd, offsetv);
9996 (offsetv == -1 && hasrhs && maxactsub <= siderest && SCIPisFeasGT(scip, minactsub, siderest - gcd)) ||
10045 assert((hasrhs && SCIPisLE(scip, tmpmaxactsub, siderest) && tmpminactsub > siderest - gcd) || (haslhs && tmpmaxactsub < siderest && SCIPisGE(scip, tmpminactsub, siderest - gcd)));
10048 SCIPdebugMessage("removing %d last variables from constraint <%s>, because they never change anything on the feasibility of this constraint\n", nvars - v, SCIPconsGetName(cons));
10145 /* if the greatest commmon divisor has become 1, we might have found the possible coefficient to change or we
10230 /* new coeffcient must not be zero if we would loose the implication that a variable needs to be 0 if
10256 if( (!notchangable && hasrhs && ((!SCIPisFeasIntegral(scip, rhs) || SCIPcalcGreComDiv(gcd, (SCIP_Longint)(rhs + feastol)) < gcd) && (SCIPcalcGreComDiv(gcd, (SCIP_Longint)(REALABS(vals[candpos]) + feastol)) == gcd))) ||
10257 ( haslhs && (!SCIPisFeasIntegral(scip, lhs) || SCIPcalcGreComDiv(gcd, (SCIP_Longint)(lhs + feastol)) < gcd) && (SCIPcalcGreComDiv(gcd, (SCIP_Longint)(REALABS(vals[candpos]) + feastol)) == gcd)) )
10307 /* @todo we still can remove continuous variables if they are redundant due to the non-integrality argument */
10323 /* check if the non-integrality part of all integral variables is smaller than the non-inegrality part of the right
10324 * hand side or bigger than the left hand side respectively, so we can make all of them integral
10328 if( (hasrhs && !SCIPisFeasIntegral(scip, rhs)) || (haslhs && !SCIPisFeasIntegral(scip, lhs)) )
10375 /* if we exceed the fractional part of the right hand side, we cannot tighten the coefficients
10470 /* the fractional part on each variable need to exceed the fractional part on the left hand side */
10568 /* maximal absolute value of coefficients in constraint is one, so we cannot tighten it further */
10586 if( SCIPisEQ(scip, REALABS(vals[nvars - 1]), 1.0) && SCIPisEQ(scip, REALABS(vals[nvars - 2]), 1.0) )
10628 /* we need at least one binary variable and a gcd greater than 1 to try to perform further coefficient changes */
10637 /* calculate greatest common divisor over all integer and binary variables and determine the candidate where we might
10660 /* if the greatest commmon divisor has become 1, we might have found the possible coefficient to change or we
10671 /* if we have only binary variables and both first coefficients have a gcd of 1, both are candidates for
10705 /* we should have found one coefficient, that led to a gcd of 1, otherwise we could normalize the constraint
10713 /* check again, if we have a normalized inequality (not ranged) the one side should be positive,
10769 assert(SCIPisZero(scip, newcoef) || SCIPcalcGreComDiv(gcd, (SCIP_Longint)(REALABS(newcoef) + feastol)) == gcd);
10771 SCIPdebugMessage("gcd = %"SCIP_LONGINT_FORMAT", rest = %"SCIP_LONGINT_FORMAT", restcoef = %"SCIP_LONGINT_FORMAT"; changing coef of variable <%s> to %g and %s by %"SCIP_LONGINT_FORMAT"\n", gcd, rest, restcoef, SCIPvarGetName(vars[candpos]), newcoef, hasrhs ? "reduced rhs" : "increased lhs", hasrhs ? rest : (rest > 0 ? gcd - rest : 0));
10799 SCIPdebugMessage("we did %d coefficient changes and %d side changes on constraint %s when applying one round of the gcd algorithm\n", *nchgcoefs - oldnchgcoefs, *nchgsides - oldnchgsides, SCIPconsGetName(cons));
10807 /* tries to aggregate an (in)equality and an equality in order to decrease the number of variables in the (in)equality:
10809 * where a = val1[v] and b = -val0[v] for common variable v which removes most variable weight;
10811 * the variable weight is a weighted sum over all included variables, where each binary variable weighs BINWEIGHT,
10812 * each integer or implicit integer variable weighs INTWEIGHT and each continuous variable weighs CONTWEIGHT
10821 int* diffidx0minus1, /**< array with indices of variables in cons0, that don't appear in cons1 */
10822 int* diffidx1minus0, /**< array with indices of variables in cons1, that don't appear in cons0 */
10825 int diffidx0minus1weight, /**< variable weight sum of variables in cons0, that don't appear in cons1 */
10826 int diffidx1minus0weight, /**< variable weight sum of variables in cons1, that don't appear in cons0 */
10827 SCIP_Real maxaggrnormscale, /**< maximal allowed relative gain in maximum norm for constraint aggregation */
10840 SCIP_Bool commonvarlindependent; /* indicates whether coefficient vector of common variables in linearly dependent */
10864 SCIPdebugMessage("try aggregation of <%s> and <%s>\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1));
10900 /* count the number of variables in the potential new constraint a * consdata0 + b * consdata1 */
10925 * v's common coefficient in cons1 / v's common coefficient in cons0 should be constant, i.e., equal 0's common coefficient in cons1 / 0's common coefficient in cons0
10993 /* setup best* variables that were not setup above because we are in the commonvarlindependent case */
10998 SCIPdebugMessage("aggregate linear constraints <%s> := %.15g*<%s> + %.15g*<%s> -> nvars: %d -> %d, weight: %d -> %d\n",
11029 /* if we recognized linear dependency of the common coefficients, then the aggregation coefficient should be 0.0 for every common variable */
11082 SCIP_CALL( SCIPcreateConsLinear(scip, &newcons, SCIPconsGetName(cons0), newnvars, newvars, newvals, newlhs, newrhs,
11100 if( consdataGetMaxAbsval(SCIPconsGetData(newcons)) <= maxaggrnormscale * consdataGetMaxAbsval(consdata0) )
11134 /** returns TRUE iff both keys are equal; two constraints are equal if they have the same variables and the
11152 assert(consdata2->sorted);
11235 hashval = (consdata->nvars << 29) + (minidx << 22) + (mididx << 11) + maxidx + addval; /*lint !e701*/
11240 /** compares each constraint with all other constraints for possible redundancy and removes or changes constraint
11295 /* get constraint from current hash table with same variables as cons0 and with coefficients either equal or negated
11313 /* constraint found: create a new constraint with same coefficients and best left and right hand side;
11328 SCIPdebugMessage("aggregate linear constraints <%s> and <%s> with equal coefficients into single ranged row\n",
11341 SCIPdebugMessage("aggregate linear constraints <%s> and <%s> with negated coefficients into single ranged row\n",
11352 SCIPdebugMessage("aggregated linear constraint <%s> is infeasible\n", SCIPconsGetName(cons1));
11357 /* ensure that lhs <= rhs holds without tolerances as we only allow such rows to enter the LP */
11389 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11430 SCIP_Real maxaggrnormscale, /**< maximal allowed relative gain in maximum norm for constraint aggregation */
11494 for( c = (cons0changed ? 0 : firstchange); c < chkind && !(*cutoff) && conss[chkind] != NULL; ++c )
11533 /* SCIPdebugMessage("preprocess linear constraint pair <%s>[chgd:%d, upgd:%d] and <%s>[chgd:%d, upgd:%d]\n",
11560 && ((possignature0 | possignature1) == possignature1) /* possignature0 <= possignature1 (as bit vector) */
11561 && ((negsignature0 | negsignature1) == negsignature0); /* negsignature0 >= negsignature1 (as bit vector) */
11563 && ((possignature0 | possignature1) == possignature0) /* possignature0 >= possignature1 (as bit vector) */
11564 && ((negsignature0 | negsignature1) == negsignature1); /* negsignature0 <= negsignature1 (as bit vector) */
11566 && ((possignature0 | possignature1) == possignature0) /* possignature0 >= possignature1 (as bit vector) */
11567 && ((negsignature0 | negsignature1) == negsignature1); /* negsignature0 <= negsignature1 (as bit vector) */
11569 && ((possignature0 | possignature1) == possignature1) /* possignature0 <= possignature1 (as bit vector) */
11570 && ((negsignature0 | negsignature1) == negsignature0); /* negsignature0 >= negsignature1 (as bit vector) */
11585 * - if lhs0 >= lhs1 and for each variable v and each solution value x_v val0[v]*x_v <= val1[v]*x_v,
11587 * - if rhs0 <= rhs1 and for each variable v and each solution value x_v val0[v]*x_v >= val1[v]*x_v,
11589 * - if val0[v] == -val1[v] for all variables v, the two inequalities can be replaced by a single
11591 * - if at least one constraint is an equality, count the weighted number of common variables W_c
11592 * and the weighted number of variable in the difference sets W_0 = w(V_0 \ V_1), W_1 = w(V_1 \ V_0),
11593 * where the weight of each variable depends on its type, such that aggregations in order to remove the
11595 * - if W_c > W_1, try to aggregate consdata0 := a * consdata0 + b * consdata1 in order to decrease the
11596 * variable weight in consdata0, where a = +/- val1[v] and b = -/+ val0[v] for common v which leads to
11597 * the smallest weight; for numerical stability, we will only accept integral a and b; the sign of a has
11599 * - if W_c > W_0, try to aggregate consdata1 := a * consdata1 + b * consdata0 in order to decrease the
11600 * variable weight in consdata1, where a = +/- val0[v] and b = -/+ val1[v] for common v which leads to
11601 * the smallest weight; for numerical stability, we will only accept integral a and b; the sign of a has
11735 /* the coefficients in both rows are either equal or negated: create a new constraint with same coefficients and
11738 SCIPdebugMessage("aggregate linear constraints <%s> and <%s> with %s coefficients into single ranged row\n",
11757 SCIPdebugMessage("aggregated linear constraint <%s> is infeasible\n", SCIPconsGetName(cons0));
11798 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11810 /* check for domination: remove dominated sides, but don't touch equalities as long as they are not totally
11813 if( cons1dominateslhs && (!cons0isequality || cons1dominatesrhs || SCIPisInfinity(scip, consdata0->rhs) ) )
11824 SCIPdebugMessage("linear constraints <%s> and <%s> are infeasible\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1));
11837 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11844 else if( cons0dominateslhs && (!cons1isequality || cons0dominatesrhs || SCIPisInfinity(scip, consdata1->rhs)) )
11855 SCIPdebugMessage("linear constraints <%s> and <%s> are infeasible\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1));
11867 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11874 if( cons1dominatesrhs && (!cons0isequality || cons1dominateslhs || SCIPisInfinity(scip, -consdata0->lhs)) )
11885 SCIPdebugMessage("linear constraints <%s> and <%s> are infeasible\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1));
11898 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11905 else if( cons0dominatesrhs && (!cons1isequality || cons0dominateslhs || SCIPisInfinity(scip, -consdata1->lhs)) )
11916 SCIPdebugMessage("linear constraints <%s> and <%s> are infeasible\n", SCIPconsGetName(cons0), SCIPconsGetName(cons1));
11928 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11945 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11960 /* update flags of constraint which caused the redundancy s.t. nonredundant information doesn't get lost */
11982 SCIP_CALL( aggregateConstraints(scip, cons0, cons1, commonidx0, commonidx1, diffidx0minus1, diffidx1minus0,
11994 if( !aggregated && cons0isequality && !consdata1->upgraded && commonidxweight > diffidx0minus1weight )
11997 SCIP_CALL( aggregateConstraints(scip, cons1, cons0, commonidx1, commonidx0, diffidx1minus0, diffidx0minus1,
12047 * redlb[v] == k : if x_v >= k, we can always round x_v down to x_v == k without violating any constraint
12048 * redub[v] == k : if x_v <= k, we can always round x_v up to x_v == k without violating any constraint
12061 * This is because then, the value of the variable is either determined by one of its bounds or
12083 /* copy the variable array since this array might change during the curse of this algorithm */
12124 /* we only need to consider constraints that have been locked (i.e., checked constraints or constraints that are
12158 assert(0 <= contv && contv < ncontvars); /* variable should be active due to applyFixings() */
12210 consdataGetGlbActivityResiduals(scip, consdata, var, val, FALSE, &minresactivity, &maxresactivity,
12220 if( !isminsettoinfinity && SCIPisUpdateUnreliable(scip, minresactivity, consdata->lastglbminactivity) )
12224 if( !ismaxsettoinfinity && SCIPisUpdateUnreliable(scip, maxresactivity, consdata->lastglbmaxactivity) )
12230 assert(0 <= arrayindex && arrayindex < nvars); /* variable should be active due to applyFixings() */
12299 /* there is more than one continuous variable or the integer variables have fractional coefficients:
12317 /* there is exactly one continuous variable and the integer variables have integral coefficients:
12318 * this is the interesting case, and we have to check whether the coefficient is +/-1 and the corresponding
12371 * if largest bound to make constraints redundant is -infinity, we better do nothing for numerical reasons
12379 /* if x_v >= redlb[v], we can always round x_v down to x_v == redlb[v] without violating any constraint
12382 SCIPdebugMessage("variable <%s> only locked down in linear constraints: dual presolve <%s>[%.15g,%.15g] <= %.15g\n",
12398 * if smallest bound to make constraints redundant is +infinity, we better do nothing for numerical reasons
12406 /* if x_v <= redub[v], we can always round x_v up to x_v == redub[v] without violating any constraint
12409 SCIPdebugMessage("variable <%s> only locked up in linear constraints: dual presolve <%s>[%.15g,%.15g] >= %.15g\n",
12448 SCIPdebugMessage("infeasible upgrade of variable <%s> to integral type, domain is empty\n", SCIPvarGetName(var));
12454 SCIPdebugMessage("dual presolve: converting continuous variable <%s>[%g,%g] to implicit integer\n",
12493 /** destructor of constraint handler to free constraint handler data (called when SCIP is exiting) */
12541 /** deinitialization method of constraint handler (called before transformed problem is freed) */
12557 {
12589 || SCIPisInfinity(scip, -SCIPconsGetData(cons)->lhs) || SCIPisInfinity(scip, SCIPconsGetData(cons)->rhs) );
12604 /** presolving initialization method of constraint handler (called when presolving is about to begin) */
12683 /* is constraint of type SCIP_CONSTYPE_{SETPARTITION, SETPACKING, SETCOVERING, CARDINALITY, INVKNAPSACK}? */
12919 /** presolving deinitialization method of constraint handler (called after presolving has been finished) */
12962 SCIPstatisticMessage("below threshold: %d / %d ratio= %g\n", ngoodconss, nallconss, (100.0 * ngoodconss / nallconss));
12978 /* this is no problem reduction, because the upgraded constraint was added to the problem before, and the
12979 * (redundant) linear constraint was only kept in order to support presolving the the linear constraint handler
12985 /* since we are not allowed to detect infeasibility in the exitpre stage, we dont give an infeasible pointer */
12994 /** solving process deinitialization method of constraint handler (called before branch and bound process data is freed) */
13029 "(restart) converted %d cuts from the global cut pool into linear constraints\n", ncutsadded);
13030 /* an extra blank line should be printed separately since the buffer message handler only handles up to one
13098 SCIP_CALL( consdataCreate(scip, &targetdata, sourcedata->nvars, sourcedata->vars, sourcedata->vals, sourcedata->lhs, sourcedata->rhs) );
13101 SCIP_CALL( SCIPcreateCons(scip, targetcons, SCIPconsGetName(sourcecons), conshdlr, targetdata,
13102 SCIPconsIsInitial(sourcecons), SCIPconsIsSeparated(sourcecons), SCIPconsIsEnforced(sourcecons),
13105 SCIPconsIsDynamic(sourcecons), SCIPconsIsRemovable(sourcecons), SCIPconsIsStickingAtNode(sourcecons)) );
13118 /** LP initialization method of constraint handler (called before the initial LP relaxation at a node is solved) */
13171 if( (depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
13194 SCIP_CALL( separateCons(scip, conss[c], conshdlrdata, NULL, separatecards, conshdlrdata->separateall, &ncuts, &cutoff) );
13237 if( (depth == 0 && conshdlrdata->maxroundsroot >= 0 && nrounds >= conshdlrdata->maxroundsroot)
13252 SCIP_CALL( separateCons(scip, conss[c], conshdlrdata, sol, TRUE, conshdlrdata->separateall, &ncuts, &cutoff) );
13373 SCIPdebugMessage("-> constraints checked, %s\n", *result == SCIP_FEASIBLE ? "all constraints feasible" : "infeasibility detected");
13425 SCIPinfoMessage(scip, NULL, "activity invalid due to positive and negative infinity contributions\n");
13427 SCIPinfoMessage(scip, NULL, "violation: left hand side is violated by %.15g\n", consdata->lhs - activity);
13429 SCIPinfoMessage(scip, NULL, "violation: right hand side is violated by %.15g\n", activity - consdata->rhs);
13459 /* check, if we want to tighten variable's bounds (in probing, we always want to tighten the bounds) */
13472 && ((tightenboundsfreq == 0 && depth == 0) || (tightenboundsfreq >= 1 && (depth % tightenboundsfreq == 0)));
13482 SCIP_CALL( propagateCons(scip, conss[i], tightenbounds, conshdlrdata->sortvars, &cutoff, &nchgbds) );
13585 /* remember the first constraint that was not yet tried to be upgraded, to begin the next upgrading round with */
13598 /* apply presolving as long as possible on the single constraint (however, abort after a certain number of rounds
13637 consdataGetActivityBounds(scip, consdata, TRUE, &minactivity, &maxactivity, &minactisrelax, &maxactisrelax);
13638 if( SCIPisFeasGT(scip, minactivity, consdata->rhs) || SCIPisFeasLT(scip, maxactivity, consdata->lhs) )
13640 SCIPdebugMessage("linear constraint <%s> is infeasible: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
13645 else if( SCIPisFeasGE(scip, minactivity, consdata->lhs) && SCIPisFeasLE(scip, maxactivity, consdata->rhs) )
13647 SCIPdebugMessage("linear constraint <%s> is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
13656 else if( !SCIPisInfinity(scip, -consdata->lhs) && SCIPisFeasGE(scip, minactivity, consdata->lhs) )
13658 SCIPdebugMessage("linear constraint <%s> left hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
13664 else if( !SCIPisInfinity(scip, consdata->rhs) && SCIPisFeasLE(scip, maxactivity, consdata->rhs) )
13666 SCIPdebugMessage("linear constraint <%s> right hand side is redundant: activitybounds=[%.15g,%.15g], sides=[%.15g,%.15g]\n",
13696 /* reduce big-M coefficients, that make the constraint redundant if the variable is on a bound */
13719 SCIP_CALL( extractCliques(scip, cons, conshdlrdata->sortvars, nfixedvars, nchgbds, &cutoff) );
13746 SCIP_CALL( convertEquality(scip, cons, conshdlrdata, &cutoff, nfixedvars, naggrvars, ndelconss) );
13765 /* remember the first constraint that was not yet tried to be upgraded, to begin the next upgrading round with */
13772 * only apply this expensive procedure, if the single constraint preprocessing did not find any reductions
13775 if( !cutoff && (conshdlrdata->presolusehashing || conshdlrdata->presolpairwise) && !SCIPisStopped(scip) )
13777 if( *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
13784 /* detect redundant constraints; fast version with hash table instead of pairwise comparison */
13785 SCIP_CALL( detectRedundantConstraints(scip, SCIPblkmem(scip), conss, nconss, &firstchange, &cutoff,
13828 npaircomparisons += (SCIPconsGetData(conss[c])->changed) ? c : (c - firstchange); /*lint !e776*/
13831 SCIP_CALL( preprocessConstraintPairs(scip, usefulconss, firstchange, c, conshdlrdata->maxaggrnormscale,
13837 if( ((*ndelconss - oldndelconss) + (*nchgsides - oldnchgsides)/2.0 + (*nchgcoefs - oldnchgcoefs)/10.0) / ((SCIP_Real) npaircomparisons) < conshdlrdata->mingainpernmincomp )
13853 /* before upgrading, check whether we can apply some additional dual presolving, because a variable only appears
13857 && *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
13868 * only upgrade constraints, if no reductions were found in this round (otherwise, the linear constraint handler
13869 * may find additional reductions before giving control away to other (less intelligent?) constraint handlers)
13872 && *nfixedvars == oldnfixedvars && *naggrvars == oldnaggrvars && *nchgbds == oldnchgbds && *ndelconss == oldndelconss
13887 /* only upgrade completely presolved constraints, that changed since the last upgrading call */
13916 * delete upgraded equalities, if we don't need it anymore for aggregation and redundancy checking
13936 else if( *nfixedvars > oldnfixedvars || *naggrvars > oldnaggrvars || *nchgbds > oldnchgbds || *ndelconss > oldndelconss
13955 SCIP_CALL( resolvePropagation(scip, cons, infervar, intToInferInfo(inferinfo), boundtype, bdchgidx, result) );
14061 SCIP_CALL( SCIPcopyConsLinear(scip, cons, sourcescip, consname, nvars, sourcevars, sourcecoefs,
14062 SCIPgetLhsLinear(sourcescip, sourcecons), SCIPgetRhsLinear(sourcescip, sourcecons), varmap, consmap,
14063 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode, global, valid) );
14103 if( isdigit((unsigned char)str[0]) || ((str[0] == '-' || str[0] == '+') && isdigit((unsigned char)str[1])) )
14138 SCIP_CALL( SCIPparseVarsLinearsum(scip, str, vars, coefs, &nvars, coefssize, &requsize, &endptr, success) );
14147 SCIP_CALL( SCIPparseVarsLinearsum(scip, str, vars, coefs, &nvars, coefssize, &requsize, &endptr, success) );
14148 assert(!*success || requsize <= coefssize); /* if successful, then should have had enough space now */
14216 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
14249 /** constraint method of constraint handler which returns the number of variables (if possible) */
14316 /* bound change can turn the constraint infeasible or redundant only if it was a tightening */
14322 /* reset maximal activity delta, so that it will be recalculated on the next real propagation */
14330 else if( (eventtype & SCIP_EVENTTYPE_BOUNDRELAXED) != 0 && !SCIPisInfinity(scip, consdata->maxactdelta) )
14350 /* check whether bound tightening might now be successful (if the current bound was relaxed, it might be
14379 /* reset maximal activity delta, so that it will be recalculated on the next real propagation */
14389 /* there is only one lock left: we may multi-aggregate the variable as slack of an equation */
14455 /* create array of variables and coefficients: sum_{i \in P} x_i - sum_{i \in N} x_i >= 1 - |N| */
14487 (void) SCIPsnprintf(consname, SCIP_MAXSTRLEN, "cf%"SCIP_LONGINT_FORMAT, SCIPgetNConflictConssApplied(scip));
14488 SCIP_CALL( SCIPcreateConsLinear(scip, &cons, consname, nbdchginfos, vars, vals, lhs, SCIPinfinity(scip),
14491 /* try to automatically convert a linear constraint into a more specific and more specialized constraint */
14519 /** upgrades quadratic constraints with only and at least one linear variables into a linear constraint
14588 SCIPgetNLinearVarsNonlinear(scip, cons), SCIPgetLinearVarsNonlinear(scip, cons), SCIPgetLinearCoefsNonlinear(scip, cons),
14619 SCIP_CALL( SCIPincludeConflicthdlrBasic(scip, &conflicthdlr, CONFLICTHDLR_NAME, CONFLICTHDLR_DESC, CONFLICTHDLR_PRIORITY,
14649 SCIP_CALL( SCIPsetConshdlrPresol(scip, conshdlr, consPresolLinear, CONSHDLR_MAXPREROUNDS, CONSHDLR_DELAYPRESOL) );
14651 SCIP_CALL( SCIPsetConshdlrProp(scip, conshdlr, consPropLinear, CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP,
14654 SCIP_CALL( SCIPsetConshdlrSepa(scip, conshdlr, consSepalpLinear, consSepasolLinear, CONSHDLR_SEPAFREQ,
14661 SCIP_CALL( SCIPincludeQuadconsUpgrade(scip, upgradeConsQuadratic, QUADCONSUPGD_PRIORITY, TRUE, CONSHDLR_NAME) );
14667 SCIP_CALL( SCIPincludeNonlinconsUpgrade(scip, upgradeConsNonlinear, NULL, NONLINCONSUPGD_PRIORITY, TRUE, CONSHDLR_NAME) );
14673 "multiplier on propagation frequency, how often the bounds are tightened (-1: never, 0: only at root)",
14674 &conshdlrdata->tightenboundsfreq, TRUE, DEFAULT_TIGHTENBOUNDSFREQ, -1, INT_MAX, NULL, NULL) );
14709 "maximal allowed relative gain in maximum norm for constraint aggregation (0.0: disable constraint aggregation)",
14710 &conshdlrdata->maxaggrnormscale, TRUE, DEFAULT_MAXAGGRNORMSCALE, 0.0, SCIP_REAL_MAX, NULL, NULL) );
14713 "maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for separating knapsack cardinality cuts",
14717 "should all constraints be subject to cardinality cut generation instead of only the ones with non-zero dual value?",
14732 "constraints/"CONSHDLR_NAME"/sortvars", "apply binaries sorting in decr. order of coeff abs value?",
14736 "should the violation for a constraint with side 0.0 be checked relative to 1.0 (FALSE) or to the maximum absolute value in the activity (TRUE)?",
14740 "should presolving try to detect constraints parallel to the objective function defining an upper bound and prevent these constraints from entering the LP?",
14744 "should presolving try to detect constraints parallel to the objective function defining a lower bound and prevent these constraints from entering the LP?",
14793 (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/linear/upgrade/%s", conshdlrname);
14794 (void) SCIPsnprintf(paramdesc, SCIP_MAXSTRLEN, "enable linear upgrading for constraint handler <%s>", conshdlrname);
14805 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
14834 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup?
14836 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even
14861 /* for the solving process we need linear rows, containing only active variables; therefore when creating a linear
14877 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, nconsvars, &constant, &requiredsize, TRUE) );
14885 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, requiredsize, &constant, &requiredsize, TRUE) );
14899 SCIPerrorMessage("try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", name);
14909 SCIPerrorMessage("try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", name);
14925 SCIPerrorMessage("try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", name);
14935 SCIPerrorMessage("try to generate inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", name);
14978 SCIP_CALL( SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
14992 * in its most basic version, i. e., all constraint flags are set to their basic value as explained for the
14993 * method SCIPcreateConsLinear(); all flags can be set via SCIPsetConsFLAGNAME-methods in scip.h
14997 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
15026 SCIP_Real* sourcecoefs, /**< coefficient array of the linear constraint, or NULL if all coefficients are one */
15029 SCIP_HASHMAP* varmap, /**< a SCIP_HASHMAP mapping variables of the source SCIP to corresponding
15031 SCIP_HASHMAP* consmap, /**< a hashmap to store the mapping of source constraints to the corresponding
15041 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? */
15042 SCIP_Bool stickingatnode, /**< should the constraint always be kept at the node where it was added, even
15066 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
15087 /* transform source variable to active variables of the source SCIP since only these can be mapped to variables of
15092 SCIP_CALL( SCIPgetProbvarLinearSum(sourcescip, vars, coefs, &nvars, nvars, &constant, &requiredsize, TRUE) );
15099 SCIP_CALL( SCIPgetProbvarLinearSum(sourcescip, vars, coefs, &nvars, requiredsize, &constant, &requiredsize, TRUE) );
15133 initial, separate, enforce, check, propagate, local, modifiable, dynamic, removable, stickingatnode) );
15161 /* for the solving process we need linear rows, containing only active variables; therefore when creating a linear
15183 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, nconsvars, &constant, &requiredsize, TRUE) );
15191 SCIP_CALL( SCIPgetProbvarLinearSum(scip, consvars, consvals, &nconsvars, requiredsize, &constant, &requiredsize, TRUE) );
15212 SCIPerrorMessage("adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", SCIPvarGetName(var), SCIPconsGetName(cons));
15222 SCIPerrorMessage("adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", SCIPvarGetName(var), SCIPconsGetName(cons));
15238 SCIPerrorMessage("adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite left hand side of the constraint\n", SCIPvarGetName(var), SCIPconsGetName(cons));
15248 SCIPerrorMessage("adding variable <%s> leads to inconsistent constraint <%s>, active variables leads to a infinite constant constradict the infinite right hand side of the constraint\n", SCIPvarGetName(var), SCIPconsGetName(cons));
15409 /** gets the array of variables in the linear constraint; the user must not modify this array! */
15433 /** gets the array of coefficient values in the linear constraint; the user must not modify this array! */
15459 * @note if the solution contains values at infinity, this method will return SCIP_INVALID in case the activity
15571 /** returns the linear relaxation of the given linear constraint; may return NULL if no LP row was yet created;
15597 /** tries to automatically convert a linear constraint into a more specific and more specialized constraint */
15638 /* we cannot upgrade a modifiable linear constraint, since we don't know what additional coefficients to expect */
15660 /* check, if the constraint was already upgraded and will be deleted anyway after preprocessing */
15669 SCIPerrorMessage("cannot upgrade linear constraint that is already stored as row in the LP\n");
15789 SCIPdebugMessage(" +bin=%d -bin=%d +int=%d -int=%d +impl=%d -impl=%d +cont=%d -cont=%d +1=%d -1=%d +I=%d -I=%d +F=%d -F=%d possum=%.15g negsum=%.15g integral=%u\n",
15801 nposbin, nnegbin, nposint, nnegint, nposimpl, nnegimpl, nposimplbin, nnegimplbin, nposcont, nnegcont,
15812 SCIPdebugMessage(" -> upgraded to constraint type <%s>\n", SCIPconshdlrGetName(SCIPconsGetHdlr(*upgdcons)));
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed) Definition: scip.c:20784 SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs) Definition: cons_linear.c:15013 SCIP_Real SCIPvarGetMultaggrConstant(SCIP_VAR *var) Definition: var.c:16183 Definition: type_result.h:33 SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol) Definition: scip.c:25984 SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name) Definition: scip.c:5600 Definition: type_result.h:37 SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSTRANS((*constrans))) Definition: scip.c:5332 static SCIP_RETCODE tightenVarBounds(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force) Definition: cons_linear.c:5219 Definition: struct_var.h:97 static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs) Definition: cons_linear.c:818 static SCIP_RETCODE consCatchEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos) Definition: cons_linear.c:674 static SCIP_RETCODE chgCoefPos(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Real newval) Definition: cons_linear.c:3668 Definition: type_result.h:34 static SCIP_RETCODE simplifyInequalities(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides) Definition: cons_linear.c:9639 SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol) Definition: scip.c:25961 static SCIP_Real consdataGetFeasibility(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol) Definition: cons_linear.c:2862 SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated) Definition: scip.c:20892 SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples) Definition: scip.c:15614 Definition: type_var.h:40 Definition: struct_scip.h:52 SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant) Definition: var.c:11962 static void calculateMinvalAndMaxval(SCIP *scip, SCIP_Real side, SCIP_Real val, SCIP_Real minresactivity, SCIP_Real maxresactivity, SCIP_Real *minval, SCIP_Real *maxval) Definition: cons_linear.c:8820 static void consdataUpdateSignatures(SCIP_CONSDATA *consdata, int pos) Definition: cons_linear.c:2897 SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1374 static void consdataUpdateActivities(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldbound, SCIP_Real newbound, SCIP_Real val, SCIP_BOUNDTYPE boundtype, SCIP_Bool global, SCIP_Bool checkreliability) Definition: cons_linear.c:1411 static void consdataRecomputeMaxActivityDelta(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1349 static SCIP_Bool checkEqualObjective(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real *scale, SCIP_Real *offset) Definition: cons_linear.c:8428 static SCIP_RETCODE fixVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars) Definition: cons_linear.c:6113 static SCIP_RETCODE convertUnaryEquality(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *ndelconss) Definition: cons_linear.c:7724 void SCIPwarningMessage(SCIP *scip, const char *formatstr,...) Definition: scip.c:1206 SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata) Definition: scip.c:13986 static SCIP_RETCODE tightenVarLb(SCIP *scip, SCIP_CONS *cons, int pos, PROPRULE proprule, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force) Definition: cons_linear.c:4890 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38667 SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSRESPROP((*consresprop))) Definition: scip.c:5378 SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa) Definition: scip.c:4990 static SCIP_RETCODE consDropAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr) Definition: cons_linear.c:776 Definition: type_result.h:49 static SCIP_RETCODE propagateCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool tightenbounds, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds) Definition: cons_linear.c:6009 static void consdataUpdateActivitiesGlbUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldub, SCIP_Real newub, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1842 Definition: type_set.h:35 SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy))) Definition: scip.c:5078 SCIP_RETCODE SCIPupdateCutoffbound(SCIP *scip, SCIP_Real cutoffbound) Definition: scip.c:35253 static SCIP_Real consdataGetMaxAbsval(SCIP_CONSDATA *consdata) Definition: cons_linear.c:2023 static SCIP_RETCODE linconsupgradeCreate(SCIP *scip, SCIP_LINCONSUPGRADE **linconsupgrade, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority) Definition: cons_linear.c:466 void SCIPsortDownRealPtr(SCIP_Real *realarray, void **ptrarray, int len) SCIP_RETCODE SCIPseparateRelaxedKnapsack(SCIP *scip, SCIP_CONS *cons, SCIP_SEPA *sepa, int nknapvars, SCIP_VAR **knapvars, SCIP_Real *knapvals, SCIP_Real valscale, SCIP_Real rhs, SCIP_SOL *sol, SCIP_Bool *cutoff, int *ncuts) Definition: cons_knapsack.c:5737 Definition: struct_var.h:196 SCIP_RETCODE SCIPupdateLocalLowerbound(SCIP *scip, SCIP_Real newbound) Definition: scip.c:11674 static void consdataRecomputeMinactivity(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1143 SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip) Definition: scip.c:22044 SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant) Definition: scip.c:15670 SCIP_Real SCIPgetDualfarkasLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15559 SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETVARS((*consgetvars))) Definition: scip.c:5562 static void consdataGetGlbActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *glbminactivity, SCIP_Real *glbmaxactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity) Definition: cons_linear.c:2579 Definition: type_message.h:45 static void permSortConsdata(SCIP_CONSDATA *consdata, int *perm, int nvars) Definition: cons_linear.c:2955 Definition: cons_linear.c:314 static SCIP_DECL_HASHGETKEY(hashGetKeyLinearcons) Definition: cons_linear.c:11142 static void consdataInvalidateActivities(SCIP_CONSDATA *consdata) Definition: cons_linear.c:1046 SCIP_DECL_LINCONSUPGD((*linconsupgd)) SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7209 int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15400 SCIP_RETCODE SCIPincludeConshdlrLinear(SCIP *scip) Definition: cons_linear.c:14617 static void consdataGetGlbActivityResiduals(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool goodrelax, SCIP_Real *minresactivity, SCIP_Real *maxresactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity) Definition: cons_linear.c:2641 static SCIP_Bool conshdlrdataHasUpgrade(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_DECL_LINCONSUPGD((*linconsupgd)), const char *conshdlrname) Definition: cons_linear.c:546 SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:16977 Definition: type_var.h:53 SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPARSE((*consparse))) Definition: scip.c:5539 static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_SOL *sol, SCIP_Bool separatecards, SCIP_Bool separateall, int *ncuts, SCIP_Bool *cutoff) Definition: cons_linear.c:5919 static SCIP_Bool consdataIsResidualIntegral(SCIP *scip, SCIP_CONSDATA *consdata, int pos, SCIP_Real val) Definition: cons_linear.c:8794 static SCIP_RETCODE preprocessConstraintPairs(SCIP *scip, SCIP_CONS **conss, int firstchange, int chkind, SCIP_Real maxaggrnormscale, SCIP_Bool *cutoff, int *ndelconss, int *nchgsides, int *nchgcoefs) Definition: cons_linear.c:11439 SCIP_RETCODE SCIPconvertCutsToConss(SCIP *scip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, int *ncutsadded) Definition: scip.c:2666 SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_Bool delaypresol) Definition: scip.c:5271 SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj) Definition: scip.c:17775 SCIP_VAR ** SCIPgetLinearVarsNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9286 SCIP_RETCODE SCIPparseVarsLinearsum(SCIP *scip, const char *str, SCIP_VAR **vars, SCIP_Real *vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success) Definition: scip.c:14579 SCIP_RETCODE SCIPmarkConsPropagate(SCIP *scip, SCIP_CONS *cons) Definition: scip.c:23484 SCIP_RETCODE SCIPaddVarsToRow(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real *vals) Definition: scip.c:25564 SCIP_Bool SCIPisSumGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38574 SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool *infeasible, int *nbdchgs) Definition: scip.c:19756 static SCIP_RETCODE tightenSides(SCIP *scip, SCIP_CONS *cons, int *nchgsides) Definition: cons_linear.c:7213 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15141 SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var) Definition: scip.c:31775 SCIP_Real SCIPselectSimpleValue(SCIP_Real lb, SCIP_Real ub, SCIP_Longint maxdnom) Definition: misc.c:7132 Definition: type_result.h:40 SCIP_Bool SCIPisSumRelLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:39213 int SCIPgetNLinearVarsNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9274 SCIP_Real SCIPgetRhsNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9373 void SCIPsortDownRealInt(SCIP_Real *realarray, int *intarray, int len) static SCIP_RETCODE detectRedundantConstraints(SCIP *scip, BMS_BLKMEM *blkmem, SCIP_CONS **conss, int nconss, int *firstchange, SCIP_Bool *cutoff, int *ndelconss, int *nchgsides) Definition: cons_linear.c:11258 SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING timingmask) Definition: scip.c:5036 SCIP_RETCODE SCIPchgRowRhs(SCIP *scip, SCIP_ROW *row, SCIP_Real rhs) Definition: scip.c:25459 SCIP_RETCODE SCIPsetConsPropagated(SCIP *scip, SCIP_CONS *cons, SCIP_Bool propagate) Definition: scip.c:22847 SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file) Definition: scip.c:23934 SCIP_RETCODE SCIPaddCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool *infeasible) Definition: scip.c:28256 static SCIP_RETCODE consDropEvent(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos) Definition: cons_linear.c:710 SCIP_Real SCIPgetLhsNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9361 SCIP_Bool SCIPisLbBetter(SCIP *scip, SCIP_Real newlb, SCIP_Real oldlb, SCIP_Real oldub) Definition: scip.c:39054 SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSFREE((*consfree))) Definition: scip.c:5103 SCIP_RETCODE SCIPinferVarUbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18686 Definition: struct_conflict.h:39 static SCIP_RETCODE rangedRowSimplify(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides) Definition: cons_linear.c:9527 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:1287 SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success) Definition: scip.c:22424 Definition: struct_sol.h:50 SCIP_RETCODE SCIPsetConshdlrInit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINIT((*consinit))) Definition: scip.c:5127 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:3388 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:3414 SCIP_Bool SCIPdoNotMultaggrVar(SCIP *scip, SCIP_VAR *var) Definition: scip.c:21071 SCIP_Bool SCIPisUpdateUnreliable(SCIP *scip, SCIP_Real newvalue, SCIP_Real oldvalue) Definition: scip.c:39312 SCIP_Bool SCIPrealToRational(SCIP_Real val, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Longint *nominator, SCIP_Longint *denominator) Definition: misc.c:6727 SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr) Definition: cons.c:3893 static void linconsupgradeFree(SCIP *scip, SCIP_LINCONSUPGRADE **linconsupgrade) Definition: cons_linear.c:487 static SCIP_RETCODE analyzeConflict(SCIP *scip, SCIP_CONS *cons, SCIP_Bool reasonisrhs) Definition: cons_linear.c:4768 static SCIP_RETCODE checkCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool checklprows, SCIP_Bool checkrelmaxabs, SCIP_Bool *violated) Definition: cons_linear.c:5631 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:33378 static SCIP_RETCODE checkParallelObjective(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons_linear.c:8620 static SCIP_RETCODE aggregateConstraints(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, int *commonidx0, int *commonidx1, int *diffidx0minus1, int *diffidx1minus0, int nvarscommon, int commonidxweight, int diffidx0minus1weight, int diffidx1minus0weight, SCIP_Real maxaggrnormscale, int *nchgcoefs, SCIP_Bool *aggregated) Definition: cons_linear.c:10829 Definition: struct_misc.h:101 Constraint handler for knapsack constraints of the form , x binary and . SCIP_RETCODE SCIPincludeNonlinconsUpgrade(SCIP *scip, SCIP_DECL_NONLINCONSUPGD((*nonlinconsupgd)), SCIP_DECL_EXPRGRAPHNODEREFORM((*nodereform)), int priority, SCIP_Bool active, const char *conshdlrname) Definition: cons_nonlinear.c:8860 static SCIP_RETCODE updateCutoffbound(SCIP *scip, SCIP_CONS *cons, SCIP_Real primalbound) Definition: cons_linear.c:8574 SCIP_RETCODE SCIPgetVarCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR *sourcevar, SCIP_VAR **targetvar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *success) Definition: scip.c:1690 static SCIP_RETCODE addRelaxation(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_Bool *cutoff) Definition: cons_linear.c:5872 SCIP_Real * SCIPgetLinearCoefsNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9298 static SCIP_RETCODE tightenVarUb(SCIP *scip, SCIP_CONS *cons, int pos, PROPRULE proprule, SCIP_Real newub, SCIP_Real oldub, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force) Definition: cons_linear.c:4821 SCIP_ROW * SCIPgetRowLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15588 static void getMaxActivity(SCIP *scip, SCIP_CONSDATA *consdata, int posinf, int neginf, int poshuge, int neghuge, SCIP_Real delta, SCIP_Bool global, SCIP_Bool goodrelax, SCIP_Real *maxactivity, SCIP_Bool *isrelax, SCIP_Bool *issettoinfinity) Definition: cons_linear.c:2202 SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar) Definition: scip.c:15319 static SCIP_RETCODE extractCliques(SCIP *scip, SCIP_CONS *cons, SCIP_Bool sortvars, int *nfixedvars, int *nchgbds, SCIP_Bool *cutoff) Definition: cons_linear.c:6248 int SCIPgetNLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12347 Definition: type_result.h:35 Definition: struct_cons.h:36 #define SCIPfreeBlockMemoryArrayNull(scip, ptr, num) Definition: scip.h:19207 SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:17713 SCIP_RETCODE SCIPupdateConsFlags(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1) Definition: scip.c:23000 static SCIP_DECL_QUADCONSUPGD(upgradeConsQuadratic) Definition: cons_linear.c:14536 Definition: struct_cons.h:116 static void consdataGetActivityBounds(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Real *maxactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax) Definition: cons_linear.c:2301 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15233 Definition: type_lp.h:47 static void consdataCalcMaxAbsval(SCIP_CONSDATA *consdata) Definition: cons_linear.c:1249 static SCIP_RETCODE chgRhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs) Definition: cons_linear.c:3290 Definition: type_result.h:36 SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub) Definition: scip.c:17898 static SCIP_RETCODE conshdlrdataEnsureLinconsupgradesSize(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, int num) Definition: cons_linear.c:406 static void consdataUpdateDelCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1905 static SCIP_RETCODE consdataSort(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:3028 static void consdataUpdateAddCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1865 static int inferInfoGetProprule(INFERINFO inferinfo) Definition: cons_linear.c:357 static SCIP_RETCODE consdataTightenCoefs(SCIP *scip, SCIP_CONS *cons, int *nchgcoefs, int *nchgsides) Definition: cons_linear.c:7298 SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38648 Definition: type_set.h:45 constraint handler for quadratic constraints Definition: type_var.h:42 SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITPRE((*consexitpre))) Definition: scip.c:5247 SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15337 #define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum) Definition: scip.h:19189 SCIP_Bool SCIPisScalingIntegral(SCIP *scip, SCIP_Real val, SCIP_Real scalar) Definition: scip.c:38445 Definition: type_var.h:44 SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata) Definition: scip.c:5684 static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, int pos) Definition: cons_linear.c:3553 static SCIP_RETCODE resolvePropagation(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, INFERINFO inferinfo, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_RESULT *result) Definition: cons_linear.c:4686 SCIP_Real SCIPgetFeasibilityLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol) Definition: cons_linear.c:15504 static SCIP_RETCODE checkPartialObjective(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons_linear.c:8507 static SCIP_RETCODE conshdlrdataIncludeUpgrade(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_LINCONSUPGRADE *linconsupgrade) Definition: cons_linear.c:576 Definition: type_set.h:41 Definition: type_retcode.h:33 static SCIP_Bool canTightenBounds(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:4792 static SCIP_RETCODE tightenVarBoundsEasy(SCIP *scip, SCIP_CONS *cons, int pos, SCIP_Bool *cutoff, int *nchgbds, SCIP_Bool force) Definition: cons_linear.c:4959 SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata) Definition: scip.c:4936 static SCIP_RETCODE convertLongEquality(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *naggrvars, int *ndelconss) Definition: cons_linear.c:7894 SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element) Definition: misc.c:1526 static void getMinActivity(SCIP *scip, SCIP_CONSDATA *consdata, int posinf, int neginf, int poshuge, int neghuge, SCIP_Real delta, SCIP_Bool global, SCIP_Bool goodrelax, SCIP_Real *minactivity, SCIP_Bool *isrelax, SCIP_Bool *issettoinfinity) Definition: cons_linear.c:2101 Definition: type_result.h:42 static SCIP_RETCODE scaleCons(SCIP *scip, SCIP_CONS *cons, SCIP_Real scalar) Definition: cons_linear.c:3729 SCIP_VAR ** SCIPgetLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12361 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38705 SCIP_EXPRGRAPHNODE * SCIPgetExprgraphNodeNonlinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_nonlinear.c:9349 const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:706 SCIP_RETCODE SCIPmultiaggregateVar(SCIP *scip, SCIP_VAR *var, int naggvars, SCIP_VAR **aggvars, SCIP_Real *scalars, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated) Definition: scip.c:21023 static SCIP_DECL_HASHKEYVAL(hashKeyValLinearcons) Definition: cons_linear.c:11207 SCIP_RETCODE SCIPaddConsNode(SCIP *scip, SCIP_NODE *node, SCIP_CONS *cons, SCIP_NODE *validnode) Definition: scip.c:11302 SCIP_RETCODE SCIPaddVarImplication(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool *infeasible, int *nbdchgs) Definition: scip.c:19666 static void consdataUpdateChgCoef(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldval, SCIP_Real newval, SCIP_Bool checkreliability) Definition: cons_linear.c:1948 SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars) Definition: scip.c:15360 static SCIP_RETCODE consdataPrint(SCIP *scip, SCIP_CONSDATA *consdata, FILE *file) Definition: cons_linear.c:1007 SCIP_RETCODE SCIPsetConshdlrDelvars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELVARS((*consdelvars))) Definition: scip.c:5493 SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible) Definition: scip.c:20694 void SCIPhashtablePrintStatistics(SCIP_HASHTABLE *hashtable, SCIP_MESSAGEHDLR *messagehdlr) Definition: misc.c:1601 SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18371 public data structures and miscellaneous methods static SCIP_RETCODE chgLhs(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs) Definition: cons_linear.c:3176 SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITPRE((*consinitpre))) Definition: scip.c:5223 SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode) Definition: scip.c:22476 SCIP_RETCODE SCIPsetConsEnforced(SCIP *scip, SCIP_CONS *cons, SCIP_Bool enforce) Definition: scip.c:22797 Definition: type_var.h:55 static SCIP_RETCODE performVarDeletions(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss) Definition: cons_linear.c:3813 static void consdataRecomputeGlbMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1223 static SCIP_Real consdataGetActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_SOL *sol) Definition: cons_linear.c:2793 constraint handler for nonlinear constraints static void conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata) Definition: cons_linear.c:524 Definition: type_var.h:54 Definition: type_var.h:46 SCIP_Bool SCIPstrToRealValue(const char *str, SCIP_Real *value, char **endptr) Definition: misc.c:7650 SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx) Definition: scip.c:22093 static SCIP_RETCODE mergeMultiples(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:4195 Definition: struct_lp.h:188 SCIP_RETCODE SCIPflattenVarAggregationGraph(SCIP *scip, SCIP_VAR *var) Definition: scip.c:15570 methods for debugging static void consdataUpdateActivitiesGlbLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1819 SCIP_Real * SCIPgetCoefsLinearVarsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12375 Definition: type_set.h:39 static SCIP_Real consdataComputePseudoActivity(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1090 SCIP_Real SCIPvarGetNegationConstant(SCIP_VAR *var) Definition: var.c:16216 static void consdataCalcActivities(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:2041 int SCIPgetNQuadVarTermsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12388 Definition: type_var.h:41 Definition: type_var.h:45 SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSINITLP((*consinitlp))) Definition: scip.c:5355 SCIP_Real * SCIPvarGetMultaggrScalars(SCIP_VAR *var) Definition: var.c:16171 Constraint handler for linear constraints in their most general form, . void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key) Definition: misc.c:1434 static SCIP_RETCODE aggregateVariables(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars, int *ndelconss) Definition: cons_linear.c:9321 void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...) Definition: scip.c:1256 SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) Definition: cons_linear.c:15158 SCIP_RETCODE SCIPwriteVarsLinearsum(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool type) Definition: scip.c:14215 SCIP_RETCODE SCIPinferVarLbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18583 static void consdataGetReliableResidualActivity(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *cancelvar, SCIP_Real *resactivity, SCIP_Bool isminresact, SCIP_Bool useglobalbounds) Definition: cons_linear.c:2347 static void consdataRecomputeMaxactivity(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1170 SCIP_Bool SCIPisSumRelEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:39175 SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:33424 SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSDELETE((*consdelete))) Definition: scip.c:5309 static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr) Definition: cons_linear.c:501 static void consdataCalcSignatures(SCIP_CONSDATA *consdata) Definition: cons_linear.c:2922 Definition: struct_misc.h:80 SCIP_RETCODE SCIPchgLhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real lhs) Definition: cons_linear.c:15361 static SCIP_RETCODE lockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) Definition: cons_linear.c:608 SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRINT((*consprint))) Definition: scip.c:5516 void SCIPsort(int *perm, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len) Definition: misc.c:3636 static void consdataGetActivityResiduals(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real val, SCIP_Bool goodrelax, SCIP_Real *minresactivity, SCIP_Real *maxresactivity, SCIP_Bool *minisrelax, SCIP_Bool *maxisrelax, SCIP_Bool *isminsettoinfinity, SCIP_Bool *ismaxsettoinfinity) Definition: cons_linear.c:2428 static SCIP_RETCODE fullDualPresolve(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool *cutoff, int *nchgbds) Definition: cons_linear.c:12037 SCIP_RETCODE SCIPsetConsSeparated(SCIP *scip, SCIP_CONS *cons, SCIP_Bool separate) Definition: scip.c:22772 void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...) Definition: scip.c:1239 static void consdataCheckNonbinvar(SCIP_CONSDATA *consdata) Definition: cons_linear.c:1273 static SCIP_RETCODE consCatchAllEvents(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr) Definition: cons_linear.c:744 Definition: type_lp.h:48 SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode) Definition: cons_linear.c:14821 static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyLinear) Definition: cons_linear.c:12493 #define SCIPduplicateBufferArray(scip, ptr, source, num) Definition: scip.h:19217 static SCIP_RETCODE tightenBounds(SCIP *scip, SCIP_CONS *cons, SCIP_Bool sortvars, SCIP_Bool *cutoff, int *nchgbds) Definition: cons_linear.c:5492 SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXITSOL((*consexitsol))) Definition: scip.c:5199 const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:278 Definition: type_result.h:43 SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38686 SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup) Definition: scip.c:17642 static SCIP_RETCODE convertBinaryEquality(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *naggrvars, int *ndelconss) Definition: cons_linear.c:7780 static SCIP_RETCODE normalizeCons(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:3872 SCIP_RETCODE SCIPunmarkConsPropagate(SCIP *scip, SCIP_CONS *cons) Definition: scip.c:23510 SCIP_RETCODE SCIPsetConsInitial(SCIP *scip, SCIP_CONS *cons, SCIP_Bool initial) Definition: scip.c:22747 SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened) Definition: scip.c:18477 static void getNewSidesAfterAggregation(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *slackvar, SCIP_Real slackcoef, SCIP_Real *newlhs, SCIP_Real *newrhs) Definition: cons_linear.c:7838 SCIP_Bool SCIPisSumRelGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:39251 SCIP_RETCODE SCIPchgRhsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_Real rhs) Definition: cons_linear.c:15382 SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable) Definition: scip.c:25276 SCIP_Real SCIPgetDualsolLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15532 static SCIP_RETCODE convertEquality(SCIP *scip, SCIP_CONS *cons, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars, int *ndelconss) Definition: cons_linear.c:8739 static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *infeasible) Definition: cons_linear.c:4266 SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file) Definition: scip.c:26010 SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38724 SCIP_RETCODE SCIPincludeQuadconsUpgrade(SCIP *scip, SCIP_DECL_QUADCONSUPGD((*quadconsupgd)), int priority, SCIP_Bool active, const char *conshdlrname) Definition: cons_quadratic.c:11693 #define SCIPduplicateBlockMemoryArray(scip, ptr, source, num) Definition: scip.h:19198 SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip) Definition: scip.c:34807 SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15313 static SCIP_RETCODE addCoef(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) Definition: cons_linear.c:3406 static SCIP_DECL_CONFLICTEXEC(conflictExecLinear) Definition: cons_linear.c:14447 Definition: type_retcode.h:45 SCIP_RETCODE SCIPupgradeConsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **upgdcons) Definition: cons_linear.c:15612 SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value) Definition: scip.c:3600 static SCIP_RETCODE consdataEnsureVarsSize(SCIP *scip, SCIP_CONSDATA *consdata, int num) Definition: cons_linear.c:431 SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb) Definition: scip.c:17866 Definition: type_set.h:42 Definition: cons_linear.c:296 static SCIP_DECL_NONLINCONSUPGD(upgradeConsNonlinear) Definition: cons_linear.c:14578 Definition: cons_linear.c:310 SCIP_RETCODE SCIPsetConshdlrExit(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSEXIT((*consexit))) Definition: scip.c:5151 SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup) Definition: scip.c:17590 SCIP_Real SCIPgetActivityLinear(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol) Definition: cons_linear.c:15476 static void consdataRecomputeGlbMinactivity(SCIP *scip, SCIP_CONSDATA *consdata) Definition: cons_linear.c:1197 SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname) Definition: cons_linear.c:14769 SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15424 static SCIP_RETCODE unlockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val) Definition: cons_linear.c:641 SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx) Definition: scip.c:22156 SCIP_Real SCIPgetLhsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12477 Definition: type_retcode.h:43 static SCIP_DECL_CONSGETNVARS(consGetNVarsLinear) Definition: cons_linear.c:14265 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:3470 SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETNVARS((*consgetnvars))) Definition: scip.c:5585 SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val) Definition: scip.c:25540 Definition: type_var.h:43 SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2) Definition: misc.c:6595 Definition: type_set.h:36 SCIP_RETCODE SCIPcopyConsLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_Real *sourcecoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode, SCIP_Bool global, SCIP_Bool *valid) Definition: cons_linear.c:15033 void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata) Definition: cons.c:3903 SCIP_Real SCIPgetRhsQuadratic(SCIP *scip, SCIP_CONS *cons) Definition: cons_quadratic.c:12490 SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons) Definition: cons_linear.c:15448 SCIP_RETCODE SCIPchgRowLhs(SCIP *scip, SCIP_ROW *row, SCIP_Real lhs) Definition: scip.c:25435 static SCIP_RETCODE addConflictBounds(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *infervar, SCIP_BDCHGIDX *bdchgidx, int inferpos, SCIP_Bool reasonisrhs) Definition: cons_linear.c:4507 SCIP_Longint SCIPcalcSmaComMul(SCIP_Longint val1, SCIP_Longint val2) Definition: misc.c:6706 Definition: cons_linear.c:312 Definition: type_result.h:39 Definition: struct_event.h:185 static void consdataUpdateActivitiesLb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldlb, SCIP_Real newlb, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1769 SCIP_Bool SCIPisUbBetter(SCIP *scip, SCIP_Real newub, SCIP_Real oldlb, SCIP_Real oldub) Definition: scip.c:39067 static void consdataUpdateActivitiesUb(SCIP *scip, SCIP_CONSDATA *consdata, SCIP_VAR *var, SCIP_Real oldub, SCIP_Real newub, SCIP_Real val, SCIP_Bool checkreliability) Definition: cons_linear.c:1794 static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata) Definition: cons_linear.c:972 Definition: type_var.h:56 static SCIP_RETCODE dualPresolve(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff, int *nfixedvars, int *naggrvars, int *ndelconss) Definition: cons_linear.c:8865 |