12#ifndef RESPOND_SIMULATION_HPP_
13#define RESPOND_SIMULATION_HPP_
23#include <respond/history.hpp>
24#include <respond/model.hpp>
38 Simulation(
const std::string &log_name) : _log_name(log_name) {}
46 for (
const auto &model : _models) {
47 model->RunTransitions();
54 void AddModel(
const std::unique_ptr<Model> &model) {
57 _models.push_back(model->clone());
62 const std::vector<std::unique_ptr<Model>> &
GetModels()
const {
69 std::vector<std::string> ret;
70 for (
auto &m : _models) {
71 ret.push_back(m->GetModelName());
82 const std::vector<std::map<std::string, std::vector<Eigen::VectorXd>>>
84 std::vector<std::map<std::string, std::vector<Eigen::VectorXd>>> ret;
86 for (
const auto &model : _models) {
87 std::map<std::string, std::vector<Eigen::VectorXd>> inner_ret;
88 for (
const auto &kv : model->GetHistories()) {
89 inner_ret[kv.first] = kv.second.GetStateAsVector();
91 ret.push_back(inner_ret);
100 const std::vector<std::map<std::string, History>>
102 std::vector<std::map<std::string, History>> ret;
103 for (
const auto &model : _models) {
104 ret.push_back(model->GetHistories());
111 const std::vector<std::pair<std::string, std::string>>
113 std::vector<std::pair<std::string, std::string>> ret;
114 for (
const auto &model : _models) {
115 for (
const auto &kv : model->GetHistories()) {
116 std::pair<std::string, std::string> p = {model->GetModelName(),
133 for (
const auto &m : other.
GetModels()) {
134 _models.push_back(m->clone());
142 if (
this != &other) {
145 for (
const auto &m : other.
GetModels()) {
146 _models.push_back(m->clone());
153 std::string _log_name;
154 std::vector<std::unique_ptr<Model>> _models;
Manages and executes multiple models in a coordinated simulation. A Simulation aggregates Model insta...
Definition: simulation.hpp:30
std::vector< std::string > GetModelNames() const
Retrieves the names of all models in the simulation.
Definition: simulation.hpp:68
const std::vector< std::map< std::string, std::vector< Eigen::VectorXd > > > GetModelHistories() const
Retrieves the complete state histories for all models.
Definition: simulation.hpp:83
void Run()
Executes one step of the simulation for all models. Calls RunTransitions() on each registered model i...
Definition: simulation.hpp:45
~Simulation()=default
Virtual destructor for polymorphic cleanup.
const std::vector< std::unique_ptr< Model > > & GetModels() const
Retrieves all models in the simulation.
Definition: simulation.hpp:62
Simulation(const std::string &log_name)
Constructs a Simulation with a specified logger.
Definition: simulation.hpp:38
void ClearModels()
Removes all models from the simulation.
Definition: simulation.hpp:77
std::string GetLogName() const
Retrieves the logger name used by this simulation.
Definition: simulation.hpp:126
Simulation(const Simulation &other)
Copy constructor creating an independent deep copy of the simulation. All models are cloned; modifica...
Definition: simulation.hpp:131
const std::vector< std::map< std::string, History > > GetModelSparseHistories() const
Retrieves sparse history objects for all models.
Definition: simulation.hpp:101
Simulation()
Default constructor initializing with "console" logger.
Definition: simulation.hpp:33
Simulation & operator=(const Simulation &other)
Copy assignment operator for deep copying simulation state.
Definition: simulation.hpp:141
void AddModel(const std::unique_ptr< Model > &model)
Adds a model to the simulation. The model is cloned and managed by the simulation.
Definition: simulation.hpp:54
const std::vector< std::pair< std::string, std::string > > GetModelHistoryNames() const
Retrieves pairs of (model name, history name) for all histories.
Definition: simulation.hpp:112