void AGActivityGen::varDepTime(AGTrip& trip) { if (trip.getType() != "default") { return; } //buses are on time and random are already spread int variation = (int)RandHelper::randNorm(0, city.statData.departureVariation); AGTime depTime(trip.getDay(), 0, 0, trip.getTime()); depTime += variation; if (depTime.getDay() > 0) { trip.setDay(depTime.getDay()); trip.setDepTime(depTime.getSecondsInCurrentDay()); } else { trip.setDay(1); trip.setDepTime(0); } }
bool AGActivities::generateRandomTraffic() { //total number of trips during the whole simulation int totalTrips = 0, ttOneDayTrips = 0, ttDailyTrips = 0; std::list<AGTrip>::iterator it; for (it = trips.begin(); it != trips.end(); ++it) { if (it->isDaily()) { ++ttDailyTrips; } else { ++ttOneDayTrips; } } totalTrips = ttOneDayTrips + ttDailyTrips * nbrDays; //TESTS std::cout << "Before Random traffic generation (days are still entire):" << std::endl; std::cout << "- Total number of trips: " << totalTrips << std::endl; std::cout << "- Total daily trips: " << ttDailyTrips << std::endl; std::cout << "- Total one-day trips: " << ttOneDayTrips << std::endl; //END OF TESTS //random uniform distribution: int nbrRandUni = (int)((float)totalTrips * myCity->statData.uniformRandomTrafficRate / (1.0f - myCity->statData.uniformRandomTrafficRate)); //TESTS std::cout << "added uniform random trips: " << nbrRandUni << std::endl; //END OF TESTS for (int i = 0; i < nbrRandUni; ++i) { AGPosition dep(myCity->getRandomStreet()); AGPosition arr(myCity->getRandomStreet()); AGTime depTime(RandHelper::rand(nbrDays * 86400)); AGTrip rdtr(dep, arr, generateName(i, "randUni"), depTime.getTime() % 86400, depTime.getDay() + 1); rdtr.setType("random"); trips.push_back(rdtr); } //random proportional distribution: //float proportionalPercentage = 0.05f; //TODO generate a proportionally distributed random traffic return true; }