Once ALL constraints have been processed, call this to fix variables or
reduce their domain if possible.
Note that this also tighten some constraint that are the only one blocking
in one direction. Currently we only do that for implication, so that if we
have two Booleans such that a + b <= 1 we transform that to = 1 and we
remove one variable since we have now an equivalence relation.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2024-08-06 UTC."],[],["The `DualBoundStrengthening` class detects variables with directional freedom or bound-limited movement. Key actions include: identifying how far a variable can decrease freely (`CanFreelyDecreaseUntil`), marking variables that cannot decrease/increase/move (`CannotDecrease`, `CannotIncrease`, `CannotMove`), and recording the number of deleted constraints (`NumDeletedConstraints`). It processes linear constraints (`ProcessLinearConstraint`), resets its state (`Reset`), and tightens variable domains and constraints once all constraints are processed (`Strengthen`). This process is important to reduce large bounds before scaling.\n"]]