Antares Xpansion
Investment simulations for Antares studies
Loading...
Searching...
No Matches
ILogger.h
1#ifndef ANTARESXPANSION_ILOGGER_H
2#define ANTARESXPANSION_ILOGGER_H
3
4#include <filesystem>
5#include <map>
6#include <memory>
7#include <string>
8#include <vector>
9
10#include "antares-xpansion/xpansion_interfaces/LogUtils.h"
11
12typedef std::map<std::string, double> LogPoint;
13
14enum class StoppingCriterion {
15 empty,
16 timelimit,
17 relative_gap,
18 absolute_gap,
19 max_iteration
20};
21
22inline std::string criterion_to_str(
23 const StoppingCriterion stopping_criterion) {
24 std::string stop_crit("");
25 switch (stopping_criterion) {
26 case StoppingCriterion::absolute_gap:
27 stop_crit = "absolute gap";
28 break;
29
30 case StoppingCriterion::relative_gap:
31 stop_crit = "relative gap";
32 break;
33
34 case StoppingCriterion::max_iteration:
35 stop_crit = "maximum iterations";
36 break;
37
38 case StoppingCriterion::timelimit:
39 stop_crit = "timelimit";
40 break;
41
42 default:
43 break;
44 }
45 return stop_crit;
46}
47
48struct LogData {
49 double lb;
50 double best_ub;
51 double ub;
52 int it;
53 int best_it;
54 double subproblem_cost;
55 double invest_cost;
56 LogPoint x_in;
57 LogPoint x_out;
58 LogPoint x_cut;
59 LogPoint min_invest;
60 LogPoint max_invest;
61 double optimality_gap;
62 double relative_gap;
63 int max_iterations;
64 double benders_elapsed_time;
65 double master_time;
66 double subproblem_time;
67 int cumulative_number_of_subproblem_resolved;
68};
69
79 virtual void display_message(const std::string &str) = 0;
80
85 void display_message(const std::ostringstream &msg) {
86 display_message(msg.str());
87 }
88
89 virtual void display_message(const std::string &msg, LogUtils::LOGLEVEL level,
90 const std::string &context) = 0;
91
92 virtual void PrintIterationSeparatorBegin() = 0;
93 virtual void PrintIterationSeparatorEnd() = 0;
94 virtual ~ILoggerXpansion() = default;
95};
96
101 void display_message(const std::string &str) override {}
102 void display_message(const std::string &str, LogUtils::LOGLEVEL level,
103 const std::string &context) override {}
104
105 void PrintIterationSeparatorBegin() override {};
106 void PrintIterationSeparatorEnd() override {};
107 virtual ~EmptyLogger() {}
108
109};
110
115 void display_message(const std::string &str) override {
116 for (auto logger : loggers) {
117 logger->display_message(str);
118 }
119 }
120 void AddLogger(std::shared_ptr<ILoggerXpansion> logger) {
121 loggers.push_back(logger);
122 }
123
124 virtual void PrintIterationSeparatorBegin() override {
125 for (auto logger : loggers) {
126 logger->PrintIterationSeparatorBegin();
127 }
128 }
129
130 virtual void PrintIterationSeparatorEnd() override {
131 for (auto logger : loggers) {
132 logger->PrintIterationSeparatorEnd();
133 }
134 }
135 virtual void display_message(const std::string &msg, LogUtils::LOGLEVEL level,
136 const std::string &context) override {
137 for (auto logger : loggers) {
138 logger->display_message(msg, level, context);
139 }
140 }
141
142 private:
143 std::vector<std::shared_ptr<ILoggerXpansion>> loggers;
144};
145
150class ILogger : public ILoggerXpansion {
151 public:
152 virtual ~ILogger() = default;
153
154 virtual void display_message(const std::string &str) = 0;
155 virtual void display_message(const std::string &str, LogUtils::LOGLEVEL level,
156 const std::string &context) = 0;
157 virtual void PrintIterationSeparatorBegin() = 0;
158 virtual void PrintIterationSeparatorEnd() = 0;
159 virtual void log_at_initialization(const int it_number) = 0;
160 virtual void log_iteration_candidates(const LogData &d) = 0;
161 virtual void log_master_solving_duration(double durationInSeconds) = 0;
162 virtual void LogSubproblemsSolvingWalltime(double durationInSeconds) = 0;
163 virtual void LogSubproblemsSolvingCumulativeCpuTime(
164 double durationInSeconds) = 0;
165 virtual void log_at_iteration_end(const LogData &d) = 0;
166 virtual void log_at_ending(const LogData &d) = 0;
167 virtual void log_total_duration(double durationInSeconds) = 0;
168 virtual void log_stop_criterion_reached(
169 const StoppingCriterion stopping_criterion) = 0;
170 virtual void display_restart_message() = 0;
171 virtual void restart_elapsed_time(const double elapsed_time) = 0;
172 virtual void number_of_iterations_before_restart(
173 const int num_iterations) = 0;
174 virtual void restart_best_iteration(const int best_iterations) = 0;
175 virtual void restart_best_iterations_infos(
176 const LogData &best_iterations_data) = 0;
177 virtual void LogAtInitialRelaxation() = 0;
178 virtual void LogAtSwitchToInteger() = 0;
179 virtual void cumulative_number_of_sub_problem_solved(int number) = 0;
180 const std::string CONTEXT = "Benders";
181};
182
183using Logger = std::shared_ptr<ILogger>;
184
185#endif // ANTARESXPANSION_ILOGGER_H
abstract class for operational logs
Definition ILogger.h:150
virtual void display_message(const std::string &str)=0
pure virtual method to display a std::string message
Definition ILogger.h:114
void display_message(const std::string &str) override
pure virtual method to display a std::string message
Definition ILogger.h:115
Definition ILogger.h:100
void display_message(const std::string &str) override
pure virtual method to display a std::string message
Definition ILogger.h:101
Xpansion Unique log Interface.
Definition ILogger.h:74
virtual void display_message(const std::string &str)=0
pure virtual method to display a std::string message
void display_message(const std::ostringstream &msg)
Definition ILogger.h:85
Definition ILogger.h:48