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