Struct sim::Analytics [−][src]
pub struct Analytics {}Show fields
pub road_thruput: TimeSeriesCount<RoadID>, pub intersection_thruput: TimeSeriesCount<IntersectionID>, pub traffic_signal_thruput: TimeSeriesCount<CompressedMovementID>, pub demand: BTreeMap<MovementID, usize>, pub bus_arrivals: Vec<(Time, CarID, BusRouteID, BusStopID)>, pub passengers_boarding: BTreeMap<BusStopID, Vec<(Time, BusRouteID, Duration)>>, pub passengers_alighting: BTreeMap<BusStopID, Vec<(Time, BusRouteID)>>, pub started_trips: BTreeMap<TripID, Time>, pub finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>, pub problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>, pub trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>, pub intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>, pub parking_lane_changes: BTreeMap<LaneID, Vec<(Time, bool)>>, pub parking_lot_changes: BTreeMap<ParkingLotID, Vec<(Time, bool)>>, pub(crate) alerts: Vec<(Time, AlertLocation, String)>, record_anything: bool,
As a simulation runs, different pieces emit Events. The Analytics object listens to these, organizing and storing some information from them. The UI queries Analytics to draw time-series and display statistics.
For all maps whose weekday scenario fully runs, the game’s release includes some “prebaked results.” These are just serialized Analytics after running the simulation on a map without any edits for the full day. This is the basis of A/B testing – the player can edit the map, start running the simulation, and compare the live Analytics to the prebaked baseline Analytics.
Fields
road_thruput: TimeSeriesCount<RoadID>
intersection_thruput: TimeSeriesCount<IntersectionID>
traffic_signal_thruput: TimeSeriesCount<CompressedMovementID>
demand: BTreeMap<MovementID, usize>
Most fields in Analytics are cumulative over time, but this is just for the current moment in time.
bus_arrivals: Vec<(Time, CarID, BusRouteID, BusStopID)>
passengers_boarding: BTreeMap<BusStopID, Vec<(Time, BusRouteID, Duration)>>
For each passenger boarding, how long did they wait at the stop?
passengers_alighting: BTreeMap<BusStopID, Vec<(Time, BusRouteID)>>
started_trips: BTreeMap<TripID, Time>
finished_trips: Vec<(Time, TripID, TripMode, Option<Duration>)>
Finish time, ID, mode, trip duration if successful (or None if cancelled)
problems_per_trip: BTreeMap<TripID, Vec<(Time, Problem)>>
Record different problems that each trip encounters.
trip_log: Vec<(Time, TripID, Option<PathRequest>, TripPhaseType)>
intersection_delays: BTreeMap<IntersectionID, Vec<(u8, Time, Duration, AgentType)>>
Only for traffic signals. The u8 is the movement index from a CompressedMovementID.
parking_lane_changes: BTreeMap<LaneID, Vec<(Time, bool)>>
Per parking lane or lot, when does a spot become filled (true) or free (false)
parking_lot_changes: BTreeMap<ParkingLotID, Vec<(Time, bool)>>
alerts: Vec<(Time, AlertLocation, String)>
record_anything: bool
For benchmarking, we may want to disable collecting data.
Implementations
impl Analytics
[src]
impl Analytics
[src]pub fn new(record_anything: bool) -> Analytics
[src]
pub fn event(&mut self, ev: Event, time: Time, map: &Map)
[src]
pub fn record_demand(&mut self, path: &Path, map: &Map)
[src]
pub fn finished_trip_time(&self, trip: TripID) -> Option<Duration>
[src]
Ignores the current time. Returns None for cancelled trips.
pub fn both_finished_trips(
&self,
now: Time,
before: &Analytics
) -> Vec<(TripID, Duration, Duration, TripMode)>
[src]
&self,
now: Time,
before: &Analytics
) -> Vec<(TripID, Duration, Duration, TripMode)>
Returns pairs of trip times for finished trips in both worlds. (ID, before, after, mode)
pub fn get_trip_phases(&self, trip: TripID, map: &Map) -> Vec<TripPhase>
[src]
If calling on prebaked Analytics, be careful to pass in an unedited map, to match how the simulation was originally run. Otherwise the paths may be nonsense.
pub fn get_all_trip_phases(&self) -> BTreeMap<TripID, Vec<TripPhase>>
[src]
pub fn active_agents(&self, now: Time) -> Vec<(Time, usize)>
[src]
pub fn parking_lane_availability(
&self,
now: Time,
l: LaneID,
capacity: usize
) -> Vec<(Time, usize)>
[src]
&self,
now: Time,
l: LaneID,
capacity: usize
) -> Vec<(Time, usize)>
Returns the free spots over time
pub fn parking_lot_availability(
&self,
now: Time,
pl: ParkingLotID,
capacity: usize
) -> Vec<(Time, usize)>
[src]
&self,
now: Time,
pl: ParkingLotID,
capacity: usize
) -> Vec<(Time, usize)>
fn parking_spot_availability(
now: Time,
changes: &[(Time, bool)],
capacity: usize
) -> Vec<(Time, usize)>
[src]
now: Time,
changes: &[(Time, bool)],
capacity: usize
) -> Vec<(Time, usize)>
Trait Implementations
impl<'de> Deserialize<'de> for Analytics
[src]
impl<'de> Deserialize<'de> for Analytics
[src]fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
[src]
__D: Deserializer<'de>,
Auto Trait Implementations
impl RefUnwindSafe for Analytics
impl Send for Analytics
impl Sync for Analytics
impl Unpin for Analytics
impl UnwindSafe for Analytics
Blanket Implementations
impl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
impl<T> Instrument for T
[src]
impl<T> Instrument for T
[src]pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T> Same<T> for T
impl<T> Same<T> for T
type Output = T
Should always be Self
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
pub fn vzip(self) -> V
impl<T> DeserializeOwned for T where
T: for<'de> Deserialize<'de>,
[src]
T: for<'de> Deserialize<'de>,