2. 排产问题数学建模:变量定义、约束条件、目标函数
好,咱们进入正题。
排产问题,说白了就是一道数学题。你想想看,几百台设备、上千道工艺、几十种产品,每天要决定哪个lot先做、哪个机台跑什么货——这不就是个典型的组合优化问题吗?我当年刚接触MES排产时,第一反应是「这玩意儿能算出来?」后来发现,只要把问题用数学语言描述清楚,剩下的就是求解器的事了。
2.1 变量定义:把生产问题翻译成数学语言
我个人习惯,先把所有「可变的」东西列出来。排产问题里,变量通常分三类:
- 决策变量:比如
x_{i,j,t}表示产品 i 在设备 j 上、时间 t 开始加工。这是最核心的变量。 - 状态变量:比如设备是否空闲、缓存区是否有料。这些是中间结果,但建模时也得定义清楚。
- 辅助变量:比如完工时间、延迟天数。这些是为了写目标函数用的。
举个例子:
// 变量定义示例(伪代码)
变量 x[i][j][t] ∈ {0, 1} // 产品i在设备j上,时间t开始加工
变量 C[i] ∈ R+ // 产品i的完工时间
变量 D[i] ∈ R+ // 产品i的延迟时间
嗯,这里要注意:变量太多会导致求解时间爆炸。我在项目中遇到过,一个12寸晶圆厂,光设备就300多台,如果每个时间片都定义变量,模型规模直接上亿。后来我们用了「事件驱动」的思路,只在关键时间点定义变量,才把问题压下来。
2.2 约束条件:设备、物料、工艺、时间
约束条件就是「不能违反的规则」。我把它分成四大类,你记一下:
2.2.1 设备约束
- 单机台独占:同一时刻,一台设备只能加工一个lot。这个好理解。
- 设备可用性:设备有维护计划、有故障时间。我曾经踩过坑——模型算出来排产完美,结果发现那台设备当天在PM(预防性维护),整个计划白做了。
- 设备兼容性:不是所有设备都能跑所有工艺。比如光刻机,不同型号支持的关键尺寸不同。
2.2.2 物料约束
- 物料平衡:每个工序的产出,必须等于下一工序的投入。别小看这个,晶圆厂里经常有「在制品堆积」的问题,就是物料平衡没算好。
- 缓存区容量:每个工位前的缓存区是有限的。我记得有个厂,缓存区只有20个slot,结果模型没加这个约束,算出来的排产根本没法执行。
2.2.3 工艺约束
- 工艺顺序:光刻→刻蚀→清洗,这个顺序不能乱。说白了就是「前驱工序必须完成」。
- 工艺时间窗口:有些工序必须在特定时间内完成。比如氧化工艺,时间长了膜厚超标,短了又不够。
- 批次约束:有些设备要求整批加工,不能拆批。这个在扩散炉里特别常见。
2.2.4 时间约束
- 加工时间:每个lot在每台设备上的加工时间是固定的(或者有上下限)。
- 运输时间:从A设备到B设备,需要时间。别忽略这个,我见过一个案例,运输时间占整个周期的15%,不加这个约束,排产结果就是废纸。
- 交期约束:客户要求的交付时间。这个后面会用到目标函数里。
避坑指南:我曾经在建模时漏掉了「设备切换时间」这个约束。结果模型算出来说产能提升20%,实际一跑,切换时间把增益全吃掉了。所以,约束条件宁可多写,不要少写。
2.3 目标函数:产出率、周期时间、准时交付率
目标函数就是「我们想优化什么」。排产问题通常是多目标优化,但实际工程中,我建议你做成加权和的形式。
| 目标 | 数学表达 | 说明 |
|---|---|---|
| 产出率最大化 | max Σ x[i][j][t] | 单位时间内产出的晶圆数量 |
| 周期时间最小化 | min Σ (C[i] - R[i]) | 从投片到完工的总时间 |
| 准时交付率最大化 | min Σ max(0, C[i] - D[i]) | 延迟时间总和最小化 |
你想想看,这三个目标其实是互相矛盾的。想提高产出率,就得让设备满负荷跑,但这样周期时间就会变长。想缩短周期时间,就得留余量,但产出率就下来了。所以实际项目中,我们通常会给每个目标一个权重,比如:
// 加权目标函数示例
目标 = w1 * 产出率 - w2 * 周期时间 - w3 * 延迟时间
其中 w1 + w2 + w3 = 1
我的经验:权重怎么设?我一般先跑一次纯产出率优化,再跑一次纯周期时间优化,看看两个极端值。然后根据业务需求,在中间找个平衡点。比如某家存储芯片厂,他们更看重准时交付率,我就把w3设到0.6,w1和w2各0.2。
2.4 知识体系总览
下面这张图,把整个数学建模的框架串起来了。你看一眼,心里就有数了。
这张图你看懂了吗?从左到右,先定义变量,再写约束,最后定目标。然后扔给求解器去算。算出来的结果如果不满意,调整权重或约束,再算一次。说白了,这就是个「建模-求解-反馈」的循环。
注意:数学建模不是一蹴而就的。我做过一个项目,前前后后改了7版模型。第一版太理想化,约束太少;第二版约束太多,求解器跑不动;第三版加了松弛变量,才勉强能用。所以,别指望一次成功。
好,这一章的内容就到这。变量定义、约束条件、目标函数,这三块是排产算法的地基。地基打不牢,后面全是空中楼阁。下一章我们聊聊具体的求解算法——怎么从数学模型变成可执行的排产方案。