@@ -76,7 +76,8 @@ void HighsRedcostFixing::propagateRootRedcost(const HighsMipSolver& mipsolver) {
7676void 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 ()) {
0 commit comments