@@ -28,8 +28,6 @@ std::atomic<bool> bExitFlag{false};
2828
2929// uncomment these lines to print densities, flows and speeds
3030#define PRINT_DENSITIES
31- // #define PRINT_FLOWS
32- // #define PRINT_SPEEDS
3331// #define PRINT_TP
3432
3533using RoadNetwork = dsf::mobility::RoadNetwork;
@@ -74,14 +72,13 @@ int main(int argc, char** argv) {
7472 ERROR_PROBABILITY,
7573 std::to_string (SEED))}; // output folder
7674 constexpr auto MAX_TIME{static_cast <unsigned int >(5e5 )}; // maximum time of simulation
77- // Clear output folder or create it if it doesn't exist
75+ // Create output folder if it doesn't exist (preserve existing database)
7876 if (!fs::exists (BASE_OUT_FOLDER)) {
7977 fs::create_directory (BASE_OUT_FOLDER);
8078 }
81- if (fs::exists (OUT_FOLDER)) {
82- fs::remove_all (OUT_FOLDER);
79+ if (! fs::exists (OUT_FOLDER)) {
80+ fs::create_directory (OUT_FOLDER);
8381 }
84- fs::create_directory (OUT_FOLDER);
8582 // Starting
8683 std::cout << " Using dsf version: " << dsf::version () << ' \n ' ;
8784 RoadNetwork graph{};
@@ -175,26 +172,20 @@ int main(int argc, char** argv) {
175172 if (OPTIMIZE)
176173 dynamics.setDataUpdatePeriod (30 ); // Store data every 30 time steps
177174
175+ // Connect database for saving data
176+ dynamics.connectDataBase (OUT_FOLDER + " simulation_data.db" );
177+
178+ // Configure data saving: interval=10, saveAverageStats=true, saveStreetData=true
179+ #ifdef PRINT_DENSITIES
180+ dynamics.saveData (300 , true , true , false );
181+ #else
182+ dynamics.saveData (300 , true , false , false );
183+ #endif
184+
178185 const auto TM = dynamics.turnMapping ();
179186
180187 std::cout << " Done." << std::endl;
181188 std::cout << " Running simulation...\n " ;
182- #ifdef PRINT_FLOWS
183- std::ofstream streetFlow (OUT_FOLDER + " flows.csv" );
184- streetFlow << " time" ;
185- for (const auto & [id, street] : dynamics.graph ().edges ()) {
186- streetFlow << ' ;' << id;
187- }
188- streetFlow << ' \n ' ;
189- #endif
190- #ifdef PRINT_SPEEDS
191- std::ofstream streetSpeed (OUT_FOLDER + " speeds.csv" );
192- streetSpeed << " time" ;
193- for (const auto & [id, street] : dynamics.graph ().edges ()) {
194- streetSpeed << ' ;' << id;
195- }
196- streetSpeed << ' \n ' ;
197- #endif
198189#ifdef PRINT_TP
199190 std::ofstream outTP (OUT_FOLDER + " turn_probabilities.csv" );
200191 outTP << " time" ;
@@ -256,8 +247,7 @@ int main(int argc, char** argv) {
256247 if (dynamics.time_step () % 300 == 0 ) {
257248 // printLoadingBar(dynamics.time_step(), MAX_TIME);
258249 // deltaAgents = std::labs(dynamics.agents().size() - previousAgents);
259- dynamics.saveCoilCounts (std::format (" {}coil_counts.csv" , OUT_FOLDER));
260- dynamics.saveMacroscopicObservables (std::format (" {}data.csv" , OUT_FOLDER));
250+ // Data is now saved automatically by saveData() configuration
261251 // deltas.push_back(deltaAgents);
262252 // previousAgents = dynamics.agents().size();
263253#ifdef PRINT_TP
@@ -292,43 +282,9 @@ int main(int argc, char** argv) {
292282 outTP << std::endl;
293283#endif
294284 }
295- if (dynamics.time_step () % 10 == 0 ) {
296- #ifdef PRINT_DENSITIES
297- dynamics.saveStreetDensities (OUT_FOLDER + " densities.csv" , true );
298- #endif
299- #ifdef PRINT_FLOWS
300- streetFlow << ' ;' << dynamics.time_step ();
301- for (const auto & [id, street] : dynamics.graph ().edges ()) {
302- const auto & meanSpeed = dynamics.streetMeanSpeed (id);
303- if (meanSpeed.has_value ()) {
304- streetFlow << ' ;' << meanSpeed.value () * street->density ();
305- } else {
306- streetFlow << ' ;' ;
307- }
308- }
309- streetFlow << std::endl;
310- #endif
311- #ifdef PRINT_SPEEDS
312- streetSpeed << dynamics.time_step ();
313- for (const auto & [id, street] : dynamics.graph ().edges ()) {
314- const auto & meanSpeed = dynamics.streetMeanSpeed (id);
315- if (meanSpeed.has_value ()) {
316- streetSpeed << ' ;' << meanSpeed.value ();
317- } else {
318- streetSpeed << ' ;' ;
319- }
320- }
321- streetSpeed << std::endl;
322- #endif
323- }
285+ // Street densities are now saved automatically by saveData() configuration
324286 ++progress;
325287 }
326- #ifdef PRINT_FLOWS
327- streetFlow.close ();
328- #endif
329- #ifdef PRINT_SPEEDS
330- streetSpeed.close ();
331- #endif
332288 // std::cout << std::endl;
333289 // std::map<uint8_t, std::string> turnNames{
334290 // {0, "left"}, {1, "straight"}, {2, "right"}, {3, "u-turn"}};
0 commit comments