Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
OuterLoopBenders.h
1#pragma once
2#include "antares-xpansion/benders/benders_core/BendersBase.h"
3#include "antares-xpansion/benders/benders_core/CriterionComputation.h"
4#include "antares-xpansion/benders/benders_core/CutsManagement.h"
5#include "antares-xpansion/benders/outer_loop/IMasterUpdate.h"
6#include "antares-xpansion/benders/outer_loop/OuterLoop.h"
7#include "antares-xpansion/benders/outer_loop/OuterLoopBiLevel.h"
8#include "common_mpi.h"
9
10namespace Outerloop
11{
12
13class CriterionCouldNotBeSatisfied: public LogUtils::XpansionError<std::runtime_error>
14{
15 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
16};
17
19{
20public:
21 explicit OuterLoopBenders(
22 const std::vector<Benders::Criterion::CriterionSingleInputData>& outer_loop_data,
23 std::shared_ptr<IMasterUpdate> master_updater,
24 std::shared_ptr<ICutsManager> cuts_manager,
25 pBendersBase benders,
26 mpi::communicator& world);
27
28 void Run() override;
29
30 void OuterLoopCheckFeasibility() override;
31 void OuterLoopBilevelChecks() override;
32 void RunAttachedAlgo() override;
33 void PrintLog() override;
34 void init_data() override;
35 bool isExceptionRaised() override;
36 double OuterLoopLambdaMin() const override;
37 double OuterLoopLambdaMax() const override;
38 bool UpdateMaster() override;
39 ~OuterLoopBenders() override = default;
40
41private:
42 std::shared_ptr<IMasterUpdate> master_updater_;
43 std::shared_ptr<ICutsManager> cuts_manager_;
44 pBendersBase benders_;
45 BendersLoggerBase loggers_;
46 mpi::communicator& world_;
47 bool is_bilevel_check_all_ = false;
48 void InitExternalValues(bool is_bilevel_check_all, double lambda);
49 OuterLoopBiLevel outer_loop_biLevel_;
50};
51} // namespace Outerloop
Definition OuterLoopBenders.h:14
Definition OuterLoopBenders.h:19
Definition OuterLoopBiLevel.h:12
Definition OuterLoop.h:6
Definition ILogger.h:131