Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'remotes/origin/develop' into feature/da…
Browse files Browse the repository at this point in the history
…ta-for-new-modeler--4.1
guilpier-code committed Jan 21, 2025
2 parents 6118f76 + bcd4e1f commit ea803e8
Showing 60 changed files with 1,435 additions and 311 deletions.
6 changes: 6 additions & 0 deletions src/libs/antares/study/fwd.cpp
Original file line number Diff line number Diff line change
@@ -221,6 +221,10 @@ SheddingPolicy StringToSheddingPolicy(const AnyString& text)
{
return shpShavePeaks;
}
if (s == "accurate shave peaks")
{
return shpAccurateShavePeaks;
}
if (s == "minimize duration")
{
return shpMinimizeDuration;
@@ -235,6 +239,8 @@ const char* SheddingPolicyToCString(SheddingPolicy strategy)
{
case shpShavePeaks:
return "shave peaks";
case shpAccurateShavePeaks:
return "accurate shave peaks";
case shpMinimizeDuration:
return "minimize duration";
case shpUnknown:
1 change: 1 addition & 0 deletions src/libs/antares/study/include/antares/study/fwd.h
Original file line number Diff line number Diff line change
@@ -434,6 +434,7 @@ PowerFluctuations StringToPowerFluctuations(const AnyString& text);
enum SheddingPolicy
{
shpShavePeaks = 0,
shpAccurateShavePeaks,
shpMinimizeDuration,
shpUnknown,
};
Original file line number Diff line number Diff line change
@@ -50,22 +50,6 @@ enum AdequacyPatchMode
physicalAreaInsideAdqPatch = 2
}; // enum AdequacyPatchMode

/*!
** \brief Setting Link Capacity (NTC) for Adequacy patch first step
*/
enum class NtcSetToZeroStatus_AdqPatchStep1
{
//! Leave NTC local values
leaveLocalValues = 0,
//! Set NTC to zero
setToZero,
//! set only origine->extremity NTC to zero
setOriginExtremityToZero,
//! set only extremity->origine NTC to zero
setExtremityOriginToZero

}; // enum NTC

/*!
** \brief Types of Price Taking Order (PTO) for Adequacy Patch
*/
Original file line number Diff line number Diff line change
@@ -117,9 +117,8 @@ class Cluster
double nominalCapacity = 0.;

//! The index of the cluster from the area's point of view
//! \warning this variable is only valid when used by the solver
// (initialized in the same time that the runtime data)
uint areaWideIndex = (uint)-1;
unsigned int areaWideIndex = (uint)-1;
unsigned int enabledIndex = (uint)-1;

//! tsNumbers must be constructed before series
TimeSeriesNumbers tsNumbers;
6 changes: 2 additions & 4 deletions src/libs/antares/study/parts/common/cluster_list.cpp
Original file line number Diff line number Diff line change
@@ -153,15 +153,13 @@ void ClusterList<ClusterT>::rebuildIndexes()
unsigned int index = 0;
for (auto& c: allClusters_)
{
c->areaWideIndex = index;
index++;
c->areaWideIndex = index++;
}

index = 0;
for (auto& c: each_enabled())
{
c->areaWideIndex = index;
index++;
c->enabledIndex = index++;
}
}

