@@ -1105,14 +1105,15 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
11051105 }
11061106 }
11071107
1108- if (rhs - minact < 0.0 ) {
1109- return ;
1108+ HighsCDouble rhsminactdiff = rhs - minact;
1109+ if (rhsminactdiff < 0.0 ) {
1110+ rhsminactdiff = 0.0 ;
11101111 }
11111112
11121113 for (HighsInt i = 0 ; i != len; ++i) {
11131114 if (mipsolver.variableType (inds[i]) == HighsVarType::kContinuous ) continue ;
11141115
1115- double boundVal = double ((rhs - minact) / vals[i]);
1116+ double boundVal = double (rhsminactdiff / vals[i]);
11161117 if (vals[i] > 0 ) {
11171118 boundVal = std::floor (boundVal + globaldom.col_lower_ [inds[i]] +
11181119 globaldom.feastol ());
@@ -1146,7 +1147,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
11461147 if (nbin < len) {
11471148 for (HighsInt i = 0 ; i != nbin; ++i) {
11481149 HighsInt bincol = inds[perm[i]];
1149- HighsCDouble impliedActivity = rhs - minact - std::abs (vals[perm[i]]);
1150+ HighsCDouble impliedActivity = rhsminactdiff - std::abs (vals[perm[i]]);
11501151 for (HighsInt j = nbin; j != len; ++j) {
11511152 HighsInt col = inds[perm[j]];
11521153 if (globaldom.isFixed (col)) continue ;
@@ -1220,7 +1221,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
12201221 });
12211222 // check if any cliques exists
12221223 if (std::abs (vals[perm[0 ]]) + std::abs (vals[perm[1 ]]) <=
1223- double (rhs - minact + feastol))
1224+ double (rhsminactdiff + feastol))
12241225 return ;
12251226
12261227 HighsInt maxNewEntries =
@@ -1230,7 +1231,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
12301231
12311232 for (HighsInt k = nbin - 1 ; k != 0 && numEntries < maxNewEntries; --k) {
12321233 double mincliqueval =
1233- double (rhs - minact - std::abs (vals[perm[k]]) + feastol);
1234+ double (rhsminactdiff - std::abs (vals[perm[k]]) + feastol);
12341235 auto cliqueend = std::partition_point (
12351236 perm.begin (), perm.begin () + k,
12361237 [&](HighsInt p) { return std::abs (vals[p]) > mincliqueval; });
0 commit comments