Skip to content

Commit 7f946c5

Browse files
committed
Pass local conflict pool to redcost propagation
1 parent d45d294 commit 7f946c5

File tree

3 files changed

+26
-26
lines changed

3 files changed

+26
-26
lines changed

highs/mip/HighsRedcostFixing.cpp

Lines changed: 21 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ void HighsRedcostFixing::propagateRootRedcost(const HighsMipSolver& mipsolver) {
7676
void HighsRedcostFixing::propagateRedCost(const HighsMipSolver& mipsolver,
7777
HighsDomain& localdomain,
7878
HighsDomain& globaldom,
79-
const HighsLpRelaxation& lp) {
79+
const HighsLpRelaxation& lp,
80+
HighsConflictPool& conflictpool) {
8081
const std::vector<double>& lpredcost = lp.getSolution().col_dual;
8182
double lpobjective = lp.getObjective();
8283
HighsCDouble gap =
@@ -151,29 +152,25 @@ void HighsRedcostFixing::propagateRedCost(const HighsMipSolver& mipsolver,
151152
vals, rhs, false)) {
152153
bool addedConstraints = false;
153154

154-
if (mipsolver.mipdata_->workers.size() <= 1) {
155-
HighsInt oldNumConflicts =
156-
mipsolver.mipdata_->conflictPool.getNumConflicts();
157-
for (const HighsDomainChange& domchg : boundChanges) {
158-
if (localdomain.isActive(domchg)) continue;
159-
localdomain.conflictAnalyzeReconvergence(
160-
domchg, inds.data(), vals.data(), inds.size(), rhs,
161-
mipsolver.mipdata_->conflictPool, globaldom);
162-
}
163-
addedConstraints = mipsolver.mipdata_->conflictPool.getNumConflicts() !=
164-
oldNumConflicts;
165-
166-
if (addedConstraints) {
167-
localdomain.propagate();
168-
if (localdomain.infeasible()) return;
169-
170-
boundChanges.erase(
171-
std::remove_if(boundChanges.begin(), boundChanges.end(),
172-
[&](const HighsDomainChange& domchg) {
173-
return localdomain.isActive(domchg);
174-
}),
175-
boundChanges.end());
176-
}
155+
HighsInt oldNumConflicts = conflictpool.getNumConflicts();
156+
for (const HighsDomainChange& domchg : boundChanges) {
157+
if (localdomain.isActive(domchg)) continue;
158+
localdomain.conflictAnalyzeReconvergence(domchg, inds.data(),
159+
vals.data(), inds.size(), rhs,
160+
conflictpool, globaldom);
161+
}
162+
addedConstraints = conflictpool.getNumConflicts() != oldNumConflicts;
163+
164+
if (addedConstraints) {
165+
localdomain.propagate();
166+
if (localdomain.infeasible()) return;
167+
168+
boundChanges.erase(
169+
std::remove_if(boundChanges.begin(), boundChanges.end(),
170+
[&](const HighsDomainChange& domchg) {
171+
return localdomain.isActive(domchg);
172+
}),
173+
boundChanges.end());
177174
}
178175

179176
if (!boundChanges.empty()) {

highs/mip/HighsRedcostFixing.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <map>
1616
#include <vector>
1717

18+
#include "HighsConflictPool.h"
1819
#include "mip/HighsDomainChange.h"
1920

2021
class HighsDomain;
@@ -34,7 +35,8 @@ class HighsRedcostFixing {
3435
static void propagateRedCost(const HighsMipSolver& mipsolver,
3536
HighsDomain& localdomain,
3637
HighsDomain& globaldom,
37-
const HighsLpRelaxation& lp);
38+
const HighsLpRelaxation& lp,
39+
HighsConflictPool& conflictpool);
3840

3941
void addRootRedcost(const HighsMipSolver& mipsolver,
4042
const std::vector<double>& lpredcost, double lpobjective);

highs/mip/HighsSearch.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1090,7 +1090,8 @@ HighsSearch::NodeResult HighsSearch::evaluateNode() {
10901090
&localdom);
10911091
}
10921092
HighsRedcostFixing::propagateRedCost(mipsolver, localdom,
1093-
mipworker.globaldom_, *lp);
1093+
mipworker.globaldom_, *lp,
1094+
mipworker.conflictpool_);
10941095
localdom.propagate();
10951096
if (localdom.infeasible()) {
10961097
result = NodeResult::kDomainInfeasible;

0 commit comments

Comments
 (0)