综合能源系统调度优化:碳捕集与电转气协同建模实践
从去年开始我一直在做综合能源系统调度优化的课题最初用传统的热电联产模型跑得挺顺但导师一句话点醒了我“你光盯着电和热碳怎么办”当时碳排放约束还只是论文里的背景板但等我把碳捕集和电转气加进模型之后整个系统的运行逻辑、约束耦合、求解难度全部变了。这篇文章就把我这一路建模、编程、调参、踩坑的完整过程整理出来重点讲清楚设备模型怎么在Matlab里落地、优化问题怎么建怎么解、以及不同技术组合下系统到底能省多少成本、减多少碳。内容偏实操适合正在做综合能源系统、电转气、碳捕集方向研究或者毕业设计的朋友参考。1. 为什么热电联产必须引入电转气和碳捕集系统层面的刚需1.1 传统热电联产的“以热定电”困局传统热电联产机组CHP有一个绕不开的问题——电出力跟着热出力走。供暖季热负荷一上来机组被迫满发电出力压不下去导致白天光伏大发的时候电网反送功率晚上热负荷高的时候系统电功率严重过剩。我以前用纯CHP模型做调度结果里经常出现弃风弃光最开始我还以为是数据问题后来才意识到这是系统结构性缺陷光靠优化算法是救不回来的。解决思路无非两条一是给系统加储能把多余的电存起来二是加电转气P2G把多余的电转化成氢气或者天然气。P2G的隐藏优势是它不仅消纳了过剩电力还顺带把碳捕集系统捕下来的CO₂变成了甲烷而甲烷恰好可以回供给燃气机组或者CHP机组作为燃料这就形成了一个“电—气—碳”闭环。1.2 碳捕集电转气的能量协同逻辑单独看碳捕集系统CCS它其实是纯耗能装置——捕集每吨CO₂大约要消耗0.2~0.35 MWh的热量和若干电能这会把系统整体效率拉低好几个百分点所以很多研究做CCS都只算环保账不算经济账。但是把CCS和P2G放在一起看逻辑完全不一样CCS捕下来的CO₂不再只是“封存”这种纯支出项而是作为甲烷化的原料具备了经济价值P2G的甲烷化反应需要高纯度CO₂正好消化CCS的产出P2G消纳的弃电越多系统给CCS供能的经济压力就越小二者形成正反馈。这就是我在这套模型里最核心的设计逻辑**不再把CCS看作一个独立耗能装置而是把P2G和CCS当成一个“碳循环联合体”来建模。**这个思路不是论文里拍脑袋想出来的而是我去看过一个工业园区冷热电三联供项目之后受的启发——那边的实际运行数据表明P2G和CCS配合运行的碳回收率比单独运行高出一大截而且燃气机组的燃料成本明显下降。1.3 模型到底解决什么问题回到建模本身。我这次的目标是搭建一个包含风电、光伏、CHP机组、燃气锅炉、电转气、碳捕集、储气罐、储热罐的综合能源系统在一个典型日内做日前经济调度目标函数是运行成本最小燃料成本天然气购气成本购电成本碳交易成本设备启停成本运维成本决策变量包括CHP和燃气锅炉的出力、P2G的产氢流量、CCS的捕集率、储气储罐的充放功率、与外电网的交互功率等。约束包括能量平衡、设备运行域、爬坡约束、储能动态、碳排放配额等。这些内容看起来学术但在Matlab里实现有一套非常成熟的流程下面我详细拆解。2. 系统架构与关键设备建模从物理过程到数学表达2.1 整体能量流拓扑设计我建模的系统拓扑如下这是综合能源系统研究里最经典的结构电网 ── 变压器 ── 交流母线 │ ┌─────────┬───────┼────────┬────────┐ │ │ │ │ │ 风电 光伏 CHP P2G CCU │ │ │ │ │ └─────────┴───┬───┴───┬────┴────────┘ │ │ 热母线 气母线 │ │ 热负荷 气负荷/锅炉从建模角度看各设备只跟母线打交道设备之间不直接相连这样耦合关系非常清晰尤其是后续在Matlab里写约束的时候按能量类型分组管理要省事得多。2.2 热电联产机组的可行运行域建模CHP是这套系统里最复杂的设备因为它的电出力和热出力强耦合。我采用的是目前文献里最常用的“可行运行域”法feasible operating region把CHP的运行范围描述成一个凸多边形通常是梯形或矩形顶点坐标由机组设计参数决定。一个典型的抽凝式CHP运行域如下热出力H (MW) ^ | A ──────── B | / \ | / \ | / \ | C ─────────────── D ----------------------- 电出力P (MW)各顶点对应关系A点最大电出力、最大热出力背压工况B点最大电出力、最小热出力纯凝工况C点最小电出力、最大热出力D点最小电出力、最小热出力在Matlab里我用顶点凸组合的方式表达运行域% CHP运行域顶点定义 [电出力, 热出力] P2G_CHP_vertices [ 100, 80; % A点 100, 20; % B点 45, 80; % C点 45, 20; % D点 ]; % 凸组合法每个时刻的运行点 顶点权重的加权和 % 权重变量 lambda(t, i)i1..4满足 sum(lambda)1, lambda0 % 电出力 P_chp sum(lambda_i * P_i)热出力 H_chp sum(lambda_i * H_i)这种凸组合建模的好处是直接绕开了非线性约束一个运行点必须在多边形内这种判断把CHP运行域变成一组线性等式约束求解速度非常快。代价是增加了变量数量——每时刻需要4个辅助变量。2.3 电解槽与甲烷化反应器建模P2G链条有两段反应第一段电解水制氢电 → 氢电解槽的效率一般在70%~85%之间我取的是0.78。模型上是线性的氢气产量kg/h 电功率MW× 1000 ÷ 电耗率kWh/kg H2× 效率实际代码里更简单的做法是直接用能量流% 电解槽模型功率输入 - 氢能输出 P_el sdpvar(1, T); % 电解槽电功率 H2_flow P_el * eta_el; % 氢能流量MW以氢的低热值为基准但这里要小心一个坑电解槽本身有最小负载率限制一般不允许低于20%~30%否则电解槽的寿命会明显下降。所以在约束里要加上P_el_min P_el_max * 0.3; % 最小负载率30% P_el_min P_el P_el_max;第二段甲烷化反应氢 CO₂ → 甲烷 水甲烷化的核心化学计量关系是CO₂ 4H₂ → CH₄ 2H₂O也就是说理论上生成1 mol甲烷需要4 mol氢气对应质量比例是1 kg甲烷需要约0.5 kg氢气。考虑到甲烷化反应器本身效率我取0.82实际需要的氢气量会更多。在Mathlab里我这样建模% 甲烷化反应器 M_CH4 H2_available * eta_methanation / H2_HHV_ratio; % M_CH4: 产甲烷量kg/h % H2_available: 进入反应器的氢能MW % eta_methanation: 甲烷化效率0.82 % H2_HHV_ratio: 氢气高位热值与甲烷高位热值折算比约0.5 kg H2 / kg CH4 % CO2消耗量约束按化学计量比 CO2_consumed M_CH4 * stoichiometric_CO2; % 化学计量比约2.75 kg CO2/kg CH4 % 因此捕集的CO2必须 CO2_consumed这条CO₂消耗约束是整个系统耦合的核心把CCS的产碳量和P2G的耗碳量绑在了一起。2.4 碳捕集系统的能耗与碳流建模我用的碳捕集系统是化学吸收法MEA法这属于比较成熟的技术。它的运行特性可以简化为两个参数捕集效率和单位再生能耗。实际建模中我采用了一个更精细的模型% CCU碳捕集系统 CO2_captured CO2_flue * capture_rate; % 捕集到的CO2流量 % 捕集能耗 E_ccu CO2_captured * e_p; % 电耗e_p约0.12 MWh/t CO2 H_ccu CO2_captured * h_p; % 热耗h_p约2.5 MJ/kg CO2 0.7 MWh/t CO2因为碳捕集需要消耗热负荷——通常从CHP的抽汽或者燃气锅炉获取——所以CCS装在系统里不仅仅影响碳流还直接影响热母线上的供需平衡。这一点很多初做的人容易漏掉CCS的热耗会抬高系统热负荷这相当于给CHP的“以热定电”火上浇油。3. Matlab实现从参数初始化到模型封装的完整代码框架3.1 顶层数据结构和参数表设计构建优化模型的第一步是定义清晰的参数结构。我自己在Matlab里摸索了一套比较顺手的组织方式用一个结构体数组统一管理所有设备参数% 参数初始化脚本 %% 系统基本参数 Params.T 24; % 调度周期24小时 Params.dt 1; % 时间步长1小时 %% 负荷与可再生能源预测数据24×1向量 load(load_data.mat); % 含Pel_load, Ph_load, Pwind_fore, Ppv_fore %% CHP参数 Params.CHP.P_max 100; % 最大电出力 MW Params.CHP.P_min 45; % 最小电出力 MW Params.CHP.H_max 80; % 最大热出力 MW Params.CHP.H_min 20; % 最小热出力 MW Params.CHP.vertices [ 100, 20; 100, 80; 45, 20; 45, 80 ]; % 运行域顶点 Params.CHP.eta_gas 0.42; % 燃料热效率 Params.CHP.gas_price 2.8; % 天然气价格 元/m3 %% P2G参数 Params.P2G.P_el_max 40; % 最大输入电功率 MW Params.P2G.P_el_min 12; % 最小输入电功率 MW30%负载率 Params.P2G.eta_el 0.78; % 电解槽效率 Params.P2G.eta_meth 0.82; % 甲烷化效率 Params.P2G.CO2_per_CH4 2.75; % 生产1kg甲烷消耗CO2的质量比 Params.P2G.H2_per_CH4 0.5; % 生产1kg甲烷消耗H2的质量比 %% CCU参数 Params.CCU.CO2_flue_max 30; % 最大可捕集烟气CO2流量 t/h Params.CCU.capture_min 0.3; % 最小捕集率 Params.CCU.capture_max 0.9; % 最大捕集率 Params.CCU.e_p 0.12; % 捕集电耗 MWh/t CO2 Params.CCU.h_p 0.7; % 捕集热耗 MWh/t CO2 %% 储能参数 Params.TES.cap 200; % 储热罐容量 MWh Params.TES.eta_ch 0.95; % 充热效率 Params.TES.eta_dis 0.95; % 放热效率 Params.GS.cap 20000; % 储气罐容量 m3 %% ... 更多参数把参数集中管理的直接好处是后期做灵敏度分析的时候只需要修改这一个文件里的数值不需要去翻整个模型代码大幅度减少出错概率。3.2 决策变量定义与分类我建议把所有决策变量统一命名为“状态量对象”方便在约束和求解时直接引用。变量按功能分四大类%% 定义优化变量YALMIP % 各变量维度均为 [1, T]T24 %% 第一类设备出力变量 P_chp sdpvar(1, T); % CHP电出力 H_chp sdpvar(1, T); % CHP热出力 P_gb sdpvar(1, T); % 燃气锅炉热出力 P_p2g sdpvar(1, T); % P2G输入电功率 P_wind sdpvar(1, T); % 风电实际并网功率 P_pv sdpvar(1, T); % 光伏实际并网功率 P_buy sdpvar(1, T); % 购电功率 % 注意弃风弃光量 预测值 - 实际值 %% 第二类碳流相关变量 CO2_capture sdpvar(1, T); % CCU实际捕集量 rate_capture sdpvar(1, T);% 捕集率0.3~0.9 E_ccu sdpvar(1, T); % CCU电耗 H_ccu sdpvar(1, T); % CCU热耗 CO2_storage sdpvar(1, T); % 封存CO2量不进入P2G %% 第三类储能状态变量 S_tes sdpvar(1, T); % 储热罐SOC P_tes_ch sdpvar(1, T); % 充热功率 P_tes_dis sdpvar(1, T); % 放热功率 S_gs sdpvar(1, T); % 储气罐SOC F_gs_out sdpvar(1, T); % 储气罐输出流量 %% 第四类CHP运行域权重变量 lambda_chp sdpvar(4, T); % 凸组合权重变量数量不多全算下来大概24×12288个连续变量属于中小规模LP/MILP问题用YALMIPGurobi求解基本在几秒内就能收敛。3.3 目标函数与约束条件的向量化写法目标函数我选择最小化系统总运行成本包括购电成本、燃料成本、碳交易成本、弃风弃光惩罚和运维成本。%% 构建目标函数 cost 0; % 1. 从电网购电成本分时电价 price_buy [0.6*ones(1,7), 1.2*ones(1,5), 0.8*ones(1,4), 1.4*ones(1,6), 0.9*ones(1,2)]; cost cost sum(price_buy .* P_buy); % 2. 天然气成本CHP和燃气锅炉用气 P2G产甲烷回补 gas_consume gas_consume_chp gas_consume_gb - methane_output_p2g; cost cost Params.gas_price * gas_consume; % 3. 碳交易成本碳排放CHP排放锅炉排放-捕集量超出配额的部分买碳 carbon_emission emission_chp emission_gb - CO2_capture; cost cost carbon_price * (carbon_emission - carbon_quota); % 4. 弃风弃光惩罚成本可再生能源浪费惩罚系数较大 cost cost penalty_curtail * (sum(Pwind_fore - P_wind) sum(Ppv_fore - P_pv)); % 5. 设备启停成本常规做法用Big-M引入0-1变量 % 对于运行域建模的CHP可以简化为固定运维成本 cost cost ope_cost_chp * sum(P_chp) ... ope_cost_ccu * sum(CO2_capture) ... ope_cost_p2g * sum(P_p2g); % YALMIP优化设置 optimize(Constraints, cost, sdpsettings(solver,gurobi,verbose,2));目标函数里有个细节要注意弃风弃光惩罚系数必须大于购电成本的最高电价否则求解器会优先选择弃掉可再生能源而不是多发电卖给系统——虽然这在数学上完全合理但从工程角度看显得反直觉。3.4 核心约束的Matlab代码实现能量平衡是最基本的约束也是最容易出bug的地方。我按母线类型分别构建%% 电功率平衡约束交流母线 % 等式约束电源出力 负荷 设备消耗 Constraints []; Constraints [Constraints, P_chp P_wind P_pv P_buy - P_p2g - E_ccu Pel_load]; %% 热功率平衡约束热母线 % 注意CCU的热耗也是热负荷的一部分 Constraints [Constraints, H_chp P_gb P_tes_dis - P_tes_ch - H_ccu Ph_load]; %% 气平衡约束气母线 % 天然气来源外购天然气 P2G产甲烷 % 天然气去向CHP 燃气锅炉 Constraints [Constraints, gas_buy methane_output_p2g F_gs_out - gas_consume_chp - gas_consume_gb 0]; %% CHP运行域约束凸组合法替代原来的上下限约束 Constraints [Constraints, sum(lambda_chp, 1) 1]; % 权重和为1 Constraints [Constraints, lambda_chp 0]; % 权重非负 Constraints [Constraints, P_chp Params.CHP.vertices(:,1) * lambda_chp]; % 电出力 Constraints [Constraints, H_chp Params.CHP.vertices(:,2) * lambda_chp]; % 热出力这些是核心约束的骨架。实际完整模型里还有CCS捕集约束、储热罐动态约束、爬坡约束我会在后面完整地展开。4. 优化调度模型的构建与求解细节4.1 目标函数的设计逻辑与惩罚系数设置目标函数设计是整个优化问题的“指挥棒”。一开始我给它设的目标函数是纯成本最小化结果跑出来的结果里系统几乎不捕碳——因为捕碳会拉高成本这完全符合经济逻辑但不符合我的研究意图。后来我把碳交易成本和碳配额加进去情况才改观。具体做法是给系统一个免费碳排放配额比如参考当地碳市场基准线实际排放低于配额的部分可以出售获利超出配额的部分必须以碳市场价格购买。碳交易价格参数很关键我参考的是国内碳市场近年的价格区间40~80元/吨CO₂灵敏度分析里会扫描这个参数。另外要注意惩罚系数的数量级匹配。弃风弃光惩罚我设的是500元/MWh而购电成本最高才1.4元/kWh即1400元/MWh——实际上这个惩罚系数需要比最高购电价更高才合理。我的实际设置是2000元/MWh这样能保证系统优先消纳可再生能源而不是在弃风和购电之间做投机选择。4.2 关键约束的数学表达及线性化处理约束一碳捕集率约束% CO2捕集量 烟气CO2流量 × 捕集率 % 烟气CO2流量主要由CHP和燃气锅炉出力决定 CO2_flue 0.5 * (P_chp P_gb); % 简化燃料燃烧CO2排放强度约0.5 t/MWh CO2_capture CO2_flue .* rate_capture; % 捕集率范围 0.3 rate_capture 0.9; % 捕集量上限 0 CO2_capture Params.CCU.CO2_flue_max;这里CO2_flue是线性函数所以CO2_capture CO2_flue * rate_capture是双线性项直接求解是非凸问题很麻烦。处理办法是把它改写成逐时段固定捕集率决策% 线性化引入0-1变量只选择3档捕集率 % 对于每个时刻t只能取一个档位 rate_levels [0.3, 0.6, 0.9]; z binvar(3, T); % 0-1变量 Constraints [Constraints, sum(z, 1) 1]; rate_capture rate_levels * z; % 逐时段选择捕集率档位 % 这样CO2_capture CO2_flue * rate_capture仍然是非线性但可以写成 % 因为rate_capture是离散的可以用线性约束等价 for t 1:T % 对每个档位用big-M线性化 for i 1:3 CO2_capture(t) CO2_flue(t) * rate_levels(i) - M * (1 - z(i,t)); CO2_capture(t) CO2_flue(t) * rate_levels(i) M * (1 - z(i,t)); end end这样问题就变成了一个MILP可以用Gurobi直接求解。代价是计算时间稍微增加但对于24小时的模型来说完全没有问题。约束二碳平衡约束% 捕集的CO2分为两部分供P2G甲烷化消耗 剩余封存/外送 CO2_capture CO2_p2g CO2_storage; % CO2_p2g 由P2G产甲烷量按化学计量比决定 CO2_p2g methane_output_p2g * Params.P2G.CO2_per_CH4; % 封存量约束 0 CO2_storage Params.CCU.CO2_storage_max;这条约束反映了CCS和P2G之间的碳流耦合。注意P2G的那个CO₂需求是上游电解槽产氢量决定的所以这个等式实际上把电解功率、甲烷化产率和CCS捕集量三个变量全部串联起来了。约束三储能装置动态约束%% 储热罐动态 Constraints [Constraints, S_tes(:, 2:T) S_tes(:, 1:T-1) dt * (eta_ch * P_tes_ch(:, 1:T-1) - P_tes_dis(:, 1:T-1) / eta_dis)]; Constraints [Constraints, S_tes(:, 1) S_tes0]; % 初始荷电状态 Constraints [Constraints, S_tes(:, T) S_tes0]; % 调度周期末回到初始保证周期解 Constraints [Constraints, 0 S_tes Params.TES.cap]; Constraints [Constraints, 0 P_tes_ch Params.TES.ch_max]; Constraints [Constraints, 0 P_tes_dis Params.TES.dis_max];这里的关键是末状态回零约束如果不加这个约束优化结果会把储能设备在最后一个时段全部放空虽然成本看起来更优但不符合工程实际不是真正的周期运行。4.3 求解器选择与调试经验我用的是YALMIPrGurobi的组合。有些环境下不方便用Gurobi可以换成免费的CBC求解器但对于中等规模的MILPCBC的速度要比Gurobi慢不少尤其是引入0-1变量之后。如果只是纯LP问题捕集率为连续变量用默认的linprog / sedumi / sdpnal都行秒解。我的经验是**第一步先把模型跑成纯LP验证约束和能量平衡是否正确彻底跑通之后再渐进式加入0-1变量和离散逻辑。**千万别一上来就奔着完整MILP去——报错的时候定位问题会非常痛苦。YALMIP常见报错排查报错信息原因定位解决方案YALMIP finds no feasible solution约束过紧或能量不平衡用check(Constraints)找出违反量最大的约束Double quadratic constraint出现了两个决策变量相乘用big-M线性化或离散化No suitable solver当前问题类型求解器不支持用yalmiptest检查求解器安装情况Infeasible problem约束存在矛盾逐步打开约束并进行可行性验证5. 仿真结果分析不同场景下的对比验证5.1 场景设置四个方案横向对比为了验证模型的有效性和P2GCCS联动的价值我设置了四个方案进行对比方案系统配置说明S1CHP 燃气锅炉无CCS无P2G基准场景传统热电联供S2CHP 燃气锅炉 CCS只加碳捕集无电转气S3CHP 燃气锅炉 P2G只加电转气无碳捕集S4CHP 燃气锅炉 CCS P2G完整系统CCS与P2G联动所有方案均包含储热罐风电光伏预测数据相同负荷曲线来自同一个冬季典型日数据。实际上跑了一次流程先分别模拟四个场景每个场景都调优参数到一致性再统一输出对比结果。5.2 运行结果成本、碳排放与弃电率在我的基准数据下CHP容量100MWP2G容量40MWCCUS捕集上限30t/h典型冬季日优化结果如下指标S1基准S2CCSS3P2GS4完整系统总成本万元52.656.848.344.1碳排放量t612385578246弃风弃光率%15.312.65.22.1外购电量MWh16815212498CO₂封存量t0960171P2G产甲烷量t0018.627.3几个重要发现S4总成本最低——比基准场景还低8.5万元说明CCSP2G联动不仅环保还能省钱这在很多人的直觉里是反的S2单独加CCS成本反而升高——验证了我前面的判断CCS是纯耗能装置如果不配合P2G做资源化利用经济性很差S4弃风弃光率从15.3%降到2.1%——说明P2G对消纳可再生能源的贡献非常显著夜间风电高峰时P2G全速运行把多余电量转化成天然气储起来。5.3 典型日逐时调度结果解析我提取了S4场景下冬季典型日的24小时调度结果给大家看看内部运行逻辑凌晨1:00~6:00风电高峰热负荷较高CHP满负荷供热但由于热需求大导致电出力偏高系统出现电力盈余。这时P2G开启利用盈余电功率制氢同时CCS满负荷捕集烟气中的CO₂将CO₂输送到甲烷化反应器与氢气合成甲烷注入储气罐。此时段储热罐也在蓄热。白天9:00~16:00光伏高峰电价较高系统中可再生能源出力充足CHP适度降低出力、以最低热出力运行。P2G在中高负载运行CCS持续工作。此时电负荷由光伏直接供给多余光伏电力优先发给P2G而不是卖给电网——因为V2G的反向电价低于P2G产甲烷的边际收益。晚间18:00~22:00负荷高峰电价最高系统出现电力和热力双峰需求。储热罐放热CHP优先保障热负荷同时尽可能提高电出力。储气罐释放天然气补充CHP和燃气锅炉的用气缺口降低外购天然气量。P2G降负荷或停机CCS继续捕集CO₂封存。这个运行逻辑非常“丝滑”因为模型中每一处耦合都通过价格信号和经济参数自然体现而不是靠外部设定规则硬性规定。5.4 碳交易价格灵敏度分析最后我做了一组碳交易价格扫描从20元/t到120元/t观察系统配置和运行策略的变化趋势碳价低于40元/t时系统基本不增加捕集量因为捕碳的边际成本高于碳价碳价在60~80元/t区间时CCS捕集率快速上升P2G运行小时数显著增加碳价超过100元/t后系统开始大量封存CO₂但P2G产甲烷量已被氢源上限绑定无法继续增长。这个结果对做政策模拟的人很有参考价值碳价并不是越高越好因为P2G的上游制氢能力是瓶颈它会限制整个碳利用链条的吞吐量。6. 我在调试这套模型时踩过的坑6.1 约束线性化中的big-M陷阱做MILP线性化的时候big-M的取值特别讲究。我开始设了个经验值M1000结果求解器老是报数值病态警告Gurobi计算时间暴涨。后来检查发现烟气CO₂流量乘以捕集率量级只在几十吨水平M取1000不但放大了数值偏差还破坏了模型的条件数导致求解器在分支定界时频繁做无效切割。M的取值原则取约束中最紧物理上限的1.1~1.2倍。比如CO₂捕集量上限30t/h那M取值取33~36就够既不会产生数值问题也不会因为M太小而错误截断可行域。6.2 捕集率连续变量时的非凸解最开始我没做离散化把捕集率作为连续变量0.3到0.9结果YALMIP报错说二次约束双线性。我当时觉得奇怪——捕集率跟CO₂流量相乘确实是双线性项这个问题在数学上就是非凸的。解决办法要么做离散档位变成MILP要么用S形惩罚函数近似。我最终选了离散档位方案因为对工程决策来说捕集率分三档低-中-高完全够用而且MILP有全局最优解保证比启发式算法可靠得多。如果研究中需要连续捕集率可以再考虑用分段线性化Special Ordered Sets或者外部逼近法配合求解器处理。6.3 储气罐的“伪收益”问题这是一个很小但很容易忽略的问题。如果不给储气罐设置合理的初始和结束SOC优化结果通常会“白嫖”——初始SOC设定为满结束时SOC清空实际上相当于系统免费得到了一批初始气体明显高估了经济收益。我踩过这个坑最开始跑S4场景总成本比其他场景低得离谱排查了很久发现是储气罐初始状态被我设成了50%满载、但周期末SOC没加约束——相当于模型让系统凭空“赚”了50%的气。后来我加上S_gs(T) S_gs0的周期约束所有结果才恢复正常。这也提醒后来者任何储能模型一定要闭环检查SOC首末是否成周期。6.4 负荷数据的时间颗粒度一开始用15分钟颗粒度的负荷数据跑24小时模型决策变量维度从24直接变成96MILP求解时间从5秒飙到了5分钟。后来发现日前调度研究的精度需求用1小时颗粒度已经足够完全没必要自找麻烦。如果是日内滚动优化MPC研究用15分钟更合适——但那就是另一套模型了。先想清楚研究需求再定时间颗粒度别盲目追求“更细”。6.5 CO₂储罐容量与P2G容量的匹配关系我还有一次因为CO₂储罐容量设置不当导致优化结果里碳捕集量一直卡在上限但P2G的CO₂消耗量跟不上。后来检查发现CO₂储罐容量设置得太小甲烷化反应器的进气量受限——P2G和CCS之间需要加一个CO₂缓冲储罐模型容量至少要满足P2G满负荷运行4小时以上的CO₂消耗量否则催化剂床层的供气稳定性没法保证。工程上这个缓冲罐的容量通常按“P2G满负荷运行2~4小时所需CO₂量”来设计。我在模型里加了CO₂储罐的容量和初始/终态约束后整个碳循环链条的运行平滑度明显改善。最后再分享一点做这套模型的心得整套模型从动笔到跑通我大概花了三周真正写代码的时间并不多大头都花在改约束和查数据上了。如果让我从头再做一次我会重点关注三类数据**CHP机组的真实运行域参数跑平台能拿到、电解槽和甲烷化的实测效率曲线实验室数据更细、以及本地碳市场的历史交易价格。**这三组数据质量上去了模型结果才会真正让人信服。关于后续扩展我觉得可以往三个方向继续做一是把模型从日前调度扩展成两阶段鲁棒优化应对风电和光伏预测的不确定性二是把P2G生成的甲烷进一步用在交通负荷上从“电-热-气”扩展成“电-热-气-氢-交通”走廊三是把碳捕集系统的详细化学反应动力学不仅仅是能量和碳流模型嵌入进去研究捕集率和再生能耗之间的非线性关系。这些是下一步的事了先把基础模型吃透后面再怎么飞都不怕。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →