用 SimPy 构建离散事件模型

Python 中的离散事件模拟

Dr Diogo Costa

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

开始构建模型前

  • 理解动态系统

  • 明确离散事件模型的目标

  • 识别进程:

    • 并行运行
    • 顺序运行
  • 识别合适的 SimPy 资源(resourcecontainerstore

  • 定义模型架构:

    • 确定状态变量
    • 模型工作流
    • 生成器
Python 中的离散事件模拟

动态系统与模型目标

理解动态系统

  • 哪些因素影响其行为?
  • 需要包含哪些进程/事件?

模型目标

  • 常用于优化系统
  • 您要优化哪些方面?

    • 更多客户
    • 更快处理时间
    • 资源配置优化
  • 用状态变量监控这些目标

Python 中的离散事件模拟

识别合适的 SimPy 资源

共享资源

simpy.Resource(env, capacity=4)
  • 进程间共享的资源

示例

  • 餐厅餐桌
  • 工厂机器
  • 剧院座位
  • 商店收银员

容器

simpy.Container(env, capacity, 
init=initial_capacity)
  • 资源像水箱/篮子

  • 可添加和移除数量:

.put().get()

示例

  • 加油站燃料储备
  • 燃煤电厂煤炭
Python 中的离散事件模拟

识别合适的 SimPy 资源

存储

simpy.Store(env, capacity=4)
  • 像商店,可存放多个项目的资源

  • 默认容量无限

  • 容量表示可存放任意对象的槽位

  • 添加和取出项目:

.put().get()

示例

  • 售卖多种商品的商店
  • 储物间
  • 车间
  • 家庭
Python 中的离散事件模拟

用按位运算符连接事件

SimPy 使用按位运算符连接两个事件

Python 中的运算符类型

  • 算术、逻辑、比较运算符

按位运算符

  • 对整数做按位计算
  • 需要两个操作数
    • 例如:a & ba >> ba ^ b

在 SimPy 中

  • 按位运算符生成条件事件
  • 等待两个事件/进程的"且"或"或"

SimPy 相关按位运算符

  • 等待两个进程:__and__()&
  • 等待任一进程:__or__()|
Python 中的离散事件模拟

让我们来练习!

Python 中的离散事件模拟

Preparing Video For Download...