Simpy包的简单使用
Simpy包
基本概念
Simpy-制造仿真:SimPy 是离散事件驱动的仿真库
仿真技术是再现系统动态行为、分析系统配置与参数是否合理、预测瓶颈工序、判断系统性能是否满足规定要求、为制造系统的设计和运行提供决策支持。所有活动部件,例如车辆、顾客,、即便是信息,都可以用 process (进程) 来模拟。这些 process 存放在 environment (环境) 。所有 process 之间,以及与environment 之间的互动,通过 event (事件) 来进行.
process <–>event<–>environment
process 表达为 generators (生成器), 构建event(事件)并通过 yield 语句抛出事件。
当一个进程抛出事件,进程会被暂停,直到事件被激活(triggered)。多个进程可以等待同一个事件。 SimPy 会按照这些进程抛出的事件激活的先后, 来恢复进程。其实中最重要的一类事件是 Timeout, 这类事件允许一段时间后再被激活, 用来表达一个进程休眠或者保持当前的状态持续指定的一段时间。这类事件通过 Environment.timeout来调用。
Environment
模拟环境管理模拟时间以及事件的调度和处理。它还提供了单步执行或执行模拟的方法。正常模拟使用Environment.
Environment常用的方法
simpy.Environment.process - 添加仿真进程
simpy.Environment.event - 创建事件
simpy.Environment.timeout - 提供延时(timeout)事件
simpy.Environment.until - 仿真结束的条件(时间或事件)
simpy.Environment.run - 仿真启动
例子1-汽车启停模拟
import simpy
def car(env):
while True:
print('Start parking at %d' % env.now)
parking_duration=5
yield env.timeout(parking_duration) # 进程延时 5s,停五秒
print('Start driving at %d' % env.now)
trip_duration = 2
yield env.timeout(trip_duration) # yield抛出事件,2s,开两秒
# 仿真启动
env = simpy.Environment() # 实例化环境
env.process(car(env)) # 添加汽车进程
env.run(until=15) # 设定仿真结束条件, 这里是 15s 后停止
在该例子中,simpy.Environment()来实例化环境变量,env.process(car(env)) 在环境中添加汽车进程,env.run(until=15) 设定仿真结束条件, 这里是 15s 后停止
在这里插入代码片
。
例子2-汽车充电模拟
from random import seed, randint
seed(23)
import simpy
class EV:
def __init__(self,env):
self.env=env
#两个主进程
self.drive_proc=env.process(self.drive(env))
self.bat_ctrl_proc = env.process(self.bat_ctrl(env))
# 需要抛出的事件