From fe7c24f55e1f36c2c8a9cadcde45b585047ae102 Mon Sep 17 00:00:00 2001 From: Abdoulbari Zakir Date: Fri, 9 Feb 2024 16:17:54 +0100 Subject: [PATCH] hmmm --- src/cpp/benders/benders_core/MasterUpdateBase.cpp | 14 ++++++++++---- .../benders/benders_core/include/MasterUpdate.h | 2 +- src/cpp/benders/factories/BendersFactory.cpp | 5 +++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cpp/benders/benders_core/MasterUpdateBase.cpp b/src/cpp/benders/benders_core/MasterUpdateBase.cpp index f8f8afe20..6cc2c9112 100644 --- a/src/cpp/benders/benders_core/MasterUpdateBase.cpp +++ b/src/cpp/benders/benders_core/MasterUpdateBase.cpp @@ -3,7 +3,6 @@ MasterUpdateBase::MasterUpdateBase(pBendersBase benders, double tau) : benders_(std::move(benders)), lambda_(0), lambda_min_(0) { CheckTau(tau); - SetLambdaMaxToMaxInvestmentCosts(); } MasterUpdateBase::MasterUpdateBase(pBendersBase benders, double tau, @@ -36,13 +35,20 @@ void MasterUpdateBase::CheckTau(double tau) { } void MasterUpdateBase::SetLambdaMaxToMaxInvestmentCosts() { const auto &obj = benders_->ObjectiveFunctionCoeffs(); - const auto best_ub = benders_->ObjectiveFunctionCoeffs(); + const auto max_invest = + benders_->BestIterationWorkerMaster().get_max_invest(); lambda_max_ = 0; - for (const auto &[_, var_id] : benders_->MasterVariables()) { - lambda_max_ += obj[var_id] * best_ub[var_id]; + for (const auto &[var_name, var_id] : benders_->MasterVariables()) { + lambda_max_ += obj[var_id] * max_invest.at(var_name); } } void MasterUpdateBase::Update(const CRITERION &criterion) { + // check lambda_max_ + // whar abour lambda_min_? + if (lambda_max_ < 0 || lambda_max_ <= lambda_min_) { + // TODO log + SetLambdaMaxToMaxInvestmentCosts(); + } switch (criterion) { case CRITERION::LESSER: // TODO best it or current data? diff --git a/src/cpp/benders/benders_core/include/MasterUpdate.h b/src/cpp/benders/benders_core/include/MasterUpdate.h index 07b8755c5..fce6df026 100644 --- a/src/cpp/benders/benders_core/include/MasterUpdate.h +++ b/src/cpp/benders/benders_core/include/MasterUpdate.h @@ -35,6 +35,6 @@ class MasterUpdateBase : public IMasterUpdate { pBendersBase benders_; double lambda_ = 0; double lambda_min_ = 0; - double lambda_max_ = 1; + double lambda_max_ = -1; double tau_ = 0.5; }; diff --git a/src/cpp/benders/factories/BendersFactory.cpp b/src/cpp/benders/factories/BendersFactory.cpp index 456072e63..961b644a6 100644 --- a/src/cpp/benders/factories/BendersFactory.cpp +++ b/src/cpp/benders/factories/BendersFactory.cpp @@ -157,8 +157,9 @@ int RunExternalLoop_(char** argv, const std::filesystem::path& options_file, std::shared_ptr criterion = std::make_shared(threshold, epsilon); std::shared_ptr master_updater = - std::make_shared(benders, lambda, lambda_min, - lambda_max, tau); + // std::make_shared(benders, lambda, lambda_min, + // lambda_max, tau); + std::make_shared(benders, tau); std::shared_ptr cuts_manager = std::make_shared();