☰
碳捕集与电转气协同的虚拟电厂优化调度建模与MATLAB实现
2026/10/1 21:31:18 网站建设 项目流程

做电力系统优化调度这块的朋友,这两年应该没少听到虚拟电厂、碳捕集、电转气这些词。我最近正好完整跑通了一套MATLAB模型:计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度。内容说直接一点,就是把垃圾焚烧电厂、碳捕集装置、电转气设备,连同风电、光伏、储能一起聚合到一个虚拟电厂框架里,用一个优化调度模型去决定未来24小时每个单元怎么出力、怎么捕碳、怎么产气,目标是在满足负荷的同时做到运行成本最低、碳排放最少。

这个模型我在实际搭建中最大的感受是:它卡在了学术和工程的交界处。学术上,碳捕集和电转气之间的耦合关系不是简单叠加,而是存在真实的物料循环——碳捕集从烟气中分离CO2,电转气恰好需要CO2做甲烷化原料;工程上,垃圾焚烧电厂是真实存在的城市基础设施,它的运行不像火电那样可以随意启停,处理城市垃圾是硬任务。这套模型对这两点都有体现。适合正在找方向的电力系统研究生,也适合做能源互联网规划、综合能源系统评估的工程师参考。下面我把整个模型的设计思路、数学建模、MATLAB实现步骤和踩过的坑完整梳理一遍,文章比较长,但每一步都可以直接对着写代码。

1. 项目背景与整体思路拆解

1.1 为什么要把碳捕集和垃圾焚烧放进虚拟电厂

提到虚拟电厂,大多数人的第一反应是聚合分布式光伏、风电、储能和小型燃气机组,通过协调控制参与电网调度。但传统的虚拟电厂框架有一个明显盲区:它把电力管理得很好,却没有处理碳排放。现在碳配额和碳交易已经实实在在落到企业头上,一个聚合了大量电源的虚拟电厂如果不考虑碳流,调度结果可能在碳成本上是严重失真的。

垃圾焚烧电厂是一个非常特殊的电源。它不能像火电一样随时压负荷或者停机,因为城市每天产生的垃圾必须得到处理,焚烧炉需要维持稳定的燃烧工况。这就意味着它在虚拟电厂里是一个"准基础负荷"性质的电源,有最低技术出力约束。另一个问题是,垃圾焚烧虽然被归类为可再生能源发电,但其烟气中仍然含有大量CO2,浓度大概在8%到12%之间,比煤电烟气低,但同样需要纳入碳排放核算。如果我们在这条烟气线上加装碳捕集装置,捕集的CO2不直接封存,而是送到电转气单元做甲烷化原料,就形成了一条碳循环利用链路。

这就是这个项目的核心动机:把垃圾焚烧电厂的烟气CO2看作是资源而不是废物,让虚拟电厂内部同时存在电力流、碳流和气流的耦合。传统虚拟电厂的优化目标是最小化购电成本和运行成本,这个模型还要额外处理碳交易成本、捕集能耗、产气收益之间的权衡。

1.2 电转气在系统里的角色:把弃电变成气,把CO2变成燃气

电转气(Power to Gas,P2G)的技术链条可以分为两步:第一步用电力电解水制氢,第二步让氢气和二氧化碳发生甲烷化反应,生成合成天然气。合成天然气可以直接注入天然气管道,也可以用储气罐存起来供后续使用。这个链条里有两个关键输入:一是电力,二是CO2,而这两样东西在虚拟电厂里恰好都可能是"冗余资源"。

电力冗余来自风电和光伏的出力波动。凌晨风电大发、午间光伏满发时,如果电网消纳不了,就只能弃风弃光。与其直接丢弃,不如把这些低成本电力喂给P2G,转化成气存储起来,相当于一种长时间尺度的储能手段。CO2冗余来自碳捕集装置。捕集下来的CO2如果全部封存,需要额外的压缩和输送成本,但直接作为P2G原料,则变成了一种有价值的碳资源。这个一进一出的循环,就是"电转气协同"的深层含义——用弃电把CO2变成了天然气,同时降低了系统的碳排放水平和弃风弃光率。

