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"
7
12class WorkerMaster;
13typedef std::shared_ptr<WorkerMaster> WorkerMasterPtr;
14
15class WorkerMaster: public Worker
16{
17public:
18 WorkerMaster(const VariableMap& variable_map,
19 const std::string& solver_name,
20 int log_level,
21 int subproblems_count,
22 SolverLogManager& solver_log_manager,
23 bool mps_has_alpha,
24 Logger logger,
25 ProblemsFormat format,
26 IBendersProblemProvider* benders_problem_provider,
27 double master_solution_tolerance,
28 const std::map<int, double>& subproblem_cut_coefficient_tolerance);
29 ~WorkerMaster() override = default;
30 std::vector<int> _id_master_only_vars;
31 void add_row(std::vector<char>& row_type,
32 std::vector<double>& row_rhs,
33 std::vector<int>& mstart,
34 std::vector<int>& mclind,
35 std::vector<double>& matval);
36 int get_col_index(std::string variable_id);
37 void get(Point& x0,
38 double& overall_subpb_cost_under_approx,
39 DblVector& single_subpb_costs_under_approx,
40 DblVector& master_only_vars_out);
41 void get_dual_values(std::vector<double>& dual) const;
42 [[nodiscard]] int get_number_constraint() const;
43
44 void add_cut(const Point& s, const Point& x0, const double& rhs) const;
45 void add_cut_by_iter(int i, const Point& s, const double& sx0, const double& rhs) const;
46 void add_dynamic_cut(const Point& s, const double& sx0, const double& rhs) const;
47 void addSubproblemCut(int i,
48 const Point& subgradient,
49 const Point& x_cut,
50 const double& rhs) const;
51
52 void addGroupSubproblemCut(std::vector<int> subproblem_ids,
53 const Point& subgradient,
54 const Point& x_cut,
55 const double& rhs) const;
56
57 void fix_alpha(const double& bestUB) const;
58 virtual void DeactivateIntegrityConstraints() const;
59 virtual void ActivateIntegrityConstraints() const;
60 void addAlphasFixingConstraints(std::vector<SubProblemNamesInCut>& names_in_cut,
61 std::map<std::string, int>& problem_to_id);
62
63 [[nodiscard]] virtual std::vector<int> get_id_int_vars() const
64 {
65 return _id_int_vars;
66 }
67
68private:
69 std::vector<int> _id_int_vars;
70 std::vector<int> _id_single_subpb_costs_under_approx;
71 int _id_alpha = 0;
72 int subproblems_count;
73 bool _mps_has_alpha = false;
74 double _master_solution_tolerance;
75 std::map<int, double> _subproblem_tolerance;
76 void define_matval_mclind(const Point& s,
77 std::vector<double>& matval,
78 std::vector<int>& mclind) const;
79
80 void DefineRhsWithMasterVariable(const Point& s,
81 const Point& x0,
82 const double& rhs,
83 std::vector<double>& rowrhs) const;
84
85 void define_rhs_from_sx0(const double& sx0,
86 const double& rhs,
87 std::vector<double>& rowrhs) const;
88
89 void define_matval_mclind_for_index(std::vector<int> subproblem_ids,
90 const Point& s,
91 std::vector<double>& matval,
92 std::vector<int>& mclind) const;
93
94 void _set_upper_bounds() const;
95 void _set_alpha_var();
96 void _set_nb_units_var_ids();
97 void restoreFeasibility(std::vector<double>& solution);
98
99protected:
100 void _set_master_only_var_ids();
101 void setToZeroIfWithinTolerance(std::vector<double>& values,
102 int first,
103 int last,
104 const std::vector<int>& subproblem_ids) const;
105
106public:
107 // Used only for testing purposes
108 void set_id_alpha(double id_alpha)
109 {
110 _id_alpha = id_alpha;
111 }
112
113 // Used only for testing purposes
114 void set_id_single_subpb_costs_under_approx(std::vector<int> id_single_subpb_costs_under_approx)
115 {
116 _id_single_subpb_costs_under_approx = id_single_subpb_costs_under_approx;
117 }
118};
Definition IBendersProblemProvider.h:7
Definition SolverAbstract.h:20
Definition WorkerMaster.h:16
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:245
void add_cut(const Point &s, const Point &x0, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:158
void add_dynamic_cut(const Point &s, const double &sx0, const double &rhs) const
Add benders cut to a problem.
Definition WorkerMaster.cpp:214
void get_dual_values(std::vector< double > &dual) const
Set dual values of a problem in a vector.
Definition WorkerMaster.cpp:137
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, const std::map< int, double > &subproblem_cut_coefficient_tolerance)
Constructor of a Master Problem.
Definition WorkerMaster.cpp:18
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:333
int get_number_constraint() const
Return number of constraint in a problem.
Definition WorkerMaster.cpp:146
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:297
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:500
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:99
Mother-class Worker.
Definition Worker.h:19