“计及碳排放交易及多种需求响应的微网/虚拟电厂日前优化调度”这个题目,我这两年见过太多次了,本科毕设、硕士小论文、电网项目复现,几乎每个做园区微网和虚拟电厂的人都会撞上它。大部分请教我的同学其实卡在同一个地方:模型到底怎么搭、碳排放交易怎么和调度耦合进去、需求响应建模建得不像回事、Matlab里写了半天约束结果求解器报 infeasible。
这篇我就按自己的复现经验,从模型拆解讲到Yalmip代码实现,再讲坑,尽量让你看完能直接对着改出自己的算例。无论你是刚入门还是已经有一定基础,只要是围绕微网/虚拟电厂做日前优化仿真的人,这篇文章都值得存一下。
1. 先从“调度问题”本身说起
1.1 微网/虚拟电厂为什么非要“日前”优化
所谓日前调度,就是提前一天把未来24小时(或者96个15分钟时段)的发电计划、储能充放电计划、购售电计划、负荷调整计划全部定下来。做计划的前提是未来24小时的负荷、光伏、风电都有预测曲线,然后在这个预测基础上,通过优化计算,找到一个“明天怎么运行最省钱”的方案。
微网最大的特点是麻雀虽小五脏俱全,光伏、风机、燃气轮机、储能、负荷,可能还连着上级配电网。要是每台设备都自己管自己,不考虑协调,结果常常是白天光伏大发时电送不出去,晚高峰又高价从网购电,储能也永远充不满放不干净。日前调度的价值,就是把所有设备当成一个整体,让燃气轮机知道什么时候出力、让储能知道什么时候该充、什么时候该放,让可调负荷主动避开高价时段,最终让系统总运行成本最低。
虚拟电厂和微网的区别在于,它不强求物理上的孤岛或并网点,更像一个聚合商,把分散的屋顶光伏、充电桩、空调、储能聚合起来参与电网互动。不过落到日前优化调度这一步,数学上两者核心几乎一样,都是对可控资源做时序协调,只是虚拟电厂会更强调和外部电力市场交易互动。所以你看到很多论文标题直接写成“微网/虚拟电厂”,本质原因是模型能共用。
1.2 碳排放交易和需求响应为什么要同时考虑
传统经济调度只看发电成本,哪个机组便宜就让哪个多发,碳排多少不太关心。但现在研究趋势变了,碳排放是有价的,排多了要去市场买配额,排少了可以卖配额赚钱,这个价格信号会直接影响机组的调度顺序。把碳交易成本写进目标函数以后,燃气轮机这种相对清洁的机组可能要代替柴油机多发电,因为柴油机虽然燃料成本看着不高,但碳排放强度高,把碳成本一算进去综合代价可能反而更高。
需求响应是另一条降本路径。用户负荷不是铁板一块,有的洗衣机、热水器可以把用电时间从峰时挪到谷时,有的空调可以在高峰期降低一点功率换取补偿。这些可控负荷等于给调度员多了一组“旋钮”,可以在电价高、发电紧张时把负荷压下来,在夜里面电便宜时把负荷填上去。
把碳交易和需求响应放进同一个日前调度模型,本质上就是一个多资源协同优化问题:左边是各种分布式电源和外部电网作为供给端,右边是包含可调负荷和储能在内的广义需求端,中间再用一台“环境计价器”(碳市场)把高碳机组的代价显性化。这个框架能解释当前微网运行中的很多实际决策,这也是这个课题被大量论文采用的原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 模型怎么搭,数学问题是关键
2.1 日运行目标成本到底有哪些项
先给出我通常采用的统一目标函数,基本能覆盖大多数需求:
[
\min \sum_{t=1}^{24}
\left[
C_{MT}(P_{MT,t}) + C_{DE}(P_{DE,t}) + c_{om}^{MT}P_{MT,t} + c_{om}^{DE}P_{DE,t}
\right.
]
[
\quad\quad + c_{buy,t}P_{buy,t} - c_{sell,t}P_{sell,t}
]
[
\quad\quad + C_{start,MT} \cdot u_{start,t} + c_{cut}P_{cut,t} + \lambda_{curt}P_{curt,t}
\left.
\right] + C_{carbon}(E_{total}, E_{quota})
]
其中:
- (C_{MT}) 和 (C_{DE}) 是燃气轮机、柴油发电机组的燃料成本,工程上常用二次函数 (aP^2+bP+c),在Matlab里需要处理为分段线性或直接交给MIQP求解器;
- (c_{om}) 是单位运维成本,一般很小,但体现“放电也要磨损电池”;
- (c_{buy,t}P_{buy,t}) 是向大网购电成本,(c_{sell,t}P_{sell,t}) 是向大网售电收益;
- (C_{start,MT}) 是机组启动成本,要不要加取决于你算例里有没有考虑启停状态;
- (c_{cut}P_{cut,t}) 是激励型需求响应补偿,用户同意削减负荷,你要按合同单价付钱;
- (\lambda_{curt}P_{curt,t}) 是弃风弃光惩罚项,光伏风电预测出力用不完时弃掉的代价,设得比购电价高一些,优化就会尽量少弃;
- (C_{carbon}) 是整个24小时碳排放交易成本函数,我会在第2.4节专门讲。
目标函数不唯一,比如有的文章还加了储能老化成本、可转移负荷的舒适度惩罚等,但核心骨架基本是这些。第一版模型建议先不要贪多,把电源成本、购售电、储能、DR、碳交易跑通,后面再往里面加各种花活。
2.2 需求响应要分类型建模,不能一锅炖
标题里“多种需求响应”怎么落地是我被问最多的问题。我看到很多复现代码特别粗暴,直接写一个 (P_{DR,t}),说这个就是需求响应后的负荷,然后约束 (0 \le P_{DR,t} \le P_{max}),这写出来基本等于什么都没约束,求解器想怎么拧就怎么拧。
更接近论文和工程实际的做法,是把DR分成三类,分别建模:
第一类是可转移负荷(shiftable load),它总用电量不变,只是用电时间可平移,典型如电动车充电、洗衣机、提前制冰的蓄冷空调。建模最简单清晰的方案是引入二维转移矩阵 (M_{i,j}),表示原计划在 (i) 时段开启、实际被挪到 (j) 时段的电量。约束条件包括:
[
\sum_{j} M_{i,j} = L_{shift,i}^{base}, \quad \forall i
]
保证每个时段的原始可转移电量都被安排出去,总量守恒。同时限制转移窗口,比如只能前后移3小时,(j \notin [i-3, i+3]) 时 (M_{i,j}=0)。调度后某时段实际承接的可转移负荷是:
[
L_{shift,j}^{after} = \sum_{i} M_{i,j}
]
也就是说,到了傍晚大家把洗衣机挪到凌晨,凌晨的负荷数就会增加,这部分增加的量正是白天转移过来的量。这个二维向量在处理凌晨/白天转移时很直观,而且转移窗口能防止“把下午的负荷挪到半夜两点”这种不合理结果。
第二类是可削减负荷(curtailable lo