实际建模中,P2G和碳捕集并不是两个独立的设备,它们之间存在硬耦合约束。单位时间内P2G甲烷化消耗的CO2流量,直接来自于碳捕集单元的产物流量(如果有中间储罐,则可以允许一定缓冲),这个耦合关系必须写进优化模型的约束条件中。

1.3 完整的系统拓扑与调度框架

这个模型所描述的虚拟电厂内部,我建议按"源-网-荷-储-碳"五个维度来理解:

  • 源侧:垃圾焚烧发电机组、风电场、光伏电站,必要时可以加一台小型燃气轮机作为灵活调节电源。
  • 存储侧:电储能(锂电池)、气储能(储气罐),分别处理电力和天然气的时空平移。
  • 荷侧:外部电负荷由虚拟电厂承担,内部负荷包括碳捕集装置的电耗和P2G的电解电耗。
  • 碳侧:烟气中的CO2经过碳捕集装置分离,一部分进入P2G甲烷化反应,剩余部分可考虑封存或外售。
  • 网络侧:虚拟电厂与外部电网之间存在购电和售电交互,天然气与外网之间也存在注入或提取。

调度框架采用日前调度的模式,时间分辨率为1小时,优化周期24小时。决策变量包括各机组的出力、储能充放电功率、碳捕集率、P2G产气功率、储气罐状态以及与外网的购售电量。模型类型是混合整数线性规划问题,用MATLAB的YALMIP工具箱建模,Cplex或Gurobi求解。这个框架的好处是通用性强,后续想加入需求响应、旋转备用约束,都只需要往约束集合里加东西。

2. 核心设备建模:每个单元的数学表达和物理逻辑

2.1 垃圾焚烧机组:有"处理任务"约束的特殊电源

垃圾焚烧机组的建模与普通燃煤机组最大的区别在于:它有一个"垃圾处理量"的刚性约束。城市每天产生的垃圾量是相对稳定的,焚烧电厂作为处理终端,必须接收并处理这部分垃圾,不能因为电价低就減少焚烧量。体现在模型里,我一般用如下方式处理。

设垃圾进料量为 G(t)(单位:吨/小时),发电功率 P_waste(t)(单位:MW)与进料量之间近似呈线性关系:

P_waste(t) = η_waste × G(t) × LHV

其中 LHV 是垃圾的低位发热值,不同城市差别很大,一般取 6~10 MJ/kg,η_waste 是焚烧发电的综合效率,约 0.20~0.25。实际建模中,我习惯直接定义一个"可调出力区间",这比通过进料量间接推导更直观:垃圾焚烧机组的最小技术出力通常为额定容量的50%左右,最大出力为额定容量。这个最小出力约束非常关键,如果忽略它,优化算法很可能会在夜间低负荷时段把焚烧出力压到很低甚至停机,这在工程上是完全不现实的,因为焚烧炉不能像燃气轮机那样频繁启停。

烟气中CO2的排放量也由进料量决定。垃圾中的化石碳比例大约是40%左右,也就是总碳中的一部分来自塑料、橡胶等化石原料,这部分碳排放需要计入碳交易。单位垃圾焚烧产生的CO2排放因子大致在0.8~1.2 tCO2/吨垃圾范围内。这个排放量经过碳捕集装置时,并不是全部被捕集,而是由捕集率变量控制。

2.2 碳捕集系统:能耗和捕集率怎么权衡

碳捕集装置我采用燃烧后化学吸收法的简化模型,吸收剂选用MEA(单乙醇胺)。它的原理说白了就是让烟气通过吸收塔,CO2被胺溶液吸收,然后富液进入再生塔加热释放高浓度CO2,溶剂循环使用。这个过程需要消耗大量热能和一部分电能,在优化模型里不能只写一个捕集量变量,必须把能耗同时写进去。

碳捕集模型的核心变量是捕集率 α(t),范围取0到0.9,表示t时段捕集的CO2量占烟气总CO2量的比例。捕集能耗可以用一个线性表达式近似:

