ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

考虑P2G与碳捕集的热电联供综合能源系统优化调度模型解析

考虑P2G与碳捕集的热电联供综合能源系统优化调度模型解析 简介面向综合能源系统优化调度研究的MATLAB源程序完整复现了考虑电转气P2G与碳捕集设备的热电联供综合能源系统优化调度模型模型耦合热电联产单元、电转气单元与碳捕集单元并将碳交易机制纳入系统运行优化可用于毕业设计、课程项目或科研仿真。资源共10个文件以6个m源程序文件和4个png结果图为主压缩包仅894KB包含主程序、四个算例模型及绘图函数输出曲线完整结构清爽便于快速定位与执行。核心价值在于对照论文完整实现了四种算例场景均不含P2G、碳捕集和碳交易仅含P2G含P2G与碳捕集但无碳交易三者全含运行代码即可逐一比较不同技术组合对调度结果的影响为碳交易政策下综合能源系统优化提供实验依据。配套论文可在知网下载作者博客另有解读已有210人学习适合能源相关专业学生及研究者参考或扩展使用。1. 把P2G、碳捕集和热电联供塞进一个调度模型最优解会往哪偏西北某热电厂冬季热电联供机组满负荷运行但现货市场谷电已经跌到地板价甚至出现负价与此同时碳排放配额逐年收紧每吨配额的价格比去年高了不少。这个项目的切入点在同一个模型里同一套热电联供机组加不加电转气P2G、加不加碳捕集设备、加不加碳交易机制从代码层面看只是多几行约束和多几个变量但最优解的趋势会完全反转。这份MATLAB源程序对应论文《考虑P2G和碳捕集设备的热电联供综合能源系统优化调度模型》用Main.m统一调度model1.m到model4.m分别实现四种机制组合plotfun.m负责出对比图正好覆盖了综合能源系统优化调度里最常用的四个递进场景。对需要复现多能互补调度模型、以及准备综合能源方向毕业设计的人来说最好奇的是两个问题四个模型文件为什么不能合成一个函数P2G和碳捕集在约束里的写法究竟哪里不同。下面先从机理层面把四条能量通路的约束边界写清楚。2. 热、电、气、碳四条能量通路在模型里的约束边界2.1 CHP机组的凸可行域四条不等式围成的运行多边形综合能源调度模型里出现频率最高的设备是抽汽式热电联供机组。它在电出力P_e和热出力H_h构成的二维平面上运行区域是一个凸多边形边界来自主蒸汽流量上限、最小凝汽流量、最大抽汽量以及背压工况下的电热比线。四条边写成一组线性不等式% CHP 可行域约束变量顺序为 [P_e; H_h] % 这组矩阵参数在 model1.m 到 model4.m 中保持一致 A_chp [-1.2 1.0; -0.3 -1.0; 1.0 1.8; 1.0 -0.6]; b_chp [10; -5; 280; 95]; Cons [Cons, A_chp * [P_e; H_h] b_chp];第一行约束保证热出力较高时机组仍维持最低电出力第三行对应主蒸汽流量上限第四行防止电出力过大、热出力过低导致凝汽流量超限。四条不等式围出的凸包就是CHP的运行区间实际写代码时很少有人手算这组数常见做法是根据电热比设计参数直接生成然后用CHP_region()函数包起来。容易犯的错误是把它简化成矩形矩形会严重高估机组在“高电低热”区域的调节能力导致优化结果给出一个物理上不可能实现的调度方案。调参数的时候电热比r和最小凝汽系数c对结果影响最大CHP参数单位典型范围影响最大电出力P_e,maxMW100200决定可行域右边界最大热出力H_h,maxMW80160决定可行域上边界背压电热比r-0.61.2决定可行域斜边斜率最小凝汽流量系数c-0.150.3决定可行域左下边界2.2 P2G的效率通道电到气是两步转换不是单设备效率P2G的实际流程是电解制氢加甲烷化两个环节串联总效率不是某一个设备的铭牌效率而是两步的乘积η_p2g η_el × η_meth电解槽效率η_el一般在0.650.75甲烷化效率η_meth在0.750.85综合下来约0.500.64。model2.m里出现的效率系数通常落在这个范围。如果只盯电解槽的90%效率会高估整个P2G通道的收益进而得出“谷电时段可以无脑启动P2G”的错误结论。在约束层P2G只有一个等式和两个不等式% model2.m 中 P2G 核心约束 G_p2g(t) eta_p2g * P_p2g(t); % 产气量等于耗电量乘以效率 0 P_p2g(t) PARAM.p2g_cap_max; % 耗电功率上限 0 G_p2g(t); % 产气量非负这里值得强调P2G产出的气在模型里不能直接变成钱它必须进入气负荷或储气罐才有价值。因此model2.m里会同步出现一个储气罐节点% 储气罐平衡约束 V_sto(t1) V_sto(t) G_p2g(t) - G_burn(t); 0 V_sto(t) PARAM.sto_max;注意P2G容量和储气罐容量是两个独立参数跑优化前把两者都检查一遍否则P2G产的气没处放优化器会直接把P2G出力压到零。2.3 碳捕集设备电耗与热耗同时产生双重平衡修正碳捕集设备不是只消耗一点辅助电力它的再生蒸汽消耗是主要热负荷。模型里通常用线性系数把捕集量映射成电耗和热耗% model3.m 中碳捕集设备约束 M_cap(t) PARAM.lambda_ccs * PARAM.phi_chp * P_chp(t); % 捕集量正比于CHP出力 P_ccs(t) PARAM.alpha_e * M_cap(t); % CCS耗电 H_ccs(t) PARAM.alpha_h * M_cap(t); % CCS耗热 H_chp(t) LOAD_h(t) H_ccs(t); % 热平衡多出CCS热耗捕集率lambda_ccs越高、能耗系数alpha越大场景3的热负荷抬升越明显。如果热负荷曲线原本就很紧CCS甚至会把系统逼到无法同时满足电负荷和热负荷的境况这不是代码bug而是物理约束的边界。碳捕集出来的CO2如果直接排放掉等于花了电和热却没有经济回报它只有在与P2G耦合时才体现价值因为P2G的甲烷化环节正好需要CO2作为原料。这个耦合点是model3.m和model4.m建模的核心。2.4 碳交易机制目标函数里的一行线性项决定全部调度倾向碳交易成本表达式C_trade p_carbon × (E_real - E_quota)E_real是系统实际碳排放量E_quota是免费配额p_carbon是碳价。当实际排放超过配额时需要购买低于配额时可以出售。model4.m在目标函数上叠加这个线性项之后系统才开始主动权衡“烧煤加外购电”和“用P2G加CCS”两条路径的成本差异。碳交易参数单位典型范围说明免费配额E_quotatCO2总排放的80%~100%配额越紧碳成本越明显碳价p_carbon元/t50200试点碳市场价格区间排放强度φ_chptCO2/MWh0.50.9按机组燃料热值折算提示碳价最好按论文给出的灵敏度区间逐点扫描观察目标函数曲线的拐点。拐点之后场景4的调度倾向会发生明显转变。3. Main.m到model1-4.m四个优化模型的代码骨架与调用链3.1 总控调度Main.m如何把四个场景串成一次批量计算解压后的文件结构非常直观Main.m是总控model1.m到model4.m是四个场景主体plotfun.m是出图函数剩下几张PNG是作者跑完留下的结果参考图。Main.m的调用逻辑大致如下Main.m ├── 数据准备负荷曲线、分时电价、设备参数 ├── 场景1model1.m — 无P2G、无CCS、无碳交易 ├── 场景2model2.m — 有P2G、无CCS、无碳交易 ├── 场景3model3.m — 有P2G、有CCS、无碳交易 ├── 场景4model4.m — 有P2G、有CCS、有碳交易 └── plotfun.m — 四个场景结果画在一起代码主体可以理解为以下形式%% Main.m —— 四场景调度结果对比 clear; clc; close all; PARAM load_parameters(); % 读入设备参数、碳价、负荷 [LD_e, LD_h] load_profile(); % 电负荷与热负荷曲线 [res1, det1] model1(LD_e, LD_h, PARAM); % 基准场景 [res2, det2] model2(LD_e, LD_h, PARAM); % 加入P2G [res3, det3] model3(LD_e, LD_h, PARAM); % 加入P2GCCS [res4, det4] model4(LD_e, LD_h, PARAM); % 加入P2GCCS碳交易 plotfun(res1, res2, res3, res4); % 统一出图四个res结构体里保存了各场景的决策变量结果和总成本det保存了逐时段的详细数据。这种分层结构的好处是跑场景4时如果报错不需要动场景1的代码做灵敏度分析时只需要改PARAM结构体里对应参数然后重新调用model文件。3.2 决策变量布局按设备分向量比二维矩阵直观拆开model文件能看到决策变量大多按设备类型分开定义而不是集中在一个大矩阵里% 典型的决策变量定义方式T为调度时段数 P_chp sdpvar(1, T, full); % CHP电出力序列 H_chp sdpvar(1, T, full); % CHP热出力序列 P_p2g sdpvar(1, T, full); % P2G耗电序列 V_sto sdpvar(1, T, full); % 储气罐储量序列这种写法在YALMIP里可读性最好约束构造时语义清晰。代价是变量数量增多后内存占用会涨得比较快T24、设备十几台的情况下完全够用。如果要把时间扩展到168小时以上我一般会改用大矩阵加索引切片的方式确保求解器构建模型的速度不成为瓶颈。3.3 四个model文件差异的六个关键点四个模型文件的代码量递增但真正影响结果的差异只有六处差异点model1model2model3model4电平衡中出现P_p2g否是是是热平衡中出现H_ccs否否是是P2G效率等式GηP无有有有CCS捕集量等式MλφP无无有有CO2从CCS流向P2G的耦合无无有有目标函数中的碳交易成本无无无有写代码时最需要小心的是第三到第五行它们都是等式约束直接决定变量间的关系。model2和model3之间最大的变化不在P2G而在于热平衡中多出的H_ccs以及CO2流量在CCS和P2G之间的衔接。错过一个等号场景成本会偏掉一个数量级。3.4 求解器配置Gurobi与CPLEX的接口和容差设置四个场景都是确定性优化问题在连续变量条件下本质是线性规划。用YALMIP建模后求解器选用Gurobi或CPLEX是常见做法% 使用Gurobi求解 ops sdpsettings(solver, gurobi, verbose, 1); ops.gurobi.mipgap 0.01; % MILP时使用 ops.gurobi.timelimit 300; % 单位秒 optimize(Cons, Objective, ops);如果换成CPLEX求解器名称和容差参数写法略不同ops sdpsettings(solver, cplex, verbose, 1); ops.cplex.mip.tolerances.mipgap 0.01;提示Gurobi对纯LP模型不回调mipgap参数这个设置只在MILP场景下起作用。如果模型里加入了设备启停的0/1变量求解时间可能从几秒涨到几分钟这时mipgap建议放宽到1%5%。4. 四种算例场景如何排序、对比与出图4.1 场景定义从基础模型到完整碳交易模型包内简介对四种场景定义得很明确场景1不包括P2G、CCS以及碳交易场景2包括P2G但不包括CCS以及碳交易场景3包括P2G和CCS但不包括碳交易场景4包括P2G、CCS以及碳交易。四个场景并不是同一份代码改开关参数而是四个独立成型的模型文件。这种做法在复现论文四个case时优势明显避免了单个模型里用if判断开关导致的变量维度混乱代价是公共参数改动时需要同步四个文件。4.2 对比表里该放哪些指标场景对比建议关注总运行成本、碳排放量、CHP电出力峰值、外购电峰值、P2G产气量和CCS捕集量这六个指标指标场景1场景2场景3场景4总运行成本基准可能降低可能升高取决于碳价CHP电出力峰值基准略降持平明显下降外购电峰值基准可能上升上升或持平上升碳排放总量基准基本不变下降下降最多场景2里外购电增加是正常现象因为P2G在谷电时段“吃电产气”替代的是天然气采购成本场景3总成本可能比场景2高因为CCS的电热双耗进入约束后系统需要额外满足热平衡场景4在碳价较高时调度结果会主动压低CHP电出力把缺口交给外购电和P2G来补。4.3 plotfun.m如何组织子图和坐标轴plotfun.m的核心任务是把四个场景的时序结果并列展示。子图布局大致如下% plotfun.m 中习惯的子图布局 figure(Position, [80 80 1200 800]); subplot(2,2,1); % 电功率平衡曲线 stairs(t, res4.P_chp, linewidth, 1.5); hold on; stairs(t, res4.P_grid res4.P_p2g, --, linewidth, 1.2); legend(CHP出力, 外购电P2G, Location, best); ylabel(电功率/MW); subplot(2,2,2); % 热功率平衡 stairs(t, res4.H_chp, linewidth, 1.5); hold on; stairs(t, LOAD_h res4.H_ccs, --);出图时最基础也最关键的是单位统一。功率用MW能量用MWh单价用元/MWh不要混着画。有的曲线用MW画出来和用MWh画出来形状一样但绝对值差了好几个量级写进论文以前至少对一遍纵轴单位。这个错误的隐蔽性极高因为波形一样缩放系数又恰好是整数。4.4 最容易读错的三个图第一张是电平衡图容易把P2G耗电曲线当成外购电曲线。P2G只会在谷电时段启动峰值对应的往往也是新能源大发时段和外购电峰值位置经常错开。第二张是热平衡图CCS热耗曲线和热负荷曲线叠加后CHP热出力会出现双峰这个双峰是真实的物理约束结果不是求解异常。第三张是碳成本曲线碳交易收益为负说明实际排放超过配额模型仍然收敛只是碳价没有选到减排拐点之上。5. 从固定模型改成自己的调度系统周期、系数与求解器容差调整5.1 从24小时扩展到168小时的改动点四个model文件的调度周期T默认是24改成168小时只需把负荷、电价序列同步拉长再把目标函数里所有写死长度的表达式改成动态读取。检查点包括负荷曲线是否覆盖七日峰谷规律、储气罐初始储量是否重置、碳配额是否需要按时间尺度折算。扩展周期后连续变量LP问题的求解时间通常仍然可控但约束矩阵规模增长到原来的七倍YALMIP的建模耗时可能比求解耗时更长。5.2 系数替换检查清单替换成自己的系统时按这份清单逐项核对参数检查点η_p2g是否在0.500.64区间λ_ccs是否在0.850.95φ_chp是否与燃料热值匹配E_quota是否按总排放量的80%附近设定p_carbon是否与当期试点碳价一致5.3 求解卡死或数值异常时先查什么跑出NaN或长时间不出结果先看单位量纲。功率用MW、能量用MWh、单价用元/MWh如果把3.2元/kWh直接乘进去量纲差出1000倍CPLEX预求解阶段就会直接失败。其次是检查YALMIP当前求解器是否适合模型类型纯线性模型误选fmincon会非常慢选cplex或gurobi之后几分钟内就能出解。最后把储气罐初值设为一个极小的正数避免零值展开时给求解器留下退化空间。这套检查做下来绝大多数“跑不通”的问题都能定位到参数而不是代码逻辑。本文还有配套的精品资源点击获取
返回列表