Doubleton Elimination
Given equality constraint ax + by = c with two variables:
- Solve for y: y = (c - ax) / b
- Substitute y in objective: c_x x + c_y y → c_x x + c_y(c-ax)/b
- Substitute y in all constraints containing y
- Transfer bounds: l_y ≤ y ≤ u_y becomes bounds on x
- Remove row and column y from problem
Mathematical Formulation
Original: min c_x·x + c_y·y s.t. ax + by = c, bounds After: min (c_x - c_y·a/b)x + c_y·c/b, modified bounds on x Postsolve recovers y = (c - ax)/b from optimal x*
Complexity
Time: O(nnz(col_y)) per doubleton - updating all rows with y Typically reduces problem size significantly when equality rows exist Cascading effect: may create new singletons or doubletons
Implementations
CoinUtils
- CoinPresolveDoubleton.hpp - Doubleton row presolve: substitute y from ax+by=c