P_ccs(t) = λ_ccs × M_co2_captured(t)

其中 M_co2_captured(t) 是捕集到的CO2质量流量(t/h),λ_ccs 是单位捕集能耗(MWh/tCO2),典型值在0.2~0.35。这个参数看似简单,但它是整个模型里最敏感的参数之一——捕集能耗太高时,优化算法会倾向于把捕集率降到最低,因为省下来的碳交易成本抵不过多消耗的电费。

捕集下来的CO2去向如何表示?我引入一个虚拟的CO2缓冲环节:捕集产出可以直接送往P2G装置,也可以存储在CO2储罐中留待后续使用,还可以外送封存(外送封存的成本单独计)。在建模中,是否建立CO2储罐是一个取舍。如果时间粒度是1小时,且P2G装置就在同一个园区内,加上储罐模型会更贴近实际,否则碳捕集与P2G必须实时匹配,容易导致某些时段捕集量富余而另一些时段不足。

2.3 电转气单元:效率链条与CO2消耗量

电转气装置内部包含电解槽和甲烷化反应器两个主要环节。电解槽消耗电能和水,产出氢气和氧气;氢气和CO2在甲烷化反应器中通过Sabatier反应生成甲烷和水。在调度模型里,我通常把这两个环节合并为一个等效单元,只保留输入电功率、输出天然气功率和CO2消耗量三个外部接口,因为中间氢气的缓冲存储会引入大量非线性关系和非凸问题,对MILP模型来说是得不偿失。

P2G单元整体效率 η_p2g 大约在0.5到0.65之间,等于电解效率(0.6~0.75)乘以甲烷化效率(0.75~0.85)。输入电功率 P_p2g(t) 与输出天然气功率 P_gas_out(t) 的关系是:

P_gas_out(t) = η_p2g × P_p2g(t)

消耗的CO2质量流量 M_co2_p2g(t) 则由甲烷化反应的热化学计量关系决定。这个换算关系在很多新手代码里容易出错。按反应式 CO2 + 4H2 → CH4 + 2H2O,每生成1 mol甲烷消耗1 mol CO2。以单位能量(MWh天然气)来计算,甲烷的低位热值约9.7 kWh/Nm³,每Nm³甲烷约0.714 kg,所以产生1 MWh天然气大约需要 1000/9.7 × 0.714 ≈ 73.6 kg的甲烷,对应的CO2消耗量约 73.6 × 44/16 ≈ 202 kg。也就是每输出1 MWh天然气,约需要0.2吨CO2。这个0.2 tCO2/MWh的系数可以直接写进模型,非常实用。

P2G还需要一个最小启动功率约束,因为电解槽不是从0功率就能稳定运行的,一般存在10%~20%的最小技术出力。同时,P2G产出的天然气需要进入储气罐或外送管道,储气罐容量约束和初末容量相等约束是保证调度结果可落地的重要边界。

2.4 风电、光伏与电储能:虚拟电厂的基础成员

风电和光伏在日前调度模型中的处理相对成熟。预测出力作为出力上限,实际出力在0到预测值之间连续可调,弃风弃光量等于预测值减去实际出力,并在目标函数中用弃风弃光惩罚系数(或负收益)来尽量避免削减。这里的逻辑是:如果不加惩罚,优化算法没有任何动机去消纳风电,因为风电的边际成本很低但不是零,而负荷需求完全可以由其他电源满足。一个合理的惩罚价格取100元/MWh以上,超过煤电边际成本即可。

电储能的建模使用标准SOC递推公式:

SOC(t+1) = SOC(t) + η_ch × P_ch(t) × Δt - P_disch(t) × Δt / η_disch

同时要限制充放电功率上限、SOC上下限,以及避免同时充放电的0-1变量约束。在虚拟电厂模型里,储能的位置有些微妙:它既要平抑风电光伏的波动,又要配合P2G和碳捕集这两个"耗电大户"的用电节奏。我在调试中发现,如果储能容量设置得太大,P2G在谷时的运行会被储能挤占,两者产生功能重叠;容量太小则起不到削峰填谷作用。这个平衡需要通过算例仿真去试探,没有一个放之四海皆准的值。

