如何用SimPy实现工序衔接的并行生产流程并优化时间计算
生产工序时间优化模型构建方案
基础参数梳理
- 机器配置(类型/单台产能/数量):
- A:产能1,1台(对应S1、S2工序)
- B:产能3,2台(对应S4工序)
- C:产能2,2台(无对应工序,暂不参与)
- D:产能5,1台(对应S3工序)
- E:产能1,3台(对应S5工序)
- 工序流转顺序:
S1→S2→S3→S4→S5 - 核心约束:
- 机器处理某批次组件对应工序期间,不可切换至其他工序
- 后工序需在前工序产出量≥自身单台产能时启动并行处理
- 机器被占用时,后续组件批次需等待至机器空闲
核心模型逻辑
1. 触发规则与批次拆分
定义最小触发批次量为后工序单台机器的产能:
- 前工序持续产出,每累计到对应后工序的最小触发批次量,立即生成一个子批次推送至后工序待处理队列,无需等待前工序整批完成。
- 若前工序剩余产出不足触发量,暂存至累计满足后再推送。
2. 机器占用与时间计算逻辑
为每个工序维护两个核心数据:
可用机器数:初始值为该工序对应机器的总数量待处理子批次队列:按到达顺序存储满足触发条件的子批次
时间计算流程:
- 从S1开始,按单台产能持续产出,每产出满S2的触发量(A机器产能1,即每1件),立即推送子批次至S2队列。
- 当S2队列有子批次且有可用机器时,分配机器处理该子批次,记录机器的占用结束时间(当前时间 + 子批次量÷单台产能)。
- 机器到达占用结束时间后,释放回可用池,同时将该子批次的产出推送至S3队列(满足触发量则推送,不足则暂存)。
- 后续工序重复步骤2-3,直到所有子批次完成S5工序。
3. 示例对比(以10件总任务为例)
原串行计算(整批流转)
- S1:10÷1=10单位时间
- S2:10÷1=10单位时间(总耗时20)
- S3:10÷5=2单位时间(总耗时22)
- S4:10÷(2×3)≈1.67单位时间(总耗时≈23.67)
- S5:10÷(3×1)≈3.33单位时间(总耗时≈27)
总耗时≈27单位时间
优化后并行计算
- S1&S2并行:S1每1单位时间产出1件,S2立即启动处理,S1完成10件耗时10,S2完成最后1件耗时11(并行缩短9单位时间)。
- S2&S3并行:S2累计5件后推送至S3,S3处理耗时1(结束时间6);剩余5件在S2完成时推送,S3处理至12时间完成。
- S3&S4并行:S3完成的5件拆分为3件+2件,3件推送后由1台B处理至7时间;后续累计的7件拆分为两个3件,分别由两台B处理至13、14时间。
- S4&S5并行:S4完成的3件批次,由3台E处理1单位时间即可完成;最后1件单独处理至15时间。
总耗时≈15单位时间
4. 实现关键要点
- 为每台机器维护
空闲时间点,严格按时间顺序分配子批次,避免冲突。 - 前工序产出需实时累计,触发条件满足后立即推送子批次,最大化并行空间。
- 子批次优先级遵循“先到先处理”,确保流程有序。
内容的提问来源于stack exchange,提问作者Sneha
相关产品推荐
相关产品推荐

