☰
计及P2G厂站的电-气综合能源系统规划Matlab实战
2026/10/5 4:31:13 网站建设 项目流程

做综合能源系统规划方向的朋友,看到“计及P2G厂站的电-气综合能源系统规划研究”这个题目,八成都不陌生。这几年可再生能源占比一路走高,电力系统和天然气系统的耦合程度越来越深,P2G(Power to Gas,电转气)就是其中最关键的一根连接轴线——电能富余时把它转成天然气存起来,缺电时气又能反过来发电。这个题目要解决的,说白了就是两件事:P2G厂站建在哪、建多大,以及建成之后系统在整个规划周期内怎么经济运行,最后落到Matlab里把数学模型搭起来、求出一组最优方案。

这篇博文我会完全按硕士论文复现的实战视角来拆:项目底层逻辑、数学模型怎么建、代码怎么组织、数据怎么准备、结果怎么分析,以及我复现过程中踩过的几个大坑。适合正在做电-气综合能源系统规划课题的研究生,也适合想快速上手一套完整综合能源算例的工程师。你不需要开跑前就什么都懂,跟着思路走一遍,基本就能摸清这套东西的套路。

1. 这类题目到底在解决什么问题

1.1 P2G在电-气耦合里的角色

先把这个概念掰开。P2G不是单一设备,而是一条能量转换链——先用电力电解水制氢,再把氢和二氧化碳发生甲烷化反应合成天然气,也可以直接产出氢气供氢能市场。放在电-气综合能源系统里,它的价值主要体现在三个层面。

第一是消纳可再生能源。风电光伏大发时段往往也是用电低谷,电网送不出去、储能又装不够,弃风弃光是老难题。P2G可以像一个“弹性负荷”,把多余电能吃进去变成天然气,相当于把电力系统的电量搬到了天然气系统的能量账户上。

第二是跨系统调峰。天然气系统本身有储气库、管网管存,调节能力和储电不是一个量级。电转气之后,天然气系统相当于给电力系统提供了一个大容量、长时间尺度的储能后援。

第三是降低系统总成本。这个要说透:如果不建P2G,风电大发时只能压出力,系统要拿更多火电去顶负荷曲线,燃料成本和碳排放都高。建了P2G,一部分火电/气电出力可以被风电替代,虽然多了一笔投资成本,但运行成本往往能压下来。这笔账能不能算得过来,正是规划模型要回答的核心问题。

所以这个题目本质上是在做“P2G厂站投资决策 + 电-气联合运行优化”的两层决策,属于典型的能力规划问题。它不是单纯做电力系统规划,也不是单纯做天然气系统规划,而是把两者通过P2G厂站耦合在一起,统一优化。

1.2 规划模型和运行模型的区别与衔接

这里很多新手容易混淆。单纯做“运行优化”,是在设备已经建好的前提下,给定负荷和来水来风数据,求48小时或8760小时内的最优调度策略,决策变量是各机组出力、气源供气量、P2G运行功率这些短期量。而“规划优化”除了运行决策,还要回答厂站容量、选址、投资方案的问题。

注意,规划里的运行决策不能凭空拍脑袋,必须嵌到规划模型里联合优化。因为规划目标(总成本最小)既包含一次性投资,也包含后续多年运行成本。如果只比一次性投资,不看运行成本,那结论一定跑偏——很可能选了个便宜但效率低、后期运营费高的方案。

具体到模型结构,一般写成这样:

  • 外层决策:P2G厂站选址(0-1变量)、定容(连续变量),决定系统拓扑结构;
  • 内层决策:典型日/典型场景下的机组出力、气源产气量、P2G转换功率、储能充放功率等运行变量,模拟规划后的系统实际运行情况;
  • 目标函数:投资成本(等年值化)+ 运行成本(多场景按权重加权)。

两层是同步求解的,不是先求外层再求内层。Matlab里通常把0-1选址变量和运行变量一起交给求解器(Gurobi/Cplex),用MILP一次性解出来。这也是为什么这类题目看起来很复杂,但落到代码层面其实是一个大优化问题,关键是把约束写对、把数据喂对。

