模拟引擎架构及运作解析
了解模拟引擎
ProcessMind 采用 离散事件仿真(DES) 引擎建模您的业务流程。了解其工作原理有助于您更高效地配置模拟和解读结果。
什么是离散事件仿真?
离散事件仿真中,系统状态仅在特定 event 发生时才变化,时钟会从一个 event 跳到下一个,event 之间无任何变化。这非常适合业务流程建模,因为:
- Activity 有明确的起止时间
- 资源在特定时刻分配和释放
- Case 在指定节点进入与完成
为什么用离散事件?
不同于物理、流体等连续模拟方式,业务流程无需实时建模。例如贷款申请不会逐步从“已提交”变成“已批准”,而是在具体 event 下直接状态切换。
核心事件循环
模拟引擎遵循如下简单而强大的循环:
1. 初始化:设置起始条件
2. 获取下一个事件:从优先队列中找出最早的事件
3. 推进时间:将模拟时钟推进至该事件时间
4. 处理事件:执行该事件(开始/完成 activity 等)
5. 安排新事件:依据结果安排后续事件
6. 重复:直到模拟结束或达最大事件数 (2,000,000)
7. 输出:生成完整 event log
事件类型
模拟过程中会生成并处理多种事件类型:
| 事件类型 | 说明 |
|---|---|
| Case Arrival | 新 case 在 start event 处进入流程 |
| Activity Start | case 开始执行 activity(资源分配) |
| Activity Complete | case 完成 activity(资源释放) |
| Gateway Evaluation | 决策分支路径 |
| Case Complete | case 到达 end event |
Case 的生成与进入
Case 通过 BPMN 模型的 Start Events 进入模拟。到达模式由 case generation distribution 控制。
默认到达模式
默认情况下,case 按 Poisson distribution、每小时 1 个速率到达,模拟真实业务中的随机到达间隔。
自定义到达模式
您可参考 Distributions 文档,使用不同分布类型配置 case 到达模式。
Case 在流程中的流转
Sequence Flow
当 case 完成一个元素后,会立即沿 outgoing sequence flow 前进。若仅一条路径,自动采用。
Gateway 行为
Gateway 决定 case 的分支和合并方式:
| Gateway 类型 | 行为说明 |
|---|---|
| XOR (Exclusive) | 按概率权重随机选取一个输出路径。概率为相对权重,系统自动归一化。 |
| AND (Parallel) | 所有输出路径同时进行,case 拆成多个并行 token。 |
| OR (Inclusive) | 随机选取输出路径,至少会选中一条。 |
| Event-Based | 在可用事件中随机选择路径。 |
设置概率
XOR gateway 需为每个 outgoing flow 配置概率(相对权重):
- 若设置为 70, 20, 10,则归一化为 70%、20%、10%
- 设置为 7, 2, 1,同样归一化
- 所有 flow 均需设置概率,未设置者自动分配剩余比例
活动执行
当 case 到达任务(activity)时,系统引擎按以下流程执行:
1. 检查资源可用性
所需资源当前是否有可用容量?
2. 如需则排队
若资源不可用,case 进入等候队列。ProcessMind 采用 FIFO(先进先出) 顺序,case 按到达顺序依次处理。
3. 分配资源
一旦资源可用,本 case 会分配到所需资源单元。
4. 获取处理时长
系统会从已配置的处理时长分布中随机选取时长,决定 activity 执行所需的时间。
5. 安排完成事件
在 current_time + processing_time 时刻,为本 case 加入完成事件到事件队列。
6. 释放资源
完成事件触发后,相关资源会释放回资源池供其他 case 使用。
最短处理时长
为保证 timestamp 唯一和更真实的模拟,所有 activity 的最短时长为 1 秒,即使配置为零时长也不例外。
跳过概率
可以为 activity 设置 skip chance(0-100%)。当 activity 被跳过时:
- case 直接进入下一个元素
- 不消耗任何资源
- 不花费时间(只保留最少 1 秒)
- 日志中该 activity 时长为最小值
适用于部分步骤在实际流程中偶尔被跳过的场景。
时间处理方式
模拟时钟
模拟过程中系统会维护一个虚拟时钟,按事件跳转。如果下个事件时间为 10:35,当前为 10:30,则时钟直接跳到 10:35。
时间单位
所有时间会被内部统一转化。您可以用以下单位输入:
- 秒(Seconds)
- 分钟(Minutes)
- 小时(Hours)
- 天(Days)
- 周(Weeks)
- 月(Months)
时段与参数周期性
参数可随模拟时间段变动。例如:
- 工作日和周末设置不同到达率
- 早班和晚班有不同处理时间
- 高峰时段可设置不同资源容量
详见 Periodicity 文档。
资源管理
资源池
每项资源都有容量,即能同时服务的 case 数量上限。
队列管理
当需求超过容量时,case 会进入队列排队。ProcessMind 采用 FIFO(先进先出),保证 case 按到达顺序处理。
Event Log 生成
模拟运行中,每次 activity 执行都会被记录到输出 event log:
| 字段 | 描述 |
|---|---|
| Case ID | 每个 case 唯一标识(顺序生成) |
| Activity | BPMN 元素名称 |
| Start Timestamp | 活动开始时间 |
| Complete Timestamp | 活动完成时间 |
| Resource | 执行活动的资源 |
| Attributes | 当前 case 属性信息 |
该日志符合标准 event log 格式,可用所有 ProcessMind 工具分析。
模拟限制
| 限制 | 数值 | 说明 |
|---|---|---|
| Max Events | 2,000,000 | 防止模拟失控 |
| Min Duration | 1 second | 保证每个 timestamp 唯一 |
建议先小规模测试,再扩展
新建模拟时,建议先用几天或几周的小周期测试配置。当您确认模型表现正常后再延长模拟周期。