Antares Simulator
Power System Simulator
visitorFixture.hpp
1 #pragma once
2 
3 #include <antares/expressions/Registry.hxx>
4 #include <antares/expressions/nodes/ExpressionsNodes.h>
5 #include <antares/solver/optim-model-filler/ReadLinearConstraintVisitor.h>
6 #include "antares/exception/InvalidArgumentError.hpp"
7 #include "antares/modeler-optimisation-container/OptimEntityContainer.h"
8 #include "antares/optimisation/linear-problem-data-impl/Scenario.h"
9 #include "antares/optimisation/linear-problem-data-impl/linearProblemData.h"
10 
11 #include "UtilMocks.h"
12 
13 using namespace Antares::Optimisation;
14 using namespace Antares::Expressions;
15 using namespace Antares::ModelerStudy;
16 using namespace Antares::Expressions::Nodes;
17 using namespace Antares::Expressions::Visitors;
18 
19 inline ScenarioGroupRepository createScenario()
20 {
21  ScenarioGroupRepository scenarioGroupRepository;
22  auto scenarioPtr = std::make_unique<LinearProblemDataImpl::Scenario>("SCENARIO_GROUP");
23  scenarioPtr->setTimeSerieNumber(0, 1);
24  scenarioGroupRepository.addScenario("SCENARIO_GROUP", std::move(scenarioPtr));
25  scenarioPtr = std::make_unique<LinearProblemDataImpl::Scenario>("GROUP");
26  scenarioPtr->setTimeSerieNumber(0, 1);
27  scenarioGroupRepository.addScenario("GROUP", std::move(scenarioPtr));
28  return scenarioGroupRepository;
29 }
30 
32 {
33  [[nodiscard]] double getData([[maybe_unused]] const std::string& dataSetId,
34  [[maybe_unused]] unsigned scenario,
35  unsigned hour) const override
36  {
37  return hour; // for test
38  }
39 
40  [[nodiscard]] std::span<const double> getData(const std::string& dataSetId,
41  unsigned timeSeriesNumber,
42  unsigned firstHour,
43  unsigned lastHour) const override
44  {
45  return {v_.begin(), lastHour - firstHour + 1};
46  }
47 
48  const std::vector<double> v_{0., 1., 2., 3., 4., 5.}; // should be enough
49 };
50 
51 template<class Visitor>
52 struct VisitorFixture: Registry<Node>
53 {
54  MockLinearProblem linearProblem;
56  LinearProblemApi::EmptyScenario empty_scenario;
57  ScenarioGroupRepository scenarioGroupRepository;
59 
60  OptimEntityContainer optimContainer;
61  std::vector<SystemModel::Component> components;
62  LinearProblemApi::FillContext ctx{0, 0, 0, 0, 0};
63 
65  linearProblem(false),
66  scenarioGroupRepository(createScenario()),
67  optimContainer(linearProblem, &data, &scenarioGroupRepository),
68  components(1, setupComponent())
69  {
70  optimContainer.addFromSystemComponents(components);
71  auto& optimComponent = optimContainer.getOptimComponent(0);
72  optimComponent.modelVariableGlobalIndices = {0, 1, 2};
73  {
74  optimContainer.addStartColumn();
75  linearProblem.addNumVariable(0, 1, "var1");
76  optimContainer.addStartColumn();
77  linearProblem.addNumVariable(0, 1, "var2");
78  optimContainer.addStartColumn();
79  linearProblem.addNumVariable(0, 1, "var3");
80  }
81  }
82 
83  Visitor visitor()
84  {
85  return Visitor(optimContainer, ctx, components[0]);
86  }
87 
88 private:
89  SystemModel::Component setupComponent()
90  {
91  return setComponentParameterValues(
92  {{"param_3", VariabilityType::CONSTANT_IN_TIME_AND_SCENARIO, "3."},
93  {"param_m5", VariabilityType::CONSTANT_IN_TIME_AND_SCENARIO, "-5."},
94  {"param_ts", VariabilityType::VARYING_IN_TIME_ONLY, "0_1_2"},
95  {"param1", VariabilityType::CONSTANT_IN_TIME_AND_SCENARIO, "-2."},
96  {"param2", VariabilityType::CONSTANT_IN_TIME_AND_SCENARIO, "8."}});
97  }
98 
99  SystemModel::Component setComponentParameterValues(
100  const std::vector<std::tuple<std::string, VariabilityType, std::string>>& values)
101  {
102  std::map<std::string, Antares::ModelerStudy::SystemModel::ParameterTypeAndValue> map;
103  std::vector<SystemModel::Parameter> parameters;
104  for (auto value: values)
105  {
107  .id = std::get<0>(value),
108  .type = std::get<1>(value),
109  .value = std::get<2>(value)};
110  SystemModel::Parameter parameter{std::get<0>(value),
111  SystemModel::TimeDependent::YES,
112  SystemModel::ScenarioDependent::YES};
113  parameters.push_back(parameter);
114  }
115  SystemModel::ModelBuilder modelBuilder;
116  m = modelBuilder.withId("model").withParameters(std::move(parameters)).build();
117  SystemModel::ComponentBuilder componentBuilder;
118  return componentBuilder.withId("compo")
119  .withModel(&m)
120  .withScenarioGroupId("group")
121  .withParameterValues(map)
122  .build();
123  }
124 };
Definition: Registry.hxx:33
ComponentBuilder & withScenarioGroupId(const std::string &scenario_group_id)
Sets the ID of the scenario group to which the component belongs.
Definition: component.cpp:236
ComponentBuilder & withModel(const Model *model)
Sets the model of the component.
Definition: component.cpp:204
Component build()
Builds and returns the Component object.
Definition: component.cpp:247
ComponentBuilder & withId(std::string_view id)
Sets the ID of the component.
Definition: component.cpp:192
ComponentBuilder & withParameterValues(std::map< std::string, ParameterTypeAndValue > parameter_values)
Sets the parameter values of the component. The parameters included should be all of the model's para...
Definition: component.cpp:223
ModelBuilder & withParameters(std::vector< Parameter > &&parameters)
Sets the parameters of the model.
Definition: model.cpp:152
Model build()
Builds and returns the Model object.
Definition: model.cpp:94
ModelBuilder & withId(std::string_view id)
Sets the ID of the model.
Definition: model.cpp:122
Empty scenario implementation of IScenario. Provide a default implementation of IScenario that return...
Definition: IScenario.h:65
Context for filling linear problem data. Contains temporal information.
Definition: ILinearProblemData.h:35
Interface for linear problem data. Provides a method to retrieve data for a specific dataset,...
Definition: ILinearProblemData.h:114
Definition: OptimEntityContainer.h:46
Definition: scenarioGroupRepo.h:12
Definition: UtilMocks.h:166
Antares::Optimisation::LinearProblemApi::IMipVariable * addNumVariable(double, double, const std::string &) override
Create a continuous variable.
Definition: UtilMocks.h:219
Definition: VariableNode.h:9
Definition: test_PrintAndEvalVisitors.cpp:703
Definition: visitorFixture.hpp:53