This model is a classic instance of an Erlang Queuing Process.
We have the entities:
- A population of cars which start off in a "cruising" state;
- At each cycle, according to a Poisson distribution defined by "Arrival Rate" (which can be a constant, a function of time, or a Converter to simulate peak hours), some cars transition to a "looking" for an empty space state.
- If a empty space is available (Parking Capacity > Count(FindState([cars population],[parked]))) then the State transitions to "Parked."
-The Cars stay "parked" according to a Normal distribution with Mean = Duration and SD = Duration / 4
- If the Car is in the state "Looking" for a period longer than "Willingness to Wait" then the state timeouts and transitions to impatient and immediately transitions to "Crusing" again.
The model is set to run for 24 hours and all times are given in hours (or fraction thereof)
- Calculate the average waiting time;
- Calculate the servicing level, i.e., 1- (# of cars impatient)/(#cars looking)
A big THANK YOU to Scott Fortmann-Roe for helping setup the model's framework.