列生成算法在炼油厂生产计划优化问题中的应用示例
字数 1416 2025-11-02 00:38:37
列生成算法在炼油厂生产计划优化问题中的应用示例
题目描述
炼油厂需要制定一个月的生产计划,将不同品质的原油(如轻质、中质、重质原油)通过蒸馏、裂解、混合等加工过程,转化为汽油、柴油、航空燃油等成品油。每种原油的采购成本、加工能力、成品油市场需求和价格均已知。目标是在满足设备产能和市场需求约束下,最大化总利润(销售收入减成本)。由于可能的加工方案组合极多(例如不同原油配比、加工路径),直接枚举所有变量会导致问题规模过大,需用列生成算法动态生成有价值的加工方案(即列)。
解题过程
- 问题建模为线性规划
- 设炼油厂有 \(K\) 种加工装置(如蒸馏塔、裂解器),每种装置有最大处理能力 \(C_k\)。
- 成品油有 \(M\) 种,每种有市场需求上限 \(D_m\) 和价格 \(p_m\)。
- 可能的加工方案称为"列",每个列 \(j\) 代表一种具体的生产模式:
- 消耗的原油类型和量 \(a_{ij}\)(\(i\) 为原油种类)
- 各装置占用时长 \(b_{kj}\)
- 产出的成品油量 \(q_{mj}\)
- 变量 \(x_j\) 表示采用方案 \(j\) 的频次(如加工批次),目标函数为:
\[ \max \sum_j \left( \sum_m p_m q_{mj} - \sum_i \text{原油成本} \cdot a_{ij} \right) x_j \]
约束包括装置能力 $ \sum_j b_{kj} x_j \leq C_k $、市场需求 $ \sum_j q_{mj} x_j \leq D_m $、非负性 $ x_j \geq 0 $。
- 构造限制主问题(RMP)
- 初始时仅包含少数可行列(如简单蒸馏方案),RMP 形式为:
\[ \max \{ c^T x : Ax \leq b, x \geq 0 \} \]
其中 $ A $ 包含 $ b_{kj} $、$ q_{mj} $ 等系数,$ b $ 为设备能力和需求约束。
- 定价子问题(生成新列)
- 求解 RMP 得到对偶变量 \(\pi_k\)(装置能力影子价格)和 \(\mu_m\)(市场需求影子价格)。
- 子问题目标是找到减少成本(即检验数 \(c_j - \pi^T A_j\))最小的新列 \(j\):
\[ \min \left\{ \text{原油成本} - \sum_m p_m q_m + \sum_k \pi_k b_k - \sum_m \mu_m q_m \right\} \]
- 子问题实为寻找最优加工路径:在原油选择、装置分配、产出比例等约束下优化上述目标,可建模为网络流或混合整数规划问题。
-
迭代求解
- 若子问题找到检验数为负的列(可提升目标),将其加入 RMP 重新求解。
- 若无负检验数列,当前 RMP 解即原问题最优解。
-
实际应用细节
- 炼油加工常涉及非线性收率(如产出随原油品质变化),需用分段线性化近似。
- 列生成可能陷入“尾效应”(后期改进缓慢),可设置收敛阈值提前终止。
关键点总结
- 列生成通过分解问题,避免枚举所有可能方案。
- 子问题设计需结合炼油工艺约束(如装置串联关系、收率模型)。
- 该方法是 Exxon、Shell 等公司生产计划系统的核心算法之一。