微电网调度这行干久了,你会发现一个特别尴尬的现实:你精心做的日前计划,往往在光伏出力第一次剧烈波动时就废了。群里天天有人问"为什么我按预测做的调度方案,实际运行成本总是超出一大截",答案其实就是四个字——不确定性。光伏预测误差、负荷随机波动、分时电价下的市场博弈,任何一个环节出岔子,确定性优化的那套"最优解"就成了纸面文章。这也是为什么两阶段鲁棒优化在微电网经济调度里越来越受关注,它的核心思想不是追求预测最准,而是保证最坏情况下成本也可控。这篇文章我就结合自己做微电网项目的实际经验,把两阶段鲁棒优化的建模思路、求解方法和工程落地细节一次说透。
1. 为什么确定性调度在微电网里总是"翻车"
1.1 微电网里的三类不确定性来源
先说清楚问题出在哪。微电网经济调度面对的不确定性,归纳起来就三类。
第一类是新能源出力不确定性。光伏和风电看天吃饭,云层飘过来,出力在几分钟内能掉30%-50%,这个谁都拦不住。数值天气预报的精度这几年确实在提升,但日内小时级的光伏预测误差依然普遍在10%-20%,极端天气下可以到30%以上。
第二类是负荷不确定性。用户侧的用电行为本身就随机,工业负荷稍微波动一下,商业和居民负荷叠加起来,实际负荷和预测负荷偏差个5%-10%很常见。
第三类是市场价格不确定性。微电网和大电网之间有功率交换时,分时电价虽然相对稳定,但在电力市场环境下,实时市场出清价格可能跟日前价格差距很大。
这三类不确定性叠加在一起,调度的决策空间就被严重压缩了。关键问题在于,传统确定性优化只把预测值当作唯一输入,没有为不确定性留下任何"安全垫"。
1.2 确定性方案的典型翻车过程:一个具体算例
用一组典型数据模拟就明白了。假设微电网配置了500kW光伏、200kW/800kWh储能,最大负荷400kW,联络线功率上限300kW,分时电价设置为峰时1.2元/kWh(10:00-15:00、18:00-21:00)、平时0.7元/kWh、谷时0.35元/kWh(23:00-次日7:00)。
中午11:00,确定性调度按光伏预测400kW来排计划,得出"光伏足够覆盖负荷,不购电、储能不动作"的方案。结果实际运行时光伏出力因为云层遮挡降到了240kW,负荷还比预测高了30kW。这一下就亏了190kW的缺口,微电网被迫在峰时电价时段紧急从大电网购电,按1.2元/kWh计算,一小时内多花228元电费。如果一天里遇上两次这样的波动,额外成本就是四五百元,这对一个微电网项目来说不是小数目。
更麻烦的是,这只是单时段的问题。储能调度是跨时段耦合的,光伏预测不准会让储能的充放电计划整体错位——本该在谷时充电的储能,因为实际光伏出力偏高而少充了电,等到峰时该放电的时候,SOC不够用,整个优化序列就全乱了。
1.3 鲁棒优化解决的不是"最优",而是"最不坏"
鲁棒优化的思路跟确定性优化完全不同。它不问"预测情况下的最优解是什么",而是问"在所有可能的不确定性场景中,最坏情况下的成本是多少,以及怎样做才能让最坏情况的成本最小"。
这就是min-max的思想。其中内层的max是在描述不确定性,即"大自然"会跟你对着干,在允许的范围内选择对你最不利的场景;外层的min则是你的决策,要在这种对抗中选出成本最低的方案。
这种思路在工程上有一个很直观的价值:它给调度员提供的是一个有保障的承诺——只要不确定性落在你设定的集合范围内,运行成本就不会突破某个上界。这对微电网的运营者来说,比"平均情况最优"要重要得多。
2. 两阶段鲁棒优化的建模框架:先定计划,再见招拆招
2.1 两阶段的划分逻辑:日前计划与日内调整
为什么要分两个阶段?因为微电网的调度决策天然就有两个时间尺度。
第一阶段是日前决策。在光伏出力和负荷的准确值未知时,你需要提前确定那些"今天之内很难改"的方案——比如储能各时段的基础充放电计划、与大电网的购售电协议量、可控负荷的启停安排。这些决策在运行日当天往往不能随意更改,或者更改成本很高。
第二阶段是日内调整。当实际的光伏出力、负荷数据逐步揭示后,微电网运行人员可以在第一阶段方案的基础上,做成本最低的修正——比如调整储能的实际充放电功率、在允许范围内改变联络线功率、启用备用容量等。
这种"先做计划,再根据实际情况灵活调整"的结构,恰好对应了鲁棒优化里的"here and now"与"wait and see"决策。第一阶段决策必须在不确定性实现之前敲定,第二阶段决策则可以等看到实际情况后再优化。
2.2 min-max-min结构的直观理解
两阶段鲁棒优化的标准形式是:
min (c^T x + max min d^T y)
x是第一阶段决策变量,y是第二阶段决策变量,u是不确定性参数(光伏出力、负荷、电价等)。
从下往上解读这个式子:
- 最内层的min:给定第一阶段方案x*和某个不确定性场景u后,第二阶段以最小成本进行再调度,对应一个线性规划或混合整数规划问题。
- 中间的max:"大自然"站在你的对立面,它会在不确定性集合U里挑选使你的第二阶段成本最大的那个场景u。这个场景就是最坏场景,也是你在日前阶段最担心发生的情况。
- 最外层的min:你要在日前阶段选择x,使得"第一阶段成本+最坏场景下的第二阶段成本"最小化。
这个结构意味着两阶段鲁棒优化给出的不是一个固定的全天计划,而是一个"计划+应对策略"的组合。它不会告诉你"某个时段储能必须充50kWh",而是告诉你一种决策规则——在某种光伏出力水平下,储能应该如何调整。
2.3 跟随机规划的区别:要"保证"还是要"平均"
有人会问:随机规划不是也能处理不确定性吗?为什么非要用鲁棒优化?
两者的差别在于对风险的立场。随机规划假设你知道不确定性的概率分布,优化目标是期望成本最小化,它保证的是"长期平均来看不错",但可能出现个别场景下成本飙升的情况。鲁棒优化不需要概率分布,只需要知道不确定性的变化范围,它保证的是"设定范围内最坏情况也能扛住"。
在微电网调度场景里,极端天气、突发故障这类概率低但后果严重的事件,恰恰是运营者最关心的。随机规划中这些场景占的权重很小,容易被"平均掉";鲁棒优化则把它们纳入考量。当然,代价是鲁棒方案的日前成本往往比确定性方案和随机规划方案要高,这个代价就是所谓的"鲁棒溢价",后面算例里会具体算账。
3. 不确定性集合与微电网运行约束怎么搭
3.1 不确定性集合的选择:盒式、椭球式与预算约束
两阶段鲁棒优化的关键设计自由度在于不确定性集合U怎么定义。集合太小,鲁棒性不够,最坏场景覆盖不住实际情况;集合太大,方案过度保守,经济性差得没法看。
三种常用集合对比:
- 盒式不确定集合:每个不确定参数在预测值附近一个区间内独立波动,即u ∈ [ū-δ, ū+δ]。建模最简单,但所有参数同时达到极值时,方案会过度保守,实际中这种"全部最坏"几乎不可能发生。
- 椭球不确定集合:用椭球描述参数之间的关联性,能反映不同时段光伏出力之间的相关性,但会引入二次约束,求解复杂度上升。
- 预算约束集合(budget-uncertainty set):在盒式集合基础上加一个总量限制——整个调度周期内,不确定性参数偏离预测值的时段总数不超过Γ(预算值)。Γ=0时退化为确定性模型,Γ=24时等价于盒式集合。这个Γ就是保守程度的调节旋钮,工程上一般取Γ=8~12,既保留鲁棒性又不至于太保守。
3.2 功率平衡与联络线约束的处理
微电网经济调度的核心约束是各时段的功率平衡:
P_pv(t) + P_dis(t) + P_buy(t) = P_load(t) + P_ch(t) + P_sell(t)
其中不确定性P_pv(t)和P_load(t)在集合U中波动。这个约束必须对所有可能的u∈U都成立,这就把不确定性引入到了约束条件里。
联络线约束也需要特别注意:与大电网交换功率不能超过物理限制,即0 ≤ P_buy(t) ≤ P_line_max,0 ≤ P_sell(t) ≤ P_line_max,同时还要考虑不允许同时购电和售电的互斥约束。这些约束在鲁棒框架下同样需要满足"对所有的u都成立"。
处理这类带有不确定性的等式约束时,比较实用的技巧是把功率平衡写成含松弛变量的不等式约束,让鲁棒模型在极端场景下可以通过调整储能出力来平衡,而不是因为约束太硬直接无解。
3.3 储能SOC与充放电约束的处理细节
储能模型是两阶段鲁棒优化里最容易出问题的地方。SOC递推公式:
SOC(t+1) = SOC(t) + η_ch·P_ch(t)·Δt - P_dis(t)·Δt/η_dis
其中η_ch和η_dis分别是充放电效率(一般取0.95左右)。约束条件包括:SOC上下限(建议10%-90%,避免过充过放损害电池寿命)、充放电功率上限、以及充放电互斥约束。
在鲁棒框架下,储能变量要区分第一阶段和第二阶段:日前确定的基准充放电计划属于第一阶段变量,实际执行时的功率调整量属于第二阶段变量。第二阶段储能调整量可以在基准值附近做修正,但修正幅度要设定一个合理的范围(比如±50kW),这个范围直接影响系统应对不确定性的灵活性。
这里有个工程细节:SOC边界约束在第二阶段调整后仍然必须满足。也就是说,不仅要保证基准计划的SOC不越界,还要保证在所有不确定性场景下,经过调整后的SOC仍然在安全区间。这需要在建模时把最坏情况下的SOC偏移量也计入约束,通常用鲁棒对等转换来处理。
4. C&CG求解:把min-max-min一层层剥开
4.1 为什么不能用现成的求解器直接解
两阶段鲁棒优化问题没法直接扔给Gurobi或CPLEX求解,因为内层的max和我外层的min之间存在博弈关系,整个问题是一个三层优化结构,商业求解器不支持这种形式。
主流解法有两种:Benders分解和列与约束生成算法(C&CG,Column-and-Constraint Generation)。C&CG在微电网调度中的表现更好,因为它在主问题中显式引入了最坏场景对应的第二阶段变量,每次迭代都在收紧可行域,收敛速度比Benders快得多,通常迭代几次就能达到10^-4级别的最优性间隙。
4.2 主问题与子问题的分解逻辑
C&CG的核心思路是把原问题拆成一个主问题和一个子问题,反复迭代逼近最优解。
主问题(MP)是在一组已知的最坏场景集合中做联合优化:
min (c^T x + η) s.t. x∈X, η ≥ d^T y_k, 约束A_k x + B y_k ≥ b_k, ∀k∈K
这本质上是一个普通的混合整数线性规划,可以交给商业求解器求解。
子问题(SP)是在给定第一阶段决策x*的情况下,寻找最坏场景和对应的最小再调度成本:
Q(x*) = max_{u∈U} min_{y∈F(x*,u)} d^T y
子问题是一个max-min双层结构,需要继续转化。
4.3 子问题max-min的强对偶转化
处理子问题最常用的方法是对内层的min问题取对偶。因为第二阶段问题通常是线性规划,强对偶定理成立,max-min就变成了一个单层的max问题:
Q(x*) = max_{u∈U, π∈Π} π^T (b - A x* - B_u u)
其中π是对偶变量。这样处理后,子问题目标函数中存在非线性项π^T·u(对偶变量乘不确定性变量),需要通过大M法引入辅助变量进行线性化。
当第二阶段问题包含二进制变量(比如可控负荷的启停、购售电状态切换)时,强对偶不成立,处理更麻烦。我实际项目中遇到这种情况,一般采用两种方案:一是把二进制变量从第二阶段移到第一阶段,虽然会牺牲一定灵活性,但模型简化很多;二是用big-M线性化处理对偶问题中的互补松弛条件,但这会让求解规模膨胀,需要谨慎权衡。
C&CG主循环的伪代码逻辑:
初始化:k=0,UB=+∞,LB=-∞,场景集合K为空 给定一个初始可行场景u^0,加入K while (UB - LB) / UB > ε: 求解主问题MP,得到最优解(x*, η*) 更新LB = c^T x* + η* 将x*代入子问题SP,求解得到最坏场景u^new和最优值Q(x*) 更新UB = c^T x* + Q(x*) 将u^new加入场景集合K,k=k+1 end while收敛判据是上下界的相对间隙小于阈值(工程上常取1%或0.1%)。实测下来,典型的24时段微电网模型,C&CG一般3-7次迭代就能收敛,求解时间几十秒到几分钟,完全满足日前调度的需求。
5. 算例对比:鲁棒方案比确定性方案贵了多少,值不值
5.1 算例参数设定
为了验证两阶段鲁棒优化的实际效果,我用一个典型微电网模型做了三组对比实验:确定性优化、盒式鲁棒优化(预算Γ=24)、预算鲁棒优化(Γ=8)。
微电网参数:光伏500kW,储能200kW/800kWh,最大负荷400kW,联络线功率上限300kW,分时电价如之前所述。光伏预测曲线取典型晴天的出力曲线,实际场景设定为上午10:00-14:00光伏出力比预测低20%-35%,下午16:00-17:00负荷比预测高10%。
5.2 三组方案的成本与运行特征对比
三组方案的日前计划总成本和实际运行成本如下:
确定性方案的日前计划成本最低,约3680元/天。但在实际波动场景下,由于需要在峰时高价时段从电网紧急购电,实际运行成本飙到了4125元/天,超支445元。
盒式鲁棒方案(Γ=24)的日前计划成本高达4310元/天,比确定性方案高了17%。但在最坏场景下实际运行成本为4360元/天,超支仅50元。代价是储能全天都保持较高的SOC水平,日常运行中"时刻准备着",在很多并不恶劣的场景下也维持了较高的备用容量,确实有些浪费。
预算鲁棒方案(Γ=8)的日前计划成本是3895元/天,只比确定性方案高5.8%。实际最坏场景下运行成本4010元/天,超支115元。相比确定性方案,多花215元换来了最坏场景下的成本保障;相比盒式方案,省了415元的日常预算成本。这个中间档位在实际工程中接受度最高。
5.3 从成本对比看鲁棒方案的工程价值
三组数据说明几个问题。第一,确定性方案在预测准确时确实成本最低,但它把所有希望押在预测精度上,一旦天气变脸,成本失控的风险完全暴露。第二,盒式鲁棒方案的保障性最强,但经济性太差,适合电网末端、无法从大电网快速购电的孤岛型微网。第三,带预算约束的鲁棒方案性价比最优,它通过限制最坏场景的数量,避免了"所有参数同时极端化"的过度保守,保留了大部分鲁棒性,同时成本增幅控制在可接受范围。
从储能SOC曲线也能看出差异:确定性方案中储能在预测光伏出力高的时段几乎不充电,而预算鲁棒方案会给储能预留更多充电空间,这样在光伏实际出力下降时,储能释放的电量能部分弥补缺口,减少高价时段购电。
6. 和滚动时域/MPC结合的实际路径
6.1 日前鲁棒优化+日内滚动修正的两层架构
单靠两阶段鲁棒优化解决不了所有问题,因为不确定性集合是事先定义的,如果实际天气情况远偏离集合边界,鲁棒方案也无法兜底。工程上更成熟的架构是多层时间尺度协同调度:日前层用两阶段鲁棒优化定基调,日内层用模型预测控制做滚动修正。
日前层以1小时(或15分钟)为分辨率,基于预测信息和不确定性集合生成各时段的基础调度计划。日内层以5-15分钟为滚动窗口,基于最新实测数据(光伏实际出力、负荷实时值)在日前计划的基础上做有限时域优化,不断刷新下一控制周期的决策。
6.2 MPC层为什么需要鲁棒方案做基准
MPC滚动优化本身也能处理不确定性,但它的视野有限——只能看到未来几个时段的预测,无法统筹全天的能量平衡。如果只用MPC而没有日前计划的约束,储能可能在上午就把电放光了,下午光伏出力骤降时无电可用。
所以日内MPC的优化目标里,除了跟踪负荷和最小化购电成本,还要加入对日前计划偏离的惩罚项。这样做的好处是:MPC有"短期视野"的灵活性,能快速响应不确定性的实时变化;而鲁棒日前计划提供"全局视野"的约束,避免系统在局部时刻做短视的决策。
6.3 滚动时域实施中的时间窗口设计
在实际项目中,滚动时域窗口长度的选择很关键。窗口太短(比如只滚动1-2小时),储能跨时段的平移能力发挥不出来;窗口太长(比如覆盖全天的24小时),计算量上去了,而且远期预测误差大,滚动修正的意义就减弱了。
我常用的配置是:MPC控制周期15分钟,预测时域4小时(16个控制步长),每个周期重新求解一次优化问题。这样的计算量在普通工控机上单次求解时间不超过2秒,满足实时性要求。
需要注意的是,滚动时域频繁求解对求解器的稳定性提出了更高要求。我遇到过不少次MPC求解在某些边界条件下出现不可行的情况,解决方案是在优化目标中增加松弛变量,并设置较高的罚系数,保证任何情况下都能返回一个可行的次优解。
7. 实际部署的几个坑与调试心得
7.1 不确定性集合的参数标定:Γ不是拍脑袋定的
预算参数Γ直接决定了鲁棒方案的保守程度,但我见过太多人随便填一个值就跑了。Γ应该基于历史数据的统计来确定:统计过去一年光伏出力在各时段的预测误差,计算不同Γ取值下"实际场景超出不确定性集合"的概率,选择能够覆盖90%-95%历史场景的Γ值。这样既能保证鲁棒性在可接受水平,又不会因为过度保守让成本不可接受。
7.2 对偶化处理中的大M值陷阱
子问题线性化时涉及大M法,M值的选取有讲究。M太小,会截断可行域,导致子问题求出的最坏场景不真实;M太大,会让松弛后的线性规划数值不稳定,求解精度下降。
经验做法是:先用模型的物理量纲估算M的上界。比如储能最大出力200kW、电价最高1.2元/kWh、调度周期1小时,那么单个时段储能成本的上限就是240元,M取1000就充足了。对每个非线性项单独确定M值,而不是统一用一个很大的数,能显著提升求解稳定性。
7.3 计算时间与求解精度的平衡
C&CG的收敛速度跟不确定性变量的维度关系很大。微电网模型如果有24个时段、每个时段有光伏和负荷两个不确定参数,子问题的规模就相当可观。加上大M线性化引入的辅助变量,求解时间可能膨胀到几分钟。
我踩过的一个坑是在子问题求解中直接启用求解器的默认参数,结果最坏场景求解时间忽高忽低,迭代次数也不稳定。后来手动设置了求解器的MIP gap(比如0.1%)、关闭了不必要的预求解,并给子问题设置了时间上限(比如30秒),整体求解时间从10分钟级降到了1分钟级。
7.4 与EMS系统对接时的数据接口设计
最后说一个容易忽略的工程问题:鲁棒优化模块不是孤立运行的,它需要和微电网的能量管理系统(EMS)对接。EMS需要把实时运行数据(光伏实际出力、储能SOC、负荷实测值)传给优化模块,优化模块计算完再把控制指令下发。
这里最容易出问题的是数据时标不一致——EMS上报的数据可能滞后几秒,优化模块基于旧数据算出的指令在实时环境下可能不适用。建议在接口设计中增加数据有效性校验:如果某路遥测数据超时未更新,优化模块自动切换为基于最近一次有效数据的保守策略,宁可控制效果差一点,也不能用错误数据算出危险指令。
两阶段鲁棒优化在微电网经济调度中的价值,归根结底一句话:它让你在不确定的世界里做一个有底线的决策者。你不会总做出最便宜的决定,但你知道最坏的情况下你会花多少钱、会怎样应对。对于把供电可靠性和运行成本看得同样重要的微电网运营者来说,这种"心中有数"的价值,远远超过了那百分之几的鲁棒溢价。如果你正在做微电网调度系统,建议先从带预算约束的鲁棒模型入手,配合日内MPC滚动修正,跑通之后再考虑更复杂的不确定性集合和多时间尺度协同,这个路径目前看是最稳妥的。