2. 数学模型的核心设计

2.1 目标函数:从一次性投资到全周期运行的一盘账

目标函数是规划模型的“主心骨”。硕士论文里普遍采用总成本最小化,形式上大概是:

min C_total = C_invest + C_oper

C_invest是P2G厂站的建设投资成本。通常假设投资成本与容量线性相关,也有文献用非线性投资成本函数,即单位容量投资随规模增大而递减,这时需要用分段线性化处理。我最开始就直接用的线性成本,简单稳定,跑通以后再做成非线性对照分析。

注意投资成本不能直接等同于当年现金流。规划和运行处在不同时间尺度,把一次性的建设投资分摊到每一年,要用等年值法折算,公式是这样的:

C_annual = C_invest_total × r(1+r)^n / [(1+r)^n - 1]

其中r是贴现率,一般取0.08左右,n是规划期年数,通常取20年。这步处理不好,投资和运行成本之间权重就失衡——投资成本看起来很大很吓人,或者反过来被低估,导致模型偏向某一方案。

C_oper是运行成本,包括:

  • 火电/气电机组的燃料成本,一般取二次函数或分段线性函数;
  • 从主网购电的成本,按峰谷分时电价或固定上网电价计算;
  • 气源购气成本;
  • P2G运行维护成本,按产气量或运行功率的百分比计;
  • 弃风弃光惩罚成本(可选,但建议加,否则模型可能不关心新能源消纳)。

这里有个细节:部分论文还会加碳交易成本或碳排放惩罚,把P2G的低碳价值显性化。如果导师课题跟双碳相关,可以在一级目标函数里加一个碳排放项,或者作为约束限制总碳排放量,效果更丰富。

2.2 电网约束、气网约束与P2G耦合约束

中间要处理的约束分三大块。

电力系统约束相对成熟。节点功率平衡是基操,每个节点的注入功率等于是负荷加网损(若计及),线性直流潮流用来表达支路潮流——P_ij = B_ij × (θ_i - θ_j)。规划场景下直接用直流潮流是主流选择,误差在可接受范围内,而且线性性质对MILP求解极其友好。机组出力上下限、爬坡约束(相邻时段出力变化量)、线路传输容量限制这些按常规电力系统调度约束写就行。

如果你用的算例规模是IEEE 6节点或IEEE 30节点,直流潮流的精度足够了。非要上交流潮流做高保真度,也不是不行,但你的模型会从MILP变成MINLP,求解难度剧增,资金回收周期和论文工作量都hold不住。这个取舍要明确跟导师确认好。

天然气系统约束是另一个滋味。节点流量平衡:每个节点的注入气量等于气负荷加上流出管道的流量。气源产气有上限,储气罐/管存有容量约束。最棘手的是管道流量方程——稳态天然气管道中流量与两端气压差成非线性关系,通常采用Weymouth方程:

f_ij = sign(π_i - π_j) × C_ij × sqrt(|π_i² - π_j²|)

这个带开方和绝对值符号的约束是非凸的,直接丢给求解器,MILP没法处理。做法主要有三条路:

  • 分段线性化:把π_i²作为辅助变量,对sqrt函数做分段线性逼近,引入0-1变量表达符号,把非凸约束转换成混合整数线性约束。精度由段数决定,段数越多越精确,但求解规模也更大。经验上取3-5段足够出复试结论。
  • 二阶锥松弛:把Weymouth方程松弛为不等式,处理成SOCP约束。用Yalmip加求解器如Mosek或Gurobi 9+可解。这个精度高,但解释起来稍显复杂。
  • 直接简化:忽略气网约束或假设气网足够充裕,只把P2G看作电负荷。这个只能算“弱耦合”简化版,不太够看。

P2G耦合约束是全局点睛处。P2G本质是个能量转换器,输入电功率P_p2g,输出天然气流量f_p2g,二者通过转换效率η联立:

f_p2g = η × P_p2g × α

