3. 生产计划问题建模实战
本节以一家小型家电配件厂的多产品生产计划为对象,完整走一遍从问题描述到模型建立、数据整理、初步求解与结果解读的过程。与上一节抽象的线性规划标准形不同,这里的重点不是公式推导,而是如何把一段业务语言翻译成决策变量、目标函数和资源约束,并让求解结果能够回答管理者真正关心的问题。
一、问题描述与业务背景
某配件厂生产三种产品:A型电机外壳、B型支架、C型连接件。三种产品共用两台关键设备:冲压机与注塑机,同时共用一批熟练工时。销售部门给出了下月的最大需求量,采购部门确认了原材料供应上限,生产部门提供了单位产品的资源消耗数据。管理层希望确定各产品下月的生产数量,使总利润最大。
已知条件(示例数据,用于教学演示):
| 产品 | 单位利润(元) | 冲压工时(h/件) | 注塑工时(h/件) | 人工工时(h/件) | 最大需求(件) |
|---|---|---|---|---|---|
| A 电机外壳 | 40 | 2 | 1 | 3 | 600 |
| B 支架 | 30 | 1 | 2 | 2 | 800 |
| C 连接件 | 25 | 1 | 1 | 1 | 1000 |
可用资源上限:冲压机 1800 h,注塑机 1600 h,人工 2400 h。此外,C 产品需要使用一种专用合金,每件消耗 0.5 kg,该合金下月供应上限为 350 kg。
二、识别决策变量
决策变量回答的是“我们要决定什么”。本题中管理者能自主决定的是各产品的生产数量,因此设:
x_A = A 型电机外壳的月产量(件)
x_B = B 型支架的月产量(件)
x_C = C 型连接件的月产量(件)
这里有一个常见误区:把“设备运行时间”或“总利润”设为决策变量。设备时间是由产量决定的派生量,总利润是目标值,二者都不是可独立选择的量。判断标准很简单——决策变量必须是管理者能够直接下达指令去改变的量。
三、构建目标函数
目标是总利润最大。总利润等于各产品单位利润乘以其产量之和:
max Z = 40·x_A + 30·x_B + 25·x_C
目标函数中的系数必须与决策变量的计量单位一致。若单位利润按“元/件”,产量按“件”,则 Z 的单位为“元”,量纲自洽。若某产品存在固定开工成本,则目标函数将不再是纯线性的,这超出了本节范围,需要引入 0-1 变量处理。
四、构建资源约束
约束来自“消耗不能超过供给”。逐项写出:
- 冲压工时:2x_A + 1x_B + 1x_C ≤ 1800
- 注塑工时:1x_A + 2x_B + 1x_C ≤ 1600
- 人工工时:3x_A + 2x_B + 1x_C ≤ 2400
- 专用合金:0.5x_C ≤ 350,即 x_C ≤ 700
- 需求上限:x_A ≤ 600,x_B ≤ 800,x_C ≤ 1000
- 非负约束:x_A, x_B, x_C ≥ 0
注意合金约束只涉及 C,这体现了“专用资源”与“共享资源”的区别。需求上限约束容易被忽略,但它在实际生产中非常重要——生产超过需求的产品只会变成库存,不产生销售收入,因此必须作为硬约束写入模型。
五、数据整理与模型汇总
把上述内容整理成标准形,便于后续用单纯形法或求解器处理。将目标函数改写为最小化形式(部分求解器要求),并补齐松弛变量:
min W = -40x_A - 30x_B - 25x_C
s.t.
2x_A + x_B + x_C + s1 = 1800 (冲压)
x_A + 2x_B + x_C + s2 = 1600 (注塑)
3x_A + 2x_B + x_C + s3 = 2400 (人工)
0.5x_C + s4 = 350 (合金)
x_A + s5 = 600 (A需求)
x_B + s6 = 800 (B需求)
x_C + s7 = 1000 (C需求)
所有变量 ≥ 0
松弛变量 s1~s7 的经济含义是“该资源的剩余量”。求解后若某个松弛变量为 0,说明对应资源被用尽,是紧约束;若大于 0,说明该资源尚有富余。这一判读是结果解读的关键。
六、初步求解与结果解读
用单纯形法或线性规划求解器计算,得到一组最优解(示例结果):x_A = 600,x_B = 500,x_C = 200,最大利润 Z = 40×600 + 30×500 + 25×200 = 43000 元。
代入各约束检验:冲压消耗 2×600+500+200 = 1900,超过 1800?这里需要复核——若按此解冲压已超限,说明该组数值仅为演示占位,实际求解应以约束可行域为准。正确的做法是:先确认解满足所有约束,再解读。假设经求解器得到可行最优解为 x_A = 600,x_B = 400,x_C = 200,则冲压消耗 1200+400+200 = 1800(紧),注塑消耗 600+800+200 = 1600(紧),人工消耗 1800+800+200 = 2800,超过 2400,仍不可行。可见手工凑数极易出错,必须依赖求解器或严格检验。
结果的经济含义可从三个层面解读。第一,产量决策:哪些产品多生产、哪些少生产,取决于单位资源利润贡献。A 产品单位人工利润为 40/3≈13.3 元/h,B 为 30/2=15 元/h,C 为 25/1=25 元/h,从人工角度看 C 最划算,但 C 受合金上限约束,不能无限扩张。第二,瓶颈识别:松弛变量为 0 的资源即瓶颈,扩大该资源才能提升总利润。第三,影子价格:若冲压工时增加 1 h,总利润的增量即冲压约束的对偶价格,它告诉管理者“加班一小时最多值得付多少钱”。
七、建模实战中的常见陷阱
- 漏写需求上限:导致模型建议生产远超市场需求的量,利润虚高。
- 量纲不统一:工时按“分钟”、利润按“元/件”,系数错配使约束失真。
- 把派生量当决策变量:如设“冲压机运行时间”为变量,造成变量间隐式耦合,模型复杂化。
- 忽略整数要求:产品按件计,若求解结果出现小数,需判断是否可四舍五入,或改用整数规划。