Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
WorkerMaster.h
1#pragma once
2
3#include <unordered_set>
4
5#include "SubproblemWorker.h"
6#include "Worker.h"
11class WorkerMaster;
12typedef std::shared_ptr<WorkerMaster> WorkerMasterPtr;
13
14class WorkerMaster: public Worker
15{
16public:
17 WorkerMaster(const VariableMap& variable_map,
18 const std::string& solver_name,
19 int log_level,
20 int subproblems_count,
21 SolverLogManager& solver_log_manager,
22 bool mps_has_alpha,
23 Logger logger,
24 ProblemsFormat format,
25 IBendersProblemProvider* benders_problem_provider,
26 double master_solution_tolerance,
27 double cut_coefficient_tolerance);
28 ~WorkerMaster() override = default;
29 std::vector<int> _id_master_only_vars;
30
31 void get(Point& x0,
32 double& overall_subpb_cost_under_approx,
33 DblVector& single_subpb_costs_under_approx,
34 DblVector& master_only_vars_out);
35 void get_dual_values(std::vector<double>& dual) const;
36 [[nodiscard]] int get_number_constraint() const;
37
38 void add_cut(const Point& s, const Point& x0, const double& rhs) const;
39 void add_cut_by_iter(int i, const Point& s, const double& sx0, const double& rhs) const;
40 void add_dynamic_cut(const Point& s, const double& sx0, const double& rhs) const;
41 void addSubproblemCut(int i,
42 const Point& subgradient,
43 const Point& x_cut,
44 const double& rhs) const;
45
46 void addGroupSubproblemCut(std::vector<int> subproblem_ids,
47 const Point& subgradient,
48 const Point& x_cut,
49 const double& rhs) const;
50
51 void fix_alpha(const double& bestUB) const;
52
53 virtual void DeactivateIntegrityConstraints() const;
54 virtual void ActivateIntegrityConstraints() const;
55
56 [[nodiscard]] virtual std::vector<int> get_id_int_vars() const
57 {
58 return _id_int_vars;
59 }
60
61private:
62 std::vector<int> _id_int_vars;
63 std::vector<int> _id_single_subpb_costs_under_approx;
64 int _id_alpha = 0;
65 int subproblems_count;
66 bool _mps_has_alpha = false;
67 double _master_solution_tolerance;
68 void define_matval_mclind(const Point& s,
69 std::vector<double>& matval,
70 std::vector<int>& mclind) const;
71
72 void DefineRhsWithMasterVariable(const Point& s,
73 const Point& x0,
74 const double& rhs,
75 std::vector<double>& rowrhs) const;
76
77 void define_rhs_from_sx0(const double& sx0,
78 const double& rhs,
79 std::vector<double>& rowrhs) const;
80
81 void define_matval_mclind_for_index(std::vector<int> subproblem_ids,
82 const Point& s,
83 std::vector<double>& matval,
84 std::vector<int>& mclind) const;
85
86 void _set_upper_bounds() const;
87 void _set_alpha_var();
88 void _set_nb_units_var_ids();
89 void restoreFeasibility(std::vector<double>& solution);
90
91protected:
92 void _set_master_only_var_ids();
93
94public:
95 // Used only for testing purposes
96 void set_id_alpha(double id_alpha)
97 {
98 _id_alpha = id_alpha;
99 }
100
101 // Used only for testing purposes
102 void set_id_single_subpb_costs_under_approx(std::vector<int> id_single_subpb_costs_under_approx)
103 {
104 _id_single_subpb_costs_under_approx = id_single_subpb_costs_under_approx;
105 }
106};
Definition IBendersProblemProvider.h:7
Definition SolverAbstract.h:20
Definition WorkerMaster.h:15
void add_cut_by_iter(int i, const Point &s, const double &sx0, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:243
void add_cut(const Point &s, const Point &x0, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:156
void add_dynamic_cut(const Point &s, const double &sx0, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:212
void get_dual_values(std::vector< double > &dual) const
Set dual values of a problem in a vector.
Definition WorkerMaster.cpp:135
void addGroupSubproblemCut(std::vector< int > subproblem_ids, const Point &subgradient, const Point &x_cut, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:332
WorkerMaster(const VariableMap &variable_map, const std::string &solver_name, int log_level, int subproblems_count, SolverLogManager &solver_log_manager, bool mps_has_alpha, Logger logger, ProblemsFormat format, IBendersProblemProvider *benders_problem_provider, double master_solution_tolerance, double cut_coefficient_tolerance)
Constructor of a Master Problem.
Definition WorkerMaster.cpp:17
int get_number_constraint() const
Return number of constraint in a problem.
Definition WorkerMaster.cpp:144
void addSubproblemCut(int i, const Point &subgradient, const Point &x_cut, const double &rhs) const
Add one benders cut to a problem.
Definition WorkerMaster.cpp:295
void fix_alpha(const double &bestUB) const
Fix an upper bound and the variable overall_subpb_cost_under_approx of a problem.
Definition WorkerMaster.cpp:457
void get(Point &x0, double &overall_subpb_cost_under_approx, DblVector &single_subpb_costs_under_approx, DblVector &master_only_vars_out)
Return optimal variables of a problem.
Definition WorkerMaster.cpp:97
Mother-class Worker.
Definition Worker.h:19