这里的α是单位换算系数。电功率单位是MW(即MWh/h),天然气流量常用m³/h或kW。换算要用到天然气热值,标准天然气热值大约9.7 kWh/m³(35.6 MJ/m³),所以1 MWh电能理论上对应约103 m³天然气(按100%效率)。实际P2G全流程效率(电解+甲烷化)大致在40%-70%,保守取0.55左右比较常见。

同时P2G容量决定了它的输入电功率上限:0 ≤ P_p2g ≤ Q_p2g_cap。若考虑选址,Q_p2g_cap = Σ Q_i × x_i,其中x_i是候选点的0-1选址变量,Q_i是候选容量档位。

这三大块约束通过P2G耦合变量串起来,就是完整的“电-气综合能源系统规划模型”。

2.3 求解方法:为什么是MILP而不是牛顿法

这里我多提一嘴。有的教程喜欢用Matlab自带的fmincon或牛顿法直接求非线性规划,理由是“不用搞线性化,直接解原始模型”。听起来省事,但实际体验相当崩溃。

非线性规划求到的解大概率是局部最优,而且含0-1变量的混合整数非线性规划(MINLP)在没有全局求解器的情况下,几乎没法保证收敛质量。硕士论文审稿老师最看重的就是“解的全局最优性”和“结果的可靠性”,MILP模型只要给够求解时间,商业求解器提供的是有最优性间隙(MIPGap)保证的解,这个说服力完全不一样。

所以我的建议是:所有非线性环节能做线性化就线性化,或者做松弛。把整个问题写成MILP,然后调用Gurobi或Cplex求解,路线最稳。Gurobi在Yalmip里几乎零配置,对学术免费,论文复现完全够用。

3. Matlab代码实现路线

3.1 程序整体架构与数据准备

我复现这套代码时,按照计算流程把程序拆成了几大块,这里直接分享这个组织方式,容易复用:

  • main.m:主脚本,定义算例参数、调用建模函数、求解、输出结果;
  • data/:存放电网/气网拓扑参数、负荷曲线、风电出力数据、候选P2G参数;
  • build_model.m:定义决策变量、目标函数、约束条件,返回YALMIP的约束集合和目标;
  • solve_model.m:调用求解器,处理求解设置,检查求解状态;
  • plot_results.m:把结果绘制成图,输出关键指标表格。

数据准备是重头戏。电网参数我建议直接用MATPOWER里的现成算例,比如case6ww、case9或者case30,节点负荷和线路参数都现成的,省得自己编容易出错。天然气系统参数没有这么好的开源包,一般做法是自己构造一个小型气网,比如7节点、9节点,设好气源、气负荷、管道的C_ij常数。

负荷和风光时序数据是另一个大头。我最初的错误是直接拉出8760小时数据丢进模型,结果变量数量爆炸,求解器跑到天荒地老也没出最优解。后来改成典型日/典型场景法:先用K-means或层次聚类把全年8760小时做场景削减,抽出几个典型日,每个典型日24小时连续建模,对应权重就是这个场景的天数占比。

比如聚成4个季节典型日,每个典型日24小时,场景总时段只有96小时,规模直接降了两个数量级。这在硕士论文里也是标准操作,而且聚类的过程本身还能写到论文里当一种“场景生成”章节,一举两得。

3.2 变量定义与约束组装

建模我强烈建议用Yalmip工具箱,它比手写矩阵约束直观太多。Yalmip下变量定义极其简洁:

%% 决策变量定义 P2G_cap = sdpvar(n_candidate, 1); % P2G候选容量 (MW) x_p2g = binvar(n_candidate, 1); % P2G选址0-1变量 p_p2g = sdpvar(n_scene, n_hour); % P2G输入电功率 (MW) f_p2g = sdpvar(n_scene, n_hour); % P2G产出天然气流量 (m^3/h) p_g = sdpvar(n_gen, n_scene, n_hour); % 常规机组出力 (MW) theta = sdpvar(n_bus, n_scene, n_hour); % 电压相角 f_gas = sdpvar(n_gas_pipe, n_scene, n_hour); % 气网管道流量 pi_gas = sdpvar(n_gas_bus, n_scene, n_hour); % 气网节点气压

