@@ -544,6 +544,10 @@ double HPresolve::getMaxAbsRowVal(HighsInt row) const {
544544bool HPresolve::checkUpdateRowDualImpliedBounds (HighsInt col,
545545 double * dualRowLower,
546546 double * dualRowUpper) const {
547+ // check if implied bounds of row duals in given column can be updated (i.e.
548+ // dual row has finite bounds and number of infinite contributions to
549+ // corresponding activity bounds is at most one)
550+
547551 // if the column has an infinite lower bound the reduced cost cannot be
548552 // positive, i.e. the column corresponds to a <= constraint in the dual with
549553 // right hand side -cost which becomes a >= constraint with side +cost.
@@ -571,11 +575,6 @@ bool HPresolve::checkUpdateRowDualImpliedBounds(HighsInt col,
571575void HPresolve::updateRowDualImpliedBounds (HighsInt row, HighsInt col,
572576 double val) {
573577 // propagate implied row dual bound
574- // if the column has an infinite lower bound the reduced cost cannot be
575- // positive, i.e. the column corresponds to a <= constraint in the dual with
576- // right hand side -cost which becomes a >= constraint with side +cost.
577- // Furthermore, we can ignore strictly redundant primal
578- // column bounds and treat them as if they are infinite
579578 double dualRowLower, dualRowUpper;
580579 if (!checkUpdateRowDualImpliedBounds (col, &dualRowLower, &dualRowUpper))
581580 return ;
@@ -627,6 +626,9 @@ void HPresolve::updateRowDualImpliedBounds(HighsInt col) {
627626
628627bool HPresolve::checkUpdateColImpliedBounds (HighsInt row, double * rowLower,
629628 double * rowUpper) const {
629+ // check if implied bounds of columns in given row can be updated (i.e. if
630+ // row's left-hand or right-hand side is finite and number of infinite
631+ // contributions to corresponding activity bounds is at most one)
630632 double myRowLower = isImpliedEquationAtUpper (row) ? model->row_upper_ [row]
631633 : model->row_lower_ [row];
632634 double myRowUpper = isImpliedEquationAtLower (row) ? model->row_lower_ [row]
0 commit comments