Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
BendersByBatch.h
1#ifndef SRC_CPP_BENDERS_BENDERS_BY_BATCH_INCLUDE_BENDERSBYBATCH_H_
2#define SRC_CPP_BENDERS_BENDERS_BY_BATCH_INCLUDE_BENDERSBYBATCH_H_
3#include "BatchCollection.h"
4#include "antares-xpansion/benders/benders_mpi/BendersMPI.h"
5#include "antares-xpansion/benders/benders_mpi/common_mpi.h"
6
8{
9 std::vector<unsigned> random_batch_permutation_;
10
11public:
12 using BendersMpi::BendersMpi;
13 ~BendersByBatch() override = default;
14 void Run() override;
15 void BuildCut(const std::vector<std::string>& batch_sub_problems,
16 double* batch_contribution_in_gap,
17 std::vector<double>& external_loop_criterion_current_batch,
18 int& local_solved);
19
20 std::string BendersName() const override
21 {
22 return "Benders By Batch mpi";
23 }
24
25protected:
26 void InitializeProblems() override;
27 void BroadcastSingleSubpbCostsUnderApprox();
28 void ComputeXCut() override;
29 void UpdateStoppingCriterion() override;
30 bool ShouldRelaxationStop() const override;
31 void BuildBatches();
32
33private:
34 void GetSubproblemCut(SubProblemDataMap& subproblem_cut_package,
35 const std::vector<std::string>& batch_sub_problems);
36 void BuildMasterProblem();
37 double ComputeBatchContributionInGap(
38 const std::vector<SubProblemDataMap>& gathered_subproblem_map,
39 const std::vector<SubProblemNamesInCut>& subproblems_per_cut) const;
40 void GetSubproblemCutCache(SubProblemDataMap& subproblem_data_map,
41 const std::vector<std::string>& batch_sub_problems);
42 Timer calculate_subproblem_contribution(const std::string& name,
43 PlainData::SubProblemData& subproblem_data);
44 void GetSubproblemCutFast(SubProblemDataMap& subproblem_data_map,
45 const std::vector<std::string>& batch_sub_problems);
46
47 void get_subs_per_cut_per_batch();
48
49 BatchCollection batch_collection_;
50 BatchCollection batch_collection_full_for_cuts_;
51 void MasterLoop();
52 void SolveBatches();
53 void SeparationLoop();
54 void UpdateRemainingEpsilon();
55 void BroadcastXOut();
56 double Gap() const;
57 size_t number_of_batch_;
58 unsigned current_batch_id_;
59 double remaining_epsilon_;
60 double cumulative_subproblems_timer_per_iter_;
61 bool misprice_;
62 int first_unsolved_batch_;
63 int batch_counter_;
64};
65
66#endif // SRC_CPP_BENDERS_BENDERS_BY_BATCH_INCLUDE_BENDERSBYBATCH_H_
Definition BatchCollection.h:31
Definition BendersByBatch.h:8
bool ShouldRelaxationStop() const override
Check if initial relaxation should stop.
Definition BendersByBatch.cpp:550
void UpdateStoppingCriterion() override
Update stopping criterion.
Definition BendersByBatch.cpp:524
void BuildCut(const std::vector< std::string > &batch_sub_problems, double *batch_contribution_in_gap, std::vector< double > &external_loop_criterion_current_batch, int &local_solved)
Build subproblem cut.
Definition BendersByBatch.cpp:344
Class use run the benders algorithm in parallel.
Definition BendersMPI.h:17
Definition Timer.h:10
Definition SubproblemCut.h:12