news 2026/10/20 18:12:01

热电联供微网供给侧多能互补优化模型与工程落地

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
热电联供微网供给侧多能互补优化模型与工程落地

前阵子复现一篇关于CHP-MG(热电联供型微网)优化运行的文献,做到一半差点把模型推翻重来。按照最朴素的思路,把燃气轮机、燃气锅炉、蓄热罐、电储能这些设备的效率参数写进约束里,解出来的“最优运行方案”竟然会出现一个物理上不太说得通的结果:蓄热罐为了套峰谷电价的利差,在清晨低谷时段拼命蓄热,午后电价涨上来再放热,表面看每一度热都“省了钱”,可把散热损耗、设备循环寿命磨损和补水成本算进去,方案净收益已经所剩无几。问题出在哪儿?出在我一开始把“供给侧多能互补”理解得太简单了。

这篇博文,就是从那篇CHP-MG系统优化运行文献的框架出发,把供给侧多能互补模型的核心逻辑拆开讲一遍。我会重点聊模型怎么搭、优化怎么算、仿真怎么验证,也会把我复现过程中踩过的坑一并交代。想给正在做微网、综合能源系统建模的研究生,以及准备落地园区级多能联供项目的工程师一个可复用的参考。

1. CHP-MG系统要解决什么问题:三种能流的互补逻辑

1.1 从热电联供到微网:系统架构与能流角色

CHP是Combined Heat and Power的缩写,中文叫热电联供;MG是Microgrid,微电网。热电联产本身并不新鲜,火电厂早就用抽凝机组同时供热供电,但那是大电网尺度的事。微网尺度下的CHP-MG,指一个靠近用户的独立配电单元,内部装有一台或多台小型燃气轮机或燃气内燃机、余热回收装置、燃气锅炉,还可能配蓄热罐、蓄电池和热泵。系统外部同时连接配电网和天然气管网,需要时可以从电网买电、从管网购气。

在这个系统里,“气”并不是用户的负荷,而是上游的燃料输入。天然气进来之后有两条主要出路:给燃气轮机发电,发电同时产生的高温烟气和缸套水余热,通过余热回收装置转成热水或蒸汽,供给热负荷;或者直接进燃气锅炉,用燃烧的方式产热。所以整个系统的能源形式覆盖了“热、电、气”三种:

能源形式在系统中的角色主要转换路径
电终端能量形式,供建筑和生产设备使用,也可转热电网购电、燃气轮机发电、蓄电池放能
热终端能量形式,供采暖和生活热水使用余热回收、燃气锅炉、电锅炉、热泵、蓄热罐放热
气供给侧燃料输入,不直接面向用户负荷燃气轮机、燃气锅炉

搞明白这一点再读文献,就不容易把微网里的气误当成必须满足的“气负荷”。很多初学者看到“热、电、气3种能源形式”,第一时间会想是不是要像电负荷一样给用户供气。实际不是,在CHP-MG研究里,气更多扮演供给侧能量来源的角色,电和热才是最终要满足的负荷形式。

1.2 多能互补的三个维度:时间互补、空间互补与品位互补

多能互补这个词听着抽象,落到运行层面其实就是三件事。

第一,时间互补。电负荷高峰和热负荷高峰往往不重合。比如中午工厂生产用电多,但采暖需求低;后半夜电负荷低,建筑保温却需要持续补热。电价又通常是峰谷分时的,天然气价格相对稳定。于是系统可以在电价低谷时段用电锅炉或热泵蓄热,在电价高峰时段让燃气轮机多发一点电、少买一点市电。这就是时间互补——电和热在不同时段的替代关系形成一个经济上的套利空间。

第二,空间互补。燃气轮机的余热如果不回收就直接排进大气,在厂区尺度上等于把已经花钱买来的燃料白白扔掉。把余热就近引到热力管网,满足几百米或几公里范围内的采暖需求,就把原本无用的热量转化成了有价值的服务。空间互补的关键在于“就地取材”,热网不能拉太长,否则管道散热损失会吃掉余热回收的收益。

