23 #include "antares/study/binding_constraint/BindingConstraint.h"
25 #include "../../variable.h"
27 namespace Antares::Solver::Variable::Economy
34 return "BC. MARG. COST";
46 return "Marginal cost for binding constraints";
61 & (Category::FileLevel::bc);
76 typedef std::vector<IntermediateValues> IntermediateValuesType;
87 template<
class NextT = Container::EndOfList>
89 :
public Variable::IVariable<BindingConstMarginCost<NextT>, NextT, VCardBindingConstMarginCost>
110 template<
int CDataLevel,
int CFile>
126 void simulationBegin()
128 NextType::simulationBegin();
133 NextType::simulationEnd();
138 pNbYearsParallel = study.maxNbYearsInParallel;
144 pValuesForTheCurrentYear.resize(pNbYearsParallel);
145 for (
unsigned int numSpace = 0; numSpace < pNbYearsParallel; numSpace++)
147 pValuesForTheCurrentYear[numSpace].initializeFromStudy(study);
150 NextType::initializeFromStudy(study);
156 VariableAccessorType::InitializeAndReset(
results, study);
159 void setAssociatedBindConstraint(std::shared_ptr<Data::BindingConstraint> bc_ptr)
161 associatedBC_ = bc_ptr;
164 void setBindConstraintsCount(uint bcCount)
169 size_t getMaxNumberColumns()
const
174 void yearBegin(
unsigned int year,
unsigned int numSpace)
177 pValuesForTheCurrentYear[numSpace].reset();
180 NextType::yearBegin(year, numSpace);
183 void yearEnd(
unsigned int year,
unsigned int numSpace)
189 using namespace Data;
190 switch (associatedBC_->type())
192 case BindingConstraint::typeHourly:
193 pValuesForTheCurrentYear[numSpace].computeAveragesForCurrentYearFromHourlyResults();
195 case BindingConstraint::typeDaily:
196 pValuesForTheCurrentYear[numSpace].computeAveragesForCurrentYearFromDailyResults();
198 case BindingConstraint::typeWeekly:
199 pValuesForTheCurrentYear[numSpace].computeAveragesForCurrentYearFromWeeklyResults();
201 case BindingConstraint::typeUnknown:
202 case BindingConstraint::typeMax:
208 NextType::yearEnd(year, numSpace);
211 void computeSummary(
unsigned int year,
unsigned int numSpace)
217 NextType::computeSummary(year, numSpace);
220 void weekBegin(
State& state)
224 auto numSpace = state.numSpace;
226 using namespace Data;
227 switch (associatedBC_->type())
229 case BindingConstraint::typeHourly:
230 case BindingConstraint::typeUnknown:
231 case BindingConstraint::typeMax:
234 case BindingConstraint::typeDaily:
236 int dayInTheYear = state.weekInTheYear * 7;
237 for (
int dayInTheWeek = 0; dayInTheWeek < 7; dayInTheWeek++)
239 pValuesForTheCurrentYear[numSpace].day[dayInTheYear]
240 -= state.problemeHebdo
241 ->ResultatsContraintesCouplantes[associatedBC_][dayInTheWeek];
249 case BindingConstraint::typeWeekly:
251 uint weekInTheYear = state.weekInTheYear;
252 double weeklyValue = -state.problemeHebdo
253 ->ResultatsContraintesCouplantes[associatedBC_][0];
255 pValuesForTheCurrentYear[numSpace].week[weekInTheYear] = weeklyValue;
257 int dayInTheYear = state.weekInTheYear * 7;
258 for (
int dayInTheWeek = 0; dayInTheWeek < 7; dayInTheWeek++)
260 pValuesForTheCurrentYear[numSpace].day[dayInTheYear] = weeklyValue;
267 NextType::weekBegin(state);
270 void hourBegin(
unsigned int hourInTheYear)
273 NextType::hourBegin(hourInTheYear);
276 void hourForEachArea(
State& state,
unsigned int numSpace)
278 NextType::hourForEachArea(state, numSpace);
281 void weekForEachArea(
State& state,
unsigned int numSpace)
283 NextType::weekForEachArea(state, numSpace);
286 template<
class VCardToFindT>
291 NextType::template retrieveResultsForArea<VCardToFindT>(result, area);
294 void buildDigest(SurveyResults&
results,
int digestLevel,
int dataLevel)
const
296 NextType::buildDigest(
results, digestLevel, dataLevel);
300 static void simulationEndSpatialAggregates(V& allVars)
302 NextType::template simulationEndSpatialAggregates<V>(allVars);
306 static void computeSpatialAggregatesSummary(V& allVars,
308 unsigned int numSpace)
310 NextType::template computeSpatialAggregatesSummary<V>(allVars, year, numSpace);
313 void beforeYearByYearExport(uint year, uint numSpace)
315 NextType::beforeYearByYearExport(year, numSpace);
318 template<
class SearchVCardT,
class O>
319 static void computeSpatialAggregateWith(O& out,
const Data::Area* area, uint numSpace)
321 NextType::template computeSpatialAggregateWith<SearchVCardT, O>(out, area, numSpace);
324 template<
class VCardToFindT>
328 NextType::template retrieveResultsForLink<VCardToFindT>(result, link);
331 template<
class VCardToFindT>
332 static void retrieveResultsForThermalCluster(
336 NextType::template retrieveResultsForThermalCluster<VCardToFindT>(result, cluster);
339 void hourEnd(
State& state,
unsigned int hourInTheYear)
343 auto numSpace = state.numSpace;
346 pValuesForTheCurrentYear[numSpace][hourInTheYear]
347 -= state.problemeHebdo
348 ->ResultatsContraintesCouplantes[associatedBC_][state.hourInTheWeek];
352 NextType::hourEnd(state, hourInTheYear);
355 Antares::Memory::Stored<double>::ConstReturnType retrieveRawHourlyValuesForCurrentYear(
357 unsigned int numSpace)
const
359 return pValuesForTheCurrentYear[numSpace].hour;
362 void localBuildAnnualSurveyReport(
366 unsigned int numSpace)
const
368 if (!(precision & associatedBC_->yearByYearFilter()))
373 results.isCurrentVarNA = AncestorType::isNonApplicable;
375 results.isCurrentVarNA[0] = isCurrentOutputNonApplicable(precision);
377 if (AncestorType::isPrinted[0])
380 results.variableCaption = getBindConstraintCaption();
382 pValuesForTheCurrentYear[numSpace]
383 .template buildAnnualSurveyReport<VCardType>(
results, fileLevel, precision);
387 void buildSurveyReport(SurveyResults&
results,
394 if (precision & associatedBC_->yearByYearFilter())
400 results.isPrinted = AncestorType::isPrinted;
401 results.isCurrentVarNA = AncestorType::isNonApplicable;
402 results.isCurrentVarNA[0] = isCurrentOutputNonApplicable(precision);
403 results.variableCaption = getBindConstraintCaption();
405 VariableAccessorType::template BuildSurveyReport<VCardType>(
results,
413 NextType::buildSurveyReport(
results, dataLevel, fileLevel, precision);
419 std::string getBindConstraintCaption()
const
421 std::string mathOperator(
423 return std::string() + associatedBC_->name().c_str() +
" (" + mathOperator +
")";
428 return associatedBC_ !=
nullptr;
431 bool isCurrentOutputNonApplicable(
int precision)
const
433 using namespace Antares::Data;
438 switch (associatedBC_->type())
440 case BindingConstraint::typeUnknown:
441 case BindingConstraint::typeMax:
444 const auto precision_bc = 1 << (associatedBC_->type() - 1);
445 return precision < precision_bc;
452 typename VCardType::IntermediateValuesType pValuesForTheCurrentYear;
453 unsigned int pNbYearsParallel = 0;
454 std::shared_ptr<Data::BindingConstraint> associatedBC_ =
nullptr;
Definition of a link between two areas (Interconnection)
Definition: links.h:58
Definition for a single area.
Definition: area.h:51
static const char * MathOperatorToCString(Operator o)
Convert a binding constraint operator into a short C-String (symbol)
Definition: BindingConstraint.cpp:133
@ typeHourly
The binding constraint has hourly values.
Definition: BindingConstraint.h:59
A single thermal cluster.
Definition: cluster.h:76
Definition: bindingConstraintsMarginalCost.h:90
NextT NextType
Type of the next static variable.
Definition: bindingConstraintsMarginalCost.h:93
@ count
How many items have we got.
Definition: bindingConstraintsMarginalCost.h:107
VCardBindingConstMarginCost VCardType
VCard.
Definition: bindingConstraintsMarginalCost.h:95
Variable::IVariable< BindingConstMarginCost< NextT >, NextT, VCardType > AncestorType
Ancestor.
Definition: bindingConstraintsMarginalCost.h:97
VCardType::ResultsType ResultsType
List of expected results.
Definition: bindingConstraintsMarginalCost.h:100
Interface for any variable.
Definition: variable.h:47
const StoredResultType & results() const
The results.
Definition: variable.hxx:544
StoredResultType pResults
All the results about this variable.
Definition: variable.h:323
@ count
The count if item in the list.
Definition: results.h:52
Definition: cbuilder.h:120
Definition: bindingConstraintsMarginalCost.h:112
Definition: bindingConstraintsMarginalCost.h:30
static constexpr uint8_t categoryFileLevel
File level (provided by the type of the results)
Definition: bindingConstraintsMarginalCost.h:60
static std::string Unit()
Unit.
Definition: bindingConstraintsMarginalCost.h:38
static constexpr uint8_t hasIntermediateValues
Intermediate values.
Definition: bindingConstraintsMarginalCost.h:71
static constexpr uint8_t categoryDataLevel
Data Level.
Definition: bindingConstraintsMarginalCost.h:58
static constexpr uint8_t nodeDepthForGUI
Indentation (GUI)
Definition: bindingConstraintsMarginalCost.h:65
static constexpr uint8_t decimal
Decimal precision.
Definition: bindingConstraintsMarginalCost.h:67
static constexpr int columnCount
Number of columns used by the variable.
Definition: bindingConstraintsMarginalCost.h:69
static constexpr uint8_t precision
Precision (views)
Definition: bindingConstraintsMarginalCost.h:63
Results< R::AllYears::Average< R::AllYears::StdDeviation< R::AllYears::Min< R::AllYears::Max< > > > > > ResultsType
The expecte results.
Definition: bindingConstraintsMarginalCost.h:55
static constexpr uint8_t isPossiblyNonApplicable
Can this variable be non applicable (0 : no, 1 : yes)
Definition: bindingConstraintsMarginalCost.h:73
static std::string Description()
The short description of the variable.
Definition: bindingConstraintsMarginalCost.h:44
static std::string Caption()
Caption.
Definition: bindingConstraintsMarginalCost.h:32
Definition: stdDeviation.h:33
VariableAccessor< typename VCardT::ResultsType, VCardT::columnCount >::Type ResultsType
The true type used for the results.
Definition: info.h:760