VIPRA Documentation
Loading...
Searching...
No Matches
sim_type.hpp
1#pragma once
2
3#include <memory>
4#include <string>
5
6#include "vipra/macros/parameters.hpp"
7
8#include "vipra/modules.hpp"
9#include "vipra/modules/map_input.hpp"
10#include "vipra/modules/model.hpp"
11#include "vipra/modules/pedestrian_input.hpp"
12#include "vipra/modules/pedestrians.hpp"
13
14#include "vipra/random/random.hpp"
15
16#include "vipra/special_modules/behavior_model.hpp"
17#include "vipra/special_modules/output.hpp"
18#include "vipra/special_modules/parameters.hpp"
19
20#include "vipra/types/float.hpp"
21#include "vipra/types/seed.hpp"
22#include "vipra/types/time.hpp"
23#include "vipra/util/timing.hpp"
24
25// TODO(rolland): go through everything and handle errors more gracefully, currently we just throw
26
27namespace VIPRA {
28
29class Simulation : public Modules::Module<Simulation> {
30 public:
31 VIPRA_MODULE_NAME("main");
32 VIPRA_MODULE_TYPE(Simulation);
33
34 VIPRA_REGISTER_PARAMS(VIPRA_PARAM("max_timestep", _maxTimestep),
35 VIPRA_PARAM("timestep_size", _timestepSize),
36 VIPRA_PARAM("output_frequency", _outputFrequency),
37 VIPRA_PARAM("random_seed", _seed),
38 VIPRA_PARAM("output_params", _outputParams));
39
40 void run_sim(Parameters& params);
41 void operator()(std::string const& pedPath, std::string const& mapPath,
42 std::string const& paramsPath);
43
44 void set_install_dir(std::string const& dir) { _installDir = dir; }
45 void set_module(Modules::Type type, std::string const& name);
46 void set_modules(std::string const& modulesPath);
47 void reset_modules();
48
49 void output_timings();
50
51 void set_sim_id(VIPRA::idx idx) { _currSimIdx = idx; }
52 void add_sim_id(VIPRA::idx idx) { _currSimIdx += idx; }
53 [[nodiscard]] auto get_sim_id() const -> VIPRA::idx { return _currSimIdx; }
54
55 auto get_ped_input() -> Modules::PedestrianInput& { return *_pedInput; }
56 auto get_map_input() -> Modules::MapInput& { return *_mapInput; }
57
58 private:
60 std::unique_ptr<Modules::Model> _model;
61 std::unique_ptr<Modules::Pedestrians> _pedset;
62 std::unique_ptr<Modules::Goals> _goals;
63 std::unique_ptr<Modules::Map> _map;
64 std::unique_ptr<Modules::PedestrianInput> _pedInput;
65 std::unique_ptr<Modules::MapInput> _mapInput;
66 BehaviorModel _behaviorModel;
67
68 Util::Timings _simulationTimes{"simulation"};
69
70 std::map<Modules::Type, std::function<void(void*, Parameters&, VIPRA::Random::Engine&)>>
71 _configs;
72
74
75 VIPRA::idx _currSimIdx{};
76 VIPRA::timestep _currTimestep{};
77 VIPRA::f_pnt _timestepSize{};
78 VIPRA::timestep _maxTimestep{};
79 VIPRA::seed _seed{};
80 VIPRA::timestep _outputFrequency{};
81 std::string _installDir;
82 bool _outputParams{false};
83
84 void initialize(Parameters& params);
85 void cleanup_modules();
86};
87} // namespace VIPRA
BehaviorModel is a special module that is responsible for loading and managing all behaviors.
Definition behavior_model.hpp:22
Base MapInput Module.
Definition map_input.hpp:15
VIPRA Module Base CRTP Class.
Definition module.hpp:36
Base PedestrianInput Module.
Definition pedestrian_input.hpp:13
Definition parameters.hpp:20
Psuedo Random number engine.
Definition random.hpp:22
Definition sim_type.hpp:29
void operator()(std::string const &pedPath, std::string const &mapPath, std::string const &paramsPath)
Runs the simulation with the given parameters.
Definition sim_type.cpp:102
Definition timing.hpp:122