Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
BendersMathLogger.h
1#pragma once
2
3#include <fstream>
4#include <memory>
5
6#include "BendersStructsDatas.h"
7#include "antares-xpansion/benders/benders_core/BendersMethod.h"
8#include "antares-xpansion/xpansion_interfaces/ILogger.h"
9
10const std::string MATHLOGGERCONTEXT = "Benders";
11
12enum class HEADERSTYPE
13{
14 SHORT,
15 LONG
16};
17
19{
20 explicit HeadersManager(HEADERSTYPE type, const BENDERSMETHOD& method);
21
22 HEADERSTYPE type_;
23 BENDERSMETHOD method_;
24
25 virtual std::vector<std::string> HeadersList();
26};
27
29{
30 explicit HeadersManagerExternalLoop(HEADERSTYPE type, const BENDERSMETHOD& method);
31 std::vector<std::string> HeadersList() override;
32};
33
35{
36public:
37 explicit LogDestination(std::streamsize width = 40);
38 explicit LogDestination(const std::filesystem::path& file_path, std::streamsize width = 40);
39
40 std::ostream& operator<<(std::ostream& (*function)(std::ostream&))
41 {
42 return function(*stream_);
43 }
44
45 template<class T>
46 std::ostream& operator<<(const T& obj);
47
48 std::ostream& InsertDelimiter()
49 {
50 return *stream_ << delimiter_;
51 }
52
53private:
54 std::ofstream file_stream_;
55 std::ostream* stream_;
56 std::streamsize width_ = 40;
57 std::string delimiter_ = "\t";
58
59public:
60 void setDelimiter(const std::string& delimiter);
61};
62
63template<class T>
64std::ostream& LogDestination::operator<<(const T& obj)
65{
66 return (*stream_) << std::left << std::setw(width_) << obj;
67}
68
69void PrintBendersData(LogDestination& log_destination,
70 const CurrentIterationData& data,
71 const HEADERSTYPE& type,
72 const BENDERSMETHOD& method);
73
74void PrintExternalLoopData(LogDestination& log_destination,
75 const CurrentIterationData& data,
76 const HEADERSTYPE& type,
77 const BENDERSMETHOD& method);
78
80{
81 void write_header();
82
83 virtual void Print(const CurrentIterationData& data) = 0;
84 virtual std::vector<std::string> Headers() const = 0;
85 virtual LogDestination& LogsDestination() = 0;
86
87 virtual void PrintIterationSeparatorBegin() override;
88 virtual void PrintIterationSeparatorEnd() override;
89 virtual void setHeadersList() = 0;
90 virtual ~MathLoggerBehaviour() = default;
91};
92
94{
95 explicit MathLogger(const std::filesystem::path& file_path,
96 std::streamsize width = 40,
97 HEADERSTYPE type = HEADERSTYPE::LONG);
98
99 explicit MathLogger(std::streamsize width = 40, HEADERSTYPE type = HEADERSTYPE::SHORT);
100
101 void display_message(const std::string& str) override;
102 void display_message(const std::string& str,
103 LogUtils::LOGLEVEL level,
104 const std::string& context) override;
105 virtual void Print(const CurrentIterationData& data) = 0;
106 std::vector<std::string> Headers() const override;
107 LogDestination& LogsDestination() override;
108 virtual void setHeadersList() = 0;
109 HEADERSTYPE HeadersType() const;
110 virtual ~MathLogger() = default;
111
112protected:
113 void setHeadersList(const std::vector<std::string>& headers);
114
115private:
116 std::vector<std::string> headers_;
117 LogDestination log_destination_;
118 HEADERSTYPE type_;
119};
120
122{
123 using MathLogger::MathLogger;
124 void Print(const CurrentIterationData& data) override;
125
126 void setHeadersList() override;
127 virtual ~MathLoggerBase() = default;
128};
129
131{
132 using MathLoggerBase::MathLoggerBase;
133 void Print(const CurrentIterationData& data) override;
134 void setHeadersList() override;
135 virtual ~MathLoggerBaseExternalLoop() = default;
136};
137
139{
140 using MathLogger::MathLogger;
141 void Print(const CurrentIterationData& data) override;
142 void setHeadersList() override;
143 virtual ~MathLoggerBendersByBatch() = default;
144};
145
147{
148 using MathLoggerBendersByBatch::MathLoggerBendersByBatch;
149 void Print(const CurrentIterationData& data) override;
150 void setHeadersList() override;
151 virtual ~MathLoggerBendersByBatchExternalLoop() = default;
152};
153
154template<class T>
156{
157 explicit MathLoggerExternalLoopSpecific(const std::filesystem::path& file_path,
158 const std::vector<std::string>& headers,
160 MathLogger(file_path),
161 ptr_(ptr)
162 {
163 headers_.push_back("Outer loop");
164 headers_.push_back("Ite");
165 headers_.insert(headers_.end(), headers.begin(), headers.end());
166 }
167
168 void setHeadersList() override;
169 void Print(const CurrentIterationData& data) override;
170 void display_message(const std::string& msg) override;
171 void display_message(const std::string& str,
172 LogUtils::LOGLEVEL level,
173 const std::string& context) override;
174 virtual ~MathLoggerExternalLoopSpecific() = default;
175
176private:
177 std::vector<std::string> headers_;
179};
180
182{
183public:
184 explicit MathLoggerImplementation(const BENDERSMETHOD& method,
185 const std::filesystem::path& file_path,
186 std::streamsize width = 40,
187 HEADERSTYPE type = HEADERSTYPE::LONG);
188 explicit MathLoggerImplementation(const BENDERSMETHOD& method,
189 std::streamsize width = 40,
190 HEADERSTYPE type = HEADERSTYPE::LONG);
191 explicit MathLoggerImplementation(std::shared_ptr<MathLogger> implementation);
192
193 void display_message(const std::string& str) override;
194 void display_message(const std::string& str,
195 LogUtils::LOGLEVEL level,
196 const std::string& context) override;
197 void Print(const CurrentIterationData& data) override;
198 void PrintIterationSeparatorBegin() override;
199 void PrintIterationSeparatorEnd() override;
200
201 virtual ~MathLoggerImplementation() = default;
202
203protected:
204 void setHeadersList() override;
205 std::vector<std::string> Headers() const override;
206 LogDestination& LogsDestination() override;
207
208private:
209 std::shared_ptr<MathLogger> implementation_;
210};
211
213{
214public:
215 MathLoggerDriver() = default;
216 void write_header();
217 void display_message(const std::string& str) override;
218 void display_message(const std::string& str,
219 LogUtils::LOGLEVEL level,
220 const std::string& context) override;
221 void add_logger(std::shared_ptr<MathLoggerImplementation> logger);
222 template<class T>
223 void add_logger(const std::filesystem::path& file_path,
224 const std::vector<std::string>& headers,
226 void Print(const CurrentIterationData& data);
227 virtual void PrintIterationSeparatorBegin() override;
228 virtual void PrintIterationSeparatorEnd() override;
229 virtual ~MathLoggerDriver() = default;
230
231private:
232 std::vector<std::shared_ptr<MathLoggerImplementation>> math_loggers_;
233};
234
235template<class T>
236void MathLoggerDriver::add_logger(const std::filesystem::path& file_path,
237 const std::vector<std::string>& headers,
239{
240 auto impl = std::make_shared<MathLoggerExternalLoopSpecific<T>>(file_path, headers, t);
241 add_logger(std::make_shared<MathLoggerImplementation>(impl));
242}
243
244template<class T>
246{
247 MathLogger::setHeadersList(headers_);
248}
249
250template<class T>
252{
253 LogsDestination().InsertDelimiter();
254 LogsDestination() << data.criteria_current_iteration_data.benders_num_run;
255 LogsDestination().InsertDelimiter();
256 LogsDestination() << data.it;
257 LogsDestination().InsertDelimiter();
258 for (const auto& t: data.criteria_current_iteration_data.*ptr_)
259 {
260 LogsDestination() << std::scientific << std::setprecision(10) << t;
261 LogsDestination().InsertDelimiter();
262 }
263 LogsDestination() << std::endl;
264}
265
266template<class T>
268{
269 // keep empty
270}
271
272template<class T>
274 LogUtils::LOGLEVEL level,
275 const std::string& context)
276{
277 // keep empty
278}
Definition BendersMathLogger.h:35
Definition BendersMathLogger.h:213
void display_message(const std::string &str) override
pure virtual method to display a std::string message
Definition BendersMathLogger.cpp:342
Definition BendersMathLogger.h:182
void display_message(const std::string &str) override
pure virtual method to display a std::string message
Definition BendersMathLogger.cpp:432
Definition BendersStructsDatas.h:9
Definition BendersStructsDatas.h:27
Definition BendersMathLogger.h:29
Definition BendersMathLogger.h:19
Xpansion Unique log Interface.
Definition ILogger.h:78
Definition BendersMathLogger.h:131
Definition BendersMathLogger.h:122
Definition BendersMathLogger.h:80
Definition BendersMathLogger.h:147
Definition BendersMathLogger.h:139
Definition BendersMathLogger.h:156
void display_message(const std::string &msg) override
pure virtual method to display a std::string message
Definition BendersMathLogger.h:267
Definition BendersMathLogger.h:94
void display_message(const std::string &str) override
pure virtual method to display a std::string message
Definition BendersMathLogger.cpp:144