1 change: 1 addition & 0 deletions src/packaging/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -50,6 +50,7 @@ set(TARGET_LIBS #No alias
misc
model_antares
antares-solver-ts-generator
shave-peaks-by-remix-hydro

# lps : nothing

Original file line number Diff line number Diff line change
@@ -3,6 +3,12 @@
#include <string>

#include <antares/solver/expressions/nodes/Leaf.h>
#include "antares/solver/expressions/visitors/TimeIndex.h"

namespace Antares::Solver::Visitors
{
enum class TimeIndex : unsigned int;
}

namespace Antares::Solver::Nodes
{
@@ -12,11 +18,25 @@ namespace Antares::Solver::Nodes
class ParameterNode final: public Leaf<std::string>
{
public:
using Leaf<std::string>::Leaf;
explicit ParameterNode(
const std::string& value,
Visitors::TimeIndex time_index = Visitors::TimeIndex::VARYING_IN_TIME_AND_SCENARIO):
Leaf<std::string>(value),
time_index_(time_index)
{
}

std::string name() const override
{
return "ParameterNode";
}

Visitors::TimeIndex timeIndex() const
{
return time_index_;
}

private:
Visitors::TimeIndex time_index_;
};
} // namespace Antares::Solver::Nodes
Original file line number Diff line number Diff line change
@@ -3,6 +3,12 @@
#include <string>

#include <antares/solver/expressions/nodes/Leaf.h>
#include "antares/solver/expressions/visitors/TimeIndex.h"

namespace Antares::Solver::Visitors
{
enum class TimeIndex : unsigned int;
}

namespace Antares::Solver::Nodes
{
@@ -13,11 +19,25 @@ namespace Antares::Solver::Nodes
class VariableNode final: public Leaf<std::string>
{
public:
using Leaf<std::string>::Leaf;
explicit VariableNode(
const std::string& value,
Visitors::TimeIndex time_index = Visitors::TimeIndex::VARYING_IN_TIME_AND_SCENARIO):
Leaf<std::string>(value),
time_index_(time_index)
{
}

std::string name() const override
{
return "VariableNode";
}

Visitors::TimeIndex timeIndex() const
{
return time_index_;
}

private:
Visitors::TimeIndex time_index_;
};
} // namespace Antares::Solver::Nodes
Original file line number Diff line number Diff line change
@@ -32,12 +32,14 @@ namespace Antares::Solver::Visitors
class TimeIndexVisitor: public NodeVisitor<TimeIndex>
{
public:
// TODO if Node contains time and scenario dependency, do we need this ctor?
/**
* @brief Constructs a time index visitor with the specified context.
*
* @param context The context containing the time index for each node.
*/
explicit TimeIndexVisitor(std::unordered_map<const Nodes::Node*, TimeIndex> context);
explicit TimeIndexVisitor() = default;

std::string name() const override;

2 changes: 1 addition & 1 deletion src/solver/expressions/visitors/CloneVisitor.cpp
Original file line number Diff line number Diff line change
@@ -81,7 +81,7 @@ Nodes::Node* CloneVisitor::visit(const Nodes::NegationNode* negationNode)

Nodes::Node* CloneVisitor::visit(const Nodes::VariableNode* variableNode)
{
return registry_.create<Nodes::VariableNode>(variableNode->value());
return registry_.create<Nodes::VariableNode>(variableNode->value(), variableNode->timeIndex());
}

Nodes::Node* CloneVisitor::visit(const Nodes::ParameterNode* parameterNode)
8 changes: 6 additions & 2 deletions src/solver/expressions/visitors/TimeIndexVisitor.cpp
Original file line number Diff line number Diff line change
@@ -69,12 +69,12 @@ TimeIndex TimeIndexVisitor::visit(const Nodes::GreaterThanOrEqualNode* gt)

TimeIndex TimeIndexVisitor::visit(const Nodes::VariableNode* var)
{
return context_.at(var);
return var->timeIndex();
}

TimeIndex TimeIndexVisitor::visit(const Nodes::ParameterNode* param)
{
return context_.at(param);
return param->timeIndex();
}

TimeIndex TimeIndexVisitor::visit([[maybe_unused]] const Nodes::LiteralNode* lit)
@@ -89,21 +89,25 @@ TimeIndex TimeIndexVisitor::visit(const Nodes::NegationNode* neg)

TimeIndex TimeIndexVisitor::visit(const Nodes::PortFieldNode* port_field_node)
{
// TODO FIXME
return context_.at(port_field_node);
}

TimeIndex TimeIndexVisitor::visit(const Nodes::PortFieldSumNode* port_field_node)
{
// TODO FIXME
return context_.at(port_field_node);
}

TimeIndex TimeIndexVisitor::visit(const Nodes::ComponentVariableNode* component_variable_node)
{
// TODO FIXME
return context_.at(component_variable_node);
}

TimeIndex TimeIndexVisitor::visit(const Nodes::ComponentParameterNode* component_parameter_node)
{
// TODO FIXME
return context_.at(component_parameter_node);
}

25 changes: 22 additions & 3 deletions src/solver/modelConverter/convertorVisitor.cpp
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@

#include <antares/solver/expressions/nodes/ExpressionsNodes.h>
#include <antares/solver/modelConverter/convertorVisitor.h>
#include "antares/solver/expressions/visitors/TimeIndex.h"

#include "ExprLexer.h"
#include "ExprParser.h"
@@ -83,7 +84,7 @@ NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelPars
ExprParser::ExprContext* tree = parser.expr();
Antares::Solver::Registry<Node> registry;
ConvertorVisitor visitor(registry, model);
Node* root = std::any_cast<Node*>(visitor.visit(tree));
auto root = std::any_cast<Node*>(visitor.visit(tree));
return NodeRegistry(root, std::move(registry));
}

@@ -108,21 +109,39 @@ class NoParameterOrVariableWithThisName: public std::runtime_error
}
};

// to silent warning, convert bool to unsigned int
static constexpr unsigned int convertBool(bool in)
{
return in ? 1 : 0;
}

static constexpr Visitors::TimeIndex convertToTimeIndex(bool timedependent, bool scenariodependent)
{
return static_cast<Visitors::TimeIndex>((convertBool(scenariodependent) << 1)
| convertBool(timedependent));
}

