From e96126796dd0367fdcfa75c6b2df150b36d7c4d3 Mon Sep 17 00:00:00 2001 From: jajhall Date: Wed, 22 Jan 2025 13:43:24 +0000 Subject: [PATCH] Setting up a vector of HighsSearch instances, each corresponding to a different HigshLpRelaxation --- src/lp_data/HighsOptions.h | 2 +- src/mip/HighsMipSolver.cpp | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/lp_data/HighsOptions.h b/src/lp_data/HighsOptions.h index 02ee85c135..b7a652f29b 100644 --- a/src/lp_data/HighsOptions.h +++ b/src/lp_data/HighsOptions.h @@ -1083,7 +1083,7 @@ class HighsOptions : public HighsOptionsStruct { record_int = new OptionRecordInt( "mip_search_concurrency", "Concurrency to use in MIP search", advanced, - &mip_search_concurrency, 1, 1, kMipSearchConcurrencyLimit); + &mip_search_concurrency, 1, 2, kMipSearchConcurrencyLimit); records.push_back(record_int); record_int = new OptionRecordInt( diff --git a/src/mip/HighsMipSolver.cpp b/src/mip/HighsMipSolver.cpp index 584d0b7eb4..8996059dc3 100644 --- a/src/mip/HighsMipSolver.cpp +++ b/src/mip/HighsMipSolver.cpp @@ -220,15 +220,19 @@ void HighsMipSolver::run() { sepa.setLpRelaxation(&mipdata_->lp); // Set up a vector of HighsSearch instances, with a - // HighsLpRelaxation for each concurrent search + // HighsLpRelaxation for each concurrent search beyond the master + // search std::vector multiple_search; std::vector multiple_lp; for (HighsInt iSearch = 0; iSearch < options_mip_->mip_search_concurrency; iSearch++) { multiple_search.push_back(HighsSearch{*this, mipdata_->pseudocost}); - // multiple_lp.push_back(HighsLpRelaxation{mipdata_->lp}); - // multiple_search[iSearch].setLpRelaxation(&multiple_lp[iSearch]); - multiple_search[iSearch].setLpRelaxation(&mipdata_->lp); + if (iSearch == 0) { + multiple_search[iSearch].setLpRelaxation(&mipdata_->lp); + } else { + multiple_lp.push_back(HighsLpRelaxation{mipdata_->lp}); + multiple_search[iSearch].setLpRelaxation(&multiple_lp[iSearch-1]); + } } HighsSearch& search = multiple_search[0];