Antares Simulator
Power System Simulator
watched-constraints.h
1 
2 #pragma once
3 
4 #include <functional>
5 #include <map>
6 #include <memory>
7 #include <regex>
8 #include <string>
9 #include <vector>
10 
11 std::string timeStep(const std::vector<std::string>& splitName);
12 std::string shortName(const std::vector<std::string>& splitName);
13 std::string areaName(const std::vector<std::string>& splitName);
14 std::string STSname(const std::vector<std::string>& splitName);
15 std::string STSAdditionalConstraintName(const std::vector<std::string>& splitName);
16 
17 namespace Antares::Optimization
18 {
20 {
21 public:
22  explicit WatchedConstraint(const std::string& name, double slackValue);
23  virtual ~WatchedConstraint() = default;
24  virtual std::string infeasibility() = 0;
25  virtual std::string infeasibilityCause() = 0;
26  double slackValue() const;
27 
28 protected:
29  const std::vector<std::string>& splitName() const;
30 
31 private:
32  std::vector<std::string> splitName_;
33  double slack_value_;
34 };
35 
37 {
38  using WatchedConstraint::WatchedConstraint;
39 
40 public:
41  ~HourlyBC() override = default;
42  std::string infeasibility() override;
43  std::string infeasibilityCause() override;
44 };
45 
47 {
48  using WatchedConstraint::WatchedConstraint;
49 
50 public:
51  ~DailyBC() override = default;
52  std::string infeasibility() override;
53  std::string infeasibilityCause() override;
54 };
55 
57 {
58  using WatchedConstraint::WatchedConstraint;
59 
60 public:
61  ~WeeklyBC() override = default;
62  std::string infeasibility() override;
63  std::string infeasibilityCause() override;
64 };
65 
67 {
68  using WatchedConstraint::WatchedConstraint;
69 
70 public:
71  ~FictitiousLoad() override = default;
72  std::string infeasibility() override;
73  std::string infeasibilityCause() override;
74 };
75 
77 {
78  using WatchedConstraint::WatchedConstraint;
79 
80 public:
81  ~HydroLevel() override = default;
82  std::string infeasibility() override;
83  std::string infeasibilityCause() override;
84 };
85 
86 class STS: public WatchedConstraint
87 {
88  using WatchedConstraint::WatchedConstraint;
89 
90 public:
91  ~STS() override = default;
92  std::string infeasibility() override;
93  std::string infeasibilityCause() override;
94 };
95 
97 {
98  using WatchedConstraint::WatchedConstraint;
99 
100 public:
101  ~HydroProduction() override = default;
102  std::string infeasibility() override;
103  std::string infeasibilityCause() override;
104 };
105 
106 template<const char* ConstraintType>
108 {
109  using WatchedConstraint::WatchedConstraint;
110 
111 public:
112  ~STSAdditionalConstraint() override = default;
113 
114  std::string infeasibility() override
115  {
116  return "Short-term-storage additional constraint (" + std::string(ConstraintType) + ") "
117  + STSAdditionalConstraintName(splitName()) + " at area '" + areaName(splitName())
118  + "' in STS '" + STSname(splitName()) + "' at " + timeStep(splitName());
119  }
120 
121  std::string infeasibilityCause() override
122  {
123  return "* Short-term " + std::string(ConstraintType) + " additional constraint";
124  }
125 };
126 
127 constexpr char WITHDRAWAL[] = "withdrawal";
128 constexpr char INJECTION[] = "injection";
129 constexpr char NETTING[] = "netting";
130 
134 
136 {
137 public:
138  explicit ConstraintsFactory() = default;
139  std::unique_ptr<WatchedConstraint> create(const std::string&, double) const;
140  std::regex constraintsFilter();
141 
142 private:
143  static const std::map<
144  std::string,
145  std::pair<std::regex,
146  std::function<std::unique_ptr<WatchedConstraint>(const std::string&, double)>>>
147  regex_to_ctypes_;
148 };
149 
150 } // namespace Antares::Optimization
Definition: watched-constraints.h:136
Definition: watched-constraints.h:47
Definition: watched-constraints.h:67
Definition: watched-constraints.h:37
Definition: watched-constraints.h:77
Definition: watched-constraints.h:97
Definition: watched-constraints.h:108
Definition: watched-constraints.h:87
Definition: watched-constraints.h:20
Definition: watched-constraints.h:57