Antares Simulator
Power System Simulator
BindingConstraint.h
1 /*
2 ** Copyright 2007-2025, RTE (https://www.rte-france.com)
3 ** See AUTHORS.txt
4 ** SPDX-License-Identifier: MPL-2.0
5 ** This file is part of Antares-Simulator,
6 ** Adequacy and Performance assessment for interconnected energy networks.
7 **
8 ** Antares_Simulator is free software: you can redistribute it and/or modify
9 ** it under the terms of the Mozilla Public Licence 2.0 as published by
10 ** the Mozilla Foundation, either version 2 of the License, or
11 ** (at your option) any later version.
12 **
13 ** Antares_Simulator is distributed in the hope that it will be useful,
14 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
15 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 ** Mozilla Public Licence 2.0 for more details.
17 **
18 ** You should have received a copy of the Mozilla Public Licence 2.0
19 ** along with Antares_Simulator. If not, see <https://opensource.org/license/mpl-2-0/>.
20 */
21 #pragma once
22 
23 #include <memory>
24 #include <set>
25 #include <utility>
26 #include <vector>
27 
28 #include <yuni/yuni.h>
29 #include <yuni/core/noncopyable.h>
30 #include <yuni/core/string.h>
31 
32 #include <antares/array/matrix.h>
33 #include <antares/inifile/inifile.h>
34 #include "antares/antares/antares.h"
35 #include "antares/study/filter.h"
36 
37 #include "../area/links.h"
38 #include "../fwd.h"
39 #include "../parts/thermal/cluster.h"
40 #include "BindingConstraintStructures.h"
41 #include "EnvForLoading.h"
42 
43 namespace Antares::Data
44 {
45 // Forward declaration
46 struct CompareBindingConstraintName;
47 
48 class BindingConstraint final: public Yuni::NonCopyable<BindingConstraint>
49 {
50  friend class BindingConstraintLoader;
51  friend class BindingConstraintSaver;
52 
53 public:
54  enum Type
55  {
65  typeMax
66  };
67 
68  enum Operator
69  {
70  opUnknown = 0,
71  opEquality,
72  opLess,
73  opGreater,
74  opBoth,
75  opMax
76  };
77 
78  enum Column
79  {
80  columnInferior = 0,
81  columnSuperior,
82  columnEquality,
85  };
86 
88  using Set = std::set<std::shared_ptr<BindingConstraint>, CompareBindingConstraintName>;
90  using linkWeightMap = std::map<const AreaLink*, double, CompareLinkName>;
92  using iterator = linkWeightMap::iterator;
94  using const_iterator = linkWeightMap::const_iterator;
95 
97  using clusterWeightMap = std::map<const ThermalCluster*, double, CompareClusterName>;
98 
100  using linkOffsetMap = std::map<const AreaLink*, int>;
101 
103  using clusterOffsetMap = std::map<const ThermalCluster*, int>;
104 
108  static const char* TypeToCString(Type t);
109 
113  static Type StringToType(const AnyString& text);
114 
118  static const char* OperatorToCString(Operator o);
122  static const char* OperatorToShortCString(Operator o);
123 
127  static const char* MathOperatorToCString(Operator o);
128 
132  static Operator StringToOperator(const AnyString& text);
133 
135 
136 
139  ~BindingConstraint() = default;
141 
143 
144 
147  const ConstraintName& name() const;
148 
152  void name(const AnyString& newname);
153 
157  void pId(const AnyString& name);
158 
162  const ConstraintName& id() const;
164 
166 
167 
170  const YString& comments() const;
171 
173 
174 
177  std::string group() const;
178  void group(std::string group_name);
179 
183  void comments(const AnyString& newcomments);
185 
186  void resetToDefaultValues();
187 
189 
190  iterator begin();
191  const_iterator begin() const;
192 
193  iterator end();
194  const_iterator end() const;
196 
197  bool skipped() const;
198  bool isActive() const;
199 
200  // Ref to prevent copy. const ref to prevent modification.
201  const Matrix<>& RHSTimeSeries() const;
202  Matrix<>& RHSTimeSeries();
203 
204  bool hasAllWeightedLinksOnLayer(size_t layerID);
205 
206  bool hasAllWeightedClustersOnLayer(size_t layerID);
207 
209 
210 
215  double weight(const AreaLink* lnk) const;
216 
220  void weight(const AreaLink* lnk, double w);
221 
223 
224 
229  double weight(const ThermalCluster* clstr) const;
230 
234  void weight(const ThermalCluster* clstr, double w);
235 
239  void removeAllWeights();
240 
244  void copyWeights(const Study& study,
245  const BindingConstraint& rhs,
246  bool emptyBefore,
247  const std::function<void(AreaName&, const AreaName&)>& translate);
248 
254  int offset(const AreaLink* lnk) const;
255 
261  int offset(const ThermalCluster* lnk) const;
262 
266  void offset(const AreaLink* lnk, int o);
267 
271  void offset(const ThermalCluster* clstr, int o);
272 
276  void copyOffsets(const Study& study,
277  const BindingConstraint& rhs,
278  bool emptyBefore,
279  const std::function<void(AreaName&, const AreaName&)>& translate);
280 
284  uint linkCount() const;
285 
289  uint clusterCount() const;
291 
293 
294 
297  Type type() const;
298 
302  void setTimeGranularity(Type t);
304 
306 
307  Operator operatorType() const;
308  void operatorType(Operator o);
310 
311  uint yearByYearFilter() const;
312  uint synthesisFilter() const;
313 
315 
316  bool enabled() const;
319  void enabled(bool v);
321 
323 
324 
330  void clearAndReset(const AnyString& name, Type newType, Operator op);
332 
336  bool forceReload(bool reload = false) const;
337 
341  void markAsModified() const;
342 
348  void reverseWeightSign(const AreaLink* lnk);
349 
353  bool contains(const BindingConstraint* bc) const;
357  bool contains(const Area* area) const;
358 
362  bool contains(const AreaLink* lnk) const;
363 
364  bool contains(const ThermalCluster* clstr) const;
365 
369  void buildFormula(YString& s) const;
370 
371  BindingConstraintStructures initLinkArrays() const;
372 
373  template<class Env>
374  std::string timeSeriesFileName(const Env& env) const;
375 
376  const clusterWeightMap& clustersAndWeights() const;
377 
378 private:
380  ConstraintName pName;
382  ConstraintName pID;
385  Matrix<> RHSTimeSeries_;
387  linkWeightMap pLinkWeights;
389  clusterWeightMap pClusterWeights;
391  linkOffsetMap pLinkOffsets;
393  clusterOffsetMap pClusterOffsets;
395  Type pType;
397  Operator pOperator;
399  // By default, print nothing
400  uint pFilterYearByYear = filterNone;
402  // By default, print nothing
403  uint pFilterSynthesis = filterNone;
405  bool pEnabled = false;
407  YString pComments;
409  std::string group_ = "default";
410 
411  void clear();
412 
413  void copyFrom(const BindingConstraint* original);
414 
415 }; // class BindingConstraint
416 
417 // class BindConstList
418 
420 {
421  bool operator()(const std::shared_ptr<BindingConstraint>& s1,
422  const std::shared_ptr<BindingConstraint>& s2) const
423  {
424  return s1->name() < s2->name();
425  }
426 };
427 
428 namespace Enum
429 {
430 template<>
431 inline const std::initializer_list<std::string>& getNames<Antares::Data::BindingConstraint::Type>()
432 {
433  static const std::initializer_list<std::string> il = {"unknown", "hourly", "daily", "weekly"};
434  return il;
435 }
436 
437 template<>
438 inline const std::initializer_list<std::string>&
439 getNames<Antares::Data::BindingConstraint::Operator>()
440 {
441  static const std::initializer_list<std::string> il = {"unknown",
442  "equality",
443  "less",
444  "greater",
445  "both"};
446  return il;
447 }
448 } // namespace Enum
449 
450 } // namespace Antares::Data
451 
452 #include "BindingConstraint.hxx"
Definition for a single area.
Definition: area.h:51
Definition: BindingConstraintLoader.h:41
Definition: BindingConstraintSaver.h:34
Definition: BindingConstraint.h:49
const YString & comments() const
Get the comments.
Definition: BindingConstraint.hxx:36
Column
Definition: BindingConstraint.h:79
@ columnMax
The maximum number of columns which can be found in the value matrix.
Definition: BindingConstraint.h:84
void markAsModified() const
Mark the constraint as modified.
Definition: BindingConstraint.cpp:660
void copyOffsets(const Study &study, const BindingConstraint &rhs, bool emptyBefore, const std::function< void(AreaName &, const AreaName &)> &translate)
Copy all offsets from another constraint.
Definition: BindingConstraint.cpp:301
void setTimeGranularity(Type t)
Set the type of the binding constraint.
Definition: BindingConstraint.hxx:73
double weight(const AreaLink *lnk) const
Get the weight of a given interconnection.
Definition: BindingConstraint.cpp:555
~BindingConstraint()=default
Destructor.
std::map< const ThermalCluster *, int > clusterOffsetMap
Map of offset (for links)
Definition: BindingConstraint.h:103
uint clusterCount() const
Get how many thermal clusters the binding constraint contains.
Definition: BindingConstraint.hxx:51
static Type StringToType(const AnyString &text)
Convert a string into its corresponding type.
Definition: BindingConstraint.cpp:70
int offset(const AreaLink *lnk) const
Get the offset of a given interconnection.
Definition: BindingConstraint.cpp:567
void reverseWeightSign(const AreaLink *lnk)
Reverse the sign of the weight for a given interconnection or thermal cluster.
Definition: BindingConstraint.cpp:376
static const char * MathOperatorToCString(Operator o)
Convert a binding constraint operator into a short C-String (symbol)
Definition: BindingConstraint.cpp:133
static Operator StringToOperator(const AnyString &text)
Converter a raw string into an operator.
Definition: BindingConstraint.cpp:46
std::string group() const
Get the group.
Definition: BindingConstraint.cpp:720
void copyWeights(const Study &study, const BindingConstraint &rhs, bool emptyBefore, const std::function< void(AreaName &, const AreaName &)> &translate)
Copy all weights from another constraint.
Definition: BindingConstraint.cpp:241
bool enabled() const
Get if the binding constraint is enabled.
Definition: BindingConstraint.hxx:58
bool contains(const BindingConstraint *bc) const
Get if the given binding constraint is identical.
Definition: BindingConstraint.cpp:468
const ConstraintName & id() const
Get the ID of the binding constraint.
Definition: BindingConstraint.hxx:31
void removeAllWeights()
Remove all weights.
Definition: BindingConstraint.cpp:189
std::map< const AreaLink *, int > linkOffsetMap
Map of offset (for links)
Definition: BindingConstraint.h:100
std::set< std::shared_ptr< BindingConstraint >, CompareBindingConstraintName > Set
Ordered Set of binding constraints.
Definition: BindingConstraint.h:88
static const char * OperatorToCString(Operator o)
Convert a binding constraint operator into a mere C-String.
Definition: BindingConstraint.cpp:114
linkWeightMap::iterator iterator
Iterator.
Definition: BindingConstraint.h:92
void buildFormula(YString &s) const
Build a human readable formula for the binding constraint.
Definition: BindingConstraint.cpp:407
Type type() const
Get the type of the binding constraint.
Definition: BindingConstraint.hxx:68
linkWeightMap::const_iterator const_iterator
Const iterator.
Definition: BindingConstraint.h:94
std::map< const ThermalCluster *, double, CompareClusterName > clusterWeightMap
Map of weight (for thermal clusters)
Definition: BindingConstraint.h:97
Type
Definition: BindingConstraint.h:55
@ typeMax
The maximum number of types.
Definition: BindingConstraint.h:65
@ typeHourly
The binding constraint has hourly values.
Definition: BindingConstraint.h:59
@ typeDaily
The binding constraint has daily values.
Definition: BindingConstraint.h:61
@ typeUnknown
Unknown status.
Definition: BindingConstraint.h:57
@ typeWeekly
The binding constraint has weekly values.
Definition: BindingConstraint.h:63
const ConstraintName & name() const
Get the name of the binding constraint.
Definition: BindingConstraint.hxx:26
std::map< const AreaLink *, double, CompareLinkName > linkWeightMap
Map of weight (for links)
Definition: BindingConstraint.h:90
uint linkCount() const
Get how many links the binding constraint contains.
Definition: BindingConstraint.hxx:46
void pId(const AnyString &name)
Set the pId of the binding constraint.
Definition: BindingConstraint.cpp:145
void clearAndReset(const AnyString &name, Type newType, Operator op)
Clear all values and reset the binding constraint to its new type.
Definition: BindingConstraint.cpp:665
bool forceReload(bool reload=false) const
Invalidate all matrices.
Definition: BindingConstraint.cpp:655
static const char * OperatorToShortCString(Operator o)
Convert a binding constraint operator into a short C-String.
Definition: BindingConstraint.cpp:121
static const char * TypeToCString(Type t)
Convert a binding constraint type into a mere C-String.
Definition: BindingConstraint.cpp:107
Definition: study.h:57
A single thermal cluster.
Definition: cluster.h:76
A n-by-n matrix.
Definition: matrix.h:44
Definition: BindingConstraintStructures.h:34
Definition: BindingConstraint.h:420