From cdabd9e594bf2a3e821c02a1d3bc72ae7531faff Mon Sep 17 00:00:00 2001 From: Abdoulbari Zakir Date: Thu, 20 Feb 2025 10:41:09 +0100 Subject: [PATCH] r --- .../expressions/visitors/EvalVisitor.h | 6 ++--- src/expressions/visitors/EvalVisitor.cpp | 15 +++++------ .../linear-problem-api/ILinearProblemData.h | 6 ----- .../optim-model-filler/ComponentFiller.cpp | 15 +++-------- .../ReadLinearConstraintVisitor.cpp | 4 +-- .../ReadLinearExpressionVisitor.cpp | 22 +++++++--------- .../ReadLinearConstraintVisitor.h | 2 +- .../ReadLinearExpressionVisitor.h | 4 +-- .../src/expressions/test_DeepWideTrees.cpp | 3 +-- .../expressions/test_PrintAndEvalNodes.cpp | 25 ++++++------------- .../test_readLinearConstraintVisitor.cpp | 8 +++--- .../test_readLinearExpressionVisitor.cpp | 12 ++++----- 12 files changed, 44 insertions(+), 78 deletions(-) diff --git a/src/expressions/include/antares/expressions/visitors/EvalVisitor.h b/src/expressions/include/antares/expressions/visitors/EvalVisitor.h index af154d3e87..902d1a1ba9 100644 --- a/src/expressions/include/antares/expressions/visitors/EvalVisitor.h +++ b/src/expressions/include/antares/expressions/visitors/EvalVisitor.h @@ -239,15 +239,15 @@ class EvalVisitor: public NodeVisitor * @brief Constructs an evaluation visitor with the specified context. * * @param context The evaluation context. - * @param dataSeriesKeys + * @param fillContext */ explicit EvalVisitor(EvaluationContext context, - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys); + Optimisation::LinearProblemApi::FillContext fillContext); std::string name() const override; private: const EvaluationContext context_; - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys_; + Optimisation::LinearProblemApi::FillContext fillContext_; EvaluationResult visit(const Nodes::SumNode* node) override; EvaluationResult visit(const Nodes::SubtractionNode* node) override; EvaluationResult visit(const Nodes::MultiplicationNode* node) override; diff --git a/src/expressions/visitors/EvalVisitor.cpp b/src/expressions/visitors/EvalVisitor.cpp index 7b6653bd4e..32294c554e 100644 --- a/src/expressions/visitors/EvalVisitor.cpp +++ b/src/expressions/visitors/EvalVisitor.cpp @@ -29,9 +29,9 @@ namespace Antares::Expressions::Visitors { EvalVisitor::EvalVisitor(EvaluationContext context, - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys): + Optimisation::LinearProblemApi::FillContext fillContext): context_(std::move(context)), - dataSeriesKeys_(std::move(dataSeriesKeys)) + fillContext_(std::move(fillContext)) { } @@ -89,15 +89,12 @@ EvaluationResult EvalVisitor::visit(const Nodes::ParameterNode* node) else { std::vector params; - params.reserve(dataSeriesKeys_.fillContext.getNumberOfTimestep()); - for (auto timeStep = dataSeriesKeys_.fillContext.getFirstTimeStep(); - timeStep <= dataSeriesKeys_.fillContext.getLastTimeStep(); + params.reserve(fillContext_.getNumberOfTimestep()); + for (auto timeStep = fillContext_.getFirstTimeStep(); + timeStep <= fillContext_.getLastTimeStep(); ++timeStep) { - params.emplace_back(context_.getParameterValue(node->value(), - dataSeriesKeys_.scenarioGroup, - dataSeriesKeys_.scenario, - timeStep)); + params.emplace_back(context_.getParameterValue(node->value(), "", 0, timeStep)); } return EvaluationResult{params}; } diff --git a/src/optimisation/linear-problem-api/include/antares/optimisation/linear-problem-api/ILinearProblemData.h b/src/optimisation/linear-problem-api/include/antares/optimisation/linear-problem-api/ILinearProblemData.h index 0efdf29bee..420e10445c 100644 --- a/src/optimisation/linear-problem-api/include/antares/optimisation/linear-problem-api/ILinearProblemData.h +++ b/src/optimisation/linear-problem-api/include/antares/optimisation/linear-problem-api/ILinearProblemData.h @@ -48,12 +48,6 @@ class FillContext unsigned lastTimeStep = 0; }; -struct DataSeriesKeys -{ - FillContext fillContext; - std::string scenarioGroup; - unsigned scenario; -}; class ILinearProblemData { diff --git a/src/solver/optim-model-filler/ComponentFiller.cpp b/src/solver/optim-model-filler/ComponentFiller.cpp index 9260e54daf..d6c4d21bc9 100644 --- a/src/solver/optim-model-filler/ComponentFiller.cpp +++ b/src/solver/optim-model-filler/ComponentFiller.cpp @@ -171,10 +171,7 @@ void ComponentFiller::addVariables(Optimisation::LinearProblemApi::ILinearProble {}, data); - Expressions::Visitors::EvalVisitor evaluator(evaluationContext, - {.fillContext = ctx, - .scenarioGroup = component_.getScenarioGroupId(), - .scenario = 0}); + Expressions::Visitors::EvalVisitor evaluator(evaluationContext, ctx); for (const auto& variable: component_.getModel()->Variables() | std::views::values) { const auto& lb = evaluator.dispatch(variable.LowerBound().RootNode()); @@ -256,10 +253,7 @@ void ComponentFiller::addConstraints(Optimisation::LinearProblemApi::ILinearProb Expressions::Visitors::EvaluationContext evaluationContext(component_.getParameterValues(), {}, data); - ReadLinearConstraintVisitor visitor(evaluationContext, - {.fillContext = ctx, - .scenarioGroup = component_.getScenarioGroupId(), - .scenario = 0}); + ReadLinearConstraintVisitor visitor(evaluationContext, ctx); for (const auto& constraint: component_.getModel()->getConstraints() | std::views::values) { auto* root_node = constraint.expression().RootNode(); @@ -292,10 +286,7 @@ void ComponentFiller::addObjective(Optimisation::LinearProblemApi::ILinearProble {}, data); - ReadLinearExpressionVisitor visitor(evaluationContext, - {.fillContext = ctx, - .scenarioGroup = component_.getScenarioGroupId(), - .scenario = 0}); + ReadLinearExpressionVisitor visitor(evaluationContext, ctx); auto linear_expressions = visitor.dispatch(model->Objective().RootNode()) .GetLinearExpressions(); diff --git a/src/solver/optim-model-filler/ReadLinearConstraintVisitor.cpp b/src/solver/optim-model-filler/ReadLinearConstraintVisitor.cpp index e13ef02f93..1764b2f401 100644 --- a/src/solver/optim-model-filler/ReadLinearConstraintVisitor.cpp +++ b/src/solver/optim-model-filler/ReadLinearConstraintVisitor.cpp @@ -32,8 +32,8 @@ namespace Antares::Optimization ReadLinearConstraintVisitor::ReadLinearConstraintVisitor( Expressions::Visitors::EvaluationContext context, - const Optimisation::LinearProblemApi::DataSeriesKeys& dataSeriesKeys): - linear_expression_visitor_(std::move(context), dataSeriesKeys) + const Optimisation::LinearProblemApi::FillContext& fillContext): + linear_expression_visitor_(std::move(context), fillContext) { } diff --git a/src/solver/optim-model-filler/ReadLinearExpressionVisitor.cpp b/src/solver/optim-model-filler/ReadLinearExpressionVisitor.cpp index c72d2e7ea5..f927cb47f8 100644 --- a/src/solver/optim-model-filler/ReadLinearExpressionVisitor.cpp +++ b/src/solver/optim-model-filler/ReadLinearExpressionVisitor.cpp @@ -33,9 +33,9 @@ namespace Antares::Optimization ReadLinearExpressionVisitor::ReadLinearExpressionVisitor( Expressions::Visitors::EvaluationContext context, - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys): + Optimisation::LinearProblemApi::FillContext fillContext): context_(std::move(context)), - dataSeriesKeys_(std::move(dataSeriesKeys)) + fillContext_(std::move(fillContext)) { } @@ -49,7 +49,7 @@ TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const SumNode* auto operands = node->getOperands(); return std::accumulate(std::begin(operands), std::end(operands), - TimeDependentLinearExpression(dataSeriesKeys_.fillContext), + TimeDependentLinearExpression(fillContext_), [this](TimeDependentLinearExpression sum, Node* operand) { return sum + dispatch(operand); }); } @@ -91,8 +91,7 @@ TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const NegationN TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const VariableNode* node) { - return TimeDependentLinearExpression(dataSeriesKeys_.fillContext, - LinearExpression(0, {{node->value(), 1}})); + return TimeDependentLinearExpression(fillContext_, LinearExpression(0, {{node->value(), 1}})); } TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const ParameterNode* node) @@ -108,22 +107,19 @@ TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const Parameter else if (systemParameter.type == Expressions::Visitors::ParameterType::CONSTANT) { return TimeDependentLinearExpression( - dataSeriesKeys_.fillContext, + fillContext_, LinearExpression(context_.getSystemParameterValueAsDouble(node->value()), {})); } else // only timedepent { std::map linearExpressions; - for (auto timeStep = dataSeriesKeys_.fillContext.getFirstTimeStep(); - timeStep <= dataSeriesKeys_.fillContext.getLastTimeStep(); + for (auto timeStep = fillContext_.getFirstTimeStep(); + timeStep <= fillContext_.getLastTimeStep(); ++timeStep) { linearExpressions[timeStep] = LinearExpression( - context_.getParameterValue(node->value(), - dataSeriesKeys_.scenarioGroup, - dataSeriesKeys_.scenario, - timeStep), + context_.getParameterValue(node->value(), "", 0, timeStep), {}); } return TimeDependentLinearExpression(linearExpressions); @@ -132,7 +128,7 @@ TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const Parameter TimeDependentLinearExpression ReadLinearExpressionVisitor::visit(const LiteralNode* node) { - return TimeDependentLinearExpression(dataSeriesKeys_.fillContext, + return TimeDependentLinearExpression(fillContext_, LinearExpression(node->value(), {})); } diff --git a/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearConstraintVisitor.h b/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearConstraintVisitor.h index ac84832508..bd98dabdd0 100644 --- a/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearConstraintVisitor.h +++ b/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearConstraintVisitor.h @@ -57,7 +57,7 @@ class ReadLinearConstraintVisitor ReadLinearConstraintVisitor() = default; explicit ReadLinearConstraintVisitor( Expressions::Visitors::EvaluationContext context, - const Optimisation::LinearProblemApi::DataSeriesKeys& dataSeriesKeys); + const Optimisation::LinearProblemApi::FillContext& fillContext); std::string name() const override; private: diff --git a/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearExpressionVisitor.h b/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearExpressionVisitor.h index 154e5447a3..60a834b3bd 100644 --- a/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearExpressionVisitor.h +++ b/src/solver/optim-model-filler/include/antares/solver/optim-model-filler/ReadLinearExpressionVisitor.h @@ -41,7 +41,7 @@ class ReadLinearExpressionVisitor public: explicit ReadLinearExpressionVisitor( Expressions::Visitors::EvaluationContext context, - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys); + Optimisation::LinearProblemApi::FillContext fillContext); ReadLinearExpressionVisitor() = default; std::string name() const override; @@ -69,6 +69,6 @@ class ReadLinearExpressionVisitor TimeDependentLinearExpression visit( const Expressions::Nodes::ComponentParameterNode* node) override; - Optimisation::LinearProblemApi::DataSeriesKeys dataSeriesKeys_; + Optimisation::LinearProblemApi::FillContext fillContext_; }; } // namespace Antares::Optimization diff --git a/src/tests/src/expressions/test_DeepWideTrees.cpp b/src/tests/src/expressions/test_DeepWideTrees.cpp index 5d40336aaa..ca309ed3d0 100644 --- a/src/tests/src/expressions/test_DeepWideTrees.cpp +++ b/src/tests/src/expressions/test_DeepWideTrees.cpp @@ -49,8 +49,7 @@ struct MyDummyFixture: Registry { Antares::Optimisation::LinearProblemDataImpl::LinearProblemData data; EvaluationContext evaluationContext{{}, {}, data}; - EvalVisitor evalVisitor{evaluationContext, - {.fillContext = {0, 0}, .scenarioGroup = "", .scenario = 0}}; + EvalVisitor evalVisitor{evaluationContext, {0, 0}}; }; BOOST_FIXTURE_TEST_CASE(deep_tree_even, MyDummyFixture) diff --git a/src/tests/src/expressions/test_PrintAndEvalNodes.cpp b/src/tests/src/expressions/test_PrintAndEvalNodes.cpp index 6db228ef28..1b8c8f348e 100644 --- a/src/tests/src/expressions/test_PrintAndEvalNodes.cpp +++ b/src/tests/src/expressions/test_PrintAndEvalNodes.cpp @@ -222,10 +222,8 @@ struct MyDummyFixture: Registry { Antares::Optimisation::LinearProblemDataImpl::LinearProblemData data; EvaluationContext evaluationContext{{}, {}, data}; - Antares::Optimisation::LinearProblemApi::DataSeriesKeys keys{.fillContext = {0, 0}, - .scenarioGroup = "", - .scenario = 0}; - EvalVisitor evalVisitor{evaluationContext, keys}; + Antares::Optimisation::LinearProblemApi::FillContext fillContext{0, 0}; + EvalVisitor evalVisitor{evaluationContext, fillContext}; }; BOOST_AUTO_TEST_CASE(print_single_literal) @@ -412,7 +410,7 @@ BOOST_FIXTURE_TEST_CASE(evaluate_param, MyDummyFixture) const std::string value = "221.3"; EvaluationContext context({build_context_parameter_with("my-param", value)}, {}, data); - EvalVisitor evalVisitor(context, keys); + EvalVisitor evalVisitor(context, fillContext); const double eval = evalVisitor.dispatch(&root).valueAsDouble(); BOOST_CHECK_EQUAL(std::stod(value), eval); @@ -441,10 +439,7 @@ BOOST_FIXTURE_TEST_CASE(evaluate_time_dependent_param, MyDummyFixture) unsigned hour_0 = 0; unsigned hour_1 = 1; - EvalVisitor evalVisitor(context, - {.fillContext = {hour_0, hour_1 /*two hours*/}, - .scenarioGroup = "", - .scenario = 0}); + EvalVisitor evalVisitor(context, {hour_0, hour_1 /*two hours*/}); const auto eval = evalVisitor.dispatch(&root).valuesAsVector(); BOOST_CHECK_EQUAL(eval[0], hour_0); @@ -465,10 +460,7 @@ BOOST_FIXTURE_TEST_CASE(evaluate_time_dependent_multiplication, MyDummyFixture) unsigned hour_0 = 0; unsigned hour_1 = 1; - EvalVisitor evalVisitor(context, - {.fillContext = {hour_0, hour_1 /*two hours*/}, - .scenarioGroup = "", - .scenario = 0}); + EvalVisitor evalVisitor(context, {hour_0, hour_1 /*two hours*/}); const auto eval = evalVisitor.dispatch(&root).valuesAsVector(); BOOST_CHECK_EQUAL(eval[0], hour_0 * literal.value()); @@ -519,10 +511,7 @@ void evaluate_time_dependent_operation() dummy_data); unsigned hour_0 = 0; unsigned hour_1 = 1; - EvalVisitor evalVisitor(context, - {.fillContext = {hour_0, hour_1 /*two hours*/}, - .scenarioGroup = "", - .scenario = 0}); + EvalVisitor evalVisitor(context, {hour_0, hour_1 /*two hours*/}); const auto eval = evalVisitor.dispatch(&root).valuesAsVector(); BOOST_CHECK_EQUAL(eval[0], evalExpected(hour_0, literal.value())); @@ -545,7 +534,7 @@ BOOST_FIXTURE_TEST_CASE(evaluate_variable, MyDummyFixture) const double value = 221.3; EvaluationContext context({}, {{"my-variable", value}}, data); - EvalVisitor evalVisitor(context, keys); + EvalVisitor evalVisitor(context, fillContext); const double eval = evalVisitor.dispatch(&root).valueAsDouble(); BOOST_CHECK_EQUAL(value, eval); diff --git a/src/tests/src/solver/optim-model-filler/test_readLinearConstraintVisitor.cpp b/src/tests/src/solver/optim-model-filler/test_readLinearConstraintVisitor.cpp index eb33365f77..af5dd5ea32 100644 --- a/src/tests/src/solver/optim-model-filler/test_readLinearConstraintVisitor.cpp +++ b/src/tests/src/solver/optim-model-filler/test_readLinearConstraintVisitor.cpp @@ -42,7 +42,7 @@ struct MyDummyFixture: Registry { Antares::Optimisation::LinearProblemDataImpl::LinearProblemData data; EvaluationContext evaluationContext{{}, {}, data}; - ReadLinearConstraintVisitor visitor{evaluationContext, {.fillContext = {0, 0}}}; + ReadLinearConstraintVisitor visitor{evaluationContext, {0, 0}}; }; BOOST_FIXTURE_TEST_CASE(test_name, MyDummyFixture) @@ -68,7 +68,7 @@ BOOST_FIXTURE_TEST_CASE(test_visit_equal_node, MyDummyFixture) create(create("param1"))); Node* node = create(lhs, rhs); EvaluationContext context({build_context_parameter_with("param1", "9.")}, {}, data); - ReadLinearConstraintVisitor visitor(context, {.fillContext = {0, 0}}); + ReadLinearConstraintVisitor visitor(context, {0, 0}); auto constraint = visitor.dispatch(node)[0]; BOOST_CHECK_EQUAL(constraint.lb, -14.); BOOST_CHECK_EQUAL(constraint.ub, -14.); @@ -87,7 +87,7 @@ BOOST_FIXTURE_TEST_CASE(test_visit_less_than_or_equal_node, MyDummyFixture) create(create("param1"))); Node* node = create(lhs, rhs); EvaluationContext context({build_context_parameter_with("param1", "10.")}, {}, data); - ReadLinearConstraintVisitor visitor(context, {.fillContext = {0, 0}}); + ReadLinearConstraintVisitor visitor(context, {0, 0}); auto constraint = visitor.dispatch(node)[0]; BOOST_CHECK_EQUAL(constraint.lb, -std::numeric_limits::infinity()); BOOST_CHECK_EQUAL(constraint.ub, -1.); @@ -107,7 +107,7 @@ BOOST_FIXTURE_TEST_CASE(test_visit_greater_than_or_equal_node, MyDummyFixture) create(create("param1"))); Node* node = create(lhs, rhs); EvaluationContext context({build_context_parameter_with("param1", "9.")}, {}, data); - ReadLinearConstraintVisitor visitor(context, {.fillContext = {0, 0}}); + ReadLinearConstraintVisitor visitor(context, {0, 0}); auto constraint = visitor.dispatch(node)[0]; BOOST_CHECK_EQUAL(constraint.lb, -14); BOOST_CHECK_EQUAL(constraint.ub, std::numeric_limits::infinity()); diff --git a/src/tests/src/solver/optim-model-filler/test_readLinearExpressionVisitor.cpp b/src/tests/src/solver/optim-model-filler/test_readLinearExpressionVisitor.cpp index 4316d36b60..940e011dca 100644 --- a/src/tests/src/solver/optim-model-filler/test_readLinearExpressionVisitor.cpp +++ b/src/tests/src/solver/optim-model-filler/test_readLinearExpressionVisitor.cpp @@ -42,7 +42,7 @@ struct MyDummyFixture: Registry { Antares::Optimisation::LinearProblemDataImpl::LinearProblemData data; EvaluationContext evaluationContext{{}, {}, data}; - ReadLinearExpressionVisitor visitor{evaluationContext, {.fillContext = {0, 0}}}; + ReadLinearExpressionVisitor visitor{evaluationContext, {0, 0}}; }; BOOST_FIXTURE_TEST_CASE(name, MyDummyFixture) @@ -71,7 +71,7 @@ BOOST_FIXTURE_TEST_CASE(visit_literal_plus_param, MyDummyFixture) // 5 + param(3) = 8 Node* sum = create(create(5.), create("param")); EvaluationContext evaluation_context({{build_context_parameter_with("param", "3.")}}, {}, data); - ReadLinearExpressionVisitor visitor(evaluation_context, {.fillContext = {0, 0}}); + ReadLinearExpressionVisitor visitor(evaluation_context, {0, 0}); auto linear_expression = visitor.dispatch(sum).GetLinearExpressions().at(0); BOOST_CHECK_EQUAL(linear_expression.offset(), 8.); BOOST_CHECK(linear_expression.coefPerVar().empty()); @@ -86,7 +86,7 @@ BOOST_FIXTURE_TEST_CASE(visit_literal_plus_param_plus_var, MyDummyFixture) EvaluationContext evaluation_context({{build_context_parameter_with("param", "-5.")}}, {}, data); - ReadLinearExpressionVisitor visitor(evaluation_context, {.fillContext = {0, 0}}); + ReadLinearExpressionVisitor visitor(evaluation_context, {0, 0}); auto linear_expression = visitor.dispatch(sum).GetLinearExpressions().at(0); BOOST_CHECK_EQUAL(linear_expression.offset(), 55.); BOOST_CHECK_EQUAL(linear_expression.coefPerVar().size(), 1); @@ -119,7 +119,7 @@ BOOST_FIXTURE_TEST_CASE(visit_literal_plus_time_dependent_param_plus_var, MyDumm unsigned hour_0 = 0; unsigned hour_1 = 1; - ReadLinearExpressionVisitor visitor(evaluation_context, {.fillContext = {hour_0, hour_1}}); + ReadLinearExpressionVisitor visitor(evaluation_context, {hour_0, hour_1}); auto linear_expressions = visitor.dispatch(sum).GetLinearExpressions(); BOOST_CHECK_EQUAL(linear_expressions.at(0).offset(), 60.); BOOST_CHECK_EQUAL(linear_expressions.at(1).offset(), 61.); @@ -137,7 +137,7 @@ BOOST_FIXTURE_TEST_CASE(visit_param_declared_const_in_library_but_time_dep_in_sy {}, data); - ReadLinearExpressionVisitor visitor(evaluation_context, {.fillContext = {0, 1}}); + ReadLinearExpressionVisitor visitor(evaluation_context, {0, 1}); BOOST_CHECK_THROW(visitor.dispatch(&p), std::invalid_argument); } @@ -189,7 +189,7 @@ BOOST_FIXTURE_TEST_CASE(visit_complex_expression, MyDummyFixture) build_context_parameter_with("param2", "8.")}, {}, data); - ReadLinearExpressionVisitor visitor(evaluation_context, {.fillContext = {0, 0}}); + ReadLinearExpressionVisitor visitor(evaluation_context, {0, 0}); auto linear_expression = visitor.dispatch(big_sum).GetLinearExpressions().at(0); BOOST_CHECK_EQUAL(linear_expression.offset(), 10.); BOOST_CHECK_EQUAL(linear_expression.coefPerVar().size(), 2);