3. 优化调度模型:目标函数、约束条件与求解策略

3.1 目标函数设计:成本构成与碳交易机制的数学化

这个模型的目标函数是一个多成本项的线性叠加,我用YALMIP表达时大致写成:

C_total = C_grid + C_fuel + C_om + C_carbon + C_curtail - R_gas - R_tax

逐项拆开来看。

C_grid 是与外网交换电力的成本。虚拟电厂可以从电网购电,也可以向电网售电,但同一时段不能既买又卖,需要引入一个0-1变量区分购售状态。在分时电价下,夜间低价购电给P2G和储能充电、午间光伏大发时段售电,是模型最典型的优化行为。

C_fuel 是垃圾焚烧的燃料处理成本,这个可以理解为城市生活垃圾处理的单位成本,有些项目里表现为垃圾处理补贴收入,如果研究对象是焚烧电厂运营方,那么这个值是负的(收入)。具体正负号取决于研究视角,但建议在论文中说明清楚。

C_carbon 是碳交易成本。碳排放配额机制下,虚拟电厂实际碳排放量超过免费配额时需要购买碳配额,反之可以出售盈余配额。这里的关键公式是净排放 = 垃圾焚烧总排放 - 碳捕集量。注意:捕集下来的CO2即使送入P2G最后变成甲烷燃烧后又变为CO2,在核算边界内仍然应该计算为减排量,因为甲烷外售给下游用户后,排放责任转移到了下游。模型里对这一块的处理直接决定了调度结果——如果捕集CO2不抵扣碳排放配额,那碳捕集装置的减排激励就完全消失了。

R_gas 是P2G产出天然气的销售收入,价格参考当地天然气门站价。R_tax 可以理解为碳税减免或者绿电溢价等政策性收益,看实际场景是否适用。

3.2 关键约束的完整清单

除了各个设备内部约束外,模型需要一组系统级约束把单元耦合在一起。我按重要性列出:

  • 电力平衡约束:风电出力 + 光伏出力 + 垃圾焚烧出力 + 储能放电 + 购电量 = 负荷 + P2G电耗 + 碳捕集电耗 + 储能充电 + 售电量。这个约束是模型的中枢,所有电源和负荷都在这里交汇。
  • 垃圾处理量约束:一天内垃圾处理总量不得低于城市最低需求,同时不得高于焚烧厂接收能力。
  • 碳排放与碳捕集耦合约束:碳捕集量 ≤ 烟气CO2总排放量 × 最大捕集率,P2G消耗的CO2 ≤ 捕集产出 + 储罐释放,CO2储罐的容量递推方程与储能SOC类似。
  • 天然气平衡约束:P2G产气量 + 储气罐放气量 = 外售天然气量 + 储气罐充气量,外售量受管道输送能力上限约束。
  • 爬坡约束:垃圾焚烧机组相邻时段出力变化幅度限制,一般取额定容量的5%~10%每小时。

约束数量决定模型规模。以24个时段为例,连续变量大约150~200个,0-1变量大约40~50个,约束方程大约300~400条,对Cplex来说属于小规模MILP,通常几秒到一分钟内可求出全局最优解。

3.3 求解方案:为什么选MILP而非启发式

这个模型在数学上属于混合整数线性规划,选择MILP求解路线而不是遗传算法或粒子群等启发式算法,主要原因是可复现性和全局最优性。启发式算法跑一次一个结果,连自己都很难复现;而MILP求解器给出的是带最优性间隙证明的解,审稿人和工程审查都认这套逻辑。另外,线性模型的灵敏度分析很直观,碳价从50元/吨涨到100元/吨时调度策略如何变化,只需要重新求解几次,不需要重新推导模型。