约束组装用循环或矩阵批量加进去。这里有个减少冗余操作的技巧:对每个场景、每个时段的约束,不用写三层for循环,能矩阵化的尽量矩阵化。例如机组出力上下限,直接写成repmat(p_min,[1 n_scene n_hour]) <= p_g <= repmat(p_max,[1 n_scene n_hour]),运行速度快很多。

P2G耦合约束的写法值得单独贴一段,这是最容易写错的地方:

%% P2G耦合约束:电功率输入与天然气产出 eta_p2g = 0.55; % P2G全流程效率 alpha_conv = 103; % 单位换算系数, 1MW->103 m^3/h (热值9.7kWh/m^3) C = [p_p2g(:) <= P2G_cap * x_p2g, ... % 容量约束 P2G_cap <= p2g_cap_max * x_p2g, ... % 容量上限与选址联动 f_p2g(:) == eta_p2g * alpha_conv * p_p2g(:), ... % 转换关系 0 <= p_p2g(:), 0 <= f_p2g(:)];

最后调用求解器:

options = sdpsettings('solver', 'gurobi', 'verbose', 2, ... 'gurobi.MIPGap', 0.01, ... 'gurobi.TimeLimit', 7200); result = optimize(C, objective, options);

optimize返回后检查result.problem,为0表示求解成功,非0需要排查(后面常见问题里细说)。

3.3 结果绘图与方案对比

求解完只是第一步,结果分析和可视化是论文的核心支撑。我常用的图有以下几类:

  • 规划方案图:P2G厂站位置、容量柱状图,和电网/气网拓扑叠在一起,直接表达“建在哪、建多大”;
  • 典型日运行曲线图:风电出力、P2G输入功率、燃气轮机出力、气源供气量这四类曲线的时序图,选一个典型日来画,最能说明P2G在消纳风电过程中实际起到的调峰作用;
  • 成本构成堆积柱状图:投资成本、购电成本、购气成本、机组燃料成本各占多少,不同规划方案之间横向对比;
  • 灵敏度分析曲线:把P2G单位投资成本从高到低扫一圈,看最优容量怎么变、总成本怎么变,这条曲线是论文的加分项。

画图就用Matlab自带的plot、bar、stairs就行,最好统一一个fig风格函数,把字体、线宽、网格统一设置好,看起来专业。图表标题注意标注坐标轴单位和图例,研究生论文评审对图表规范很敏感。

4. 案例设计与结果分析

4.1 典型算例怎么搭:从IEEE节点到气网耦合

算例设计直接决定论文的说服力。建议用中等规模的耦合系统,最经典的组合是IEEE 6节点电力系统耦合7节点天然气系统,或者IEEE 30节点耦合20节点气网。前者规模小,适合快速调通整个技术路线;后者规模大,适合做完整性能对比。

耦合方式要仔细设计。一般选择电力系统的几个关键节点接P2G厂站,输出管道连接天然气系统的某个负荷节点(或者直接连接天然气网的高压节点)。每个候选P2G点设一组可选容量,比如10MW、20MW、30MW三档,或者是连续容量加0-1选址变量。候选点放3个左右,太多会显著增加组合爆炸风险,太少又体现不了“规划”意义。

场景数据这块,我建议采用“典型日+比例调整”的方式生成风电出力曲线。比如取春季、夏季、冬季三个典型日,风电出力形态不同,负荷形态不同,再乘上不同场景权重。这样模型能看到系统在不同季节运行条件下的表现,比单一24小时曲线完整得多。

4.2 结果怎么看:成本构成、P2G容量占比与风电消纳提升

求解完成之后,先别急着抄数据,要有分析逻辑。我的处理顺序是这样:

