ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

P2G与CCS耦合的热电联供综合能源系统优化建模与MATLAB实现

2026/9/18 3:30:33 拓冰建站 浏览量
P2G与CCS耦合的热电联供综合能源系统优化建模与MATLAB实现 做综合能源系统优化这几年我一直绕不开一个问题传统热电联供机组在冬天一边供热一边发电电出力被热负荷牢牢锁死新能源一多电网调峰压力全堆在电网上。更麻烦的是机组烧天然气排出的二氧化碳还得掏钱买配额。后来我接触了P2G电转气和CCS碳捕集与封存这对组合突然发现思路打开了——把富余电能转化成天然气再把捕集来的CO2送回甲烷化流程当原料既平抑了新能源波动又把碳排变成了资源。这篇文章我就把热电联供综合能源系统里接入P2G与CCS的建模思路、MATLAB优化实现、求解细节和实际踩坑逐一讲清楚适合正在做微电网调度、园区综合能源或碳捕集耦合方案的朋友参考。1. 整体设计思路拆解P2G与CCS为什么会“搭”1.1 热电联供的“以热定电”困局传统热电联供CHP机组有个先天脾气就是“以热定电”。当热负荷拉满时电出力基本没有回旋余地即便这时候电网需要调峰、需要少发电机组也只能硬着头皮上网。要是碰上冬季供暖高峰期风电又在半夜大发电网就会同时面临“热在烧、电过剩”的尴尬局面。这个问题的本质是能量流之间的强耦合。热与电由同一个过程产生调电就必须调热调热又会牺牲用户供热质量。很多园区级综合能源系统在优化时第一道坎就是处理这一对耦合关系。1.2 P2G与CCS的互补逻辑P2GPower-to-Gas的思路很直接把富余电力通过电解水制成氢气再经过甲烷化反应与CO2合成天然气。这样一来电能可以转化为燃气接入天然气管网或储气罐相当于给电力系统装了一个“大号充电宝”同时把燃气系统的灵活性引入电力调度。但P2G必须消耗CO2如果单独建一套系统CO2来源还得外购或者从空气中捕集成本立刻就上去了。CCSCarbon Capture and Storage正好从另一端补上CHP机组烟气里的CO2本来是要排放的如今用胺法或膜分离捕集下来一部分封存一部分直接送给P2G做甲烷化原料。这两者耦合后形成了非常漂亮的闭环逻辑电力富余时启动P2G消纳生产天然气供气网使用CHP燃烧天然气发电时产生CO2又被CCS捕集送回P2G的原料端。能源流、碳流、气流实现了局部循环。优化调度要做的事就是在这套闭环里找到成本和碳排放的平衡点。1.3 优化目标怎么定才合理综合能源系统优化通常把运行成本最低作为核心目标但加了碳捕集和P2G之后碳排放也需要放进目标函数。我把目标拆成了几个部分从电网购电的成本以及向电网卖电的收益从气网购天然气的成本P2G设备的运行维护费用CCS设备的能耗惩罚与运维费用碳交易成本实际排放量与配额之间的差值乘以碳价。这五个部分之间经常互相打架。比如让P2G多出力购电成本可能上升但产出的天然气收益和碳减排收益又能对冲一部分再比如提高CCS捕集率CO2可以给P2G当原料但捕集过程本身要消耗机组电出力又把经济性拉了下来。优化模型的价值就是把这些矛盾量化权衡而不是靠拍脑袋配参数。2. 核心组件建模与参数选择2.1 CHP机组的可行域建模做优化调度第一步是把CHP机组的热电运行范围画准确。国内很多园区用的是抽凝式机组它的电出力和热出力不是简单线性关系而是一个多边形可行域。我在MATLAB里一般用一组线性不等式来描述P_chp_min P_chp P_chp_maxQ_chp_min Q_chp Q_chp_maxP_chp a1 * Q_chp b1P_chp a2 * Q_chp b2其中a1、a2是热电比上下限对应的斜率b1、b2是截距。这一组约束把机组限制在一个平行四边形或者梯形区域里比单纯用电热比公式要准确得多。实际项目中我常用200 MW电、250 MW热的机组作为参考电效率约0.35再配合烟气余热回收的热效率约0.45。还有一个容易被忽略的点CHP机组启停状态是0-1变量。停机时电出力和热出力都必须为零运行时必须在最小技术出力以上。如果忽略这个约束优化器会让机组在极低出力下运行表面成本很低实际根本跑不出来。2.2 P2G系统的效率与成本模型P2G分两步。第一步电解水制氢固体氧化物电解槽SOEC效率能到0.8以上碱性电解槽一般在0.6到0.7第二步甲烷化转化效率受温度、压力、催化剂影响整体算下来P2G综合效率取0.55到0.65比较稳妥。别把这个值定得太高不然优化结果会很乐观实际运行根本达不到。P2G的输入是电功率和CO2流量输出是天然气流量。CO2消耗量按甲烷化反应计量比算理论上1吨CO2可以生成约0.4吨甲烷相当于约5.6 MWh的天然气热值。但在模型里我习惯直接用经验系数比如每消耗1 MWh电功率产出的天然气热值约0.55 MWh同时消耗约0.15到0.2吨CO2。P2G设备运行维护成本我按单位输出功率计费大约每千瓦时产气量收0.02到0.04元。折合到目标函数里的单位比较混乱所以我在建模时统一把功率换算成MW成本换算成元每小时。2.3 CCS捕集率与能耗惩罚CCS的捕集对象是CHP烟气里的CO2。捕集率可以设为连续变量取值范围一般在0到0.9之间上限受限于吸收塔设计。捕集下来的CO2一部分送去P2G利用一部分压缩封存。封存部分意味着额外成本所以模型会倾向于让CO2去P2G变现。CCS最大的代价是能耗惩罚。胺法捕集每捕集1吨CO2大约要消耗0.3到0.6 MWh的热能和少量电能。园区项目里CCS所需的蒸汽和电通常从CHP机组本身取我建模时按捕集CO2量的线性函数折算成电功率损耗P_loss_ccs k_ccs * F_co2_captured其中k_ccs大约取0.25到0.35 MWh/t。这个惩罚项对优化结果影响非常大k_ccs定得太低模型会疯狂提高捕集率定得太高又会直接放弃捕集所以参数标定一定要结合设备厂家数据别直接抄论文里的数值。CCS运维成本也按捕集量计大约每吨CO2增加30到60元运维费用。碳交易价格我通常设为80到120元/吨这样能让CCS与P2G的组合在经济性上跑得通又不至于过度依赖补贴。2.4 储能与气体平衡整个系统中最好再配一套氢气或天然气储罐否则P2G产气必须即时被使用灵活性大打折扣。储气模型最简单的是用SOCState of Charge变量E_st(t1) E_st(t) (G_prod(t) - G_use(t)) * eta_store - G_loss(t)储罐容量、充放速率上下限都要纳入约束否则可能出现前一时段疯狂充气、后一时段全部放空的虚假经济性。我一般把储罐充放效率设为0.95自损耗率忽略不计因为调度周期通常只有24小时损耗影响不大。气体平衡方程是系统里被问得最多的地方。P2G产生的天然气可以有三个去向供给CHP燃烧、卖给气网、存入储罐。实际项目中卖给气网往往涉及额外的入网协议和价格机制初期建模先简化为“P2G产气全部进入系统内部气网”等跑通后再逐步加入购气、售气两个方向的边界条件。3. 优化模型与求解实现MATLAB实操过程3.1 目标函数与决策变量的标准化写法我在MATLAB里做综合能源优化比较顺手的方式是用优化工具箱里的optimproblem对象先把决策变量定义清楚再写目标函数和约束。以24小时调度为例决策变量包括CHP电出力P_chp(t)热出力Q_chp(t)P2G输入电功率P_p2g(t)产气量G_p2g(t)CCS捕集CO2量F_co2(t)购电功率P_buy(t)购气量G_buy(t)储罐充放气变量G_in(t)、G_out(t)CHP启停状态变量u_chp(t)。目标函数在代码里翻译成T 24; prob optimproblem(ObjectiveSense, min); P_chp optimvar(P_chp, T, 1, LowerBound, 0); Q_chp optimvar(Q_chp, T, 1, LowerBound, 0); P_p2g optimvar(P_p2g, T, 1, LowerBound, 0); F_co2 optimvar(F_co2, T, 1, LowerBound, 0); P_buy optimvar(P_buy, T, 1, LowerBound, 0); G_buy optimvar(G_buy, T, 1, LowerBound, 0); u_chp optimvar(u_chp, T, 1, Type, integer, LowerBound, 0, UpperBound, 1); % 成本系数 price_elec [0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 0.8, 0.6, ...]; % 分段电价元/kWh price_gas 2.5; % 元/m3约合0.25元/kWh热值 c_om_p2g 0.03; % 元/kWh产气 c_om_ccs 50; % 元/吨CO2 c_co2 100; % 元/吨碳配额 % 目标购电成本 购气成本 P2G运维 CCS运维 碳排放成本 prob.Objective sum(P_buy .* price_elec * 1000 ... % 折算为kW G_buy * price_gas ... G_p2g_output() * c_om_p2g ... F_co2 * c_om_ccs ... (F_emit_total() * c_co2));这段代码里有个地方需要注意G_p2g_output和F_emit_total是派生变量依赖P_p2g、Q_chp等基础变量。在optimproblem里派生变量不能直接写函数要写成约束关系或者用extraParams辅助计算。我习惯把这些关系拆解成显式的线性等式后面会细说。3.2 关键约束条件的线性化处理热电联供、P2G、CCS组成的系统里最大的建模难点是三个P2G产气量与输入电功率、CO2消耗量的关系CHP烟气CO2排放量与电热出力的关系以及碳平衡约束。P2G部分我用线性效率近似G_p2g(t) eta_p2g * P_p2g(t)F_co2_p2g(t) alpha_p2g * G_p2g(t)其中eta_p2g取0.55即每MWh电力产出0.55 MWh甲烷热值alpha_p2g取0.2即每MWh产气消耗0.2吨CO2。这两个系数都可以直接从P2G设备的技术手册里找初期用固定效率后期再引入变效率曲线。CHP烟气CO2排放量来源是天然气燃烧排放量近似与燃料输入成正比。我建模时先生成CHP的燃料消耗F_chp(t) alpha_fuel_elec * P_chp(t) alpha_fuel_heat * Q_chp(t)然后排放量F_co2_chp(t) beta_co2 * F_chp(t)这里的系数经常让人头晕原因在于P和Q的单位都是功率但它们的燃料分配权重不同。我用的近似方法是按电出力和热出力分别乘上各自的燃料折算系数然后用一个统一的排放系数换算。实际参数每MWh电出力约消耗0.2 MWh天然气热值每MWh热出力约消耗0.25 MWh天然气热值对应排放因子0.2 t/MWh折算到CO2约0.4 t/MWh。我一般直接给出F_co2_chp(t) 0.35 * P_chp(t) 0.28 * Q_chp(t)单位是t/h。这个线性式子在工程上足够用但在学术论文里最好还是回到燃料发热量和排放因子的严格计算上。碳平衡约束是整篇文章的核心CCS捕集CO2后一部分送P2G一部分封存剩下逃逸而CHP产生的CO2要小于等于初始排放加捕集量F_co2_p2g(t) F_co2_storage(t) eta_ccs * F_co2_chp(t)其中eta_ccs是CCS捕集率可以固定为0.85也可以作为决策变量在0到0.9之间连续调整。如果作为变量目标函数里会多一个约束捕集能耗惩罚与F_co2_storage成正比。功率平衡约束为P_chp(t) P_wind(t) P_buy(t) P_load(t) P_p2g(t) P_loss_ccs(t)电网交互功率如果允许反向售电P_buy要改成P_trade可正可负并在目标函数里区分买卖价格。初期模型限制系统只买电不卖电可以降低求解复杂度。热平衡约束Q_chp(t) Q_boiler(t) Q_load(t)燃气锅炉作为辅助热源容量一般取CHP热容量的20%到30%应对极端低温天气。天然气平衡约束G_p2g(t) G_buy(t) G_out(t) F_fuel_chp(t) G_in(t) G_demand(t)这里G_demand是系统中其他燃气用户的用气负荷如果没有外部燃气用户可以直接去掉。注意G_in和G_out不能同时非零否则会出现“边充边放”的伪优化解决办法是给储罐加互补约束或者引入小量的惩罚项。3.3 求解器选择与参数调试我用MATLAB优化工具箱里的intlinprog解这个模型因为启停变量u_chp是整数整个问题是一个混合整数线性规划MILP。24小时、三个设备、一组储罐的规模几十个变量和上百个约束求解时间一般就两三秒非常快。但有几个细节会直接影响求解稳定性变量缩放。P_chp是百兆瓦级F_co2是吨/小时级碳交易单价是元/吨乘起来可能差三四个数量级。intlinprog对数值尺度很敏感我习惯把所有变量的量纲统一到同一数量级比如把电价统一成元/MWh、功率统一成MW、CO2统一成吨尽量让目标函数各分项系数落在同一个数量级内。整数变量初始化。给u_chp一个合理初值可以明显减少分支定界的迭代次数。我用上一时段的调度结果作为下一时段的初值滚动优化时速度快不少。约束宽容度。如果模型一直报“约束不满足”先检查量纲不一致再看有没有冗余变量。我遇到过几次求解器报错最后发现是某个变量的UpperBound写成负数低级错误但特别容易犯。求解器选项我一般这样设置options optimoptions(intlinprog, ... Display, iter, ... MaxTime, 300, ... IntegerTolerance, 1e-5, ... ConstraintTolerance, 1e-6, ... RelativeGapTolerance, 1e-3);RelativeGapTolerance是MILP里最实用的参数它表示当前解与最优下界之间的相对差距。设为1e-3意味着找到的解比最优解最多差0.1%对工程调度来说完全够用而且能省下大量求解时间。3.4 一个典型调度结果分析某个园区场景下200 MW CHP、40 MW P2G、30 t/h CCS、100 MW风电、60 MW储罐我跑出来一版典型结果夜间风电大发时P2G满负荷运行把富余电力转化为天然气存入储罐白天负荷高峰时CHP发电供热CCS捕集CO2后供给P2G甲烷化形成一个稳定的碳循环。从经济性看加了P2G与CCS之后购气成本明显下降因为P2G产气替代了一部分外购天然气碳交易成本也从正向支出变成了接近零。代价是P2G设备和CCS设备的运维成本上升。如果碳价低于约70元/吨这套组合的经济性优势就非常微弱所以碳价是整套方案的命门。4. 常见问题与排查技巧实录4.1 模型无法收敛怎么办优化模型最常见的问题是求解器报“Infeasible problem”也就是约束之间自相矛盾。我自己的排查顺序是先查功率平衡约束是否被别的约束堵死了再看储罐的SOC初值和终值是否合理。比如储罐初始有40 MWh气模型为了效益把这40 MWh全放光却要求结束时SOC不低于初始值结果约束冲突直接无解。还有一个坑藏在CHP可行域里。如果Q_chp的上限定得太低而热负荷又很高系统只能靠燃气锅炉补热但锅炉容量又不够这就必然无解。这时候别急着改求解器先检查边界条件和负荷数据是否合理。我在实际工作中会先用“可行解优先”的思路把目标函数暂时去掉只求一组满足所有约束的解。如果连可行解都找不到说明约束系统有问题如果可行解存在但找不到最优才需要调整求解器参数。4.2 非线性项怎么处理P2G效率和CCS捕集能耗其实都不是固定常数精确建模需要引入非线性函数比如P2G效率随负荷率下降、CCS能耗随捕集率升高。非线性项在MATLAB里可以用fmincon但MILP的好处是不容易陷入局部最优。我的经验是分两步走第一步用线性近似跑出基准方案第二步对关键非线性设备做局部分段线性化。分段线性化实现起来不复杂用一个或几个0-1变量切换不同效率区间即可。比如P2G效率在中低负荷、额定负荷和过载区间分别取0.52、0.60、0.55对1到3段线性函数做逼近既保留MILP的求解能力精度也够用。4.3 碳价和捕集成本的敏感性分析做完优化调度后我强烈建议做一轮敏感性分析横轴是碳价从50元/吨到200元/吨纵轴是系统总成本、CHP电出力、P2G利用率和CCS捕集量。结果通常会出现明显的分阶段特征碳价低时P2G基本不启动CCS捕集率也低碳价达到某个阈值时P2G开始满负荷CCS捕集率跳到上限。这个阈值就是项目的经济拐点给决策层汇报时非常有用。我见过一个项目碳价按80元/吨测算时的IRR只有5%老板觉得没意思但敏感性分析显示当碳价上到110元/吨时IRR能超过9%。这种数据比任何文字都有说服力所以敏感性分析千万别省。4.4 常见问题速查表现象可能原因排查方法intlinprog报infeasible功率或热平衡约束下限过高储罐终值约束不合理先跑无目标可行解逐条放宽约束求解时间过长整数变量多0-1变量没给初值设置初值、放宽RelativeGapTolerance结果中P2G始终不出力碳价或气价过低P2G单位成本高于购气成本提高碳价或降低P2G运维成本系数CCS捕集率恒等于上限捕集能耗惩罚系数太小模型无脑用CO2校核k_ccs参数调整到合理范围储罐边充边放储罐充放变量同时为正增加充放互斥约束或引入小惩罚目标函数数值异常大量纲不统一功率和能量混用统一量纲检查单位换算5. 实操心得与模型扩展建议5.1 我自己最满意的一个改进在迭代过程中我给模型加了一个“碳捕集优先供给P2G”的逻辑而不是让CCS捕集的CO2无差别流向封存。这个逻辑改成了约束条件F_co2_p2g(t) F_co2_captured(t)同时P2G所需CO2必须优先从CCS获取不够了才能外购。虽然只是多了一条不等式但对系统碳流的调度意义很大CO2在系统里转了一圈既减排又产气经济性显著提升。实测下来调整这条约束后同样的场景下CO2外购量直接降到零CCS的捕集利用效率提高到90%以上。这类“约束设计”远比调参数更有价值。5.2 模型怎么往真实工程扩展目前这个模型是典型的园区级日前调度框架。往真实工程扩展时我会优先加三块多场景随机优化风电出力和负荷预测误差用蒙特卡洛抽样、实时滚动修正把日前计划切成15分钟滚动窗口、以及电热气的多时间尺度协调比如电储能响应秒级、P2G分钟级、储气小时级。还有一点实际项目中CHP的启停费用和最小启停时间往往比运行成本还关键不建模的话调度结果会让机组频繁启停现实中根本不可行。这块需要引入额外的时序约束我一般用二进制变量记录启停事件再约束最小运行和最小停机时间。5.3 材料准备与数据来源建议如果准备复现这个模型建议先把下面几类数据准备好典型日风电出力曲线和负荷曲线网上能搜到不少开源数据比如比利时电网的公开数据、CHP机组的技术手册效率和可行域参数、P2G设备厂商提供的效率曲线、当地的峰谷电价和天然气价格、以及最新的碳配额价格。数据精度直接决定模型可用性。我自己吃过亏拿论文里一套效率参数直接套到项目上结果调度方案算出来现场根本无法执行因为实际设备的爬坡速率和启停时间根本没进模型。宁可花一周时间把设备参数摸清楚也别急着跑结果。最后分享一个调试小技巧每次跑完优化把P2G的电转气效率、CCS捕集率、储罐SOC轨迹、碳流平衡误差四个指标画在一张图上一眼就能看出模型有没有犯低级错误。如果哪天发现P2G在垃圾时段疯狂产气而储罐完全没在蓄气那多半是气体平衡约束写错了赶紧回头检查约束方程。这套系统虽然叫“奇妙结合”但真正落地还是靠一遍遍把细节抠对。