std::any ConvertorVisitor::visitIdentifier(ExprParser::IdentifierContext* context)
{
for (const auto& param: model_.parameters)
{
if (param.id == context->IDENTIFIER()->getText())
{
return static_cast<Node*>(registry_.create<ParameterNode>(param.id));
return static_cast<Node*>(
registry_.create<ParameterNode>(param.id,
convertToTimeIndex(param.time_dependent,
param.scenario_dependent)));
}
}

for (const auto& var: model_.variables)
{
if (var.id == context->getText())
{
return static_cast<Node*>(registry_.create<VariableNode>(var.id));
return static_cast<Node*>(
registry_.create<VariableNode>(var.id,
convertToTimeIndex(var.time_dependent,
var.scenario_dependent)));
}
}

Original file line number Diff line number Diff line change
@@ -28,5 +28,6 @@

namespace Antares::Solver::ModelConverter
{

NodeRegistry convertExpressionToNode(const std::string& exprStr, const ModelParser::Model& model);
} // namespace Antares::Solver::ModelConverter
36 changes: 19 additions & 17 deletions src/solver/modelConverter/modelConverter.cpp
Original file line number Diff line number Diff line change
@@ -21,6 +21,7 @@

#include "antares/solver/modelConverter/modelConverter.h"

#include "antares/solver/expressions/visitors/TimeIndex.h"
#include "antares/solver/modelConverter/convertorVisitor.h"
#include "antares/study/system-model/constraint.h"
#include "antares/study/system-model/expression.h"
@@ -74,15 +75,13 @@ std::vector<Antares::Study::SystemModel::PortType> convertTypes(
std::vector<Antares::Study::SystemModel::Parameter> convertParameters(
const Antares::Solver::ModelParser::Model& model)
{
std::vector<Antares::Study::SystemModel::Parameter> parameters;
namespace SM = Antares::Study::SystemModel;
std::vector<SM::Parameter> parameters;
for (const auto& parameter: model.parameters)
{
parameters.emplace_back(
parameter.id,
static_cast<Antares::Study::SystemModel::Parameter::TimeDependent>(
parameter.time_dependent),
static_cast<Antares::Study::SystemModel::Parameter::ScenarioDependent>(
parameter.scenario_dependent));
parameters.emplace_back(parameter.id,
SM::fromBool<SM::TimeDependent>(parameter.time_dependent),
SM::fromBool<SM::ScenarioDependent>(parameter.scenario_dependent));
}
return parameters;
}
@@ -117,19 +116,22 @@ Antares::Study::SystemModel::ValueType convertType(Antares::Solver::ModelParser:
*/
std::vector<Antares::Study::SystemModel::Variable> convertVariables(const ModelParser::Model& model)
{
std::vector<Antares::Study::SystemModel::Variable> variables;
namespace SM = Antares::Study::SystemModel;

std::vector<SM::Variable> variables;

for (const auto& variable: model.variables)
{
Antares::Study::SystemModel::Expression lb(variable.lower_bound,
convertExpressionToNode(variable.lower_bound,
model));
Antares::Study::SystemModel::Expression ub(variable.upper_bound,
convertExpressionToNode(variable.upper_bound,
model));
SM::Expression lb(variable.lower_bound,
convertExpressionToNode(variable.lower_bound, model));
SM::Expression ub(variable.upper_bound,
convertExpressionToNode(variable.upper_bound, model));
variables.emplace_back(variable.id,
std::move(lb),
std::move(ub),
convertType(variable.variable_type));
convertType(variable.variable_type),
SM::fromBool<SM::TimeDependent>(variable.time_dependent),
SM::fromBool<SM::ScenarioDependent>(variable.scenario_dependent));
}

return variables;
@@ -153,10 +155,10 @@ std::vector<Antares::Study::SystemModel::Constraint> convertConstraints(
std::vector<Antares::Study::SystemModel::Constraint> constraints;
for (const auto& constraint: model.constraints)
{
auto expr = convertExpressionToNode(constraint.expression, model);
auto nodeRegistry = convertExpressionToNode(constraint.expression, model);
constraints.emplace_back(constraint.id,
Antares::Study::SystemModel::Expression{constraint.expression,
std::move(expr)});
std::move(nodeRegistry)});
}
return constraints;
}
2 changes: 2 additions & 0 deletions src/solver/modelParser/encoders.hxx
Original file line number Diff line number Diff line change
@@ -106,6 +106,8 @@ struct convert<Antares::Solver::ModelParser::Variable>
rhs.upper_bound = node["upper-bound"].as<std::string>("");
rhs.variable_type = node["variable-type"].as<Antares::Solver::ModelParser::ValueType>(
Antares::Solver::ModelParser::ValueType::CONTINUOUS);
rhs.time_dependent = node["time-dependent"].as<bool>(true);
rhs.scenario_dependent = node["scenario-dependent"].as<bool>(true);
return true;
}
};
Original file line number Diff line number Diff line change
@@ -64,6 +64,8 @@ struct Variable
std::string lower_bound;
std::string upper_bound;
ValueType variable_type;
bool time_dependent;
bool scenario_dependent;
};

struct Port
2 changes: 2 additions & 0 deletions src/solver/modeler/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -33,6 +33,8 @@ target_link_libraries(antares-modeler
PRIVATE
modeler-lib
data-series-lib
modeler-ortools-impl
optim-model-filler
)

import_std_libs(antares-modeler)
Loading

0 comments on commit ea803e8

Please sign in to comment.