Line data Source code
1 : #include "Dynamic/Env/Event/EventLog.hpp" 2 : 3 : #include <chrono> 4 : #include <iomanip> 5 : 6 : using namespace std; 7 : using namespace Dynamic; 8 : using namespace Dynamic::Env; 9 : 10 : using clk = chrono::steady_clock; 11 : 12 0 : EventLog::EventLog( 13 : Time t_, 14 : Time tStartSim_, 15 : Time tEndSim_, 16 : clk::time_point tStart_, 17 : Log::ProgressLogger &logger_, 18 : Policy::Logger &policyLogger_ 19 0 : ): 20 : Event(t_), 21 : tStartSim(tStartSim_), 22 : tEndSim(tEndSim_), 23 : tStart(tStart_), 24 : logger(logger_), 25 0 : policyLogger(policyLogger_) {} 26 : 27 0 : void EventLog::process(Env &env) { 28 0 : static Time prevTime = 0.0; 29 : 30 0 : static size_t prevNumberProcessedEvents = 0; 31 : 32 0 : static size_t nLEFT = 0, nLEFTGOOD = 0; 33 : 34 0 : const clk::time_point now = clk::now(); 35 : 36 0 : double elapsed = (double)chrono::duration_cast<chrono::nanoseconds>(now - tStart).count() * 1e-9; 37 : 38 0 : double progress = (env.getTime() - tStartSim) / (tEndSim - tStartSim); 39 : 40 0 : double eta = (progress <= 0.0 ? 1.0 : elapsed * (1.0 - progress) / progress); 41 : 42 0 : static Time totalTime = 0.0; 43 : 44 0 : Time totalTimeInterval = 0.0; 45 : 46 0 : size_t nSTOPPED = 0, nMOVING = 0; 47 : 48 0 : size_t nLEFTInterval = 0, nLEFTGOODInterval = 0; 49 0 : for(const Vehicle &vehicle: env.getVehicles()) { 50 0 : Time Dt = vehicle.path.back().first - vehicle.path.front().first; 51 : 52 0 : switch(vehicle.state) { 53 0 : case Vehicle::State::STOPPED: 54 0 : nSTOPPED++; 55 0 : break; 56 0 : case Vehicle::State::MOVING: 57 0 : nMOVING++; 58 0 : break; 59 0 : case Vehicle::State::LEFT: 60 0 : if(vehicle.path.back().first > prevTime) { 61 0 : nLEFT++; 62 0 : nLEFTInterval++; 63 0 : if(vehicle.toTAZ.sinks.count(vehicle.path.back().second.get().edge)) { 64 0 : nLEFTGOOD++; 65 0 : nLEFTGOODInterval++; 66 0 : totalTimeInterval += Dt; 67 0 : totalTime += Dt; 68 : } 69 : } 70 : 71 0 : env.discardVehicle(vehicle); 72 : 73 : break; 74 : default: 75 : break; 76 : } 77 : } 78 : 79 0 : logger << Log::ProgressLogger::Elapsed(elapsed) 80 0 : << Log::ProgressLogger::Progress(progress) 81 0 : << Log::ProgressLogger::ETA(eta) 82 0 : << Log::ProgressLogger::StartText() 83 0 : << setprecision(1) 84 0 : << env.getTime() 85 0 : << setprecision(6) 86 0 : << "\t" << nSTOPPED + nMOVING + nLEFT 87 0 : << "\t" << nSTOPPED + nMOVING 88 0 : << "\t" << env.numberOfDespawnedVehicles() 89 0 : << "\t" << (nLEFTGOOD > 0 ? totalTime / (Time)nLEFTGOOD : 0) 90 0 : << "\t" << (nLEFTGOODInterval > 0 ? totalTimeInterval / (Time)nLEFTGOODInterval : 0) 91 0 : << "\t" << env.getNumberProcessedEvents() - prevNumberProcessedEvents 92 0 : << "\t"; 93 0 : policyLogger.log(logger); 94 0 : logger << Log::ProgressLogger::EndMessage(); 95 : 96 0 : prevTime = env.getTime(); 97 0 : prevNumberProcessedEvents = env.getNumberProcessedEvents(); 98 0 : }