Python 中的离散事件模拟
Dr Diogo Costa
Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific
SimPy 提供三类资源:
resource
containerstore simpy.Resource()
simpy.Container()
simpy.Store()
创建资源
resource_1 = simpy.Resource(env, capacity=8)
capacity=8)请求资源
# 打开资源请求 with resource_1.request() as request:# 发起资源请求 yield request# 资源可用后 yield env.timeout(event_duration)
前述资源的变体
resource_1 = simpy.PreemptiveResource(
env, capacity=1)
某些进程可优先于其他进程
示例:维修工
用法类似 simpy.Resource()
DNT_CURLY_TAG_7
以最高优先级请求资源
with resource_1.request(priority=1) as
request:
yield request
yield env.timeout(process_duration)
以较低优先级请求资源
with resource_1.request(priority=2) as
request:
yield request
yield env.timeout(process_duration)
适用于建模同质、不可区分的大宗物料的生产/消耗
可为连续(如水)或离散(如苹果)
示例: 加油站的汽油储量
tank_1 = simpy.Container(
env, tank_size, init=tank_size)
向容器/油罐添加或移除
yield tank_1.put(add_quantity)
yield tank_1.get(remove_quantity)
获取当前油罐余量
tank_1.level
获取油罐总容量
tank_1.capacity
创建存储
store_1 = simpy.Store(
env, capacity=2)
类似 simpy.Container(),但可存放不同对象
而非容器中较抽象的"数量"
yield store_1.put("item_1")
yield store_1.get()
获取可用项目列表
store_1.items
获取存储容量
store_1.capacity
示例
现状:1 名收银员
simpy.Resource(env, capacity=1)...
时间: 23.7 分 | 顾客 30 > 完成
模拟情景:n 名收银员
simpy.Resource(env, capacity=2)...
时间: 13.2 分 | 顾客 30 > 完成
simpy.Resource(env, capacity=3)...
时间: 8.6 分 | 顾客 30 > 完成
simpy.Resource(env, capacity=4)...
时间: 8.6 分 | 顾客 30 > 完成
Python 中的离散事件模拟