Antares Simulator
Power System Simulator
Loading...
Searching...
No Matches
BindingConstraint.h
1/*
2** Copyright 2007-2024, 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
43namespace Antares::Data
44{
45// Forward declaration
46struct CompareBindingConstraintName;
47
48class BindingConstraint final: public Yuni::NonCopyable<BindingConstraint>
49{
50 friend class BindingConstraintLoader;
51 friend class BindingConstraintSaver;
52
53public:
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 linkWeightMap = std::map<const AreaLink*, double, CompareLinkName>;
90 using iterator = linkWeightMap::iterator;
92 using const_iterator = linkWeightMap::const_iterator;
93
95 using clusterWeightMap = std::map<const ThermalCluster*, double, CompareClusterName>;
96
98 using linkOffsetMap = std::map<const AreaLink*, int>;
99
101 using clusterOffsetMap = std::map<const ThermalCluster*, int>;
102
106 static const char* TypeToCString(Type t);
107
111 static Type StringToType(const AnyString& text);
112
116 static const char* OperatorToCString(Operator o);
120 static const char* OperatorToShortCString(Operator o);
121
125 static const char* MathOperatorToCString(Operator o);
126
130 static Operator StringToOperator(const AnyString& text);
131
133
134
139
141
142
145 const ConstraintName& name() const;
146
150 void name(const AnyString& newname);
151
155 void pId(const AnyString& name);
156
160 const ConstraintName& id() const;
162
164
165
168 const YString& comments() const;
169
171
172
175 std::string group() const;
176 void group(std::string group_name);
177
181 void comments(const AnyString& newcomments);
183
184 void resetToDefaultValues();
185
187
188 iterator begin();
189 const_iterator begin() const;
190
191 iterator end();
192 const_iterator end() const;
194
195 bool skipped() const;
196 bool isActive() const;
197
198 // Ref to prevent copy. const ref to prevent modification.
199 const Matrix<>& RHSTimeSeries() const;
200 Matrix<>& RHSTimeSeries();
201
202 bool hasAllWeightedLinksOnLayer(size_t layerID);
203
204 bool hasAllWeightedClustersOnLayer(size_t layerID);
205
207
208
213 double weight(const AreaLink* lnk) const;
214
218 void weight(const AreaLink* lnk, double w);
219
221
222
227 double weight(const ThermalCluster* clstr) const;
228
232 void weight(const ThermalCluster* clstr, double w);
233
237 void removeAllWeights();
238
242 void copyWeights(const Study& study,
243 const BindingConstraint& rhs,
244 bool emptyBefore,
245 const std::function<void(AreaName&, const AreaName&)>& translate);
246
252 int offset(const AreaLink* lnk) const;
253
259 int offset(const ThermalCluster* lnk) const;
260
264 void offset(const AreaLink* lnk, int o);
265
269 void offset(const ThermalCluster* clstr, int o);
270
274 void copyOffsets(const Study& study,
275 const BindingConstraint& rhs,
276 bool emptyBefore,
277 const std::function<void(AreaName&, const AreaName&)>& translate);
278
282 uint linkCount() const;
283
287 uint clusterCount() const;
289
291
292
295 Type type() const;
296
300 void setTimeGranularity(Type t);
302
304
305 Operator operatorType() const;
306 void operatorType(Operator o);
308
309 uint yearByYearFilter() const;
310 uint synthesisFilter() const;
311
313
314
315 bool enabled() const;
317 void enabled(bool v);
319
321
322
328 void clearAndReset(const AnyString& name, Type newType, Operator op);
330
334 bool forceReload(bool reload = false) const;
335
339 void markAsModified() const;
340
346 void reverseWeightSign(const AreaLink* lnk);
347
351 bool contains(const BindingConstraint* bc) const;
355 bool contains(const Area* area) const;
356
360 bool contains(const AreaLink* lnk) const;
361
362 bool contains(const ThermalCluster* clstr) const;
363
367 void buildFormula(YString& s) const;
368
369 BindingConstraintStructures initLinkArrays() const;
370
371 template<class Env>
372 std::string timeSeriesFileName(const Env& env) const;
373
374private:
376 ConstraintName pName;
378 ConstraintName pID;
381 Matrix<> RHSTimeSeries_;
383 linkWeightMap pLinkWeights;
385 clusterWeightMap pClusterWeights;
387 linkOffsetMap pLinkOffsets;
389 clusterOffsetMap pClusterOffsets;
391 Type pType;
393 Operator pOperator;
395 // By default, print nothing
396 uint pFilterYearByYear = filterNone;
398 // By default, print nothing
399 uint pFilterSynthesis = filterNone;
401 bool pEnabled = false;
403 YString pComments;
405 std::string group_ = "default";
406
407 void clear();
408
409 void copyFrom(const BindingConstraint* original);
410
411}; // class BindingConstraint
412
413// class BindConstList
414
416{
417 bool operator()(const std::shared_ptr<BindingConstraint>& s1,
418 const std::shared_ptr<BindingConstraint>& s2) const
419 {
420 return s1->name() < s2->name();
421 }
422};
423
424} // namespace Antares::Data
425
426#include "BindingConstraint.hxx"
Definition for a single area.
Definition area.h:52
Definition BindingConstraintLoader.h:41
Definition BindingConstraintSaver.h:34
Definition BindingConstraint.h:49
const YString & comments() const
Get the comments.
Definition BindingConstraint.hxx:35
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:694
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:321
void setTimeGranularity(Type t)
Set the type of the binding constraint.
Definition BindingConstraint.hxx:72
double weight(const AreaLink *lnk) const
Get the weight of a given interconnection.
Definition BindingConstraint.cpp:594
std::map< const ThermalCluster *, int > clusterOffsetMap
Map of offset (for links)
Definition BindingConstraint.h:101
uint clusterCount() const
Get how many thermal clusters the binding constraint contains.
Definition BindingConstraint.hxx:50
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:606
~BindingConstraint()
Destructor.
Definition BindingConstraint.cpp:140
void reverseWeightSign(const AreaLink *lnk)
Reverse the sign of the weight for a given interconnection or thermal cluster.
Definition BindingConstraint.cpp:408
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:754
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:249
bool enabled() const
Get if the binding constraint is enabled.
Definition BindingConstraint.hxx:57
bool contains(const BindingConstraint *bc) const
Get if the given binding constraint is identical.
Definition BindingConstraint.cpp:507
const ConstraintName & id() const
Get the ID of the binding constraint.
Definition BindingConstraint.hxx:30
void removeAllWeights()
Remove all weights.
Definition BindingConstraint.cpp:197
std::map< const AreaLink *, int > linkOffsetMap
Map of offset (for links)
Definition BindingConstraint.h:98
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:90
void buildFormula(YString &s) const
Build a human readable formula for the binding constraint.
Definition BindingConstraint.cpp:441
Type type() const
Get the type of the binding constraint.
Definition BindingConstraint.hxx:67
linkWeightMap::const_iterator const_iterator
Const iterator.
Definition BindingConstraint.h:92
std::map< const ThermalCluster *, double, CompareClusterName > clusterWeightMap
Map of weight (for thermal clusters)
Definition BindingConstraint.h:95
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:25
std::map< const AreaLink *, double, CompareLinkName > linkWeightMap
Map of weight (for links)
Definition BindingConstraint.h:88
uint linkCount() const
Get how many links the binding constraint contains.
Definition BindingConstraint.hxx:45
void pId(const AnyString &name)
Set the pId of the binding constraint.
Definition BindingConstraint.cpp:153
void clearAndReset(const AnyString &name, Type newType, Operator op)
Clear all values and reset the binding constraint to its new type.
Definition BindingConstraint.cpp:699
bool forceReload(bool reload=false) const
Invalidate all matrices.
Definition BindingConstraint.cpp:689
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:61
A single thermal cluster.
Definition cluster.h:78
A n-by-n matrix.
Definition jit.h:30
Definition BindingConstraintStructures.h:36
Definition BindingConstraint.h:416