MATLAB下我推荐用YALMIP建模,求解器选择Cplex或Gurobi。YALMIP的优势是语法与数学表达式几乎一一对应,变量、约束、目标函数的表达非常自然,后期改模型结构也快。有一个细节要注意:YALMIP默认适合连续线性规划,对于MILP要确保求解器支持二进制变量,并在optimize()之前把求解器设置为cplex或gurobi,不然默认求解器可能很慢甚至报错。

4. 代码架构与实操复现指南

4.1 MATLAB代码主框架与模块划分

整套代码我建议按四个模块组织,方便后期调试和扩展。第一个模块是数据输入,定义所有设备参数和预测曲线,包括24小时负荷预测、风电光伏预测出力、分时电价、垃圾进料量、碳价等,统一放在一个结构体或者Excel读取脚本里。第二个模块是变量定义,用YALMIP的sdpvar定义连续变量,binvar定义二进制变量,变量命名要有规则,我一般用P_wind_t、P_waste_t、alpha_t这类带下标的命名方式,这样检查约束时能一眼看出变量身份。

第三个模块是约束组装。我的经验是一个约束一个cell元素,最后统一合并,比如constraints = [constraints, P_wind(t) <= P_wind_forecast(t)]这种写法。不要把所有约束一次性堆在一个括号里,出了问题非常难定位。第四个模块是求解与结果输出,调用optimize()后,用value()批量提取变量结果,再用bar函数或stairs函数绘制各机组出力堆叠图、SOC曲线、碳流量曲线。

4.2 关键参数设置参考表

参数初始化是复现的第一步,如果你手头没有实际项目数据,我给出一个典型算例的参数表,这些值来自公开文献和项目可研报告的常见取值范围,可以直接作为初始设定:

参数数值说明
垃圾焚烧额定容量30 MW处理能力约1500吨/天
垃圾焚烧最小出力15 MW保证炉膛稳定燃烧
垃圾焚烧爬坡率3 MW/h额定容量的10%
风电装机50 MW典型日出力按预测曲线
光伏装机30 MW典型日出力按预测曲线
储能容量10 MW / 20 MWh充放电效率95%
碳捕集最大捕集率0.9技术上限
碳捕集单位能耗0.25 MWh/tCO2含再生能耗折算
P2G额定功率5 MW电解槽容量
P2G整体效率0.58电解0.7×甲烷化0.83
CO2储罐容量100 t缓冲能力
碳价80 元/t可做灵敏度分析
天然气管网外售价2.5 元/m³折算到功率单位约250元/MWh

这些参数要注意单位统一。功率用MW,电量用MWh,时间步长1小时,CO2流量用吨/小时,价格统一用元。容易出错的地方在P2G的CO2消耗量——前面推导过约0.2吨/MWh产气,很多时候新人容易随手填一个0.5甚至2,导致模型始终不可行。

4.3 结果分析怎么组织:场景对比与灵敏度分析

模型跑完之后,分析结果比求解本身更花时间。我建议至少设置三个对比场景:基准场景(不含碳捕集和P2G的普通虚拟电厂)、含碳捕集但不含P2G、含碳捕集且含P2G的完整系统。通过这三个场景能清晰拆出碳捕集和P2G各自的贡献。

结果对比表可以这样设计:

指标基准场景含碳捕集含CCS+P2G
总运行成本(万元)28.624.121.8
碳排放总量(吨)352138120
弃风弃光率(%)12.38.63.2
购电量(MWh)1129687
P2G产气量(MWh)--31

这张表出来之后,可以直接支撑一个核心结论:碳捕集降低了碳排放但减少了系统净收益,P2G的加入则把弃风和低碳CO2转化成了天然气收益,使得经济性和低碳性同时改善。至于碳价灵敏度,我习惯取50、80、120、200元/吨四个点,观察捕集率和P2G产气量的阶梯变化,这往往是审稿人比较看重的分析内容。

5. 实操中的常见问题与排查实录

5.1 模型不可行的几类原因与诊断方法

