@@ -27,8 +27,9 @@ HighsMipSolverData::HighsMipSolverData(HighsMipSolver& mipsolver)
2727 lp(lps.at(0 )),
2828 cutpools(),
2929 cutpool(*cutpools.emplace(cutpools.end(), mipsolver.numCol(),
30- mipsolver.options_mip_->mip_pool_age_limit,
31- mipsolver.options_mip_->mip_pool_soft_limit, 0)),
30+ mipsolver.options_mip_->mip_pool_age_limit,
31+ mipsolver.options_mip_->mip_pool_soft_limit,
32+ 0)),
3233 conflictpools(
3334 1 , HighsConflictPool(5 * mipsolver.options_mip_->mip_pool_age_limit,
3435 mipsolver.options_mip_->mip_pool_soft_limit)),
@@ -1359,6 +1360,7 @@ void HighsMipSolverData::performRestart() {
13591360 // is never applied, since MIP solving is complete, and
13601361 // lower_bound is set to upper_bound, so apply the offset now, so
13611362 // that housekeeping in updatePrimalDualIntegral is correct
1363+ // MT: If the model is optimal after presolve, then don't check prev data
13621364 double prev_lower_bound = lower_bound - mipsolver.model_ ->offset_ ;
13631365
13641366 lower_bound = upper_bound;
@@ -1370,8 +1372,9 @@ void HighsMipSolverData::performRestart() {
13701372 bool bound_change = lower_bound != prev_lower_bound;
13711373 assert (bound_change);
13721374 if (!mipsolver.submip && bound_change)
1373- updatePrimalDualIntegral (prev_lower_bound, lower_bound, upper_bound,
1374- upper_bound);
1375+ updatePrimalDualIntegral (
1376+ prev_lower_bound, lower_bound, upper_bound, upper_bound, true ,
1377+ mipsolver.modelstatus_ != HighsModelStatus::kOptimal );
13751378 if (mipsolver.solution_objective_ != kHighsInf &&
13761379 mipsolver.modelstatus_ == HighsModelStatus::kInfeasible )
13771380 mipsolver.modelstatus_ = HighsModelStatus::kOptimal ;
0 commit comments