pub struct Sim {Show 17 fields
driving: DrivingSimState,
parking: ParkingSimState,
walking: WalkingSimState,
intersections: IntersectionSimState,
transit: TransitSimState,
trips: TripManager,
pandemic: Option<PandemicModel>,
scheduler: Scheduler,
time: Time,
pub(crate) map_name: MapName,
pub(crate) edits_name: String,
run_name: String,
step_count: usize,
highlighted_people: Option<BTreeSet<PersonID>>,
analytics: Analytics,
recorder: Option<TrafficRecorder>,
alerts: AlertHandler,
}
Expand description
The Sim ties together all the pieces of the simulation. Its main property is the current time.
Fields§
§driving: DrivingSimState
§parking: ParkingSimState
§walking: WalkingSimState
§intersections: IntersectionSimState
§transit: TransitSimState
§trips: TripManager
§pandemic: Option<PandemicModel>
§scheduler: Scheduler
§time: Time
§map_name: MapName
§edits_name: String
§run_name: String
§step_count: usize
§highlighted_people: Option<BTreeSet<PersonID>>
§analytics: Analytics
§recorder: Option<TrafficRecorder>
§alerts: AlertHandler
Implementations§
source§impl Sim
impl Sim
pub fn time(&self) -> Time
pub fn is_done(&self) -> bool
pub fn is_empty(&self) -> bool
sourcepub fn num_trips(&self) -> (usize, usize)
pub fn num_trips(&self) -> (usize, usize)
(number of finished trips, number of unfinished trips)
pub fn num_agents(&self) -> Counter<AgentType>
pub fn num_commuters_vehicles(&self) -> CommutersVehiclesCounts
sourcepub fn num_ppl(&self) -> (usize, usize, usize)
pub fn num_ppl(&self) -> (usize, usize, usize)
(total number of people, just in buildings, just off map)
pub fn debug_ped(&self, id: PedestrianID)
pub fn debug_car(&self, id: CarID)
sourcepub fn debug_car_ui(&self, id: CarID) -> String
pub fn debug_car_ui(&self, id: CarID) -> String
Return a short string to debug a car in the UI.
pub fn debug_agent_json(&self, id: AgentID) -> String
pub fn debug_intersection_json(&self, id: IntersectionID, map: &Map) -> String
pub fn debug_lane(&self, id: LaneID)
sourcepub fn agent_properties(&self, map: &Map, id: AgentID) -> AgentProperties
pub fn agent_properties(&self, map: &Map, id: AgentID) -> AgentProperties
Only call for active agents, will panic otherwise
pub fn num_transit_passengers(&self, car: CarID) -> usize
pub fn bus_route_id(&self, maybe_bus: CarID) -> Option<TransitRouteID>
pub fn active_agents(&self) -> Vec<AgentID>
pub fn num_active_agents(&self) -> usize
pub fn agent_to_trip(&self, id: AgentID) -> Option<TripID>
pub fn trip_to_agent(&self, id: TripID) -> TripResult<AgentID>
pub fn trip_info(&self, id: TripID) -> TripInfo
pub fn all_trip_info(&self) -> Vec<(TripID, TripInfo)>
sourcepub fn finished_trip_details(
&self,
id: TripID
) -> Option<(Duration, Duration, Distance)>
pub fn finished_trip_details( &self, id: TripID ) -> Option<(Duration, Duration, Distance)>
If trip is finished, returns (total time, total waiting time, total distance)
pub fn trip_blocked_time(&self, id: TripID) -> Duration
pub fn trip_to_person(&self, id: TripID) -> Option<PersonID>
pub fn agent_to_person(&self, id: AgentID) -> Option<PersonID>
pub fn person_to_agent(&self, id: PersonID) -> Option<AgentID>
pub fn get_owner_of_car(&self, id: CarID) -> Option<PersonID>
pub fn lookup_parked_car(&self, id: CarID) -> Option<&ParkedCar>
sourcepub fn all_parked_car_positions(&self, map: &Map) -> Vec<(Position, Position)>
pub fn all_parked_car_positions(&self, map: &Map) -> Vec<(Position, Position)>
For every parked car, (position of parking spot, position of owner)
pub fn lookup_person(&self, id: PersonID) -> Option<&Person>
pub fn get_person(&self, id: PersonID) -> &Person
pub fn find_person_by_orig_id(&self, id: OrigPersonID) -> Option<PersonID>
pub fn get_all_people(&self) -> &Vec<Person>
pub fn lookup_car_id(&self, idx: usize) -> Option<CarID>
pub fn get_path(&self, id: AgentID) -> Option<&Path>
pub fn get_all_driving_paths(&self) -> Vec<&Path>
pub fn trace_route(&self, id: AgentID, map: &Map) -> Option<PolyLine>
pub fn get_canonical_pt_per_trip( &self, trip: TripID, map: &Map ) -> TripResult<Pt2D>
pub fn get_canonical_pt_per_person( &self, p: PersonID, map: &Map ) -> Option<Pt2D>
pub fn canonical_pt_for_agent(&self, id: AgentID, map: &Map) -> Option<Pt2D>
pub fn get_accepted_agents(&self, id: IntersectionID) -> Vec<(AgentID, TurnID)>
pub fn get_waiting_agents( &self, id: IntersectionID ) -> Vec<(AgentID, TurnID, Time)>
sourcepub fn get_blocked_by_graph(
&self,
map: &Map
) -> BTreeMap<AgentID, (Duration, DelayCause)>
pub fn get_blocked_by_graph( &self, map: &Map ) -> BTreeMap<AgentID, (Duration, DelayCause)>
For every agent that’s currently not moving, figure out how long they’ve been waiting and why they’re blocked.
sourcepub fn status_of_buses(
&self,
route: TransitRouteID,
map: &Map
) -> Vec<(CarID, Option<usize>, f64, Pt2D)>
pub fn status_of_buses( &self, route: TransitRouteID, map: &Map ) -> Vec<(CarID, Option<usize>, f64, Pt2D)>
(bus, stop index it’s coming from, percent to next stop, location)
pub fn get_analytics(&self) -> &Analytics
sourcepub fn delayed_intersections(
&self,
threshold: Duration
) -> Vec<(IntersectionID, Time)>
pub fn delayed_intersections( &self, threshold: Duration ) -> Vec<(IntersectionID, Time)>
For intersections with an agent waiting beyond some threshold, return when they started waiting. Sorted by earliest waiting (likely the root cause of gridlock).
pub fn bldg_to_people(&self, b: BuildingID) -> Vec<PersonID>
pub fn get_pandemic_model(&self) -> Option<&PandemicModel>
pub fn get_end_of_day(&self) -> Time
pub fn current_stage_and_remaining_time( &self, i: IntersectionID ) -> (usize, Duration)
pub fn all_arrivals_at_border( &self, i: IntersectionID ) -> Vec<(AgentType, Vec<(Time, usize)>)>
sourcepub fn target_lane_penalty(&self, lane: &Lane) -> (usize, usize)
pub fn target_lane_penalty(&self, lane: &Lane) -> (usize, usize)
(number of vehicles in the lane, penalty if a bike or other slow vehicle is present)
pub fn get_people_waiting_at_stop( &self, at: TransitStopID ) -> &Vec<(PedestrianID, TransitRouteID, Option<TransitStopID>, Time)>
pub fn generate_scenario(&self, map: &Map, name: String) -> Scenario
pub fn infinite_parking(&self) -> bool
pub fn all_waiting_people(&self) -> BTreeMap<PersonID, Duration>
pub fn describe_internal_stats(&self) -> Vec<String>
pub fn debug_queue_lengths(&self, l: LaneID) -> Option<(Distance, Distance)>
sourcepub fn get_trip_time_lower_bound(
&self,
map: &Map,
id: TripID
) -> Result<Duration>
pub fn get_trip_time_lower_bound( &self, map: &Map, id: TripID ) -> Result<Duration>
Returns the best-case time for a trip in a world with no traffic or intersection delays. Might fail in some cases where the real trip succeeds, but the single-mode path can’t be found. Assumes the TripID exists.
pub fn get_highlighted_people(&self) -> &Option<BTreeSet<PersonID>>
source§impl Sim
impl Sim
pub fn step_count(&self) -> usize
pub fn get_draw_car(&self, id: CarID, map: &Map) -> Option<DrawCarInput>
pub fn get_draw_ped( &self, id: PedestrianID, map: &Map ) -> Option<DrawPedestrianInput>
pub fn get_draw_cars(&self, on: Traversable, map: &Map) -> Vec<DrawCarInput>
pub fn get_draw_peds( &self, on: Traversable, map: &Map ) -> (Vec<DrawPedestrianInput>, Vec<DrawPedCrowdInput>)
pub fn get_all_draw_cars(&self, map: &Map) -> Vec<DrawCarInput>
pub fn get_all_draw_peds(&self, map: &Map) -> Vec<DrawPedestrianInput>
sourcepub fn get_unzoomed_agents(&self, map: &Map) -> Vec<UnzoomedAgent>
pub fn get_unzoomed_agents(&self, map: &Map) -> Vec<UnzoomedAgent>
This does not include transit riders. Some callers need those in addition, but the rendering ones don’t.
pub fn get_unzoomed_transit_riders(&self, map: &Map) -> Vec<UnzoomedAgent>
source§impl Sim
impl Sim
pub fn instantiate( &mut self, scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, timer: &mut Timer<'_> )
sourcepub fn instantiate_without_retries(
&mut self,
scenario: &Scenario,
map: &Map,
rng: &mut XorShiftRng,
retry_if_no_room: bool,
timer: &mut Timer<'_>
)
pub fn instantiate_without_retries( &mut self, scenario: &Scenario, map: &Map, rng: &mut XorShiftRng, retry_if_no_room: bool, timer: &mut Timer<'_> )
If retry_if_no_room is false, any vehicles that fail to spawn because of something else in the way will just wind up as cancelled trips.
source§impl Sim
impl Sim
pub fn new(map: &Map, opts: SimOptions) -> Sim
pub(crate) fn spawn_trips( &mut self, input: Vec<(PersonID, TripInfo, StartTripArgs)>, map: &Map, timer: &mut Timer<'_> )
pub fn get_free_onstreet_spots(&self, l: LaneID) -> Vec<ParkingSpot>
pub fn get_free_offstreet_spots(&self, b: BuildingID) -> Vec<ParkingSpot>
pub fn get_free_lot_spots(&self, pl: ParkingLotID) -> Vec<ParkingSpot>
sourcepub fn get_all_parking_spots(&self) -> (Vec<ParkingSpot>, Vec<ParkingSpot>)
pub fn get_all_parking_spots(&self) -> (Vec<ParkingSpot>, Vec<ParkingSpot>)
(Filled, available)
pub fn bldg_to_parked_cars(&self, b: BuildingID) -> Vec<CarID>
pub fn walking_path_to_nearest_parking_spot( &self, map: &Map, b: BuildingID ) -> Option<Path>
pub(crate) fn new_person( &mut self, orig_id: Option<OrigPersonID>, ped_speed: Speed, vehicle_specs: Vec<VehicleSpec> ) -> &Person
pub(crate) fn seed_parked_car(&mut self, vehicle: Vehicle, spot: ParkingSpot)
pub(crate) fn seed_bus_route(&mut self, route: &TransitRoute)
fn start_bus(&mut self, route: &TransitRoute, map: &Map)
pub fn set_run_name(&mut self, name: String)
pub fn get_run_name(&self) -> &String
source§impl Sim
impl Sim
fn minimal_step( &mut self, map: &Map, max_dt: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>> ) -> bool
fn do_step( &mut self, map: &Map, time: Time, cmd: Command, maybe_cb: &mut Option<Box<dyn SimCallback>> ) -> bool
fn dispatch_events(&mut self, events: Vec<Event>, map: &Map)
pub fn timed_step( &mut self, map: &Map, dt: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>>, timer: &mut Timer<'_> )
pub fn tiny_step( &mut self, map: &Map, maybe_cb: &mut Option<Box<dyn SimCallback>> )
pub fn time_limited_step( &mut self, map: &Map, dt: Duration, real_time_limit: Duration, maybe_cb: &mut Option<Box<dyn SimCallback>> )
pub fn dump_before_abort(&self)
source§impl Sim
impl Sim
pub fn save_dir(&self) -> String
fn save_path(&self, base_time: Time) -> String
pub fn save(&mut self) -> String
pub fn find_previous_savestate(&self, base_time: Time) -> Option<String>
pub fn find_next_savestate(&self, base_time: Time) -> Option<String>
pub fn load_savestate(path: String, timer: &mut Timer<'_>) -> Result<Sim>
source§impl Sim
impl Sim
pub fn handle_live_edited_traffic_signals(&mut self, map: &Map)
sourcepub fn handle_live_edits(
&mut self,
map: &Map,
timer: &mut Timer<'_>
) -> (usize, usize)
pub fn handle_live_edits( &mut self, map: &Map, timer: &mut Timer<'_> ) -> (usize, usize)
Respond to arbitrary map edits without resetting the simulation. Returns the number of (trips cancelled, parked cars displaced).
source§impl Sim
impl Sim
pub fn delete_car(&mut self, id: CarID, map: &Map)
pub fn clear_alerts(&mut self) -> Vec<(Time, AlertLocation, String)>
source§impl Sim
impl Sim
sourcepub fn set_periodic_callback(&mut self, frequency: Duration)
pub fn set_periodic_callback(&mut self, frequency: Duration)
Only one at a time supported.
pub fn unset_periodic_callback(&mut self)
source§impl Sim
impl Sim
pub fn record_traffic_for(&mut self, intersections: BTreeSet<IntersectionID>)
pub fn num_recorded_trips(&self) -> Option<usize>
pub fn save_recorded_traffic(&mut self, map: &Map)
Trait Implementations§
source§impl<'de> Deserialize<'de> for Sim
impl<'de> Deserialize<'de> for Sim
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for Sim
impl RefUnwindSafe for Sim
impl Send for Sim
impl Sync for Sim
impl Unpin for Sim
impl UnwindSafe for Sim
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.