@@ -1545,12 +1545,20 @@ HPresolve::Result HPresolve::runProbing(HighsPostsolveStack& postsolve_stack) {
15451545 if (cliquetable.getSubstitution (i) != nullptr || !domain.isBinary (i))
15461546 continue ;
15471547
1548+ bool tightenLimits = (numProbed - oldNumProbed) >= 1000 ;
1549+ if (numProbed - oldNumProbed == 1000 ) splayContingent /= 2 ;
1550+
15481551 // when a large percentage of columns have been deleted, stop this round
15491552 // of probing
15501553 // if (numDel > std::max(model->num_col_ * 0.2, 1000.)) break;
1551- probingEarlyAbort =
1552- numDel >
1553- std::max (HighsInt{1000 }, (model->num_row_ + model->num_col_ ) / 20 );
1554+ if (!tightenLimits) {
1555+ probingEarlyAbort =
1556+ numDel >
1557+ std::max (HighsInt{1000 }, (model->num_row_ + model->num_col_ ) / 20 );
1558+ } else {
1559+ probingEarlyAbort =
1560+ numDel > std::min (HighsInt{500 }, model->num_col_ / 20 );
1561+ }
15541562 if (probingEarlyAbort) break ;
15551563
15561564 // break in case of too many new implications to not spent ages in
@@ -1591,16 +1599,17 @@ HPresolve::Result HPresolve::runProbing(HighsPostsolveStack& postsolve_stack) {
15911599 if (newNumDel > numDel) {
15921600 probingContingent += numDel;
15931601 if (!mipsolver->submip ) {
1594- splayContingent += 100 * (newNumDel + numDelStart);
1595- splayContingent += 1000 * numNewCliques;
1602+ splayContingent +=
1603+ (tightenLimits ? 50 : 100 ) * (newNumDel + numDelStart);
1604+ splayContingent += (tightenLimits ? 500 : 1000 ) * numNewCliques;
15961605 }
15971606 numDel = newNumDel;
15981607 numFail = 0 ;
15991608 } else if (mipsolver->submip || numNewCliques == 0 ) {
1600- splayContingent -= 100 * numFail;
1609+ splayContingent -= (tightenLimits ? 200 : 100 ) * numFail;
16011610 ++numFail;
16021611 } else {
1603- splayContingent += 1000 * numNewCliques;
1612+ splayContingent += (tightenLimits ? 500 : 1000 ) * numNewCliques;
16041613 numFail = 0 ;
16051614 }
16061615
0 commit comments