第三,品位互补。这是热力学里最值钱的一条。天然气是高品位化学能,直接烧锅炉产80摄氏度的热水,相当于拿造火箭的高压气瓶去吹气球——能量数量没变,品位的浪费却非常严重。合理的做法是让高品位燃料先经过燃气轮机发电做功,再把余热这种低品位能量用来供热。燃气轮机单独发电效率通常只有30%上下;如果做成热电联供,总能效率做到75%以上并不稀奇。多能互补本质上是把不同品位的能量放在最合适的位置上,实现能量的梯级利用。

1.3 优化运行真正要回答的三个问题

有了系统架构和互补逻辑,优化运行的目标就很明确了。它的本质是回答三个问题:

  1. 每一时刻,每台设备出多少力?燃气轮机是满发还是部分负荷,燃气锅炉补多少热,热泵要不要启动?
  2. 储能什么时候蓄、什么时候放?蓄热罐该在低谷蓄还是在余热富余时段蓄,蓄电池该什么时候充电?
  3. 从电网买多少电、从管网买多少气?购电比例和购气比例怎么分配?

这三个问题互相耦合。电负荷曲线和热负荷曲线不一样,电价曲线和气价曲线也不一样,只要其中一条曲线变化,最优的设备出力组合就会随之改变。特别是热负荷偏低时,燃气轮机如果只按电负荷需求发电,就会多产生不需要的热量;这些多余热量如果没有蓄热罐吸收,就只能弃掉。反过来,如果按热负荷需求去“以热定电”,又可能出现电发多了不能上网倒送、只能就地弃电的情况。优化模型要做的事情,就是在这些矛盾之间找到成本最低或能效最高的平衡点。

2. 供给侧多能互补模型的搭建:设备建模与能量耦合关系

2.1 先给能量画一张拓扑图:母线架构与能流走向

动手建模前,我习惯先把系统的能量拓扑画出来,哪怕只是草稿。CHP-MG一般抽象成两条能量母线:电母线和热母线。电网联络线、燃气轮机的发电出口、蓄电池都接在电母线上;余热回收装置、燃气锅炉、热泵、蓄热罐都接在热母线上。天然气作为一个独立的输入源,分别接到燃气轮机和燃气锅炉上。

这样做的好处是,能量平衡约束可以按母线分别写。电母线满足所有电负荷,热母线满足所有热负荷,两边的耦合点是燃气轮机的电出力和热出力、以及热泵/电锅炉的电转热。如果有制冷需求,再增加一条冷母线,接上吸收式制冷机和电制冷机,系统就从CHP变成CCHP。本文以电、热、气三种形式为主,冷负荷可以当成一种扩展场景。

这个拓扑结构看似简单,但它决定了模型的大部分细节。比如蓄热罐放在热母线上还是放在燃气锅炉出口,建模方式有细微差别:前者需要考虑与热网管道的运行配合,后者更像是设备内部缓冲。在微网尺度研究中,通常把蓄热罐直接接在热母线上,用一个能量平衡方程统一描述。

2.2 设备模型怎么写:效率、出力区间与爬坡

设备模型是供给侧多能互补模型的地基。我把常用设备的建模公式按类型整理了一下,方便对照:

设备输入输出核心表达式关键参数
燃气轮机天然气F_GT电功率P_GT、回收热Q_GTP_GT = η_e,GT × F_GT,Q_GT = α_HR × F_GT发电效率η_e,余热系数α_HR
燃气锅炉天然气F_GB热功率Q_GBQ_GB = η_GB × F_GB锅炉效率η_GB
电锅炉/热泵电功率P_HP热功率Q_HPQ_HP = COP × P_HP制热性能系数COP
蓄热罐蓄热/放热功率热功率SOC(h,t+1) = SOC(h,t) + (Q_ch × η_ch - Q_dis/η_dis) × Δt - L_h蓄放热效率、散热损失L_h
蓄电池充电/放电功率电功率SOC(b,t+1) = SOC(b,t) + (P_ch × η_c - P_dis/η_d) × Δt充放电效率、自放电率

每个设备还需要两个边界条件:出力上下限和爬坡速率。出力上限好理解,比如燃气轮机最大发电功率500kW,最小技术出力100kW;下限往往更关键,优化算法会倾向于让设备在极低负荷运行来省钱,但在实际中燃机在低负荷下效率急剧恶化,甚至无法稳定燃烧,所以最小技术出力约束必须有。

