Skip to content

Commit b25d4ad

Browse files
committed
Add more robust fix
1 parent bf0a3da commit b25d4ad

File tree

1 file changed

+7
-6
lines changed

1 file changed

+7
-6
lines changed

highs/mip/HighsCliqueTable.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)