C++ Reference: class ImpliedBoundsProcessor

Note: This documentation is automatically generated.


Given an upper-bounded linear relation (sum terms <= ub), this algorithm inspects the integer variable appearing in the sum and try to replace each of them by a tight lower bound (>= coeff * binary + lb) using the implied bound repository. By tight, we mean that it will take the same value under the current LP solution.

We use a class to reuse memory of the tmp terms.
Method
AddLpVariable

Return type: void

Arguments: IntegerVariable var

Add a new variable that could be used in the new cuts. Note that the cache must be computed to take this into account.

DebugSlack

Return type: bool

Arguments: IntegerVariable first_slack, const LinearConstraint& initial_cut, const LinearConstraint& cut, const std::vector<SlackInfo>& info

Only used for debugging. Substituting back the slack created by the function above should give exactly the same cut as the original one.

GetCachedImpliedBoundInfo

Return type: BestImpliedBoundInfo

Arguments: IntegerVariable var

IbCutPool

Return type: TopNCuts&

As we compute the best implied bounds for each variable, we add violated cuts here.

ImpliedBoundsProcessor

Arguments: absl::Span<const IntegerVariable> lp_vars_, IntegerTrail* integer_trail, ImpliedBounds* implied_bounds

We will only replace IntegerVariable appearing in lp_vars_.

ProcessUpperBoundedConstraint

Return type: void

Arguments: const absl::StrongVector<IntegerVariable, double>& lp_values, LinearConstraint* cut

Processes and updates the given cut.

ProcessUpperBoundedConstraintWithSlackCreation

Return type: void

Arguments: bool substitute_only_inner_variables, IntegerVariable first_slack, const absl::StrongVector<IntegerVariable, double>& lp_values, LinearConstraint* cut, std::vector<SlackInfo>* slack_infos

RecomputeCacheAndSeparateSomeImpliedBoundCuts

Return type: void

Arguments: const absl::StrongVector<IntegerVariable, double>& lp_values

See if some of the implied bounds equation are violated and add them to the IB cut pool if it is the case. Important: This must be called before we process any constraints with a different lp_values or level zero bounds.