[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例( 三 )

再次运行:
>>> env = simpy.Environment()>>> car = Car(env)>>> env.process(driver(env, car))<Process(driver) object at 0x...>>>> env.run(until=15)Start parking and charging at 0Was interrupted. Hope, the battery is full enough ...Start driving at 3Start parking and charging at 5Start driving at 10Start parking and charging at 122.5 共享资源SimPy 提供三种类型的资源 , 用于解决建模中多个进行希望使用有限资源的问题(例如:加油站汽车场景中的燃油泵)或典型的生产者-消费者问题 。

[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
我们还用汽车充电的例子:汽车开到充电桩旁 a battery charging station (BCS) , 向两个充电桩申请使用其一进行充电 , 如果两个桩都在被使用 , 它将会等待直到可用 , 然后开始充电 , 然后开走 。
>>> def car(env, name, bcs, driving_time, charge_duration):...# Simulate driving to the BCS...yield env.timeout(driving_time)......# Request one of its charging spots...print('%s arriving at %d' % (name, env.now))...with bcs.request() as req:...yield req......# Charge the battery...print('%s starting to charge at %s' % (name, env.now))...yield env.timeout(charge_duration)...print('%s leaving the bcs at %s' % (name, env.now))备注: bcs.request() 将会产生一个事件 , 该事件会阻塞直到资源可用 , 一般情况下使用资源后需要调用 release 对资源进行释放 , 这里的 with 语句意味着自动释放 。
我们创建有两个充电桩的资源:
>>> import simpy>>> env = simpy.Environment()>>> bcs = simpy.Resource(env, capacity=2)然后我们创建 4 辆车:
>>> for i in range(4):...env.process(car(env, 'Car %d' % i, bcs, i*2, 5))最后 , 我们可以开始模拟了 。由于汽车进程在此模拟中都自行终止 , 因此我们无需指定直到时间——当没有更多事件时 , 模拟将自动停止:
>>> env.run()Car 0 arriving at 0Car 0 starting to charge at 0Car 1 arriving at 2Car 1 starting to charge at 2Car 2 arriving at 4Car 0 leaving the bcs at 5Car 2 starting to charge at 5Car 3 arriving at 6Car 1 leaving the bcs at 7Car 3 starting to charge at 7Car 2 leaving the bcs at 10Car 3 leaving the bcs at 12注意到前两辆车到达BCS后可以立即开始充电 , 而2号车和3号车需要等待 , 符合预期 。
三、后续之后我将用 SimPy 模拟射频节点的数据收发 , 进一步做一个 MESH 通信的模拟程序 , 用于验证不同的算法对 MESH 网络带来的性能差异 。
敬请期待!!!
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
注:BLUETOOTH MESH 是利用蓝牙广播链路 , 基于洪范算法做的一种简单的组网协议(这里可以将广播理解为喊话、UDP广播等)
参考链接[1]. SimPy 主页[2]. 百度百科离散事件动态系统[3]. List of discrete event simulation software[4]. 离散事件系统仿真(原书第5版)
:如果觉得不错 , 帮忙点个支持哈~
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
附录二AnyLogic:
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
Arena:
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
FlexSim:
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图
GoldSim:
[Pyhton] SimPy 离散事件模拟框架详解 —— 以一个简单的汽车充电排队模拟为例

文章插图

经验总结扩展阅读