爬坡约束是我在复现时最容易忽略的一条。如果调度时间间隔是1小时,而燃气轮机15分钟就能从零爬到满负荷,那一小时的爬坡约束就形同虚设。建议两种情况:要么把调度步长细化到15分钟,并同步检查能量平衡公式里的时间变量;要么在1小时尺度上人为收紧每小时的功率变化上限来近似。否则模型会得出“设备可以瞬跳”的伪最优解,和现实差得很远。

2.3 用耦合矩阵理解“互补”,但在优化中慎用

供给侧多能互补模型在系统层面可以用能量枢纽耦合矩阵来表达。记系统输出为电功率P_e和热功率Q_h,输入为电网购电P_grid和天然气F_gas,则:

[ P_e ] [ a11 a12 ] [ P_grid ] [ Q_h ] = [ a21 a22 ] [ F_gas ]

矩阵里的a11来自电网购电通道,a12来自燃气轮机发电,a21来自热泵或电锅炉的电转热,a22来自燃气锅炉和余热回收。两个输入通道、两个输出通道之间的耦合,就是“互补”的数学写照:同一个负荷需求,可以通过矩阵中不同列的组合来完成。电价便宜时多走第一列,气方便宜时多走第二列。

但我自己在写优化程序时,并不会真的先把方程化简成这种矩阵再去求解。原因很实际:一旦加入储能时序变量、启停0-1变量、爬坡约束,再强行用耦合矩阵表达会让模型变得极其别扭,约束矩阵会膨胀,调试起来也麻烦。耦合矩阵适合做系统级分析或者等值聚合,适合放在论文的机理章节讲清楚互补关系;真正进求解器的时候,还是按母线平衡、设备约束分开写成标准形式更稳妥。

2.4 模型假设的取舍:常数效率与线性化的边界

供给侧模型里最敏感的一个假设,是设备效率取常数还是随负载变化。常数效率模型简单、可解释性强,在典型日调度、全年逐时仿真里都够用;但燃气轮机的部分负荷效率曲线并不是平的,负荷率跌到50%时发电效率可能下降好几个百分点。如果整篇研究都采用额定效率计算,燃气轮机在低负荷运行的收益会被明显高估,最终优化结果在工程上不可信。

折中的做法是分段线性化。把燃气轮机负载率分成几段,每段采用不同的平均效率,或者直接用一组线性不等式来逼近二次效率曲线。代价是增加了一些约束变量,换来的是模型仍然停留在线性规划或混合整数线性规划框架内,求解稳定且快。不要轻易引入非线性表达式去描述效率,除非确实需要高精度且不在乎求解时间——这是我踩过多次坑之后总结出来的经验。

3. 优化运行问题的数学化:目标函数、约束条件与求解器选型

3.1 目标函数:经济性、能效与碳排放怎么权衡

优化运行的目标函数,绝大多数文献选择最小化总运行成本。一个典型的目标函数可以写成:

min Σ_t [ π_e(t)·P_grid(t) + π_g·F_gas(t) + c_om(t) + c_start(t) ]

其中π_e(t)是分时电价,π_g是天然气价格,c_om是设备运维成本,c_start是启停成本。如果考虑碳排放约束,还可以在目标里加入碳交易成本项:Σ_t [ λ_CO2 × E_CO2(t) ],E_CO2来自购电和购气的间接排放。

关于目标函数我有一个提醒:完全用经济目标做优化,得到的策略很可能牺牲效率和排放。比如电价很高时,系统可能让燃气轮机满发,余热太多只能弃掉,一次能源消耗反而不经济。很多研究会用多目标优化,把经济性和碳排放作为两个并列目标,通过权重法或epsilon约束法生成帕累托前沿。如果是做工程落地,单目标经济优化加碳排放约束就够用了;如果是发学术论文,多目标分析能拉开对比层次,但也不用做太复杂,两个目标就足够讲清楚协同关系。

3.2 约束条件的完整清单:从供需平衡到储能边界

