@@ -1161,6 +1161,10 @@ HPresolve::Result HPresolve::dominatedColumns(
11611161 HighsInt numFixedColsPredBndAnalysis = 0 ;
11621162 HighsInt numModifiedBndsPredBndAnalysis = 0 ;
11631163
1164+ // parameters for predictive bound analysis
1165+ const double maxAverageNumDomChecksPredBndAnalysis = 1e4 ;
1166+ const double minAverageNumRedsPredBndAnalysis = 1e-2 ;
1167+
11641168 // perform predictive bound analysis?
11651169 bool allowPredBndAnalysis = true ;
11661170
@@ -1417,14 +1421,19 @@ HPresolve::Result HPresolve::dominatedColumns(
14171421 hasPosCliques));
14181422
14191423 // do not use predictive bound analysis if it requires many domination
1420- // checks and does not yield fixings or improved bounds
1424+ // checks and only yields few fixings or improved bounds on average
1425+ double averageNumDomChecksPredBndAnalysis =
1426+ numDomChecksPredBndAnalysis / static_cast <double >(numCols);
1427+ double averageNumRedsPredBndAnalysis =
1428+ (numFixedColsPredBndAnalysis + numModifiedBndsPredBndAnalysis) /
1429+ static_cast <double >(numCols);
14211430 allowPredBndAnalysis =
14221431 allowPredBndAnalysis &&
1423- (numDomChecksPredBndAnalysis == 0 ||
1424- (numDomChecksPredBndAnalysis / static_cast < double >(numCols) <= 1e4 &&
1425- (numFixedColsPredBndAnalysis + numModifiedBndsPredBndAnalysis) /
1426- static_cast < double >(numDomChecksPredBndAnalysis) >=
1427- 1e-5 ));
1432+ (numDomChecksPredBndAnalysis <=
1433+ 30.0 * maxAverageNumDomChecksPredBndAnalysis ||
1434+ (averageNumDomChecksPredBndAnalysis <=
1435+ maxAverageNumDomChecksPredBndAnalysis &&
1436+ averageNumRedsPredBndAnalysis >= minAverageNumRedsPredBndAnalysis ));
14281437 }
14291438
14301439 if (numFixedCols > 0 || numModifiedBndsPredBndAnalysis > 0 )
0 commit comments