我想扩展我的供应链和制造模拟系列 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 博客文章和贡献:
- 链接:驳船运输SimPy模拟
- 链接:装配线模拟和生产线平衡
- 链接:端到端家禽供应链模拟
专业领域为优化和仿真的工业工程师(R,Python,SQL,VBA)
Leave a Reply