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
7class BendersByBatch : public BendersMpi {
8 std::vector<unsigned> random_batch_permutation_;
9
10 public:
11 BendersByBatch(BendersBaseOptions const &options, Logger logger,
12 Writer writer, mpi::environment &env, mpi::communicator &world,
13 std::shared_ptr<MathLoggerDriver> mathLoggerDriver);
14 ~BendersByBatch() override = default;
15 void Run() override;
16 void BuildCut(const std::vector<std::string> &batch_sub_problems, double *sum,
17 std::vector<double> &external_loop_criterion_current_batch);
18 std::string BendersName() const override { return "Benders By Batch mpi"; }
19
20 protected:
21 void InitializeProblems() override;
22 void BroadcastSingleSubpbCostsUnderApprox();
23 void ComputeXCut() override;
24 void UpdateStoppingCriterion() override;
25 bool ShouldRelaxationStop() const override;
26
27 private:
28 void GetSubproblemCut(
29 SubProblemDataMap &subproblem_cut_package,
30 const std::vector<std::string> &batch_sub_problems,
31 double *batch_subproblems_costs_contribution_in_gap_per_proc);
32 BatchCollection batch_collection_;
33 void MasterLoop();
34 void SolveBatches();
35 void SeparationLoop();
36 void UpdateRemainingEpsilon();
37 void BroadcastXOut();
38 double Gap() const;
39 size_t number_of_batch_;
40 unsigned current_batch_id_;
41 int number_of_sub_problem_resolved_;
42 double remaining_epsilon_;
43 double cumulative_subproblems_timer_per_iter_;
44 bool misprice_;
45 int first_unsolved_batch_;
46 int batch_counter_;
47};
48
49#endif // SRC_CPP_BENDERS_BENDERS_BY_BATCH_INCLUDE_BENDERSBYBATCH_H_
Definition BatchCollection.h:19
Definition BendersByBatch.h:7
void BuildCut(const std::vector< std::string > &batch_sub_problems, double *sum, std::vector< double > &external_loop_criterion_current_batch)
Build subproblem cut Method to build subproblem cuts and add them to the Master problem.
Definition BendersByBatch.cpp:233
bool ShouldRelaxationStop() const override
Check if initial relaxation should stop.
Definition BendersByBatch.cpp:357
void UpdateStoppingCriterion() override
Update stopping criterion.
Definition BendersByBatch.cpp:339
Class use run the benders algorithm in parallel.
Definition BendersMPI.h:19
Definition common.h:171