From 8b2b7f7bfedd5add3c18ea263bf2a1577b372f8f Mon Sep 17 00:00:00 2001 From: Sukrit Kalra Date: Mon, 23 Oct 2023 13:09:34 -0700 Subject: [PATCH] Allow clearing of SolverModel. --- schedulers/tetrisched/include/tetrisched/SolverModel.hpp | 3 +++ schedulers/tetrisched/src/Scheduler.cpp | 3 +++ schedulers/tetrisched/src/SolverModel.cpp | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/schedulers/tetrisched/include/tetrisched/SolverModel.hpp b/schedulers/tetrisched/include/tetrisched/SolverModel.hpp index df4a8b34..19dce84f 100644 --- a/schedulers/tetrisched/include/tetrisched/SolverModel.hpp +++ b/schedulers/tetrisched/include/tetrisched/SolverModel.hpp @@ -375,6 +375,9 @@ class SolverModelT { /// Throws an error if the model was not solved first. T getObjectiveValue() const; + /// Clears all the Variables and Constraints from this Model. + void clear(); + /// All the Solver implementations should be a friend of the SolverModel. /// This allows Solver implementations to construct the model to pass /// back to the user. diff --git a/schedulers/tetrisched/src/Scheduler.cpp b/schedulers/tetrisched/src/Scheduler.cpp index c661b276..e0b8b9ab 100644 --- a/schedulers/tetrisched/src/Scheduler.cpp +++ b/schedulers/tetrisched/src/Scheduler.cpp @@ -32,6 +32,9 @@ Scheduler::Scheduler(Time discretization, SolverBackendType solverBackend) void Scheduler::registerSTRL(ExpressionPtr expression, Partitions availablePartitions, Time currentTime) { + // Clear the previously saved expressions in the SolverModel. + // solverModel->clear(); + // Check if the expression is an objective function. if (expression->getType() != ExpressionType::EXPR_OBJECTIVE) { throw exceptions::ExpressionConstructionException( diff --git a/schedulers/tetrisched/src/SolverModel.cpp b/schedulers/tetrisched/src/SolverModel.cpp index 4acab578..92d654f1 100644 --- a/schedulers/tetrisched/src/SolverModel.cpp +++ b/schedulers/tetrisched/src/SolverModel.cpp @@ -404,4 +404,11 @@ template T SolverModelT::getObjectiveValue() const { return objectiveFunction->getValue(); } + +template +void SolverModelT::clear() { + variables.clear(); + constraints.clear(); + objectiveFunction.reset(); +} } // namespace tetrisched