我把CHP-MG优化运行里最常出现的约束整理成一张清单,复现模型时照着这个清单逐条检查,基本不会漏项:

约束类别数学表达说明
电功率平衡P_grid + P_GT + P_dis = P_load + P_HP + P_ch购电、发电、放电之和等于负荷与用电设备之和
热功率平衡Q_GT + Q_GB + Q_HP + Q_dis = Q_load + Q_ch产热与蓄热、放热必须和热负荷一致
设备出力区间P_min ≤ P ≤ P_max所有设备都有下限和上限
设备爬坡约束-ΔP_down ≤ P(t+1)-P(t) ≤ ΔP_up每步功率变化不能超过实际爬坡速率
储能SOC递推SOC(t+1) = SOC(t) + η_ch·P_ch - P_dis/η_dis蓄热罐和蓄电池都适用
储能容量约束SOC_min ≤ SOC(t) ≤ SOC_max防止过充过放
储能初始/末端状态SOC(0)=SOC(T)公平对比不同调度周期,避免把储能当免费资源
备用容量约束系统可上调容量 ≥ 需求孤网运行或高可靠要求时需要

这里面最容易犯的一个错,是不加初始/末端状态相等的约束。如果没有这条,优化算法会把蓄热罐的初始热量当作免费资源一次性放完,得到一个“假省钱”的结果。两个方案对比时,如果A方案把储能耗尽了、B方案保持初始状态,两者根本没有可比性。所以储能SOC的边界条件必须写死。

3.3 求解器与算法选型:MILP、滚动优化和启发式算法

模型写成线性或混合整数线性之后,求解器的选择很直接:

模型类型适用场景推荐工具
LP(全线性)效率固定、无启停变量的经济调度Gurobi、CPLEX、开源CBC
MILP(含0-1变量)考虑设备启停、最小运行时间Gurobi、CPLEX,规模小时可用CBC
MINLP(非线性整数混合)必须描述非线性效率曲线,但尽量先线性化先尝试分段线性化;不行再用GAMS DICOPT或启发式算法
大规模多周期全年度8760小时、滚动优化场景聚合、Benders分解、分布式求解

我个人的习惯是:能用商业求解器就用商业求解器,尤其是Gurobi,处理典型日24小时或一周168小时的MILP问题通常秒级到几十秒。如果研究中硬要用粒子群或遗传算法,往往是因为模型里带有非线性部件又不想做线性化。但对于带储能的模型,启发式算法很容易陷入“储能时序变量和0-1启停变量耦合”造成的不可行区域内,而且每次运行结果不固定,论文复现性差。真要用启发式,至少跑20次以上取可行最优解,并在论文中把随机种子写清楚。

如果做在线调度,可以考虑模型预测控制(MPC)的思路:每15分钟或1小时滚动一次,用最新的负荷预测重解一个较短时域(比如4小时或24小时)的优化问题,只执行第一个时段的控制信号。这样就把预测误差的影响限制在滚动窗口内,比一次性求解全天方案鲁棒得多。

4. 仿真算例怎么设计:场景搭建、结果对比与灵敏度分析

4.1 算例基础配置:设备参数与负荷曲线假设

仿真算例设计直接决定结论的可信程度。我复现文献时采用的是一套典型园区参数,这里列出来供参考,不是从特定文献抄来的,而是比较常见的公开量级:

设备容量关键效率参数
燃气轮机500kW发电效率30%,余热回收效率40%
燃气锅炉500kW热效率90%
热泵200kWCOP 3.5
蓄热罐1000kWh蓄放热效率95%,散热损失每小时0.5%
蓄电池500kWh充放电效率95%

负荷方面,典型冬季日:白天8点到18点电负荷峰值为800kW,热负荷平缓,约400kW;夜间电负荷降到200kW,热负荷因为采暖需求反而涨到600kW。电价采用峰谷平三段:峰时1.1元/kWh、平时0.7元/kWh、谷时0.35元/kWh;天然气价格定为2.8元/m³,按热值折算相当于0.25元/kWh。这些假设看起来简单,但它能保证模型出现多个“关键切换点”:燃气轮机会不会开、蓄热罐什么时段蓄、热泵要不要顶上,都由这些数字决定。

