ARTICLE DETAIL

资讯详情

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

蒙特卡洛概率潮流实战:配电网新能源并网电压风险评估

蒙特卡洛概率潮流实战:配电网新能源并网电压风险评估 先聊一个我实际工作中碰到的怪事一个10kV配电网项目之前做传统潮流计算按夏季最大负荷、光伏满发、风电额定出力去算所有节点电压都在0.95到1.05之间结论是电网运行安全。结果光伏电站并网之后现场反馈说电压波动很大逆变器隔三差五报过压脱网用户侧电器也有不少烧掉的。问题出在哪出在确定性潮流这种思路本身——它把风电、光伏的出力当成一个固定值去算可现实里这些电源的出力是随机波动的你拿一个固定值去代表一整天的随机出力算出来的电压当然只是无数种可能场景里的某一个恰好这个场景没问题不代表其他场景没问题。后来我把这个项目改成概率潮流来做电压概率分析思路完全不一样不再问电压是多少而是问电压有多少概率越限、分布范围是什么、最恶劣场景长什么样。本文就是用IEEE33节点配电网做了一次蒙特卡洛法概率潮流实验把风电和光伏的不确定性注入系统对每个节点的电压做统计分析顺便聊聊潮流计算最优因子法在大量采样时怎么帮我们解决收敛问题。不管你是做配电网规划、做新能源并网评估还是刚接触概率潮流这个概念这篇文章应该都能给你一些能直接拿去用的东西。1. 为什么确定性潮流在新能源面前逐渐失灵1.1 传统潮流计算的基本假设与现实的冲突潮流计算的核心任务是求解一组节点电压和功率分布的方程组。经典牛拉法给定各节点的注入有功、无功然后解出全网电压的幅值和相角。它的逻辑前提是所有节点的注入功率是已知的、确定的数值。火电和水电基本能符合这个前提——厂里说发多少就是多少误差很小调度系统盯着自动发电控制就能调回来。风电和光伏打破了这个前提。一个风电场的出力取决于风速风速是随机变量一天之内可能从切出风速吹到额定风速功率输出可以从零跳到满发再掉回来光伏更麻烦除了光照强度还有云层遮挡、温度、湿度这些因素叠加起来出力曲线长得跟锯齿一样。我再怎么合理地取一个固定值都取不出一个能代表全天工况的数值。更关键的是电压对注入功率的敏感度是非线性的。配电网线路的电阻占比高、电抗占比相对低电压受有功波动影响很明显这是分布式电源和输电网最大的不同。一个光伏电站从满发突然降到零出力末端节点电压可以瞬间跳动好几个百分点这种动态特性确定性潮流完全刻画不出来。1.2 从算一个点到算一个分布的本质变化传统潮流算出来的结果是一个点节点i的电压是0.982 p.u.。概率潮流算出来的结果是三个东西电压的均值、方差、概率密度分布曲线或者累计分布曲线。有了这三样你可以说出节点18的电压有92.3%的概率在0.95 p.u.以上这种确定性潮流永远给不出的结论。打个比方确定性潮流就像一张单张照片概率潮流像一段长时间视频。照片只能回答某个瞬间长什么样视频能告诉你这个人大部分时间在做什么、什么时候会出问题。新能源渗透率越高系统运行状态越分散单张照片的意义就越小。概率潮流的计算结果还有一个工程上的大用它可以直接输出越限概率。配电网规划规范里经常要求电压偏差不越限的概率不低于某个水平这个指标只有概率潮流能给出来。2. 蒙特卡洛法做概率潮流的完整逻辑2.1 蒙特卡洛法的基本思路与数学机理蒙特卡洛法在本问题里的思路简单粗暴既然风电光伏出力是随机的那我就把这种随机性用大量采样来复现。具体流程分四步根据风速、光照的概率分布模型生成一组风电、光伏出力样本比如风电场当前时刻出力是5.2 MW把这组出力代入潮流计算更新对应的节点注入功率执行一次确定性潮流计算记录下所有节点的电压重复上述过程成千上万次把每次记录下来的电压值汇总统计均值、标准差、概率分布这里的数学根基是大数定律和中心极限定理。样本量越大统计结果越接近真实的概率分布。只要采样次数足够、采样方法没有系统性偏差蒙特卡洛法逼近的就是真值不存在模型化简导致的误差——这一点是它相比于点估计法半不变量法这类解析方法最大的优势。2.2 采样次数怎么定收敛判据而非拍脑袋网上很多教程告诉你采样10000次就完事了这是不严谨的。合理的做法是设定一个收敛判据让程序自己决定要不要继续采样。我自己的做法是取关键节点末端节点、接入新能源的节点的电压均值和标准差连续采样N次后检验这两项指标的变化量。当均值的相对变化小于1e-4、标准差相对变化小于1e-3时判定收敛停止采样。实测下来IEEE33节点系统配2~3个随机电源通常3000到5000次采样就能收敛稳定如果只关心工程上的粗略结论1500次也可以出结果但尾部概率比如5%以下的极端场景会偏保守。从概率的角度说极低概率事件比如电压越限概率只有0.5%需要更多采样才能被可靠捕捉。如果你要用蒙特卡洛结果去校核越限概率不超过1%这种指标采样次数不够会导致判断错误。一个经验公式是用越限概率的变异系数来衡量变异系数越小估计越可靠一般建议变异系数控制在5%以内。2.3 风电和光伏的出力不确定性怎么建模这一块是最容易踩坑的地方。先说风电风速通常用两参数威布尔分布来描述形状参数k和尺度参数c需要根据现场测风数据来拟合。得到风速后通过风机的功率曲线把风速映射为有功出力[ P_{w} \begin{cases} 0 v v_{in} \ a v^3 b v_{in} \le v v_{r} \ P_{r} v_{r} \le v v_{out} \ 0 v \ge v_{out} \end{cases} ]式中 (v_{in})、(v_{r})、(v_{out}) 分别是切入、额定、切出风速。这套映射是非线性的风速的威布尔分布经过功率曲线转换后出力分布已经不是威布尔分布了所以不能用简单的威布尔分布去直接拟合风电出力。光伏的建模相对简单光照强度可以用Beta分布描述光伏出力近似等于光照强度乘以一个转换效率计及温度修正后看成一个线性映射。也可以用更工程化的简化做法直接用正态分布或Beta分布对光伏出力的历史数据做分布拟合采样时直接从拟合分布里抽数省去中间物理量转换。工程上我建议两条路都走一遍如果项目数据充分走完整的物理建模精度高如果只有出力历史数据走分布拟合省事且误差通常可接受。3. IEEE33节点系统的搭建与不确定性注入3.1 系统参数说明IEEE33节点系统是一个经典的配电网测试系统基准电压12.66 kV基准功率10 MVA一共33个节点、32条支路总负荷有功约3.715 MW、无功约2.3 Mvar。系统的根节点是节点1由上级电网供电电压恒定设为1.0 p.u.。整体结构是一条带多条分支的主馈线末端节点包括18和33这两个位置线路阻抗积累得最多电压跌落最严重也最适合用来接入分布式电源做研究。各支路参数比较琐碎我就不把32条支路全贴出来了完整参数可以在Matpower的case33.m文件里找到。这里给出最前面的几条支路参数方便你验证程序是否正确支路起点支路终点RΩXΩ120.09220.0470230.49300.2511340.36600.1864450.38110.1941560.81900.7070接入方案怎么选我做实验时采用了下面这种配置比较贴近实际工程中分散接入的思路节点18接入一个风电场额定容量设为1.0 MW大约是系统总负荷的四分之一多一点节点33接入光伏电站额定容量0.8 MW两个电源都是就地并网不额外配置储能3.2 为什么选这两个节点节点18和节点33都是系统的末端节点线路阻抗累积最大电压支撑最弱。把随机电源放在这里有两个好处第一能最大化体现电源不确定性对电压的影响让概率潮流的价值看得最清楚第二这本身就符合新能源接入的规律——分布式风电、光伏经常建设在配电网末端因为那边地便宜、资源好。实际工程里你可能会碰到各种更复杂的接入位置但原理是一样的电源接入点离电压支撑点越远它的出力波动对电压的影响越大。在做概率分析时优先关注这些薄弱节点的电压分布基本就能把握住系统的整体风险。3.3 核心采样与潮流计算代码实现我用的工具是Python加Pandapower这套搭配胜在开箱即用不需要自己手写潮流求解器算法验证起来也快。当然你要自己手写牛拉法也完全没问题思路一样只是工作量会大一些。import numpy as np import pandapower as pp # 创建IEEE33节点电网 net pp.create_empty_network(sn_mva10.0) # 这里需要根据case33数据逐条添加bus、line、load # 代码篇幅原因不逐行贴出核心是 # 创建母线pp.create_bus(net, vn_kv12.66) # 创建线路pp.create_line_from_parameters(net, from_bus, to_bus, length_km1, r..., x..., c_nf_per_km0) # 创建负荷pp.create_load(net, bus, p_mw..., q_mvar...) # 根节点接入上级电网pp.create_ext_grid(net, bus0, vm_pu1.0) # 接入风电节点18索引假设为17 pp.create_sgen(net, bus17, p_mw1.0, namewind) # 接入光伏节点33索引假设为32 pp.create_sgen(net, bus32, p_mw0.8, namepv) # 蒙特卡洛主循环 np.random.seed(42) n_samples 3000 voltage_records np.zeros((n_samples, 33)) # 记录每次采样的所有节点电压 # 风速V采用威布尔分布再经过功率曲线映射 k 2.0 # 威布尔形状参数 c 7.5 # 威布尔尺度参数 v_in, v_r, v_out 3.0, 12.0, 25.0 # 风速阈值m/s P_rated 1.0 # 风机额定功率MW # 光伏出力Beta分布参数简化模型 alpha, beta 2.0, 3.0 # Beta分布形状参数 pv_capacity 0.8 # 光伏额定容量MW for i in range(n_samples): # 采样风速并映射为风电出力 v np.random.weibull(k) * c if v v_in or v v_out: p_wind 0.0 elif v v_r: p_wind P_rated * (v - v_in) / (v_r - v_in) else: p_wind P_rated # 采样光照强度映射为光伏出力简化线性模型 irradiance np.random.beta(alpha, beta) p_pv pv_capacity * irradiance # 更新注入功率 net.sgen.at[0, p_mw] p_wind net.sgen.at[1, p_mw] p_pv # 潮流计算 try: pp.runpp(net, num_iter50, tolerance_mva1e-8) voltage_records[i, :] net.res_bus.vm_pu.values except Exception as e: # 记录不收敛样本后续处理 voltage_records[i, :] np.nan print(f样本{i}潮流不收敛: {e}) # 剔除不收敛样本后做统计 valid_samples voltage_records[~np.isnan(voltage_records).any(axis1), :] mean_voltage np.mean(valid_samples, axis0) std_voltage np.std(valid_samples, axis0) # 计算节点18电压越限概率低于0.95 p.u. prob_under_voltage np.mean(valid_samples[:, 17] 0.95) print(节点18平均电压: {:.4f}.format(mean_voltage[17])) print(节点18电压标准差: {:.4f}.format(std_voltage[17])) print(节点18低电压概率: {:.2%}.format(prob_under_voltage))代码里注意几个细节。第一风速的威布尔采样是np.random.weibull(k) * c威布尔分布的标准形式是尺度参数为1挪到风电场实际尺度需要用尺度参数去乘。第二我在功率曲线上做了简单线性化处理如果你有真实的风功率曲线数据应该用分段线性插值或查表法。第三pandapower计算失败时不能直接跳过整批结果得记录下不收敛样本比例——如果这个比例偏高超过5%说明采样范围里包含了大量难以收敛的极端工况这时候光看电压统计结果已经没有意义得排查系统本身是否运行极限附近了。4. 电压概率分析的结果与工程解读4.1 电压均值、标准差与概率密度曲线跑了3000次采样之后把33个节点的电压数据汇总得到一组非常有信息量的结果。电压均值曲线跟传统潮流算出来的电压分布形态上很像沿馈线从节点1往末端走电压逐渐降低节点18和33的均值最低。这一点并不意外因为均值的物理意义就是平均运行状态确定性潮流在参数设置合理时算出来的结果接近均值状态。真正的差异体现在标准差和分布形态上。节点1作为松弛节点电压标准差是0——这不奇怪上级电网把电压定死了。沿着馈线往后走标准差逐渐变大节点18的电压标准差可以达到0.015到0.02 p.u.。如果只看均值节点18的0.94 p.u.看起来似乎还行但你结合标准差去想均值0.94减两个标准差就是0.91这意味着不少场景下电压会掉到0.91甚至更低而均值本身已经低于0.95的允许下限了。画概率密度曲线的时候我还有一个发现分布式光伏接入节点的电压分布有明显的右偏特征因为光伏出力上限是额定容量出力接近0的日子很多高出力时段相对集中所以电压的分布左尾长、右尾短不是教科书式的钟形曲线。遇到这种情况只用均值和标准差两个数字描述电压特性是不够的一定要把完整分布曲线拿出来看。4.2 接入容量对电压风险的影响三组对照实验为了看清楚出力波动性到底会造成多大的电压风险我做了一组渗透率对照实验风电容量MW光伏容量MW节点18电压均值p.u.节点18电压标准差p.u.节点18电压0.95概率000.95230.002118%1.00.80.94100.017861%2.01.60.92980.024188%这组数据透露了几个很有意思的结论。首先新能源接入反而拉低了节点18的电压均值这跟很多人的直觉相反。直觉上就地接入电源应该抬升电压才对。实际情况是风电和光伏的额定容量较大时由于配电网线路阻性压降明显馈线潮流方向的改变会产生复杂的压降关系更重要的是我把功率因数设成了0.95滞相风电在发出有功的同时也要消耗无功而无功从末端向上级电网吸取沿途的电压降反而增加了。这就提醒我们新能源并网不是单纯往配电网里加电源功率因数、无功控制策略直接决定了电压是被抬升还是被拉低。其次渗透率翻倍之后电压标准差也在变大电压越限概率从61%飙到88%。系统的不确定性传染给了电压电源波动越大电压波动越大低电压风险非线性上升。从这个角度看概率潮流给出的不仅是故障诊断书更是一条风险评估曲线。规划人员在决定一个区域到底能接入多少分布式光伏时不应该只看潮流计算在最大出力工况下的结果而应该看概率潮流给出的不同渗透率下越限概率的变化曲线选择越限概率可接受的最大容量。4.3 概率分布结果如何反哺实际工程决策做完概率分析工程上的整改方向就非常清晰了。节点18电压越限的概率那么高改进手段无非几条调整风电场功率因数从吸收无功改成多发无功支撑电压在节点18附近加装并联电容器或静止无功发生器动态补偿限制该节点的最大接入容量或者要求风电场配置储能减少波动这些方案的实际效果都可以继续用蒙特卡洛框架去验算修改参数后重新跑3000次采样看越限概率有没有降到目标值以下。这样形成了一个完整的风险评估-措施制定-效果验证闭环。我之前在项目里用同样的方法评估过加装SVG后的改善程度效果非常直观——节点电压标准差从0.02 p.u.直接降到0.008 p.u.越限概率从61%降到15%这就是量化决策的价值。5. 大量采样导致的收敛难题与最优因子法的应用5.1 蒙特卡洛的代价问题蒙特卡洛法有个致命短板慢。每一次采样都要跑一遍潮流计算理论上讲采样次数越多越好几千次甚至上万次潮流计算下来时间成本完全不可忽视。IEEE33节点这种小系统还好一次牛拉法几毫秒几千次也就几秒钟但如果换成几百个节点的大配电网或者含大量电力电子器件的高精度模型几千次潮流计算就能跑到几个小时。更麻烦的是收敛失败问题。我在实验中就遇到了把光伏容量提高到1.6 MW以后部分极端样本比如风速恰好落在切入风速附近、光伏突然满发导致潮流迭代不收敛牛顿法在你让注入功率偏离正常运行点太远的时候很容易发生振荡或发散。如果采样样本里有5%的样本潮流算不出来你得到的统计结果就失真了——因为失败的样本恰恰是那些电压最极端的工况。这个问题的本质是牛顿法本身的收敛域有限。牛顿法迭代每一步要求解线性方程组修正电压量但潮流方程是非线性的修正量走一步可能跨过了收敛域。在常规潮流计算里只要初值给得足够好一般用平启动基本都能收敛但在蒙特卡洛的极端采样场景里初值不再附近收敛困难就成了必然。5.2 最优因子法如何降低不收敛率潮流计算最优因子法个别资料里也叫最优乘子法解决的就是这个问题。思路并不复杂牛顿法每次迭代得到一个修正方向之后不再傻乎乎地走完全程而是先沿这个方向搜索一个最优步长让功率不平衡量的目标函数在修正方向上取到最小然后才更新电压量。具体到实现在极坐标潮流计算中每一步迭代先用常规牛顿法算出待修正量ΔX然后求解一个一维优化问题[ \min_{\alpha} \quad F(\alpha) \frac{1}{2} \left| f(X_k \alpha \Delta X) \right|^2 ]这个目标函数实际上是潮流方程残差的平方和对它关于α求极值。因为f是二次函数F(α)展开之后是α的四次多项式可以直接求导解出最优的α不用额外的数值优化循环。然后把X更新为[ X_{k1} X_k \alpha_{opt} \Delta X ]加了这一步之后相当于牛顿法从直线冲向解变成了试探性地走向解——如果直接冲过头会发散那就走短一点确保每次迭代都有进展。实测下来在常规可解范围内最优因子法的迭代次数反而会增多因为每次步长都被压缩了但在病态区域它能大大降低不收敛的概率。我在同样的IEEE33节点实验中加入最优因子逻辑后光伏容量1.6MW场景的不收敛样本率从4.7%降到了0.3%左右代价是个别典型样本的迭代次数增加了30%到50%。在蒙特卡洛这种跑几千次的场景里用少量单次计算成本换取更完整的采样覆盖非常划算。5.3 实际工程中怎么选直接上pandapower还是手写牛拉法这个问题我纠结过很久。Pandapower的runpp封装了完整的牛顿法求解器大多数情况下开箱即用但它内部没有公开暴露最优因子法的开关如果你遇到顽固的不收敛样本改造起来比较麻烦。Pandapower官方文档里提到可以用runpp(algorithmiwamoto_nr)这就是带最优因子思想的牛拉法实现内部用的确实是岩本法Iwamoto那一套效果等价于最优因子法。如果你用这个选项还有不收敛的就得自己手写潮流求解器了。手写牛拉法加最优因子法并不复杂我建议每个做概率潮流的人至少完整实现一遍不为别的就为了搞懂里面的数学机理。我的建议是工程项目直接用pandapower的algorithmiwamoto_nr做研究或者学术验证就手写一遍两者建议都尝试。手写版的核心框架大概长这样def nr_pf_with_optimal_factor(Ybus, Sbus, V0, tol1e-8, max_iter20): Ybus: 导纳矩阵 Sbus: 节点注入复功率 V0: 初始电压向量 V V0.copy() for it in range(max_iter): # 计算功率不平衡量有功、无功 S_calc V * np.conj(Ybus V) dS Sbus - S_calc # 提取实部虚部拼接成残差向量 F np.concatenate([dS.real, dS.imag]) # 构造雅可比矩阵按极坐标标准实现 J build_jacobian(Ybus, V) # 解线性方程组得到修正方向 dX np.linalg.solve(J, -F) # 沿dX方向求解最优步长alpha alpha optimal_step(Ybus, V, dX) # 更新电压 V update_voltage(V, alpha, dX) # 判断收敛 if np.linalg.norm(F) tol: break return Voptimal_step这里的关键就是前面说的四次多项式求极值。顺着这个框架去填充细节你就能得到一套任何配电网都能跑的蒙特卡洛概率潮流工具比单纯依赖现成库要踏实得多。6. 采样规模、结果可信度与常见误区这一节我想专门聊聊做蒙特卡洛概率潮流最容易翻车的几个地方都是我实际踩过或者看别人踩过的。第一个误区是只看均值不看分布。很多报告里写着节点电压平均值为0.94满足要求实际上均值为0.94时越限概率可能高达60%因为分布是偏的。概率潮流最大的价值就在分布只看均值等于把宝贵的信息全扔掉了。第二个误区是采样次数不校验收敛。有的人固定跑10000次有的人拍脑袋跑2000次却没有检查统计指标是否真的稳定。正确做法是跑完第一批样本后把样本分成前后两半分别计算均值和方差如果差别超过2%增加采样次数。我前面提到的连续采样均值变化量判定法也是这个思路。这个操作的工程意义在于避免浪费算力也避免结论偏差。第三个误区是忽略不收敛或失败的样本。前面提过失败样本不是随机丢失的它们大多是极端工况。如果你简单跳过它们统计结果会系统性偏乐观——电压分布向正常工况集中尾部风险被低估。处理方式有三类最推荐的是加最优因子法提升求解器的健壮性让失败样本尽可能少其次是分析失败样本的共性失败原因确认这些工况是否真的属于物理上不可运行的区域如果是剔除它们反而合理第三是在报告中明确披露失败样本比例它本身就是一个有价值的信息。关于采样规模的选取可以给一个实用经验值。IEEE33节点这种规模配合两三个随机电源3000次以上基本够看5000次比较稳。如果你要分析的是小概率事件——比如电压上限超过1.05的概率想要把这个概率算准建议上万次采样。有一种更高效的思路是拉丁超立方采样它能用较少的样本覆盖整个概率空间比纯蒙特卡洛少一半甚至更多的计算量但这里需要更细致地处理相关性比较复杂以后有机会单独写一篇。7. 概率潮流在配电网规划里的落地思路最后说点在我实际工作里沉淀下来的经验。概率潮流不是学术象牙塔里的玩具它在配电网规划、新能源并网方案比选、无功补偿配置这些场景里是真正能落地的工具。但落地的时候要注意不要一次性把系统搞得太复杂。我的习惯是三步走第一步先用确定性潮流摸清楚系统的基本盘哪些节点本来就弱、哪条馈线本来就长做到心里有数。第二步在关键薄弱节点接入新能源跑概率潮流得到电压分布及越限概率。第三步针对超限节点做敏感性分析——改变接入容量、功率因数、补偿容量观察越限概率如何变化直到找到满足工程要求的配置方案。这个方法我已经在两个实际项目里用过了效果非常好。有一个项目是10kV分布式光伏接入方案比选业主一开始倾向于把光伏集中接在馈线末端的一个节点上理由是集中便于运维。我用概率潮流算了一下这个方案下末端节点电压越限概率高达74%而分散接入到三个节点的方案越限概率只有11%。业主看完概率分布图和越限概率数据当场就改了方案。如果没有概率分析只做最大出力工况下的确定性潮流两个方案看起来都是合格的项目上线后大概率就是频繁过压脱网。所以我的体会是新能源渗透率越高的配电网越不要迷信确定性潮流算出来的那些合格数字。给系统注入不确定性把电压的完整概率分布算出来你会发现很多原本被均值掩盖的问题。这也是概率潮流这门工具最有价值的应用方式——不是替代确定性潮流而是补上它漏掉的维度让你对电网的理解从单帧照片升级成全景视频。另外提醒一句跑蒙特卡洛概率潮流的时候建议顺便把每个节点的电压分布曲线导出来存好后面写报告、答疑、复算都用得上。我见过不少人只存均值和标准差等到要重新分析尾部风险的时候傻眼了只能重跑一遍。数据不值钱重跑一遍算力也不值钱但时间值钱。概率潮流这件事数据留得越完整后续工作越省心。
返回列表