ARTICLE DETAIL

资讯详情

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

P2G电转气综合能源系统规划:Matlab+YALMIP复现全解析

P2G电转气综合能源系统规划:Matlab+YALMIP复现全解析 这段时间我在复现一篇《计及P2G厂站的电-气综合能源系统规划研究》的硕士论文从模型啃读到代码落地前后折腾了将近三周。中间踩了不少坑也总结了一些很实用的经验。这篇博文我就把自己整个复现过程摊开来说——包括P2G的原理拆解、电-气耦合的数学建模思路、Matlab代码框架怎么搭、算例结果怎么分析以及复现论文时容易遇到的那些麻烦事。不管你是正在选毕业设计题目还是要复现同类文献这篇文章应该都能帮你省下不少时间。先说清楚这篇论文到底在研究什么。P2G全称Power to Gas中文叫电转气。核心思路是把富余的可再生能源电量用来电解水制氢氢气再和二氧化碳发生甲烷化反应生成合成天然气注入天然气管道。这样电力系统和天然气系统就完成了能量层面的双向耦合。论文的研究目标就是在给定的电网和气网拓扑结构下回答三个问题P2G厂站建不建、建多大、建在哪个节点。这是一个典型的混合整数规划问题Matlab配合YALMIP加CPLEX求解器可以很好地落地。1. 规划问题解析与整体设计思路1.1 为什么要研究P2G它的核心价值在哪里可再生能源大规模并网之后弃风弃光问题越来越突出尤其在北方地区夜间风电出力大但负荷低电网消纳不了。传统的调峰手段比如火电灵活性改造、抽水蓄能要么有容量限制要么受地理条件约束。P2G提供了一条全新的思路把暂时用不掉的电转化为天然气利用天然气管网和储气设施实现大规模、长时间的能源存储。这里需要注意P2G和电储能是互补关系。电化学储能的响应速度快、往返效率高大概85%-95%但成本高、容量有限适合调频和日内短时平衡。P2G整体效率目前只有50%-65%但有天然气管网这种现成的大容量存储基础设施可以实现季节级的能量搬移。夏天光富余秋天用这个场景电储能做不到。所以P2G的定位不是替代电储能而是在高比例可再生能源系统中承担跨时间尺度平衡的补充角色。对比来看P2G还有一个隐性价值耦合了碳循环。甲烷化反应需要CO₂如果能从电厂捕集CO₂合成天然气能实现碳的闭环利用在双碳目标下这是非常受关注的路径。论文里通常会把碳排放成本写进规划目标函数这一点需要在建模阶段就考虑进去不然后面加进去会非常麻烦。1.2 规划模型的整体架构与决策变量体系整个规划问题的输入参数包括电网拓扑和线路参数、天然气网拓扑和管道参数、逐时负荷曲线、风电场出力场景、P2G厂站的候选安装节点与候选容量档位以及各类设备的经济参数。输出结果是P2G厂站的安装位置和容量、电网是否需要增容改造、天然气网是否需要建设新管道或加压站、各时段电力与天然气的运行方案。论文规划的决策变量可以分成两类。第一类是二进制投资决策变量用来表示候选节点是否安装P2G设备、是否扩建线路、是否新建管道。第二类是连续运行变量包括每台火电机组的出力、风电场实际出力、P2G在各个时段的耗电量与产气量、天然气网各节点的流量与压差、储气设施的储放气状态等。从数学本质上看这是一个带混合整数变量的优化问题。规划层决定设备在哪建、建多大运行层在给定规划方案下模拟一年的运行状况算年运行成本。两个层面交织在一起形成典型的规划-运行耦合模型。论文里通常的处理方式是构建一个双层优化结构上层规划决策下层运行优化。如果想让求解过程简单一些可以使用KKT条件把下层问题转换成上层约束或者用启发式算法对上层进行优化下层调用求解器返回适应度值。1.3 为什么选择Matlab实现以及代码的总体设计选Matlab而不是Python或者GAMS主要原因是MatlabYALMIP这一套组合在学术界极其成熟。YALMIP是一个免费的Matlab优化建模工具箱支持直接声明二进制变量自动检测问题类型并调起底层求解器写复杂约束的时候非常顺手。论文复现要频繁修改约束条件YALMIP的灵活性比硬编码成CPLEX语法舒服得多。代码整体结构我用了模块化设计整个文件夹包含以下核心文件主程序main.m负责总控和数据初始化case_energy.m定义电网和气网的联合拓扑结构p2g_model.m构建P2G运行模型opf_constraints.m构建电力系统和天然气系统的全部约束solver.m负责调用CPLEX/Gurobiresult_analysis.m输出分析图表和报表。这样分层的意义在于调试方便如果求解结果是不可行的可以逐个模块检查约束而不是在一个接近2000行的脚本里大海捞针。2. P2G模型细化与关键参数取值2.1 P2G电转气全过程建模P2G的过程在模型里通常拆成三段电解水制氢段、氢甲烷化段、气体注入段。电解水环节的输入是电力输出是氢气和氧气。制氢量可以通过法拉第效率来计算但在规划模型中一般简化成一个常数效率系数用输入电功率乘以效率得到产出氢气的等效热值功率。常用的表达是H₂质量流率等于输入电功率除以单位质量氢气所需电耗。甲烷化环节是氢气与二氧化碳的放热反应化学方程式是CO₂加4H₂生成CH₄和2H₂O。这里有几个关键点。第一从氢到甲烷的转换热值维度下效率可以近似取0.8到0.85也就是说1kW的氢气化学能大约可以产出0.8kW左右的甲烷化学能损失的部分主要是反应热。第二需要消耗CO₂规划模型中通常假设CO₂来源充足由外部碳捕集设施供应或者作为外购原料计成本。第三如果跳过甲烷化直接向天然气管道掺氢可以省去甲烷化步骤和CO₂消耗效率更高但受限于管道和终端设备对氢的耐受比例。P2G整体效率是电解效率和甲烷化效率的乘积以当前技术水平看大致在50%到65%区间论文里取一个中间值比如0.6比较稳妥。值得注意的是P2G的耗电量不是静态的部分论文会采用效率随负载率变化的曲线负载率高时效率更高。在做论文复现时如果原文没有明确给出效率曲线信息先用常数效率做基准版本后面再做灵敏度分析。2.2 关键经济参数与等年值折算方法规划模型的时间跨度通常是20年建设投资需要折算成年值这样才能和年运行成本直接相加。折算方法用的是资本回收系数CRF公式为CRF等于折现率乘以1加折现率的N次方再除以1加折现率的N次方减1。N是设备寿命年数折现率一般在0.06到0.1之间。举个例子直观算一下。假设一个P2G厂站单位投资成本是每千瓦4000元安装容量是100MW那么总投资是4亿元。折现率取0.08寿命取20年CRF代入公式计算约为0.10185。折算成年投资成本就是4亿乘以0.10185约为4074万元。这个数值要记下来后面会直接填进目标函数。其他关键经济参数可以整理成下面这个表格方便复现时对照使用。P2G厂站的单位投资成本取值区间大概在3000到6000元每千瓦运行维护费用按投资的3%到5%计。火电单位发电成本在0.25到0.4元每千瓦时。购气价格在2到3元每立方米。碳税参考价格有的论文取每吨50元高的也有取到200元的。注意单位换算天然气从立方米换算到千瓦时热值大约为每立方米9.87千瓦时乘以0.9到0.95就是等效热值转化系数。2.3 涉及P2G的关键运行约束P2G运行区间的约束有两层含义。第一层是出力和容量的关系任意时刻的耗电功率不能超过安装容量也不能低于最小技术出力通常取额定容量的20%到30%防止设备频繁启停。第二层是爬坡约束因为P2G厂站启停和调节都需要时间模型中会加入每小时功率变化限值。P2G在电力侧的建模有点类似负荷在某个节点消耗有功功率。而在天然气侧则类似气源向节点注入气流。这种特性让P2G成为电力系统和天然气系统的天然耦合点。在做电气联合系统潮流计算时P2G的天然气注入量与电力消耗量之间要保持能量平衡关系这个耦合公式必须写得非常小心因为电力有功功率单位是MW而天然气注入量单位可能是立方米每小时或者MW热值涉及两套单位制的转换。3. 电-气耦合系统建模与Matlab代码实现3.1 电力系统运行约束的建模方法电力系统约束采用直流潮流模型。之所以不用交流潮流是因为规划问题的时间跨度是一年8760个小时而且和天然气系统的非线性约束耦合在一起如果采用交流潮流模型求解规模会非常庞大计算时间不可接受。直流潮流的误差在规划层面的尺度上是完全可以接受的。直流潮流的核心约束包括节点有功平衡、线路潮流上下限、发电机组出力上下限、以及线路功率与相角差的关系式。在Matlab里用YALMIP实现时线路潮流约束要写成矩阵形式定义节点导纳矩阵B之后用相角变量乘B矩阵得到各支路功率。YALMIP对矩阵运算支持得很好直接一行就可以定义全部线路约束。风电场的处理也值得一提。为了简化风机出力按给定预测曲线固定处理不做弃风惩罚但在目标函数中如果允许弃风需要给弃风量加一个很低的价格系数。还有一种更学术的处理方式是在约束中强制风电消纳比例不低于某个阈值比如85%这样P2G的容量优化就会显式地和弃风消纳挂钩效果更直观。3.2 天然气系统建模与Weymouth方程的处理天然气系统的核心是一个节点流量平衡方程每个天然气节点上气源供气量加管道注入量加P2G产气注入量等于天然气负荷加管道流出量。管道的流量和节点压力之间是非线性的Weymouth方程这是整个模型里最难处理的部分也是论文复现的一大技术门槛。Weymouth方程的标准形式是管道流量等于管道常数乘以节点高压侧压力平方与低压侧压力平方之差的平方根。这个方程同时包含平方和开方运算在规划模型中通常用两种方式处理。一种是分段线性化将压差平方差区间划分成若干段在每个段内用线性近似这种方法精度可控但会增加二进制变量增大计算量。另一种是增量线性化引入连续的非负变量对非线性函数进行线性逼近配合凸组合约束一起使用。实际复现时我建议先用较为粗放的两段线性化跑通整个流程确认模型逻辑无误后再加密分段数逼近精度最后与原文结果核对误差。3.3 目标函数与耦合约束的YALMIP实现框架目标函数在Matlab中实现为年成本最小化包含四个大项P2G厂站等年值投资成本电网线路扩展投资成本火电运行燃料成本以及碳排成本和购气成本。因为天然气价格和碳排放价格市场波动较大论文里通常会设置多个情景做对比而不是给一组固定数。核心的耦合约束有两类。第一类是P2G节点上的电力消耗功率等于天然气注入量乘以对应的转换系数写成代码时要注意量纲统一。第二类约束是天然气网节点上的气流平衡P2G注入相当于负的负荷。这两类约束写在约束循环里把一个典型日或全年各时段的运行点串起来。% P2G耦合约束示例 % x_p2g为二进制安装决策P_p2g为P2G耗电功率变量 % G_p2g为P2G产气热值功率变量 % eta_p2g为P2G综合转换效率 G_p2g eta_p2g * P_p2g; % 产气热值与耗电功率关系 % 天然气节点流量平衡约束中p2g注入量为正 % 电力节点功率平衡约束中p2g耗电量为负这页代码看着简单实际运行的坑在于变量维度匹配。全年8760小时加上几十个节点变量规模达到几十万个一不小心就会报维度错误。我的经验是先跑一个24小时的小规模测试算例确认所有约束的维度都正确之后再扩展到全年场景。3.4 求解器配置与性能调优求解器层面我强烈建议用CPLEX或Gurobi两者对混合整数线性规划的支持都非常优秀。开源求解器里可以考虑SCIP不过性能差距在大型算例上会比较明显。代码里需要设置求解精度参数和计算时间上限防止某些算例因为数值问题一直跑不完。实际运行下来一个包含24节点电网加20节点气网、8760小时逐时运行的模型用CPLEX求解时间大约在几分钟到十几分钟量级。如果发现求解时间异常长优先检查两个地方一是Weymouth方程的分段线性化变量数量是否过多二是有没有被写成非线性的多线性项。很多时候求解慢不是求解器不行而是约束建模时引入了不必要的非线性项导致MILP变成MINLP。注意在调用CPLEX之前需要确认YALMIP和CPLEX的版本兼容性。Matlab版本升级后YALMIP底层求解器接口偶尔会出错如果求解器一直报告许可证错误优先去YALMIP官网更新版本这问题我遇到过不止一次。4. 算例设计与结果分析思路4.1 测试系统的搭建与数据准备算例部分我采用的是一个小规模的电气联合系统电网用IEEE 24节点系统改编天然气网用比利时20节点天然气系统简化版。两套系统的耦合点选取在风电功率较强的节点附近这样P2G消耗风电的物理意义更强结果解释起来也更顺。数据准备阶段需要四份文件系统拓扑参数表、机组参数表、负荷与风电逐时曲线、经济参数表。拓扑参数表里每一条线路都包含首尾节点、电阻电抗、传输容量上限。曲线数据我用了典型日加季节比例的合成方式通过春夏秋冬四个典型日乘以天数加权合成全年8760小时的数据这样既能减少数据获取难度又能保留季节差异。4.2 多情景对比与结果解读方法结果分析的核心方法是情景对比。我设置了三个基准场景。场景一是无P2G的基础场景风电场面临弃风系统运行成本偏高。场景二是P2G容量可自由优化的场景看规划模型自动选择P2G的位置和容量。场景三是高碳税场景此时P2G的价值因为碳排放约束而被放大装机容量会显著增加。从结果数据看当P2G容量从零增加到最优值附近时弃风率大幅下降风电利用率明显提升系统总成本呈先下降后上升的U型曲线。这个拐点就是经济最优容量。拐点出现的逻辑很清晰P2G投资成本随容量增长是线性的但弃风减少带来的收益是边际递减的两条线一交叉最优值就出现了。4.3 追踪关键财务指标的深层变化除了总成本还需要关注两个关键指标一是P2G年利用小时数也就是全年产气时间等效满负荷运行小时数二是单位天然气生产成本的平准化指标计算方法是用P2G对应年份全部成本除以全年产气总量。这两个指标能够帮助判断一个P2G项目从经济上是否可行。复现中可以发现P2G厂站的利用小时数通常低于2000小时因为可再生能源富余时段有限。单位产气成本和市场天然气价格相比不具备优势甚至高出两到三倍。这说明当前阶段的P2G更适宜从系统效益或环境效益去评估单纯用市场经济性衡量会得出偏负面的结论。这也是论文分析和答辩时经常被追问的点。5. 常见报错、定位方法与复现心得5.1 求解可行性报错的排查顺序模型中最多见的报错是infeasible problem也就是模型无可行解。排错时我的顺序是先检查所有等式约束的维度匹配再检查等式约束的量纲统一然后怀疑出力和容量约束有没有写反最后检查P2G耦合公式是否自洽。按照这个顺序一般半小时内能找到问题。一个典型的隐蔽错误来自P2G耦合约束电力有功功率用的是MW而天然气热值用的是kW或者立方米两者直接相等就会导致天然气侧数值异常约束中不小心出现G_p2g大于P_p2g数倍的情况整个模型直接不可行。遇到过这种问题之后我现在写约束的第一时间就会在注释里标记单位形成习惯后错误率大幅下降。5.2 CPLEX许可证和数值振荡问题许可证报错是另一个重灾区尤其是Matlab更新之后。遇到license问题先检查环境变量再检查YALMIP版本最后检查CPLEX当前支持的Matlab版本列表。如果用的是学校或公司的license还需要检查许可证服务器地址是否正确。数值振荡问题的典型表现是相同的代码换一台机器或换一个Matlab版本求解结果发生明显变化。原因大多是模型中的大数与小数量级差异过大比如投资成本动辄上亿元而某些运行变量只有个位数数量级。解决办法是对目标函数各项分别归一化或者统一调整单位比如投资成本改用百万元为单位运行成本用十万元为单位让目标函数各项在相近数量级数值稳定性会大幅提升。5.3 复现硕士论文代码的通用方法最后聊一点复现论文代码的通用方法论也是我这次体会最深的地方。第一步不要急着写代码先把论文的数学模型完整抄一遍把所有公式编号列出来。第二步用最简单的两节点系统验证核心公式的正确性。第三步逐步扩展到标准测试系统。第四步对关键参数做灵敏度分析和原文结果对比。整个过程里数学推导的准确性远比代码速度重要。还要注意和原文结果做误差对比的时候参数取值必须和原文一致。如果原文没写清楚某个经济参数不要自行猜测后就抱怨对不上而是要补一个参数敏感性分析说明结果对参数的依赖程度。这个过程是学术复现工作里最有价值的部分写进毕业论文或小论文里都是加分项。关于版本兼容性我推荐用Matlab R2021b以上版本配YALMIP最新版和IBM CPLEX 12.10或20.1。这个组合我实测下来最稳。如果你用的是Gurobi注意它的许可证配置方式和CPLEX不太一样第一次配置建议参考官方手册逐步操作不要凭经验套CPLEX的配置流程。我个人使用中的另外一个实际操作经验是每修改一次约束或参数先把结果写入带时间戳的.mat文件保存。这样回溯问题时能快速定位是哪一次参数修改导致结果恶化不用来回重跑整个模型。对于规模较大的算例一次求解可能要好几分钟这个习惯能节省大量时间。这篇文章写到这里核心的东西基本都覆盖了。P2G的技术原理和适用场景电气耦合模型的目标函数约束体系Matlab代码的结构设计和求解配置算例结果的解读方法以及最容易被卡住的坑和对应解法全都在上面。最后想提醒的是复现论文最关键的不是代码水平而是对模型物理过程的理解。P2G的价值在于系统整体不在设备本身这个视角贯穿整个研究过程也是答辩和审稿时最受认可的理解深度。
返回列表