我接过一个能源调度的项目,最初整条优化链路用的是确定性模型,风电出力、负荷全按预测点估计代入,结果连续阴天那几天,模型给出的方案在第一轮执行就被现实打脸:实时调整成本直接超了预算的40%。后来把目标函数从“最小化期望成本”改成“最小化最坏情况成本”,配合列与约束生成算法(C&CG)去解两阶段鲁棒优化模型,问题才算真正收住。这篇内容就是围绕这个方向做的一次系统复盘:两阶段鲁棒优化模型怎么建、C&CG算法怎么落地、数据处理机制在整个流程里到底扮演什么角色,以及四个典型场景下的建模实施细节。适合正在做电力调度、供应链网络设计、生产计划、资源预留这类问题的运筹优化工程师和研究生参考。
1. 两阶段鲁棒优化到底解决什么问题:从“确定值假设”说起
1.1 一个让我吃过大亏的确定性模型
先说那个调度项目。原始模型里,风电出力被当成固定参数,约束条件是“出力=预测值”,所有调度指令都围绕这个单一数值展开。预测值准的时候没什么问题,一旦天气系统变化,实际出力和预测值之间可能出现20%以上的偏差。更麻烦的是,这个偏差还会传导:风电少了,火电就要多出,但火电爬坡速率有限,现货市场电价又是波动的,最后实际成本远高于模型算出来的最优成本。
这类问题在教科书里叫“数据不确定性下的决策问题”。确定性模型本质上是把不确定参数当作确定值,然后用一套静态约束去求解。模型越精细,对确定值假设越敏感,一旦真实参数偏离假设,结果就崩得越厉害。这不是算法本身的问题,而是问题定义的问题:你在用一个没有不确定性信息的世界观,去解一个充满不确定性的世界。
1.2 鲁棒优化、随机规划与两阶段决策的本质差异
面对不确定性,业界常用的思路有三类。
第一类是随机规划。它假设不确定参数服从某个已知概率分布,优化目标是期望成本最小。这个方法理论上漂亮,但落地有两个硬伤:一是真实分布很难精确获得,分布假设一错,最优解也就跟着错;二是期望目标会把“极端但代价极高”的场景平均掉,而业务方往往最关心的恰恰是极端场景下方案不能崩。
第二类是鲁棒优化。它不假设概率分布,而是给不确定参数划定一个集合——叫不确定性集合——然后要求方案在这个集合内的所有实现下都可行,目标函数通常取最坏情况下的表现。这种方法保证了稳健性,但代价是保守:如果集合定太大,所有决策都按最坏情况来,经济性会很差。
第三类就是两阶段鲁棒优化。它把决策拆成两个阶段:第一阶段是“现在就必须拍板”的决策,比如建多少仓库、装多少机组、租多少容量;第二阶段是“等不确定性实现之后”的调整决策,比如按实际需求调度物资、按实际出力调整机组。模型写成外层最小化第一阶段成本,内层最大化最坏情况下的第二阶段补偿成本。
一句话总结三者的差别:随机规划在赌一个平均的未来,单阶段鲁棒优化在防一个最坏的未来,两阶段鲁棒优化在“先拍板、后补救”的结构里防最坏的未来。
1.3 两阶段鲁棒优化的一般形式与适用边界
两阶段鲁棒优化的一般形式可以写成:
min_{x∈X} ( c^T x + max_{u∈U} min_{y∈Y(x,u)} d^T y )
其中 x 是第一阶段决策变量,u 是不确定性参数,U 是不确定性集合,y 是第二阶段决策变量,Y(x,u) 是给定 x 和 u 后第二阶段可行域。目标函数里层是一个 max-min 结构:对于每个第一阶段方案 x,不确定性会选一个让后续成本最大的 u,然后我们在该 u 下做最优调整。
这个结构有两个核心边界要清楚。第一,只有第二阶段存在调整空间时,两阶段模型才比单阶段鲁棒优化有意义。如果第二阶段没有任何变量可以动,那 max-min 就退化成 max,本质上还是单阶段问题。第二,U 的形状直接决定模型可解性。线性约束构成的凸多面体集合最容易处理;椭球集合会引入二阶锥约束;离散场景集合则需要配合枚举或分支策略。选定 U 之前,务必确认手里的求解器和算法能接得住。
我把这个项目里遇到的实际问题先放在这里:两阶段鲁棒优化确实强大,但它真正难的点不在模型形式,而在“如何高效求解 max-min 结构”和“如何让 U 紧贴真实数据”。这两个问题,分别由 C&CG 算法和数据处理机制来解决。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 列与约束生成算法:把“max-min”层层拆开的迭代框架
2.1 C&CG 的总体思路
两阶段鲁棒优化的核心
