# SimPy停车场仿真建模示例

## SimPy 停车场仿真模型

SimPy 流程被实施到停车场类中，用于对汽车到达进行建模。这个过程会持续到一定数量的汽车到达。每辆车在随机分布的到达间隔时间后到达。然后，它会在随机分布的时间内占用一个可用槽。之后，停车位被释放。

``````import simpy
import random

# modeling framework
class ParkingLot:

env         :simpy.Environment
capacity    :int
spots       :simpy.resources.container.Container

def __init__(self,

env :simpy.Environment,
capacity :int
):

""" constructor """

self.env = env
self.capacity = capacity
self.spots = simpy.resources.container.Container(env, capacity, init=capacity)

def car_arrival(self,
car_id :int
) -> None:
"""

implement simpy process;
models car arrivals in the parking lot, occupying a slot for a randomly distributed duration

"""

print(f"Car {car_id} arrives at {self.env.now}")

yield self.spots.get(1)

print(f"Car {car_id} parks at {self.env.now}")

yield self.env.timeout(random.randint(1, 5))

print(f"Car {car_id} leaves at {self.env.now}")

yield self.spots.put(1)

def main(self,
cararrivals :int,
interarrivaltime_min :int,
interarrivaltime_max :int
) -> None:

""" implements simpy process for main parking lot simulation run """

for car in range(1, cararrivals+1):

t = random.randint(interarrivaltime_min, interarrivaltime_max)

yield self.env.timeout(t)

self.env.process(self.car_arrival(car))

# setup model
env = simpy.Environment()
parking_lot = ParkingLot(env, capacity= 10)

# setup simulation run itself
env.process(parking_lot.main(cararrivals= 10, interarrivaltime_min= 1, interarrivaltime_max= 5))

# run the model
env.run()
``````

2号车4点到达

1号车2号到达

1号车于3点出发

3号车7点到达

3辆车停在7点

4号车8点到达

4辆车停在8点

2号车9点出发

5号车9点到达

5辆车停在9点

4号车10点出发

6号车11点到达

6辆车停在11处

3号车12点出发

7号车12点到达

7辆车停在12点

5号车13点出发

6号车13点出发

8号车16点到达

8辆车停在16号

7号车17点出发

8号车17点出发

9号车20点到达

9辆车停在20

10号车22号到达

10号车24号出发

9号车25号出发