From 76ac6255452b793a76c3c1469afa8d613134266c Mon Sep 17 00:00:00 2001 From: Ivet Galabova Date: Tue, 4 Feb 2025 09:59:24 +0000 Subject: [PATCH] some next steps, compiling but segfaults atm --- src/mip/HighsMipSolver.cpp | 18 ++++++++++++++---- src/mip/HighsMipWorker.cpp | 25 ++++++++++++++----------- src/mip/HighsMipWorker.h | 9 +++++++++ src/mip/HighsSearch.h | 3 +++ 4 files changed, 40 insertions(+), 15 deletions(-) diff --git a/src/mip/HighsMipSolver.cpp b/src/mip/HighsMipSolver.cpp index 25e3885d2b..f8cb26bd20 100644 --- a/src/mip/HighsMipSolver.cpp +++ b/src/mip/HighsMipSolver.cpp @@ -285,19 +285,27 @@ void HighsMipSolver::run() { // accumulating pointers to the all the HighsSearch instances // (master and workers) in concurrent_searches, allowing loops // over all concurrent searches to be simplified - std::vector worker_mipsolvers; + // std::vector worker_mipsolvers; + std::vector mipworkers; + std::vector worker_searches; std::vector worker_lps; std::vector concurrent_searches; concurrent_searches.push_back(&master_search); for (HighsInt iSearch = 0; iSearch < num_worker; iSearch++) { - worker_mipsolvers.push_back(HighsMipSolver{*this}); + + // worker_mipsolvers.push_back(HighsMipSolver{*this}); + mipworkers.push_back(HighsMipWorker(*this)); + // worker_mipsolvers.push_back(HighsMipSolver{callback_, // options_mip_, model_}); // // worker_mipsolvers.push_back(HighsMipSolver{*callback_, // *options_mip_, *model_, null_solution, false, 0}); - HighsMipSolver& worker_mipsolver = worker_mipsolvers[iSearch]; + + // HighsMipSolver& worker_mipsolver = worker_mipsolvers[iSearch]; + HighsMipSolver& worker_mipsolver = mipworkers[iSearch].getMipSolver(); + worker_mipsolver.rootbasis = this->rootbasis; HighsPseudocostInitialization pscostinit(mipdata_->pseudocost, 1); worker_mipsolver.pscostinit = &pscostinit; @@ -312,7 +320,9 @@ void HighsMipSolver::run() { concurrent_searches.push_back(&worker_searches[iSearch]); } - assert(worker_mipsolvers.size() == num_worker); + // assert(worker_mipsolvers.size() == num_worker); + assert(mipworkers.size() == num_worker); + assert(worker_searches.size() == num_worker); assert(concurrent_searches.size() == mip_search_concurrency); diff --git a/src/mip/HighsMipWorker.cpp b/src/mip/HighsMipWorker.cpp index 1be359a804..6cb5aae904 100644 --- a/src/mip/HighsMipWorker.cpp +++ b/src/mip/HighsMipWorker.cpp @@ -7,16 +7,19 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "mip/HighsMipWorker.h" -HighsMipWorker::HighsMipWorker(const HighsMipSolver& mipsolver) - : mipsolver_(mipsolver), +HighsMipWorker::HighsMipWorker(const HighsMipSolver& mipsolver__) + : mipsolver_(mipsolver__), + lprelaxation_(mipsolver__), + cutpool_(mipsolver__.numCol(), mipsolver__.options_mip_->mip_pool_age_limit, + mipsolver__.options_mip_->mip_pool_soft_limit), + conflictpool_(5 * mipsolver__.options_mip_->mip_pool_age_limit, + mipsolver__.options_mip_->mip_pool_soft_limit), + cliquetable_(mipsolver__.numCol()), + mipsolver(mipsolver__), + pseudocost(mipsolver), + search_(mipsolver, pseudocost) {} - cutpool_(mipsolver.numCol(), mipsolver.options_mip_->mip_pool_age_limit, - mipsolver.options_mip_->mip_pool_soft_limit), - conflictPool_(5 * mipsolver.options_mip_->mip_pool_age_limit, - - mipsolver.options_mip_->mip_pool_soft_limit), - - cliquetable_(mipsolver.numCol()), - - lprelaxation_(mipsolver) {} +HighsMipSolver& HighsMipWorker::getMipSolver() { + return mipsolver; +} \ No newline at end of file diff --git a/src/mip/HighsMipWorker.h b/src/mip/HighsMipWorker.h index 4a9fa59e59..c752c07ae0 100644 --- a/src/mip/HighsMipWorker.h +++ b/src/mip/HighsMipWorker.h @@ -27,10 +27,19 @@ class HighsMipWorker { HighsCutPool cutpool_; HighsConflictPool conflictpool_; HighsCliqueTable cliquetable_; + + // Not sure if this should be here or elsewhere. + HighsMipSolver mipsolver; + + // Not sure if this should be here or in HighsSearch. + HighsPseudocost pseudocost; + HighsSearch search_; public: HighsMipWorker(const HighsMipSolver& mipsolver); + + HighsMipSolver& getMipSolver(); }; #endif diff --git a/src/mip/HighsSearch.h b/src/mip/HighsSearch.h index 74f31a7b37..66dbb8b800 100644 --- a/src/mip/HighsSearch.h +++ b/src/mip/HighsSearch.h @@ -28,6 +28,9 @@ class HighsCliqueTable; class HighsSearch { HighsMipSolver& mipsolver; + // replace HighsMipSolver with HighsMipWorker + // HighsMipWorker& mipworker; + HighsLpRelaxation* lp; HighsDomain localdom; HighsPseudocost& pseudocost;