Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
ActiveLinks.h
1
2#ifndef ANTARESXPANSION_ACTIVELINKS_H
3#define ANTARESXPANSION_ACTIVELINKS_H
4
5#include <unordered_map>
6
7#include "antares-xpansion/lpnamer/helper/ProblemGenerationLogger.h"
8#include "antares-xpansion/lpnamer/model/Candidate.h"
9#include "antares-xpansion/lpnamer/model/ChronicleMapProvider.h"
10#include "antares-xpansion/xpansion_interfaces/LogUtils.h"
11
12using LinkName = std::string;
13
15{
16public:
17 ActiveLink(int idLink,
18 const std::string& linkName,
19 const std::string& linkor,
20 const std::string& linkex,
21 const double& already_installed_capacity,
22 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger);
23 ActiveLink(int idLink,
24 std::string linkName,
25 std::string linkor,
26 std::string linkex,
27 const double& already_installed_capacity,
28 std::map<unsigned, unsigned> mc_year_to_chronicle,
29 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger);
30
31 void setAlreadyInstalledLinkProfiles(const std::vector<LinkProfile>& linkProfile);
32
33 void addCandidate(const CandidateData& candidate_data,
34 const std::vector<LinkProfile>& candidate_profile);
35 [[nodiscard]] const std::vector<Candidate>& getCandidates() const;
36
37 [[nodiscard]] double already_installed_direct_profile(size_t timeStep) const;
38 [[nodiscard]] double already_installed_indirect_profile(size_t timeStep) const;
39 [[nodiscard]] double already_installed_direct_profile(size_t chronicle_number,
40 size_t timeStep) const;
41 [[nodiscard]] double already_installed_indirect_profile(size_t chronicle_number,
42 size_t timeStep) const;
43
44 [[nodiscard]] unsigned get_idLink() const;
45 [[nodiscard]] LinkName get_LinkName() const;
46 [[nodiscard]] std::string get_linkor() const;
47 [[nodiscard]] const std::string& linkor() const;
48 [[nodiscard]] std::string get_linkex() const;
49 [[nodiscard]] const std::string& linkex() const;
50 [[nodiscard]] double get_already_installed_capacity() const;
51
52 [[nodiscard]] std::map<unsigned int, unsigned int> McYearToChronicle() const
53 {
54 return mc_year_to_chronicle_;
55 }
56
57 [[nodiscard]] unsigned long number_of_chronicles() const;
58
59private:
60 std::map<unsigned, unsigned> mc_year_to_chronicle_;
61 unsigned int _idLink;
62 LinkName _name;
63 std::string _linkor;
64 std::string _linkex;
65 // Sur le lien capacité à ne pas toucher
66 double _already_installed_capacity = 1;
67 // Profile de la capa
68 std::vector<LinkProfile> _already_installed_profile = {};
69 std::vector<Candidate> _candidates = {};
70 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger_;
71};
72
74{
75public:
76 ActiveLinksBuilder(std::vector<CandidateData> candidateList,
77 std::map<std::string, std::vector<LinkProfile>> profile_map,
78 DirectAccessScenarioToChronicleProvider scenario_to_chronicle_provider,
79 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger);
80
81 ActiveLinksBuilder(const std::vector<CandidateData>& candidateList,
82 const std::map<std::string, std::vector<LinkProfile>>& profile_map,
83 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger);
84
86 : public LogUtils::XpansionError<std::runtime_error>
87 {
88 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
89 };
90
92 : public LogUtils::XpansionError<std::runtime_error>
93 {
94 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
95 };
96
97 class MultipleLinkIddetectedForLink: public LogUtils::XpansionError<std::runtime_error>
98 {
99 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
100 };
101
102 class CandidateDuplicationDetected: public LogUtils::XpansionError<std::runtime_error>
103 {
104 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
105 };
106
108 : public LogUtils::XpansionError<std::runtime_error>
109 {
110 using LogUtils::XpansionError<std::runtime_error>::XpansionError;
111 };
112
113 const std::vector<ActiveLink>& getLinks();
114
115private:
116 struct LinkData
117 {
118 int id;
119 double installed_capacity;
120 std::string profile_name;
121 std::string _linkor;
122 std::string _linkex;
123 };
124
125 void checkCandidateNameDuplication() const;
126 void checkLinksValidity();
127
128 int getLinkIndexOf(int link_id) const;
129 void addCandidate(const CandidateData& candidate_data);
130 void launchExceptionIfNoLinkProfileAssociated(const std::string& profileName) const;
131
132 void record_link_data(const CandidateData& candidateData);
133 void raise_errors_if_link_data_differs_from_existing_link(const LinkData& link_data,
134 const LinkName& link_name) const;
135 void create_links();
136
137 LinkProfile getProfileFromProfileMap(const std::string& profile_name) const;
138 std::vector<LinkProfile> getProfilesFromProfileMap(const std::string& profile_name) const;
139
140 std::map<LinkName, LinkData> _links_data;
141 std::unordered_map<LinkName, std::string> linkToAlreadyInstalledProfileName;
142 std::unordered_map<LinkName, double> linkToAlreadyInstalledCapacity;
143 const std::vector<CandidateData> _candidateDatas;
144 const std::map<std::string, std::vector<LinkProfile>> _profile_map;
145 std::vector<ActiveLink> _links;
146 DirectAccessScenarioToChronicleProvider scenario_to_chronicle_provider_;
147 std::shared_ptr<ProblemGenerationLog::ProblemGenerationLogger> logger_;
148};
149
150#endif // ANTARESXPANSION_ACTIVELINKS_H
Definition ActiveLinks.h:74
Definition ChronicleMapProvider.h:16
LinkProfile structure.
Definition LinkProfile.h:19
Definition Candidate.h:9