ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

电热氢综合能源系统熵态建模:可再生能源不确定性的量化与仿真

电热氢综合能源系统熵态建模:可再生能源不确定性的量化与仿真 做综合能源系统仿真的朋友尤其是刚接触电热氢耦合方向的研究生应该都有同感单独建一个电力系统模型不难单独建一个热力系统模型也不难单独建一个氢能系统模型还算可控但把三者放在一起再叠加上可再生能源的随机波动整个系统的动态行为一下子就变得非常复杂。你很难说清楚能量到底是怎么流的不确定性是怎么传递的系统的“混乱程度”是怎么演化的。我之前在做相关课题时尝试过传统的能量流分析、多能互补优化等方法总觉得缺少一个统一的视角去描述系统整体状态。后来读到熵态模型相关的工作才开始意识到把熵引入综合能源系统其实是想回答一个非常本质的问题——当可再生能源大规模接入后整个电热氢系统的无序性和不确定性到底是怎么产生、怎么传递、又该怎么抑制的这篇文章就围绕“面向可再生能源接入的电热氢综合能源系统熵态模型与机理分析研究”这个方向把我实际建模、编码、仿真的思路和踩坑经历整理出来。代码基于Matlab实现文末会附上核心模块的实现逻辑和关键参数设置做相关方向的朋友可以直接拿去参考。1. 先说清楚这个课题究竟在解决什么问题1.1 可再生能源接入带来的“不确定性”本质很多人对可再生能源的理解还停留在“出力波动大”这个层面。但实际上风、光出力不只是波动它还有两个非常棘手的特性一是不可精确预测无论你用多好的预测算法总归有误差二是强随机性不同时间尺度上都会表现出明显的随机过程特征。这两个特性映射到综合能源系统里就变成了一个很头疼的问题系统内各个能量转换环节比如电制热、电制氢、氢燃料电池发电它们本身的响应特性是确定的、可控的但源头能量输入是不确定的。这就导致整个系统的状态空间变得极其复杂你很难用一个确定性的模型去描述它。我最早尝试用的方法是场景法也就是把风光出力的不确定性离散成若干个典型场景然后对每个场景分别求解。但实际做下来发现当系统规模变大、耦合环节变多场景数量会爆炸式增长计算负担非常大而且场景之间的演化关系是割裂的。说白了就是只看到了“系统可能处在哪些状态”没回答“系统状态之间怎么转移”的问题。1.2 电-热-氢三网耦合系统为什么值得做电、热、氢三种能源载体在时间尺度上天然是互补的。电的响应速度最快毫秒到秒级就能完成调度热系统惯性大分钟到小时级氢系统的储能特性适合小时到天级的能量搬移。这个时间尺度的互补性正好可以拿来平抑可再生能源的波动。光伏大发的中午多余的电量可以驱动电解槽制氢把能量存进氢里晚上没有光的时候氢燃料电池可以发电也可以把余热供给热负荷。这种“电气-热-氢”的能量路由器角色如果设计得当理论上可以显著提高可再生能源的消纳率。但问题也随之而来多能互补的潜力越大系统内部的能量耦合就越深一个环节的波动会像涟漪一样扩散到其他环节。传统的解耦分析方法在这里失效了因为你无法再把电气、热力、氢能拆开单独看。这个背景下人们开始寻找一个能够统一刻画系统“整体状态”的数学工具熵态模型就是在这样的思路下被提出来的。1.3 为什么要用“熵”来建模而不是传统能量流要理解熵态模型得先用生活化的类比切换一下视角。传统的能量流分析像你记录家里一个月的水电费账单——只关心总量平衡熵态模型则更像你观察整个房间的“整洁度”——不仅知道哪里有东西还关心这些东西分布得有没有规律、是不是越来越乱。系统熵的大小可以直接反映系统运行的确定性程度。可再生能源渗透率低的时候系统的能量流向基本可以预测熵值低一旦风光接入比例提升能量流的随机性和无序性增强系统熵值就会升高。持续追踪这个熵值的变化就能量化系统的“健康状态”。而且熵的好处是它是一个标量可以把高维状态空间映射到一个直观的数值上。不管系统内部多复杂调度人员只需要盯住熵这个指标就能判断当前系统的无序程度是不是在可接受范围内这是传统能量流分析做不到的。2. 熵态模型的理论框架与建模思路2.1 概率视角下的熵怎么把物理过程“随机化”要建立熵态模型第一步是把系统内的物理过程视为随机过程。这里需要引入两种互补的熵概念。一种是热力学意义上的熵用于刻画能量在转换和传递过程中品质下降的程度。任何一次能量转换都有不可逆损失比如电解槽工作时伴随热量散失、燃料电池发电时有一部分化学能直接变成热能而不是电能这些所谓“损耗”本质上是系统熵增的过程。另一种是信息论意义上的熵用于刻画系统状态的不确定性。风光出力预测曲线再准也只是一个期望真实出力围绕期望波动。把这些波动建模为随机变量并求取它们的概率分布就能进一步求取系统状态变量的概率分布然后基于这个分布计算信息熵。这两个“熵”放在一起恰好刻画了综合能源系统两个维度的“乱”能量品质的退化与运行状态的不确定。二者的根本逻辑是统一的即都是衡量系统可用性的丧失程度。电热氢系统的熵态模型就是把这两种熵统一到一个框架下。2.2 系统状态的定义与熵流分解方法实际的建模中我把系统的熵态拆成了三条“熵流”对应电、热、氢三个子系统并单独考虑它们之间的耦合熵项。这种分解方法本质上是为了实现“从整体到局部再回归整体”的分析路径。具体到某个采样时刻系统的总熵 S_total 可以写成S_total S_e S_h S_h2 S_coupling其中 S_e、S_h、S_h2 分别表示电气、热力、氢能子系统的熵值S_coupling 表征子系统之间能量交换产生的额外无序度。这三个子系统的熵各有侧重电气子系统熵主要来源是光伏和风电输出的随机波动。如果并网功率完全可控这部分熵接近于零但如果功率由可再生能源直接决定熵值就会随风光的随机波动显著增大。热力子系统熵主要来源是热负荷的随机波动和供热管网的热惯性。热负荷本身受用户行为影响不确定性天然存在而供热管网作为一个大惯量系统还会使随机性在时间上“钝化”表现出明显的延迟效应。氢能子系统熵主要来源是电解槽与燃料电池的运行状态切换以及储氢罐的压力和纯度波动。频繁启停会带来额外的损耗这部分熵增很容易被忽视。耦合熵项是最难算的部分。电能转氢能时如果电解槽输入功率波动大不仅影响制氢效率还会引起电网友侧功率的额外波动这种“波动耦合”最终会以耦合熵项的形式表现出来。2.3 从熵态模型到机理分析的分析路径建好熵态模型后机理分析就不是凭感觉来分析了而是沿着一条清晰的路径走下去。先做熵变溯源通过总熵分解找出系统熵增的主要贡献源出在哪是源头侧的风光波动、转换环节的效率退化还是负荷侧的随机行为再做动态演化分析画出系统熵随时间变化的曲线找出熵最大的时间窗口这一个窗口通常对应可再生能源出力的剧烈变化期或者负荷的尖峰时段。然后做参数影响分析调整系统中储能容量、电解槽额定功率、氢燃料电池启停策略等关键参数观测系统总熵的响应这能帮我们找到降低系统无序度的最有效操作手段。最后做方案对比把不同调度策略、不同设备配置的熵曲线放在一起对比熵更低的方案说明系统的运行确定性更强、抗干扰能力更好、能量品质退化更慢。这个框架在思路上是一个完整的闭环建模、计算、分析、方案验证都覆盖到了。3. Matlab代码实现与架构解析3.1 顶层模块设计与数据流规划用Matlab做这个系统仿真我一开始就把代码按功能拆成了五个模块各模块之间用结构体变量传递数据避免出现全局变量的滥用。模块设计与核心职责模块名核心职责主要输出数据initialize_parameters.m设置系统容量、设备效率、边界条件参数结构体paramrenewable_generation_model.m生成风光出力时间序列时序数组wind_power,solar_powerehs_operation_model.m电热氢系统运行状态求解各设备功率数组、储能状态数组entropy_calculation.m计算系统熵及熵流分解各分项熵序列、总熵序列main_analysis.m主脚本串联整个仿真流程结果结构体result梳理的设计逻辑是先随机生成风光出力场景再基于运行约束求解电热氢系统的功率分配最后计算系统的熵值并把所有结果汇总分析。在整个流程里可再生能源出力是整个仿真的输入源电热氢运行模型是中间层熵计算是顶层视角。3.2 风光出力生成的Monte Carlo实现风光出力的随机性是系统熵的重要来源因此生成这一部分数据的时候如果太粗糙后续一切白搭。常规做法是使用Monte Carlo方法生成大量的随机出力场景。核心代码如下采用时间序列自回归模型AR(1)来模拟风光出力的时间相关性function [wind_scenarios, solar_scenarios] generate_renewable_scenarios(T, N_scenarios, param) % T: 调度周期内的采样点数 % N_scenarios: 场景数量 wind_scenarios zeros(N_scenarios, T); solar_scenarios zeros(N_scenarios, T); for s 1:N_scenarios for t 2:T % 风速的AR(1)模型相邻时刻风速存在相关性 wind_speed(s, t) param.wind_phi * wind_speed(s, t-1) ... sqrt(1 - param.wind_phi^2) * randn() * param.wind_std param.wind_mean; wind_speed(s, t) max(wind_speed(s, t), 0); % 风速-功率转换曲线 if wind_speed(s, t) param.wind_cut_in || wind_speed(s, t) param.wind_cut_out wind_scenarios(s, t) 0; elseif wind_speed(s, t) param.wind_rated wind_scenarios(s, t) param.wind_rated_power * ... (wind_speed(s, t) - param.wind_cut_in) / (param.wind_rated - param.wind_cut_in); else wind_scenarios(s, t) param.wind_rated_power; end end end % 光伏功率按辐照度Beta分布抽样生成并叠加昼夜约束 solar_scenarios param.solar_rated_power * ... betarnd(param.beta_alpha, param.beta_beta, N_scenarios, T) .* ... (repmat(daylight_mask(T), N_scenarios, 1)); end我实际用下来的体会是AR(1)模型虽然简单但对小时级以上的风光功率模拟已经具备不错的精度。如果要继续深挖分钟级或秒级的快速波动可以补充一个高频扰动项但在综合能源系统这种以小时为调度尺度的模型里AR(1)完全够用了。另外要提醒的是风速的均值、方差和自回归系数需要根据目标地区的实际历史数据做拟合直接拍脑袋设参数跑出来的结果会偏向失真。3.3 电热氢系统运行模型的核心约束电热氢系统的运行模型本质上是求解一个满足功率平衡约束、设备出力约束、储能动态约束的可行解。我这里用的是一个简化的时序仿真法每个时刻按预定的运行策略分配功率不做滚动优化把计算重心放到熵计算上。核心代码如下function result ehs_operation_model(param, wind_power, solar_power, elec_load, heat_load) % 系统平衡方程与设备运行建模 for t 1:T net_re_power wind_power(t) solar_power(t); % 第一阶段可再生能源优先满足电负荷 residual_power net_re_power - elec_load(t); % 第二阶段判断是否需要电解槽制氢 if residual_power param.hysys_threshold % 富余电量优先制氢储能 p_electrolyzer(t) min(residual_power, param.electrolyzer_max); residual_power residual_power - p_electrolyzer(t); h2_production(t) p_electrolyzer(t) * param.electrolyzer_efficiency; else p_electrolyzer(t) 0; end % 第三阶段缺电时由氢燃料电池补充 if residual_power -0.05 * param.pu_base p_fuelcell(t) min(-residual_power, param.fuelcell_max); residual_power residual_power p_fuelcell(t); h2_consumption(t) p_fuelcell(t) / param.fuelcell_efficiency; else p_fuelcell(t) 0; end % 第四阶段供热系统的耦合用热泵或电锅炉补足热负荷 heat_gap heat_load(t) - h2_recovery_heat(t) - thermal_storage_release(t); if heat_gap 0 p_heat_pump(t) min(heat_gap / param.heat_pump_cop, param.heat_pump_max); end % 储能状态更新 h2_storage(t1) h2_storage(t) h2_production(t) - h2_consumption(t) - h2_demand(t); end end几个比较容易踩坑的细节先放在这里提个醒。电解槽和燃料电池最好不要同时运行既不合理也浪费寿命需要在逻辑上加以阻断热泵的耗电量必须在电气平衡方程中体现出来它本身是电和热之间的耦合环节氢储能的初始容量和上限需要根据整个周期的能量平衡来设定否则容易出现仿真中途储氢罐满载或放空的尴尬情况。3.4 熵计算模块的实现要点熵计算是整个代码实现中最核心的地方也是最容易糊弄的地方。我建议分三步走清晰且不易错。第一步计算运行不确定性熵。对上面通过Monte Carlo生成的全部场景在同一时刻取系统关键状态变量的样本集合比如并网功率、储氢罐容量等再求其样本标准差近似表征该时刻的不确定程度。第二步计算能量品质退化熵并根据各能量转换单元的当前功率水平和对应效率曲线估算单位时间内的不可逆损耗。第三步将两类熵按权重叠加得到系统的综合熵指标。核心代码如下function entropy_total calculate_system_entropy(electric_power_matrix, h2_storage_matrix, ... power_loss, param) % electric_power_matrix: 所有场景下逐时并网功率矩阵 % h2_storage_matrix: 所有场景下逐时储氢量矩阵 for t 1:T % 运行不确定性熵 std_pe(t) std(electric_power_matrix(:, t)); std_h2(t) std(h2_storage_matrix(:, t)); entropy_run(t) param.w_e * log(1 std_pe(t) / param.pu_base) ... param.w_h2 * log(1 std_h2(t) / param.h2_base); % 能量品质退化熵 entropy_loss(t) power_loss_total(t) / param.base_temperature ... param.entropy_coeff * power_loss(t); % 综合熵取二者的加权和 entropy_total(t) entropy_run(t) entropy_loss(t); end end参数标幺值pu_base和h2_base的依据是系统中电气与氢能的额定工况目的是把不同量纲的变量归一化使熵值具有可比性。权重系数w_e和w_h2的取值需要根据系统实际的耦合强度来确定我通常先跑一组基线场景用熵值的相对变化来反向校验权重系数是否合理。4. 典型场景下的仿真结果与机理发现4.1 冬夏两种典型日的系统熵演化对比搭建完模型后我分别取了冬季和夏季的典型日数据做仿真。冬季风电风速大、光伏弱、热负荷大夏季光伏强、风电弱、热负荷小。两种完全不同的外部条件下系统的熵演化规律确实有非常明显的差异。仿真中冬夏两种典型日的系统总熵趋势时段冬季总熵夏季总熵主要熵来源凌晨0-6时中高低冬季风电波动为主上午6-12时上升中高冬季热负荷爬升夏季光伏启动午后12-16时上升高夏季光伏波动导致并网功率不稳傍晚16-22时高高负荷晚高峰叠加可再生能源出力下降夜间22-24时下降下降负荷回落出力趋稳冬季系统的熵主要集中在供热环节和风电波动上供热负荷的波动经过热网惯性作用后被“钝化”了呈现缓变的趋势倒是风电出力的突然攀升会导致电解槽输入功率大幅波动这类动态变化带来的耦合熵增非常容易被忽视。夏季的场景则完全反过来光伏出力的强间歇性直接导致午后并网功率波动加大电解槽频繁启停效率下降和附加损耗共同推高了能量品质退化熵。4.2 可再生能源渗透率提升的熵增效应为了量化可再生能源渗透率对系统熵的影响我设置了五组对照实验可再生能源占比从20%提升到80%步长15%每组跑200个随机场景取平均结果。渗透率从20%提高到80%的过程中系统总熵几乎呈线性上升趋势。但更有信息量的是熵的来源结构发生了变化低渗透率下热负荷波动是系统熵的主要贡献源渗透率超过50%后风光出力波动迅速跃升为第一大熵增来源渗透率进一步提升到80%以上耦合熵项占比激增说明系统内部不同能量形式的交互紊乱在加剧而不只是源端波动的问题。这个结果表明高比例可再生能源接入场景下只靠提升设备效率来降低熵增已经远远不够必须从系统层面引入更有效的调控机制来平抑波动。4.3 电解槽容量和储氢容量对系统熵的影响设备容量参数对系统熵的影响是我特别关注的分析内容。我分别扫描了电解槽额定功率和储氢罐容量观察系统熵怎么变化。电解槽容量增大系统熵先下降后上升存在一个明显的拐点。容量过小富余电量无法充分转化功率只能外送波动直接传导到电网侧熵值高容量过大电解槽长期处于低负荷运行状态效率下降且频繁启停增加额外损耗能量品质退化熵上升。所以对特定的可再生能源配比和负荷曲线存在一个最优电解槽容量区间。储氢罐容量的影响比较有趣。它更像是一个“缓冲池”容量增大到一定程度后系统熵的边际下降幅度就很小了。因为储氢容量虽然能平滑氢侧的波动但并网功率的随机波动主要还是靠电解槽来吸收储氢罐只能解决“存得下”的问题解决不了“变平稳”的问题。这些机理层面的结论如果只看能量流分析是得不出来的恰恰是熵态模型最大的价值所在它能把系统层面的无序状态显性化、可量化。5. 仿真中的常见问题与排错经验实录5.1 仿真初期熵值发散到无穷大的排查第一次完整跑通模型后画出来的熵曲线在开头几个点直接飙升到了很大的数值后来检查发现是初始化逻辑的问题。储氢罐初始容量我给的是0Monte Carlo场景生成时如果开始阶段风电出力特别大储氢模型立即达到上限仿真中的削波处理会使功率不守恒进而引发状态变量的数值振荡熵计算里的对数操作自然就会发散。解决办法是把储氢罐的初始SOC设为满量程的50%给系统一个合理的缓冲空间同时把第一个采样点从熵统计中剔除。5.2 时间尺度匹配慢变量与快变量的冲突电热氢系统在时间尺度上天然跨了非常大的跨度。电气量的变化以秒级进行而热力系统的惯性可以达到小时级。如果所有环节都用同一个时间步长1小时来计算热系统和氢系统的动态过程确实没问题但电气量的很多快速波动就被平均掉了。后来我在Monte Carlo场景生成时增加了一步前置处理先生成15分钟间隔的高分辨率风光出力序列再做小时平均用于热力和氢能系统的计算。这样既保留了电气波动的统计特性又避免整个系统的计算负担大幅增加。5.3 熵计算结果出现“反常识”波动的分析有几次仿真出来的熵曲线出现了周期性的剧烈震荡跟外部风光条件完全对不上。排查到最后发现问题出在运行策略的阈值切换上。当净负荷在电解槽启停阈值附近反复穿越时系统会频繁切换运行状态导致设备功率波动熵自然增大。这种在数学上叫做非光滑动态系统的抖动现象在实际工程里对应的是设备频繁启停问题相当现实。6. 项目复盘与后续扩展的个人体会6.1 从标杆验证走向算法深化熵态模型的建模仿真工作在我整个项目中扮演的是“地基”的角色第一步的解析和建模做完之后后续至少有两个方向值得深入。第一个方向是把熵态模型嵌入到优化调度框架里把系统熵作为目标函数或约束条件考虑进去然后参与最优潮流或能量管理策略运算实现发电、制氢、储氢、用氢的整体协调优化。第二个方向是用于设备寿命评估和薄弱点识别因为系统熵增大的环节往往就是设备损耗最严重、运行压力最大的地方基于熵的监测数据可以辅助制定更合理的运维策略。6.2 向更大规模系统拓展的思考目前这套仿真模型验证的场景规模是几十兆瓦级的园区综合能源系统设备层面只考虑电解槽、燃料电池、热泵和储氢罐这几个核心环节。如果把这个模型向更大规模推广跨区域的电热氢综合能源网络建模、多园区之间的协同调度成为新的挑战。在更宏观的尺度上模型需要补充传输网络约束和网络拓扑特征。此外现有模型采用的是集中式框架对于未来更大规模的分布式系统可能需要过渡到分布式优化架构以解决计算效率和隐私保护的问题。6.3 一点实操建议跑完整个项目我最深的体会是熵态模型表面上是一个数学建模问题本质上却是一个系统思维问题。它在分析中应该始终贯穿“从哪里来、到哪里去”的思路——熵从哪里产生传播路径如何最终到哪里被耗散掉。把这条逻辑理顺代码实现和结果解读都会清晰很多。建议你的实现路径从由简入繁先做纯电力系统的熵计算再逐步加入热力环节接着加入氢能环节最后才做完整的电热氢综合系统耦合。每次加入新环节前与上一版本基线进行校准对比确保这一步的改动真的改变了熵值的某个分量有对应的物理意义分支而不是直接把错误累积进去。我提供的这个Matlab框架大概有接近800行的有效代码量运行一组200个场景的Monte Carlo仿真在普通办公电脑上大约需要3到5分钟性能基本可以满足研究和教学的需求。做这方面的朋友如果从零开始搭建代码框架可以按照这个结构走能少走不少弯路。
返回列表