某设备每天只能处于一种运行模式:模式 A(每小时耗电 30 kWh、产量 10 件)或模式 B(每小时耗电 20 kWh、产量 6 件)。你已用 0-1 变量 y_d 表示第 d 天是否选模式 A。工艺部门提了一条规则:“如果当天产量超过 50 件,当天必须处于模式 A。”请把这条规则写成线性约束,说明里面的常数怎么取;如果工艺部门随后说“这条规则每月允许违反不超过 2 天”,模型要怎么改,改完有什么坑。
面试官在考什么
判断候选人能否把业务语言里的 if-then 条件正确翻译成线性约束(方向、M 的取值),以及处理软约束时是否意识到指示变量必须有代价、否则约束会被架空。
回答框架 · 前两步
- 条件约束写成 p_d ≤ 50 + M·(1 − y_d):y_d = 1(模式 A)时右端为 50 + M,只要 M ≥ 产量上界 − 50 就不起作用;y_d = 0(模式 B)时 p_d ≤ 50,等价于“超过 50 只能是 A”。
- M 取当天产量的真实上界减 50(按最大班次算),不能用 1e6 这种大数,否则 LP 松弛变松、求解变慢。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
同一能力域的其他题
- 你简历里用到了线性规划做工艺参数优化。请说明:当约束中出现「某两个参数不能同时取高值」这类互斥条件时,你是如何把它写进模型的?如果求解器返回 infeasible,你怎么定位是哪条约束导致的?
- 5 个工人、5 项任务的一对一指派问题,用 0-1 变量 x_ij 建模,目标是最小化总工时。你发现直接解 LP 松弛(把 x_ij ∈ {0,1} 放松成 0 ≤ x_ij ≤ 1)得到的解自动就是整数,根本不需要分支定界。现在客户加了一条约束:“任务 A 和任务 B 不能由同一个人做”,写成 x_Aj + x_Bj ≤ 1(对每个工人 j)。请说明:(1) 为什么原模型的 LP 松弛天然给整数解;(2) 加了这条约束之后还能不能保证,如果不能,你会怎么处理这个模型。
- 你需要为一个运输问题建模:10个供应点,20个需求点,最小化运输成本。原本的运输问题约束矩阵是全幺模的,LP松弛直接得到整数解。现在业务要求:每条运输路线如果使用,需要支付一次性固定费用(例如1000元),且每条路线有容量上限。请问:这个问题属于什么类型?LP松弛会得到什么性质解?如果LP松弛得到分数解,你如何判断是否需要精确求解整数解,还是可以用LP解四舍五入?
- 一个跨工厂的产能分配问题被建成线性规划:约 800 个变量、300 条约束,求解在秒级完成。但输出里出现“0.4 号产线”“1.7 个班组”这类不可执行结果。业务要求每周排一次、凌晨批处理窗口 30 分钟,且允许目标值比理论最优差 1%。你作为技术负责人,怎么判断哪些变量必须整数化、哪些可以保持连续?如果整数化后求解时间涨到小时级,你的降级路径和与业务的精度口径怎么定?请给出可落地的决策规则。
- 某车间只有一台设备,每天可用 6 机时、9 kg 原料。生产一件 A 用 1 机时、3 kg 原料,利润 5 元;生产一件 B 用 2 机时、1 kg 原料,利润 4 元。A、B 的产量必须是非负整数。请回答:(1) 写出这个整数规划模型;(2) 求出 LP 松弛的最优解和整数最优解,两者目标值差多少;(3) 有人说“先解 LP,再把结果四舍五入取整就行”,你同意吗?说明理由(本小题的数值是否恰好可行不影响你的结论)。
- 单机多周期生产计划模型里有一条约束 p_t ≤ M · y_t:p_t 是第 t 天的产量(连续变量),y_t 是设备当天是否开机的 0-1 变量,设备真实日产能上限是 120 件。同事把 M 直接写成 100000,理由是“写大一点免得约束误伤”。请回答:(1) 这样写会带来什么后果,为什么;(2) 你会怎么确定这个 M,并说明 M 必须满足什么条件,模型才和原意等价。