4.2 分供、CHP、CHP加储能:三种方案的对比口径

仿真一般要设置对照组,才能体现供给侧多能互补的优势。我常用的三套方案是:

  • 方案A:分供系统,电网购电加燃气锅炉产热,没有任何联供设备。
  • 方案B:CHP系统,燃气轮机发电加余热回收,余热不够时锅炉补燃。
  • 方案C:CHP加储能扩展,在方案B基础上加入蓄热罐和蓄电池,允许设备之间跨时段调度。

在同样的负荷和价格条件下,我复现得到的日运行成本和一次能源消耗大致如下(这是一组示例数据,不同文献参数下具体数值会不一样,但趋势具有参考性):

指标方案A(分供)方案B(CHP)方案C(CHP+储能)
日运行成本约2.10万元约1.85万元约1.72万元
一次能源消耗约32.7MWh约30.9MWh约28.6MWh
弃热率无约8%约2%

方案B相比方案A有优势,核心原因是燃气轮机热电联供把高品位燃料的能量用满;但如果热负荷较低,余热用不完,就需要考虑方案C。蓄热罐把燃气轮机的余热在热负荷低时存起来、热负荷高时再放出,有效降低了弃热率;蓄电池则负责在电价低谷时充电、巅峰时放电,进一步压低购电成本。方案C的优势本质上来自“储能把时间维度上的自由度打开”了,这也解释了为什么供给侧多能互补必须和储能配合才能达到最优。

4.3 灵敏度分析:气价、热负荷比例与储能边界怎么影响结论

算例做完,灵敏度分析是检验结论是否稳健的关键,也是审稿人和工程投资方最看重的一环。我通常做三组:

第一组,天然气价格上浮10%。燃气轮机和燃气锅炉的成本同时上升,CHP相对分供的优势会明显缩小。气价涨到一定阈值后,燃气轮机满发不再是最优策略,系统会转而多买市电、让锅炉多供热。这一组分析能告诉读者结论对气价有多敏感,也顺便给出“什么时候CHP不值得上”的边界条件。

第二组,热负荷与电负荷的比例变化。热负荷占比太低时,CHP按电出力运行会产生大量无法消纳的余热,蓄热罐容量再大也存不下,弃热率飙升。在很多园区项目里,这个“热负荷不足”恰恰是实际运行中CHP系统经济性不佳的根本原因。研究这个场景的意义在于,它提醒我们不要只看额定工况,更不要拿一台大燃机配一个很小的热负荷去算收益。

第三组,储能的初始和末端SOC约束是否一致。我在做对比时特意分别跑了两个版本:一个强制SOC(0)=SOC(T),一个允许自由结束。两者结果可能差出5%-10%的成本,自由结束版给出的省钱空间来源于“把储能初始能量白嫖掉”,这在工程上不可持续。灵敏度分析做到这一步,其实已经不只是在验证模型,而是在给自己和读者划定研究结论的适用边界。

5. 从论文走向工程:数据获取、求解效率和模型落地的现实问题

5.1 预测误差面前,最优运行方案还成立吗

论文里常假设负荷曲线和气象条件是已知的,但实际运行时只有预测值。负荷预测误差通常在5%-15%之间,光伏出力预测误差更大,这会直接影响优化出的设备调度指令——预测说下午热负荷高,你把燃气轮机开足了,实际热负荷却很低,余热全部浪费。

我建议工程实现上采用滚动优化加反馈修正。就算暂时不做模型预测控制,也要让优化程序能够定时读取最新的负荷预测和实际量测数据,重新求解未来4小时或24小时窗口。目标函数里还可以给设备加“动作惩罚项”,比如设备的功率调整次数超过一定阈值就加成本,避免系统在相邻两个调度周期之间反复启停设备。这样处理之后,虽然理论上损失了一点全局最优性,但可操作性大幅提升。

5.2 设备真实效率曲线:比额定效率更重要的数据

