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