@@ -1156,6 +1156,7 @@ HPresolve::Result HPresolve::dominatedColumns(
11561156 }
11571157
11581158 // count number of fixed columns and modified bounds
1159+ HighsInt numCols = 0 ;
11591160 HighsInt numFixedCols = 0 ;
11601161 HighsInt numFixedColsPredBndAnalysis = 0 ;
11611162 HighsInt numModifiedBndsPredBndAnalysis = 0 ;
@@ -1167,6 +1168,9 @@ HPresolve::Result HPresolve::dominatedColumns(
11671168 // skip deleted columns
11681169 if (colDeleted[j]) continue ;
11691170
1171+ // increment counter for number of columns
1172+ numCols++;
1173+
11701174 // initialise
11711175 HighsInt bestRowPlus = -1 ;
11721176 HighsInt bestRowPlusLen = kHighsIInf ;
@@ -1411,6 +1415,16 @@ HPresolve::Result HPresolve::dominatedColumns(
14111415 HPRESOLVE_CHECKED_CALL (checkRow (bestRowPlus, j, HighsInt{1 },
14121416 ajBestRowPlus, upperImplied,
14131417 hasPosCliques));
1418+
1419+ // do not use predictive bound analysis if it requires many domination
1420+ // checks and does not yield fixings or improved bounds
1421+ allowPredBndAnalysis =
1422+ allowPredBndAnalysis &&
1423+ (numDomChecksPredBndAnalysis == 0 ||
1424+ (numDomChecksPredBndAnalysis / static_cast <double >(numCols) <= 1e4 &&
1425+ (numFixedColsPredBndAnalysis + numModifiedBndsPredBndAnalysis) /
1426+ static_cast <double >(numDomChecksPredBndAnalysis) >=
1427+ 1e-5 ));
14141428 }
14151429
14161430 if (numFixedCols > 0 || numModifiedBndsPredBndAnalysis > 0 )
0 commit comments