去年在搭一个某区域综合能源系统仿真平台的时候,我盯着跑完的冬季日数据看了很久。电负荷高、热负荷也高,热电联供机组几乎满发;到了夜间风电上来,电负荷往下掉,可热负荷几乎没降,机组为了供热根本压不住发电,电网侧消纳不掉的风电只能白白丢掉。后来我把P2G和碳捕集设备一起放进热电联供综合能源系统优化调度模型里重新跑,弃风率下来了,碳排放也明显降了。这篇就把这个模型的耦合逻辑、数学化方法、求解细节和踩过的坑完整梳理一遍,给做综合能源优化调度的同行当个参考。
1. 从“越烧越亏”到“三网耦合”:模型要解决的现实痛点
1.1 “以热定电”为什么是弃风的第一推手
热电联供系统最核心的物理约束,就是“以热定电”。抽凝式机组的电出力不是一个固定值,它在一个由热出力决定的可行区间内变化,粗略可以写成:
P_chp_min(H) ≤ P_chp(t) ≤ P_chp_max(H)热出力H越高,允许的电出力下限就越高。冬季采暖期热负荷大,机组电出力的下限被抬到很高的位置,风电高发时段又多在夜间,两者叠加,弃风几乎是必然结果。
要打破这个局面,最常见的思路是加储热罐。白天多存热,晚上少发热,让电出力下限降下来。储热确实能解决部分消纳问题,但它的作用只停留在“热-电耦合”层面,碳排放几乎没有任何改变——机组该排多少碳还是多少碳。
所以当我看到“考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型”这个题目时,第一反应是:这已经不只是削峰填谷,而是直接尝试两条路一起走——把多余的电变成气存起来,把排出来的碳再抓回去。这才是真正把综合能源系统优化调度模型从“消纳工具”升级成“低碳工具”的思路。
1.2 碳捕集设备不是“挂个塔”那么简单
很多人对碳捕集的第一印象是烟囱旁加一座吸收塔,把烟气里的二氧化碳吸收掉。物理上确实是这样,但把碳捕集设备放进调度模型后就会发现,它本质上是一台“既耗热又耗电”的负荷,而不是独立于系统之外的环保附属品。
以目前最常用的燃烧后化学吸收法为例,烟气进入吸收塔,贫胺液吸收CO₂,富液进入再生塔,再沸器需要持续通入蒸汽才能把CO₂蒸出来。这个再生过程的热耗非常可观,文献里常见的区间是每捕集1吨CO₂大约消耗2.5~4GJ热能,外加一定的泵功电耗。折算下来,捕集过程会让机组净效率下降好几个百分点。
放到热电联供系统里,问题会更复杂:再沸器用的蒸汽通常从汽轮机中抽汽获得,抽汽多了,机组发电量下降;为了维持热负荷,系统可能又得让燃气锅炉顶上。结果是碳捕集装置本身确实捕了不少碳,但燃气锅炉额外又烧出一部分碳。如果不把这些能量流全部建模进去,模型算出来的“减排量”很可能是一笔糊涂账。
1.3 P2G给系统带来的第三条通路:电-氢-气-热
P2G(Power to Gas,电转气)走的是另一条路。它把富余电力通过电解水制氢,氢气可以直接储存,也可以进一步和二氧化碳发生甲烷化反应,合成天然气。在综合能源系统里,P2G相当于一个“吃电、产气”的可控负荷,把电力系统和天然气系统连接起来。
这里最显眼的一个交叉点是:甲烷化反应本身需要CO₂作为原料,而碳捕集设备恰好能提供高纯度CO₂。把P2G和碳捕集放进同一个优化调度模型后,系统的能流闭环就出来了:风电多的时候,电制气;制气需要碳,碳从烟气里抓;合成出来的天然气又可以被燃气锅炉或燃气轮机消耗,重新变成热和电。二氧化碳从“排放物”变成了“系统内的循环原料”。
所以这个模型的研究对象,不是一个简单的“锅炉+机组+塔”的拼盘,而是一个电、热、气、碳四条能量/物质流交织的网络。下面从耦合机理开始拆。
2. 组合逻辑:P2G与碳捕集在同一套调度框架里的耦合机理
2.1 富余风电怎么变成“零碳天然气”
P2G的建模可以从设备本身展开。完整的P2G链条通常分两段:电解槽把水电解成氢气和氧气,然后是甲烷化反应器让氢气和CO₂反应生成甲烷。也可以不甲烷化,直接把氢气储存或并网,但在“与碳捕集耦合”的场景里,甲烷化更常见,因为现有天然气系统可以直接消纳甲烷,基础设施改造成本低很多。
从调度视角看,P2G有几个关键参数:额定输入电功率、效率曲线、启停约束、最小技术出力。它的效率并不是常数,低负荷下效率会明显下降,所以模型里应该把“输入电功率→产气功率”的关系做分段线性化,而不是用一个固定转换系数拉到满。
还有一个容易被忽略的细节:电解槽的响应速度是分钟级的,甲烷化反应器则需要更稳定的运行状态,频繁启停会造成催化剂损耗甚至安全隐患。如果模型里只写单时刻功率平衡,优化器很可能会给出“每小时启停一次”的荒谬调度方案。这种场景必须施加最小连续运行时间约束或启停次数限制,让P2G不会变成一个被随便开关的玩具。
2.2 碳捕集的蒸汽来源是热-电-碳三者联动的关键
碳捕集装置接到热电联供机组的烟气侧之后,机组净输出特性会被“双向修正”:一方面抽汽用于再沸器,可供外供热负荷的蒸汽量减少;另一方面捕集系统本身有电耗,上网净出力要扣掉这部分。于是机组层面的约束不再是简单的二维电-热可行域,而是三维的电-热-捕碳量可行域:
P_chp_net(t) = P_chp_gross(t) - P_ccs_elec(t) Q_export(t) = Q_chp(t) - Q_reboiler(t)建模时一定要留意再沸器热耗的来源分配。如果热源全部来自汽轮机抽汽,捕集率提高的同时,外供热能力必然下降,电出力也跟着受影响。如果系统里配置了储热罐或电锅炉,调度器就可以选择在某些时段用电制热替代抽汽,让机组更多发电——这种“热源替代”是整套模型里最值得做灵敏度分析的地方。
另一个容易被漏掉的约束是CO₂的物质平衡。碳捕集装置捕下来的CO₂不是直接消失,要么被P2G甲烷化消耗掉,要么进入储液罐暂存,要么外运处理。如果模型里没有CO₂储液罐的容量约束和液位平衡,优化器会“凭空变出”或“凭空消失”CO₂,算出来的减排量就会失真。
2.3 时间尺度错配:为什么模型里必须要有储能缓冲
把这套系统放进小时级调度模型后,最难处理的往往不是容量配置,而是时间尺度错配。
风电出力变化快,但碳捕集装置和P2G的响应相对慢。电解槽从冷态到满载可能要几分钟到十几分钟,甲烷化反应器热惯性更大,碳捕集再生塔的压力和温度调整也不是说变就变。调度指令如果频繁波动,实际设备根本跟不住。
小时级模型本质上假设每个时段内部是稳态,但储热罐、储氢罐、储气罐的存在给了系统一个“缓冲垫”:风电突然增多,多余电力先电解制氢,氢气存在罐里;热波动由储热罐吸收;碳捕集下来的高浓度CO₂也先存进储液罐,等P2G需要时再释放。只有把这些储能环节全部纳入约束,调度结果才在物理上可执行。
因此模型里至少需要三类储能:储热罐、储氢罐(或储气罐)、CO₂储液罐,各自有容量上下限、充放速率约束和时段耦合的储量平衡约束。这会增加变量规模,但模型真实性会明显提升。
3. 模型数学化:目标函数与约束怎么搭才靠谱
3.1 目标函数:买煤、买气、买碳权与弃风惩罚的权重博弈
综合能源系统优化调度模型的目标函数一般是运行成本最小化,但“成本”的范围必须界定清楚。我的框架里包含这几块:
min C_total = C_fuel + C_om + C_co2 + C_curtail + C_startup - R_p2g其中 C_fuel 是购煤和购气成本,C_om 是设备运行维护成本,C_co2 是碳交易成本或碳税,C_curtail 是弃风弃光惩罚,C_startup 是机组和P2G的启停成本,R_p2g 是P2G产出的天然气按热值折算的收益。
这套目标函数里最容易出问题的,是碳交易成本和弃风惩罚的权重。如果碳价给得太低,比如二三十块钱一吨,碳捕集设备大概率不会被调度,模型会直接选择排放;如果弃风惩罚系数低于火电边际成本,P2G也可能全程不启动,因为弃电反正不心疼。所以正式跑算例之前,先把碳价、弃风惩罚单价和燃气价格做一组灵敏度曲线,非常有必要。
实际操作中,我习惯把碳价设成可配置参数,在不同碳价水平下各跑一遍模型,看“碳捕集从哪个价格点开始被调用”。这个转折点信息,比单独一组最优解更有决策价值。
3.2 电、热、气三条平衡约束的核心写法
在综合能源系统里,电、热、气三个网络的耦合点非常多,平衡约束不要在设备层写死,要在系统层统一写。电功率平衡可以这样表达:
P_wind(t) + P_pv(t) + P_chp(t) + P_gas_turbine(t) + P_dis(t) - P_p2g(t) - P_ccs(t) - P_ch_storage(t) = D_ele(t)每一项对应一个设备模块:风机、光伏、热电联供机组、燃气轮机、储能放电,然后减去P2G耗电、碳捕集耗电、储能充电,等于电负荷。
热功率平衡同样要处理好每一项,重点在右侧:
Q_chp(t) + Q_boiler(t) + Q_dis_storage(t) = D_heat(t) + Q_reboiler(t) + Q_ch_storage(t)注意右边必须加上碳捕集再沸器的热耗 Q_reboiler。很多从传统热电联供模型扩展过来的人,在这里会漏项,导致碳捕集模块的能耗凭空蒸发,这也是后面我要单独讲“负收益陷阱”的根源。
气网平衡则涉及P2G产气和燃气消耗:
G_p2g(t) + G_pipeline(t) + G_dis_gas(t) = G_boiler(t) + G_turbine(t) + G_ch_gas(t) + D_gas(t)因为P2G产的甲烷和管网购气在热值上可能有差异,严格建模时应该在天然气节点上按热值统一折算,避免出现“1立方米甲烷不等于1立方米天然气”的偏差。
3.3 机组可行域、碳捕集能耗惩罚与P2G分段运行
热电联供机组的可行域,推荐用凸包或顶点描述。抽凝式机组的电热关系通常是一个多边形区域,比起简单的“电出力上下限+热出力上下限”矩形近似,凸包能更准确表达“高供热时电出力下限被抬高”的物理特性,而且约束全是线性的,不会引入非线性项。
碳捕集设备的能耗惩罚,我采用线性化关系:
R_ccs(t) = η_capture(t) · E_co2(t) Q_reboiler(t) = α · R_ccs(t) P_ccs(t) = β · R_ccs(t)η_capture 是捕集率,E_co2 是烟气中总CO₂排放速率,α 是单位碳热耗,β 是单位碳电耗。α 和 β 可以随负荷分段,但保持分段线性,求解时压力就不大。
P2G设备我建议拆成“电解制氢”和“甲烷化”两个子模块,中间用储氢罐解耦。电解槽只吃功率,产出氢气流向储氢罐;甲烷化反应器从储氢罐取氢、从CO₂储液罐取碳,产出甲烷。这样建模的好处是氢气罐能缓冲两侧流量不匹配,比把P2G当成一台整体设备灵活得多,约束就是一套标准的储氢罐容量平衡方程。
4. 从建模到可复现结果:线性化、算例与灵敏度
4.1 别直接把MINLP丢给求解器,线性化是第一步
刚接触这类模型时,最容易犯的错是“想把一切非线性都真实建模”。我第一次把完整非线性模型写出来,丢给求解器跑,半小时没出结果。后来我才意识到,这个问题的规模其实不小。
完整的原模型是混合整数非线性规划:启停是0-1变量,分段效率曲线是非线性的,天然气流量和水力关系也可能非线性。直接求解MINLP极不稳定,算例规模一大,求解器几小时不收敛也正常。我的做法是三层简化:
- 机组电热可行域用凸包约束代替,全部线性;
- P2G输入-输出关系分段线性化,效率曲线用3-5段直线逼近;
- 启停、最小运行时间等逻辑用大M法转化为线性约束。
整体变成标准MILP之后,实测一个典型冬季日、24个时段、含电/热/氢/气储罐和十余个设备节点的模型,变量数千到一两万,用常见开源求解器能在几分钟内求得全局最优或较好的可行解。如果还想提速,把时间粒度从15分钟改成1小时,也能满足工程应用精度。
4.2 典型冬季日算例:四个方案的对比
为了验证模型有效性,我构造了一个典型冬季日算例。基本条件是:某区域冬季日风电装机120MW,电负荷峰值95MW,热负荷峰值75MW,热电联供机组额定电功率60MW、热功率40MW,燃气锅炉容量30MW,储热罐容量40MWh,P2G额定功率25MW,碳捕集装置容量按机组烟气量设计,碳价设为100元/吨,弃风惩罚设为300元/MWh。
我对比了四个方案,结果如下:
| 方案 | 配置 | 弃风率 | 碳排放(t) | 运行成本(万元) |
|---|---|---|---|---|
| A | 单纯热电联供+风电 | 21.4% | 1240 | 52.8 |
| B | 上一方案+储热罐 | 11.6% | 1218 | 49.6 |
| C | 上一方案+P2G+碳捕集 | 3.2% | 762 | 47.9 |
方案A是基准,弃风率高达21.4%。加储热罐后弃风率降到11.6%,但碳排放几乎没变,说明储热解决的是“消纳”而不是“减碳”。加P2G和碳捕集后,弃风率降到3.2%,碳排放降了接近39%,运行成本反而比基准更低——背后的原因是风电消纳减少了购煤成本,碳交易支出也大幅下降,补偿了设备本身的运行维护成本。
当然,这组数值高度依赖碳价和弃风惩罚,换一组参数结果可能完全不同。但这个对比至少清楚说明一件事:不是设备越多越省钱,而是系统在合适时间调用合适设备,才能实现全局最优。
4.3 碳价与弃风惩罚:参数区间的判断力
我专门把碳价从0一路扫到300元/吨,结果很有意思。
碳价低于40元/吨时,碳捕集几乎不启动,因为捕集成本高于直接买碳配额;碳价到60元/吨左右,碳捕集开始小规模投入;超过100元/吨后,碳捕集基本保持高负荷运行。P2G的启动条件则更多取决于弃风时段出现的频率和弃风惩罚单价,当弃风惩罚低于P2G单位产气综合成本时,优化器宁可弃风也不会启动P2G。
这给调度人员的启示是:如果系统里的碳捕集设备常年“睡觉”,先别怪设备,先检查碳价参数定得是否合理。反过来,如果P2G一直满负荷运行但弃风率还是高,那可能是设备容量不够或储氢罐容量过小,需要做容量规划而不是继续调调度策略。
5. 仿真实验里踩过的坑:负收益陷阱、零出力诊断与维数灾难
5.1 碳捕集再生能耗的“负收益陷阱”
这是我在这类模型里踩得最深的一个坑。第一次给热电联供系统加碳捕集模块时,模型输出的减排量非常漂亮,但我随手看了一眼热平衡,发现再沸器热耗在约束里“消失”了。补上 Q_reboiler 之后,系统总碳排放直接反弹了8%。
原因不复杂:再生塔蒸汽从汽轮机抽汽获得,抽汽增加、发电量下降,缺口被燃气锅炉补上,燃气锅炉额外烧气又产生了新的CO₂。如果不把“为碳捕集提供热源”这个过程建模,模型就会给一个虚假的减排结论。
这个坑的教训是:碳捕集模型不能只算吸收塔CO₂质量流,必须追踪再沸器热耗的来源,并且在热平衡约束中显式体现。尤其是系统里有燃气锅炉时,要专门检查“补热新增的碳排放”是否大于“碳捕集减少的碳排放”,否则整个系统很可能就是负收益。
5.2 优化结果里P2G不出力,不一定是方案失败
第二次踩坑是调试时发现P2G整个冬季日一次没启动。一开始我以为模型编码错了,后来查约束才发现:我把P2G最小技术出力设成了额定功率的30%,而夜里风电盈余时段是几个不连续的小片段,每次盈余足够满足最小出力,但P2G一启动就要承担较高的启动成本,优化器一算,不启动更划算。
排查这类“零出力”问题,我有一个固定套路:先查弃风惩罚单价是否低于P2G综合产气成本;再查P2G最小技术出力和启动成本;最后看储氢罐容量——罐子很快就满了,P2G再有能力也无法继续产气。把这些参数逐一放开做敏感性分析,就能定位到底是经济性不够,还是物理约束卡死。
实际上,P2G最理想的使用模式是“连续数小时稳定出力”,不是“每个时刻跟着风电波动走”。所以我在模型里额外加了最小连续运行时间约束,让P2G要么不启动,要么至少连续运行4小时以上。这更贴近真实设备工艺要求,也避免优化器给出频繁启停的不合理方案。
5.3 时间粒度和爬坡约束如何避免无解或维数爆炸
最后一个常见问题是“模型变成求解器无论如何也解不动”。我试过用15分钟时间粒度跑全月数据,整数变量数量直接翻了四倍,求解时间从分钟级变成小时级,最后无奈改回1小时粒度。
时间粒度不是越小越好,要匹配设备响应能力。碳捕集再生塔的动态调整大约几分钟到十几分钟,P2G从热备用到满负荷也差不多在这个量级,所以小时级调度完全够用。如果确实需要更精细的调度,更合理的架构是“小时级日前计划+分钟级滚动修正”两层结构,而不是把所有决策塞进一个模型。
爬坡约束设得太紧也会造成无解。比如把燃气锅炉爬坡速率设成20%/min,热负荷尖峰时段怎么都爬不上去,模型直接报无解。后来按设备铭牌重新标定爬坡速率,模型才跑通。记住:模型里的每一项参数都要有设备依据,不能为了美观随意缩小可行域。
这套P2G和碳捕集加入后的热电联供系统调度模型,从能流分析到约束公式再到算例验证,我个人最大的体会是:模型最值钱的部分不是算法多高级,而是每一条能量流都有源头、有去向。动手建模之前,先把电、热、气、碳四条链路的物质流图画清楚——谁产电、谁耗热、谁产碳、谁吃碳,全部标明白,公式自然就立住了。把这个骨架搭好之后,再去扩展不确定性、多目标优化或者容量规划,都不会跑偏。