Skip to content

Commit ebed29a

Browse files
committed
Add check for local domain during clique substitution
1 parent b58075b commit ebed29a

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

highs/mip/HighsLpRelaxation.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1301,6 +1301,19 @@ HighsLpRelaxation::Status HighsLpRelaxation::resolveLp(HighsDomain* domain) {
13011301
break;
13021302
}
13031303

1304+
// Spot cases where a global domain change during the search has
1305+
// led to a clique and the local domain has branched into a state
1306+
// where the clique subst. would be invalid for the local domain.
1307+
// TODO: Turn into assert when search becomes parallel
1308+
if (domain) {
1309+
double replace_val = subst->replace.val == 0 ? 1.0 - val : val;
1310+
double replace_lb = domain->col_lower_[subst->replace.col];
1311+
double replace_ub = domain->col_upper_[subst->replace.col];
1312+
double feastol = mipsolver.mipdata_->feastol;
1313+
if ((replace_val < replace_lb - feastol) ||
1314+
(replace_val > replace_ub + feastol)) break;
1315+
}
1316+
13041317
col = subst->replace.col;
13051318
if (subst->replace.val == 0) val = 1.0 - val;
13061319

0 commit comments

Comments
 (0)