工程落地的第二道坎是数据。燃气轮机厂家样本给的效率是在ISO工况下测出来的,实际部分负载率在60%-80%时效率通常低于额定值,进口空气温度、进气压力损失、燃料气质都会影响真实出力。储能电池的实际可用容量会随循环次数和温度衰减,蓄热罐的水质和罐体保温效果也未必达到设计值。

在做项目可行性研究阶段,我会尽量要求厂家提供实测性能曲线,而不是只拿额定值做方案选型。若只能拿到额定值,至少留一个10%的容量裕度,并在结论里写明“收益存在不确定性”。研究型论文虽然可以用常数效率,但如果想在结论里说清楚“到底有多少利润空间”,这部分误差是回避不了的。

5.3 计算规模控制:典型日、场景聚合与时间步长

全年度8760小时的MILP模型,设备和约束稍多,求解时间就可能从几分钟膨胀到几小时甚至几天。我在复现时常用的方法是先做典型日聚合:把全年数据用k-means聚类,选出冬季采暖、过渡季、夏季制冷三种典型场景,再按天数加权还原全年估算。这样既保留了季节差异和负荷水平差异,又把24小时×3天的问题控制在秒级求解范围。

如果确实要跑全年逐时,可以考虑分治思路——把所有时段按“日间峰时段”和“夜间谷时段”切成若干子问题迭代求解,或者直接把时间步长从15分钟放宽到1小时。放宽步长前要重新确认爬坡约束和储能SOC递推里的时间变量都同步改了,否则容易在衔接段产生能量不守恒的问题。我建议把“先跑通小规模、再逐步扩大”作为调试铁律,不要第一步就上全年8760小时的大模型。

5.4 最后一公里的现实问题:储能运维与最低技术出力

最后一个容易被优化模型忽略的现实因素,是储能设备的运维和损耗成本。蓄热罐看起来只是存热水,实际上需要考虑补水、水处理、循环泵电耗、罐体定期维护;蓄电池更不用说,充放电循环次数直接对应寿命衰减。把单位循环成本折算进目标函数之后,很多“理论上省钱”的储热策略实际收益会被大幅压缩。我见过不少示范项目,优化报表上写的储能收益和实际结算差异很大,主要就是模型里没把这部分成本算进去。

同样的逻辑也适用于燃气轮机最低技术出力。优化程序经常会给出“燃气轮机带很小负荷运行”的解,用来应付低电负荷时段的边际需求。真实机组在那么低负荷下燃烧不稳定,NOx排放也可能超标,根本不允许长时间运行。所以建模时一定要把最小稳定出力写进约束,最好再加上最短连续运行时间和最短停机时间,否则优化结果只能停留在纸面上。

把“约束里必须存在的东西”放到第一位,是我做了多年微网运行优化之后最深的体会。供给侧多能互补的潜力确实可观,但前提是每一台设备的行为都经得起物理现实的检验。模型复杂一点、求解慢一点都不是问题,结果没法落地才是最伤的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/13 21:12:29

Flink 2.3.0 从理论到实践 —— 第 2 章 Flink 运行时架构

Flink 2.3.0 从理论到实践 —— 第 2 章 Flink 运行时架构 课程定位:本章深入 Flink 2.3.0 的内部运作机制,理解 JobManager / TaskManager 的协作、作业从提交到执行的完整链路、Task / SubTask / Slot 的资源模型,以及 Flink 2.x 引入的自适…

作者头像 李华
网站建设 2026/10/17 18:34:27

page_alloc __rmqueue_smallest

__rmqueue_smallest() 是伙伴系统分配路径的核心函数,负责从指定迁移类型的空闲链表中,找到最接近请求阶数的页块并分配出去。核心作用它实现了伙伴系统"最小可用块"的分配策略:从请求的 order 开始,逐级向上查找第一个…

作者头像 李华
网站建设 2026/10/19 20:42:51

作业一难就放弃?把「扛得住的心韧力」做成训练闭环

技术向 / 干货。面向想用「系统」替代「反复讲道理」的家长与开发者。 作者:学心教研 0. 结论先行 面对孩子在书桌前「一遇到难题就退缩发脾气」,很多家长习惯用「坚持就是胜利」「再动动脑子」这类道理去施压。但从认知神经机制来看,孩子一难…

作者头像 李华