@@ -1105,15 +1105,14 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
11051105 }
11061106 }
11071107
1108- HighsCDouble rhsminactdiff = rhs - minact;
1109- if (rhsminactdiff < 0.0 ) {
1110- rhsminactdiff = 0.0 ;
1108+ if (rhs - minact < 0.0 ) {
1109+ minact = rhs;
11111110 }
11121111
11131112 for (HighsInt i = 0 ; i != len; ++i) {
11141113 if (mipsolver.variableType (inds[i]) == HighsVarType::kContinuous ) continue ;
11151114
1116- double boundVal = double (rhsminactdiff / vals[i]);
1115+ double boundVal = double ((rhs - minact) / vals[i]);
11171116 if (vals[i] > 0 ) {
11181117 boundVal = std::floor (boundVal + globaldom.col_lower_ [inds[i]] +
11191118 globaldom.feastol ());
@@ -1147,7 +1146,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
11471146 if (nbin < len) {
11481147 for (HighsInt i = 0 ; i != nbin; ++i) {
11491148 HighsInt bincol = inds[perm[i]];
1150- HighsCDouble impliedActivity = rhsminactdiff - std::abs (vals[perm[i]]);
1149+ HighsCDouble impliedActivity = rhs - minact - std::abs (vals[perm[i]]);
11511150 for (HighsInt j = nbin; j != len; ++j) {
11521151 HighsInt col = inds[perm[j]];
11531152 if (globaldom.isFixed (col)) continue ;
@@ -1221,7 +1220,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
12211220 });
12221221 // check if any cliques exists
12231222 if (std::abs (vals[perm[0 ]]) + std::abs (vals[perm[1 ]]) <=
1224- double (rhsminactdiff + feastol))
1223+ double (rhs - minact + feastol))
12251224 return ;
12261225
12271226 HighsInt maxNewEntries =
@@ -1231,7 +1230,7 @@ void HighsCliqueTable::extractCliquesFromCut(const HighsMipSolver& mipsolver,
12311230
12321231 for (HighsInt k = nbin - 1 ; k != 0 && numEntries < maxNewEntries; --k) {
12331232 double mincliqueval =
1234- double (rhsminactdiff - std::abs (vals[perm[k]]) + feastol);
1233+ double (rhs - minact - std::abs (vals[perm[k]]) + feastol);
12351234 auto cliqueend = std::partition_point (
12361235 perm.begin (), perm.begin () + k,
12371236 [&](HighsInt p) { return std::abs (vals[p]) > mincliqueval; });
0 commit comments