先看总成本构成。把投资成本、运行成本、各机组燃料成本、购电成本分开列一张表,计算P2G投资占总成本比重。如果P2G投资占比明显偏高(比如超过15%-20%),一般来说容量配置偏激进,可以调低P2G单位投资成本或者提高弃风惩罚成本再观察。

再看P2G容量与风电容量的比值。理想情况下,P2G容量应该与风电装机和系统调峰缺口匹配。如果得出P2G容量几乎等于风电装机一半以上,你要检查是不是弃风惩罚设得太高或者气价太低,导致模型过度偏好电转气。

最关键的是做有无P2G的对比。分别跑一次“无P2G”基准场景和“含P2G”规划场景,对比三项指标:总成本、可再生能源消纳率、系统碳排放量。这组对比数据才是课题的“灵魂”,论文里直接放一张对比表就能说明P2G的价值。

如果涉及多场景,比如不同碳交易价格、不同天然气价格、不同风光渗透率,可以做一组灵敏度分析曲线,看P2G最优容量随这些参数的变化趋势。这条线下来,论文的工作量就饱满多了。

5. 常见问题与排查技巧实录

5.1 典型报错与排查思路

我复现这套代码时遇到过不少“经典问题”,多数有规律可循,直接列成速查表,供各位对照排查。

报错现象排查方向解决办法
YALMIP提示“No solver found”、“solver not found”YALMIP找不到求解器安装Gurobi/Cplex并添加路径到Matlab,运行yalmiptest验证;检查solvesdp里求解器名是否拼对
optimize返回result.problem = 1(Infeasible)模型约束过强或数据矛盾先删掉P2G相关约束跑一遍检查物理过程本身是否合理;检查P2G输入功率上限和气负荷平衡能否同时满足;逐步加约束定位冲突位置
求解器返回最优但result.problem = 3或数字很大数值问题,变量尺度差异悬殊对变量做标幺化处理,把功率、气压、流量统一到同一量纲水平;Yalmip加sdpvar时设置option.define辅助归一化
天然气管道约束一直不收敛Weymouth方程线性化段数不足增加分段段数;或者改用二阶锥松弛写法;检查辅助变量负值处理有没有加abs
求解时间过长无法结束变量太多或MIPGap太小用典型日聚类缩减时段;限制gurobi.TimeLimit;适当放宽MIPGap到1%或5%
P2G耦合约束违反逻辑,产出大于输入单位换算系数换算错误重新核算热值换算:天然气热值取9.7kWh/m³时,1MW对应103m³/h;不要直接用功率单位去对齐气体单位

5.2 数值调参与细节避坑

再分享几个我踩过的深坑,虽然不在报错信息里显性出现,但直接决定了结果的合理性。

第一,单位统一是最容易翻车的地方。电力系统侧是MW和MWh,天然气系统侧是m³/h和MWh,综合能源的“综合”二字坑就坑在这里。我的做法是建模前先写一个单位换算表放在脚本头部,每个数据源头检查一遍,尤其是P2G效率作用的地方。

第二,新能源出力数据要合理。波形太平滑或者全部峰值,都会导致P2G容量结果失真。我用的是基于实测风速的光伏风电出力曲线,然后按典型日聚类,比人为拍脑袋造数据可靠得多。

第三,MIPGap不要一上来就设0。先设0.01跑通,验证各项约束逻辑不错,再可以改成0.005或0.001收紧。上来就怼着0%跑,小算例能出,中等规模容易跑到超时。

第四,储能要不要加?如果题目没要求,建议不加,模型已经够复杂了。加了储能变量,模型规模显著膨胀,而且储能和P2G在消纳风电上功能部分重叠,结果解读要小心。

我复现这套东西最深的感受是:这类综合能源规划题目看着门槛高,其实核心就三关——场景削减、模型线性化、单位换算。这三关跨过去,Matlab代码只是时间问题。如果答辩被问到“为什么用MILP”,你要能答出全局最优性、商业求解器成熟度、可解释性这三条。被问到“线性化误差怎么控制”,就谈分段段数与二阶锥对比。技术路线立得住,结果呈现丰富,这篇论文复现工作就稳了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询