SimPy停车场仿真建模示例

我想扩展我的供应链和制造模拟系列 SimPy 示例。在本文中,我将展示如何使用 SimPy 在 Python 中对停车场进行建模。SimPy 是 Python 中的离散事件仿真建模库。其他 SimPy 示例以及基于 R 的停车场 模拟 模型过去已在此博客上分享过。这里有些例子:

这里讨论的模型也可用于对其他类似系统进行建模,例如具有最短停留时间的过程缓冲存储(冷却过程、硬化过程等)及其槽/隔间利用率。

停车场模拟的好处

停车场 模拟模型是供应链管理中的宝贵工具,具有多种优势。这些模型有助于空间和劳动力等资源的有效配置,优化其使用。它们有助于容量规划,从而能够就设施扩建或缩减做出明智的决策。交通流量分析增强了配送中心内车辆的整体移动,减少拥堵和等待时间。高效的队列管理确保货物及时装卸。

此外,停车场模拟有助于通过最大限度地减少闲置时间和提高运营效率来确定降低成本的机会。跨供应链各个组件的绩效衡量支持基准测试和目标设定。这些模型可以探索“假设”场景,从而可以测试和评估布局、人员配置和流程变更。它们还通过识别停车场运营中的瓶颈和漏洞来帮助主动缓解风险。

此外,它们还是员工培训和技能发展的宝贵工具,为学习停车场和装载操作提供受控环境。支持可持续发展计划,停车场模拟可优化路线并减少对环境的影响。这些模拟生成数据驱动的见解,为战略决策提供信息,并通过促进持续优化的新策略测试来促进持续改进的文化。将停车场模拟集成到供应链管理中可以节省成本、提高效率并提高供应链的整体绩效。

SimPy 停车场仿真模型

下面是一个 Python 示例,也可以在 Github 上找到,它使用 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()

对于有 10 个停车位的停车场,针对10 辆汽车到达运行此模型,会生成以下输出:

2号车4点到达

车 2 停在 4

1号车2号到达

车 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 停在 22

10号车24号出发

9号车25号出发

在接下来的教程中,我将展示如何将自定义统计数据集成到该模拟模型中,最后,如何为其设置动画。

SimPy停车场仿真建模总结

在本文中,我使用 Python 中的 SimPy开发了一个简单的停车场基础模型。我将在接下来的教程中使用此模型来分析汽车到达流程和停车场容量随时间的利用率,并且我将随时间的推移制作停车位利用率的动画。我将进一步详细介绍该模型并实施停车场区域和行驶距离最小化策略。

如果您想了解有关 SimPy 和离散事件仿真的更多信息,您可以考虑研究以下 SCDA 博客文章和贡献:

You May Also Like

Leave a Reply

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据