模型报infeasible是调试期最常遇到的情况。我遇到过的不可行原因主要有三类。第一类是垃圾焚烧最小出力与负荷之间的矛盾:夜间负荷低,风电又大发,P2G和储能容量不够吸收多余电力,功率平衡找不到解。这属于系统盈余刚性过剩,解决方法是给弃风弃光留足够的松弛变量空间,而不是强制完全消纳。

第二类是碳捕集与P2G之间的物料不匹配。如果P2G额定功率太大,而垃圾焚烧烟气CO2产量不足,甲烷化反应所需的CO2流量远超捕集量,模型就永远找不到物料平衡解。这个问题的诊断思路是手动核算一天的CO2总供给量和总需求量,看量级是否匹配。

第三类是储能初末SOC约束写错方向。比如要求SOC(24)等于SOC(0),但中间每时段储能的充放写成了只充不放,导致能量不断累积,最后无法回到初值。这类问题可以通过查看各时段SOC曲线来定位,如果SOC一路爬升到上限贴死,那大概率就是放电项符号错了。

5.2 求解时间过长或收敛性差

MILP求解时间爆炸通常不是因为连续变量多,而是0-1变量组合太多。购售电状态、储能充放电状态、P2G启停状态,每个24维的二进制变量数组都会带来分支指数增长。我的经验有几个有效手段。

第一,能不用二进制就不用二进制。例如储能充放电互斥约束,如果充放电效率不对称且成本函数单调,很多时候可以不加互斥0-1变量,因为同时充放电在数学上不会是最优解,实际跑出来也不会出现。第二,给求解器设置合适的MIP gap,例如默认0.01%,实际工程取0.1%~1%就足够,求解时间能缩短一个数量级。第三,提供一个合理的初始解,先用连续松弛模型求一次,把结果作为MIP的mipstart传给求解器,Cplex从这个起点开始搜索会快很多。

5.3 碳流与气流耦合环节的数值陷阱

这个模型比普通虚拟电厂模型多了一条碳流链路,数值处理上陷阱不少。最典型的坑是单位混乱。碳捕集的年产量如果是吨,优化模型里的步长是小时,换算成吨/小时时要除以8760再考虑容量因子。P2G的CO2消耗量也一样,0.2吨/MWh是能量单位的换算系数,但如果模型里产气量用m³/h,还需要额外乘一个密度和热值系数。我建议在代码顶部专门写一个单位换算区,把所有系数集中定义并加注释,避免在约束里到处写魔法数字。

另一个陷阱是CO2储罐的初末容量约束。如果不加储罐,捕集和P2G必须实时匹配,意味着夜间弃电充足时P2G全力运行,但因为白天捕集量大夜间捕集量小,夜间可能CO2不够用。加了储罐之后,模型会自动安排白天多捕集存起来、夜间放出来甲烷化。但储罐容量参数过大时,优化结果可能出现前期大量捕集囤CO2、最后几个时段集中产气的"作弊"行为,虽然数学上可行,但工程上不合理。处理办法就是设置合理的储罐容量上限,并且约束储气量在整个周期内相对平滑。

6. 一点经验体会

整套模型跑下来,最深的体会是:这个课题的本质不是"把两个设备塞进虚拟电厂",而是在处理电、碳、气三种能量形态之间的时间错配。风电光伏的富余电力出现在凌晨和午间,垃圾焚烧烟气的CO2排放是全天持续性的,天然气的用能需求可能集中在早晚高峰,要让三者配对,储电、储气、储CO2缺一不可。

我个人的建议是,如果自己从头复现这个模型,千万不要一上来就搭完整系统。先跑一个只有垃圾焚烧加风电加碳捕集的简化版本,确认碳排放约束和捕集能耗的关系走通了;再加入P2G,单独验证电转气的物料平衡;最后才把储气罐和CO2储罐加进去组合成完整模型。这样每一步的调试成本都很低,出了问题也容易定位。最后再分享一个我做敏感性分析的小技巧:碳价和P2G效率是最值得扫的两个参数,碳价决定碳捕集的减排激励,P2G效率决定弃电转化天然气的经济性,把这两个变量的二维扫描结果画成等高线图,投论文时的说服力比单变量灵敏度大得多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询