做电力系统仿真这些年,我越来越觉得“确定性”三个字是一种奢侈。以前一条馈线上挂的都是常规负荷,负荷曲线平稳,算一次潮流能把运行点定得八九不离十;现在馈线上接了几台风机、一片屋顶光伏,外加电动车在傍晚扎堆充电,再按单点负荷去校核电压,结果不是偏保守就是偏冒进。概率潮流要回答的问题,从“电压是多少伏”变成了“电压越限的概率有多大、线路重载的天数占比有多高”。这个转变,本质上是用概率的思维替换单点的思维。
这篇文章围绕含风光发电的电力系统概率潮流计算展开,重点放在算法层面:概率模型怎么选、采样怎么设计、求解器怎么编排,以及实际跑数时容易踩的坑。适合电力系统方向的研究生、做新能源消纳评估的工程师,以及第一次接触不确定性分析的同行参考。不涉及过于抽象的数学证明,尽量给到能直接上手的步骤和判断依据。
1. 问题的本质:潮流从“定值”变成“分布”
1.1 传统潮流为什么不够用
传统潮流计算的任务很明确:给定网络参数和节点注入功率,求解节点电压和支路潮流。它的前提是输入数据确定,一组负荷、一组发电,就对应一组结果。这个思路在电源可控、负荷可预测的年代是成立的,调度员关心的是某个运行方式下系统能不能稳定,校核几个典型场景就差不多了。
风光接入打破了这个前提。风机出力随风速波动,光伏出力随云量和日照变化,负荷本身也有随机性。用一个“典型值”去做潮流,比如取风速额定值、取日照最好的值,算出来的电压往往很乐观;取低出力极端值,又会出现大量不必要的越限告警。更麻烦的是,风、光、负荷的极端情况并不会同时出现,峰值叠加出来的场景可能一年都遇不到一次。
这时候需要的不再是一组确定性的潮流结果,而是结果的概率分布:哪些节点电压超过上限的几率是5%,哪些线路年重载小时数超过多少。这个分布就是概率潮流的核心输出。
1.2 不确定性从哪里来
不确定性的来源可以分为三类。
第一类是自然条件的随机性。风受大气湍流、地形和季节影响,短时间尺度内变化剧烈;光伏受云遮、空气质量、昼夜和季节影响,有很强的时段规律。这类随机性是概率潮流建模的主要对象。
第二类是预测误差。负荷预测、风电功率预测和光伏功率预测都有误差,误差在短时间尺度内通常呈现某种分布规律,实际工程中常用预测值加误差项来模拟。
第三类是设备状态的随机性,比如机组检修、线路停运、保护动作。严格来说这些属于可靠性分析的范畴,但在概率潮流中也会以“事件型”随机量出现,处理方式类似。
在建模时要区分时间尺度。概率潮流解决的是某一时刻截面上的不确定性,不是长期时序模拟。换句话说,它描述的是“给定当前预测信息下,系统状态服从什么分布”,而不是“未来一年逐时怎么变化”。后者是时序仿真或生产模拟的活儿,别混在一起用。
1.3 概率潮流的输入和输出
输入包括三部分:网络的拓扑和参数、各类随机变量的概率分布,以及随机变量之间的相关性。分布可以是参数的(正态、威布尔、贝塔),也可以直接给样本。
输出则是电压幅值、相角、支路有功无功、网损等量的概率分布,以及衍生指标:越限概率、期望缺供电量、节点电压的置信区间。工程上最喜欢看的是95%分位数和越限概率,这两个指标可以直接对接规划审查和运行风险评估。
搞清楚了输入输出,接下来的关键就是两件事:怎么把输入的不确定性建模建准确,怎么用算法高效地把输出分布算出来。这两件事就是概率潮流研究的主要内容。
2. 变量建模:分布选错,后边的功夫全白费
概率潮流精度的高低,很大程度取决于输入分布是否合理。算法再漂亮,喂进去一个错误的分布,结果也只是精确的错误。下面把负荷、风力和光伏三类核心变量的建模拆开说。
2.1 负荷波动按正态近似够用吗
负荷建模最常见的是正态分布:
[ L \sim N(\mu, \sigma^2) ]
μ 取负荷预测值,σ 取预测误差或历史波动的标准差,一般取 μ 的5%~10%。对于常规工业和居民负荷,这个近似在大多数工况下是够用的。But需要注意,正态分布有左右对称、尾部衰减快的特性,如果实际负荷在尖峰时段有偏态、或者存在大量同时开机的冲击性负荷,正态假设会低估重尾事件。
遇到充分多的历史数据时,我建议先用核密度估计看一下分布形状,再决定要不要用参数分布。如果数据呈偏态,可以用对数正态或Gamma分布替代;如果负荷含电动汽车充电这类“时段性脉冲”,正态就完全不适合,需要按场景混合建模。混合分布的本质是“几种典型状态按概率组合”,每个状态内部仍是常规分布,但整体形状更贴近实际。
实操中记住一个原则:没有数据时用正态加10%标准差起步;有数据时让数据说话,别硬套。
2.2 风速和风电出力的两段式处理
风速本身通常用两参数威布尔分布描述:
[ f(v)=\frac{k}{c}\left(\frac{v}{c}\right)^{k-1} e^{-(v/c)^k} ]
其中 c 是尺度参数,反映平均风速大小;k 是形状参数,反映风速波动特性,一般在2~3之间。k=2时就是最常见的瑞利分布。
光有风速分布不够,还要有风速到出力的转换关系。风机的功率曲线一般用分段函数:
[ P_w(v)= \begin{cases} 0 & v < v_{ci} \text{ 或 } v \geq v_{co} \ P_r \frac{v^2-v_{ci}^2}{v_r^2-v_{ci}^2} & v_{ci} \leq v < v_r \ P_r & v_r \leq v < v_{co} \end{cases} ]
v_ci 是切入风速,v_r 是额定风速,v_co 是切出风速。常见机组的取值大概是3m/s、12m/s、25m/s。
这里有个容易忽略的点:风速分布在切入风速以下和切出风速以上会积累出相当概率的“出力等于0”,也就是说风电出力的概率分布里有一条离散的点质量。后面做分布拟合和可视化时,这条零出力点质量很容易被平滑掉,或者被某些半解析方法忽略,这是实际工程里很常见的坑。
如果一台风机不够,风电场里有多台机组,还要考虑尾流效应,但那是更细的建模问题。在概率潮流入门阶段,用单机功率曲线乘机组数或容量倍率就够了。
2.3 光伏出力的Beta模型与辐照度换算
光伏出力的随机性主要来自辐照度。归一化的辐照度 s=G/G_max 通常用Beta分布建模:
[ f(s)=\frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)} s^{\alpha-1}(1-s)^{\beta-1}, \quad 0 \leq s \leq 1 ]
α 和 β 可以由历史辐照度数据的均值和方差反推:
[ \alpha = \mu_s \left( \frac{\mu_s(1-\mu_s)}{\sigma_s^2} - 1 \right), \quad \beta = (1-\mu_s)\frac{\alpha}{\mu_s} ]
在数据缺乏时,一个常用的近似是把 α 和 β 取为2和6左右,对应均值0.25、偏右偏态的辐照度分布,比较符合多云天气的实际情况。
辐照度到电功率的换算可以简单线性:
[ P_{pv} = P_{stc} \frac{G}{G_{stc}} \left[ 1 - \eta_T(T - T_{ref}) \right] ]
P_stc 是标准测试条件下的额定功率,G_stc 通常1000 W/m²,温度项考虑组件温升带来的效率损失,工程简化时可以直接忽略温度项。
光伏同样有零出力问题:夜间或极端阴天时出力为0。Beta分布本身定义在(0,1)开区间,处理起来要把“零出力”单独作为离散概率处理,和风电的思路一样。
2.4 变量相关性:Copula与相关系数矩阵
独立假设在理论推导时很省事,但在实际风光系统中几乎不成立。同区域的风电场共享大气过程,出力高度正相关;同一城市的屋顶光伏共享日照条件,也是正相关。忽略相关性会造成电压分布方差被低估,对风险指标产生偏乐观的估计。
处理相关性的标准思路是Nataf变换。操作流程是:先把每个非正态随机变量通过等概率变换映射到标准正态空间,构造相关矩阵,再对相关矩阵做Cholesky分解,得到一组具备指定相关性的标准正态样本,最后逆变换回原始分布。整体思路可以概括为“正态空间里造相关,原始空间里取分布”。
Nataf变换有两个注意点。一是相关系数在映射前后会变化,需要按公式修正,不过工程上常用数值迭代去校准,不必手推。二是相关系数矩阵必须是半正定的,否则Cholesky分解直接报错,后面专门讲这个坑。
比Nataf更灵活的是Copula方法。Copula可以把任意边缘分布和任意相关性结构分开处理,理论上支持更复杂的尾部依赖关系。但在电力系统概率潮流里,大多数场景用高斯Copula配Nataf变换就够用,复杂Copula带来的精度提升往往被数据不足抵消。我自己的经验是:数据量少于几千点的时候,老老实实用相关系数矩阵加Nataf,别轻易上高维Copula。
3. 算法选型:从暴力梭哈到半解析
概率潮流从二十世纪七十年代提出到现在,算法可以分成三类:模拟法、解析法和近似法。每一类都有明确的适用边界,选错了不是费时间就是精度不够。下面逐个说清楚。
3.1 蒙特卡洛模拟:准确但费电
蒙特卡洛模拟(MCS)是概率潮流公认的基准方法。思路非常朴素:按输入变量的概率分布生成大量样本,逐样本做确定性潮流,统计输出的均值和方差。
MCS的优点在于几乎没有任何假设限制,非线性潮流方程、离散分布、任意相关性都能处理;缺点也明显,收敛速度是 O(1/√N),要想把均值误差缩小到1%,样本量需要上万量级。每跑一次样本就是一次潮流求解,网络规模一大、样本一多,计算时间就失控。
所以MCS在概率潮流里通常担当“标准答案”的角色,用来校验其他加速算法的精度。实际使用时,我会用MCS跑一次完整结果,把电压概率密度、支路潮流的均值方差存档,再拿其他方法的输出跟它对比。没有基准的加速算法对比都是自说自话。
3.2 拉丁超立方采样:少花钱多办事
拉丁超立方采样(LHS)是方差缩减技术里性价比最高的一种。它的核心思想是分层:把每个输入变量的累计分布函数分成N个等概率区间,每个区间随机或取中点采样一次。这样保证样本在变量空间里覆盖均匀,而不是像MCS那样扎堆。
具体步骤:
- 对每个随机变量,把[0,1]区间均匀分成N份;
- 在每个区间内抽取一个均匀随机数;
- 用逆累积分布函数变换成原始分布的样本;
- 对各变量的样本顺序做独立随机重排,破坏分层采样带来的不必要相关性;
- 如果需要变量间相关系数,在重排时按相关矩阵排序,或用Nataf变换。
LHS配合潮流计算的效果非常直接:我在实际算例里观察到,500个LHS样本得到的结果波动水平接近几千个MCS样本。因为分层保证了尾部区域的采样密度,对电压越限概率这类尾部指标尤其有价值。
LHS还有一个升级版叫Sobol序列或拉丁超立方准蒙特卡洛,样本更均匀,但实现复杂度上升。刚上手时建议先把标准LHS跑通,遇到精度还是不够再考虑准蒙特卡洛。
3.3 点估计法:用七个点换一个分布
点估计法(PEM)的思路是把连续分布离散成几个“典型点”加权重,用少量确定性潮流去近似输出分布的前几阶矩。最常用的是Hong的2m+1方案,m是随机变量个数。
以2m+1方案为例,对每个输入变量 xi:
- 计算标准偏度 λi: [ \lambda_i = \frac{E[(x_i-\mu_i)^3]}{\sigma_i^3} ]
- 取两个偏移位置: [ \xi_{i,1} = \frac{\lambda_i}{2} + \sqrt{m + (\frac{\lambda_i}{2})^2}, \quad \xi_{i,2} = \frac{\lambda_i}{2} - \sqrt{m + (\frac{\lambda_i}{2})^2} ]
- 采样点取 μi + ξi,k σi,其他变量取均值,做一次确定性潮流;
- 对应权重: [ w_{i,1} = \frac{-\xi_{i,2}}{m(\xi_{i,1}-\xi_{i,2})}, \quad w_{i,2} = \frac{\xi_{i,1}}{m(\xi_{i,1}-\xi_{i,2})} ]
- 中心点(所有变量取均值)权重 w0 = 1 - Σ(w_{i,1}+w_{i,2});
- 输出矩由 Σ w · z^k 得到。
2m+1方案总共需要 2m+1 次确定性潮流。如果随机变量是20个,只需要41次潮流,比MCS节约几个数量级。
PEM的代价是只能给出输出的前几阶矩和简要分布,得不到完整的概率密度曲线。对于随机变量数量少、精度要求不高、只需要看一眼均值方差和大致越限概率的场景,PEM是最划算的选择。
3.4 半不变量与Gram-Charlier展开:解析派的加速
半不变量法走的是另一条路。它把潮流方程在运行点线性化,把非线性关系近似成线性方程,再借用半不变量的“可加性”把输入的不确定性直接映射到输出的矩。
核心流程是:
- 在期望运行点做一次确定性潮流,得到雅可比矩阵;
- 把节点注入功率的扰动通过逆雅可比映射到状态变量的扰动,本质是一阶泰勒展开;
- 利用独立随机变量的半不变量可加性,得到输出变量的各阶半不变量;
- 用Gram-Charlier或Cornish-Fisher级数把半不变量重构成概率密度或累计分布。
[ \Delta X = J^{-1} \Delta W ]
输出X的k阶半不变量大约等于输入W的k阶半不变量乘以 J^{-1} 对应元素的k次方。这里的推导细节容易绕晕,但用的时候只需要知道:它是一个线性映射。
Gram-Charlier展开的意思是,用标准正态分布叠加Hermite多项式来逼近实际分布。前三到四阶矩对大部分近似足够,但当输入分布高度非正态、或风光出力有大量零出力点质量时,级数展开会出现振荡和负概率,这是它最大的短板。
半不变量法最大的优势是速度:一次潮流加少量矩阵运算就能得到结果,完全不需要采样。代价是线性化误差,对注入功率波动幅度大的系统,精度下降明显。我的判断是:它适合输电网这类运行点相对平稳、波动相对小的场景;配电网这种R/X比值高、电压对功率敏感的地方,要谨慎使用。
3.5 几种方法的横向对比
| 方法 | 需要的潮流次数 | 能获得的结果 | 处理相关性 | 主要局限 |
|---|---|---|---|---|
| 蒙特卡洛MCS | 数千至数万 | 完整分布、任意统计量 | 容易 | 计算量大 |
| 拉丁超立方LHS | 数百至数千 | 完整分布 | 较容易 | 比MCS快但仍要采样 |
| 点估计PEM | 2m+1次 | 前几阶矩、简化CDF | 困难 | 得不到完整分布 |
| 半不变量法 | 1次加矩阵运算 | 由级数近似的分布 | 中等 | 线性化误差,强非线性时失效 |
我自己平时用法的优先级是:做基准用MCS,做精度和速度平衡用LHS,快速评估场景数量多、只关心均值方差时用PEM,输电网大系统且输入波动小的时候才考虑半不变量法。没有绝对最优,只有场景最匹配。
4. 动手搭一个含风光的概率潮流算例
理论知识说再多,不如跑一个完整算例。这里用一个常见的中压33节点配电网算例演示整个流程。节点参数和支路参数是公开算例的常用数据,基值取10 MVA、12.66 kV,总负荷大约3715 kW加2300 kvar。具体数值不必纠结,关键是流程。
4.1 算例系统与数据准备
在33节点系统的节点16接入一台额定800 kW的风机,在节点23和30分别接入额定500 kW的光伏。负荷节点全部做随机化处理,取预测值为基准值,标准差取5%。
这样全部随机变量是:33个负荷节点的有功和无功(共66个),1个风机出力,2个光伏出力,一共69个随机变量。这就是一个不小的规模,用PEM的话需要139次潮流,用LHS的话500次左右,用MCS至少5000次。
数据准备时还要明确随机变量的分布:
- 负荷有功:正态分布,μ为基准值,σ=5%μ;无功按相同比例缩放到原始数据。
- 风速:威布尔分布,尺度参数 c=8,形状参数 k=2.2。
- 风机功率曲线:切入3m/s、额定12m/s、切出25m/s。
- 辐照度:Beta分布,α=2,β=6,额定辐照度1000 W/m²。
- 光伏温度系数:简化不计。
另外设置节点23和30的光伏出力相关系数为0.6,模拟同区域日照相关的场景。
4.2 场景生成与相关性注入
写采样脚本时,我的习惯是先完成“独立采样”,再注入相关性。
独立采样里,负荷用正态分布逆变换采样;风速用威布尔逆变换采样,再用功率曲线转成风机出力;辐照度用Beta逆变换采样,再转成光伏出力。
相关性注入采用Nataf变换流程:
- 把负荷、风电、光伏变量通过边缘分布逐点映射到标准正态空间;
- 构造相关系数矩阵,这里非零相关只存在于两个光伏变量之间,其余对角线上为1;
- 用Cholesky分解把标准正态样本变换成带相关性的形态;
- 再用各自边缘分布的逆累积函数,把标准正态样本变换回原始分布空间。
第4步会把相关性稍微改变,工程处理上先按目标相关矩阵稍放大一些去补偿,或者做一次迭代校准。我一般允许误差在±0.05以内,不过多纠结。
4.3 潮流求解与结果统计
配电网通常R/X比值高,用牛顿法容易不收敛,推荐用前推回代法。前推回代法原理简单:已知根节点电压,假设各节点电压初值,从末端向根前推计算支路电流和功率损耗,再从根向末端回代更新节点电压,直到两次迭代的电压差小于阈值。
对每个样本重复以下流程:
- 把样本注入到节点注入功率向量;
- 调用前推回代潮流函数;
- 记录关心的节点电压幅值和关键支路功率;
- 汇总所有样本。
统计阶段,先算各输出量的均值和标准差,再画电压幅值直方图。对末端节点(比如节点18附近),重点关注电压低于0.95 p.u.的概率。设一个标志变量,每出现一次低电压就记1,最后用次数除以样本总数就得到越限概率。这个比率本身也是随机量,样本不够时会抖动,所以要看它本身的收敛性,而不是看一眼就完事。
4.4 结果怎么读:电压概率密度与越限指标
假设用500次LHS跑完,典型结果会是这样:末端节点电压期望值在0.961~0.965 p.u.之间,标准差约0.012 p.u.,电压低于0.95 p.u.的概率约8%。这个8%就是核心决策指标:如果在规划阶段,这个越限概率超过了允许值,就需要补无功补偿装置或调整风机逆变器电压控制策略。
对比PEM方法,69个随机变量需要139次潮流,得到末端电压期望0.963 p.u.、方差0.013 p.u.,和LHS结果非常接近,但得不到完整的越限概率密度。这说明在只有“均值方差对比”需求时,PEM完全够用;但需要“电压低于0.95的事件概率”时,必须用LHS或MCS这类能给出全分布的方法。
读结果时要警惕区分“概率分布的均值”和“单点潮流的结果”。如果拿所有随机变量的期望值只算一次潮流,得到的末端电压通常接近概率分布的均值附近,但它掩盖了波动范围。决策者最怕的是把“期望电压合格”当成“系统安全”,概率潮流的价值恰恰是把这层不确定性揭示出来。
5. 实际跑数遇见的坑与排查思路
算法流程跑通不难,难的是结果合理、能让人信服。我把这几年在这类算例里踩过的坑整理成速查表,按症状、原因和解决办法列出来。
5.1 样本量到底取多少才够
症状:同样的算例,跑两遍结果差不少;或者越限概率忽高忽低。
原因:MCS和LHS的统计量本身有波动,样本量不足时结果不可复现。
排查思路:用序贯采样法,每增加一批样本就重算关心的统计量,观察它的变化。以末端电压均值为例,定义变异系数:
[ CV = \frac{\sigma_{\text{估计值}}}{\mu_{\text{估计值}}} \times 100% ]
当CV小于0.5%时,继续加样本的收益就很低了。对电压越限概率这种尾部指标,建议看它的置信区间,区间宽度小于1个百分点再停。
实际经验数值供参考:对一个30节点左右的系统,均值类指标用300~500个LHS样本就能稳定;越限概率类指标可能需要2000个以上,因为尾部事件本身稀少。
5.2 相关系数矩阵“不正定”引发的报错
症状:Cholesky分解报错,矩阵不是正定的。
原因:手动填写的相关系数矩阵可能存在内部矛盾,比如A和B相关0.9,B和C相关0.9,但A和C相关填了0.1,三者关系不满足正定性约束;或者样本量少、经验相关矩阵本身就接近奇异。
排查思路:先检查是不是填数错误,把矩阵特征值算一遍,看看有没有负数。轻微的非正定可以用修正方法,对特征值做截断,把负特征值改成极小正数,再重构矩阵。更稳妥的做法是先用Kendall秩相关系数代替Pearson相关系数,秩相关在单调变换下更鲁棒,正定性问题也更少出现。
5.3 配电网潮流求解器迭代不收敛
症状:某个样本下前推回代迭代次数暴增,甚至直接发散。
原因:配电网重负荷情况下电压偏低,前推回代法的收敛性不如牛顿法稳定;或者数据里存在阻抗特别小的支路,数值条件差。
排查思路:先定位是哪个样本、哪个节点出的问题。可以把该样本单独拎出来做一次标准潮流,对比其他相近样本,看是不是出现了病态数值。如果个别异常样本导致整体发散,可以降低收敛判据的精度,把阈值从1e-8放宽到1e-5,对概率统计结果影响微乎其微。实在不行,考虑改用牛顿法加合适的初值,尤其是对含分布式电源的弱环网。
5.4 风光零出力点与PDF假峰
症状:画出的电压直方图在某个区间有异常尖峰,或Gram-Charlier展开出现负概率密度。
原因:风电和光伏在零出力处有离散概率质量,反映在电压分布上就是一个集中凸起。半不变量法里用连续级数逼近带点质量的分布,必然会在断点附近振荡出假峰。
排查思路:直方图里的零出力峰不要试图用平滑去消除,那是真实的物理现象。对比算法时,统一用累计分布函数而不是概率密度函数去评判精度,CDF对点质量更宽容。如果非要用半不变量法,考虑把风光零出力状态单独分离,拆成“正常运行状态”和“零出力状态”两个子场景分别计算,再按概率加权合成,能显著减少级数振荡问题。
5.5 算法对比时的公平性
最后提醒一个容易犯的对比错误:不同算法要使用完全相同的输入分布、相同的潮流求解器、相同的收敛判据,才有对比价值。我在实际项目里见过有人把MCS的输入分布参数悄悄改了一个标准差,然后报告“LHS比MCS更准”,这种对比只会误导自己。
正确做法是固定一套基准输入,先跑一个高样本量的MCS作为标准答案,记录各输出量的均值和分位数;然后让LHS、PEM、半不变量法各自跑,计算与基准的绝对偏差。偏差大的算法要么不适合这个场景,要么需要调参,这个结论才是有说服力的。
我在实际使用中最深的体会是:概率潮流不是“用一个算法解决所有问题”,而是一个组合拳。先用MCS锚定标准,用LHS做高精度分析,用PEM做快速筛查,用半不变量法做大系统趋势估算。每一种方法的价值都是相对的,关键是知道自己手里的算例对精度和速度的要求落在哪一档。如果你刚开始接触这个方向,我建议先把“独立采样+MCS+前推回代”这条最朴素的链路跑通,再逐步把相关性和方差缩减加进去。基础链路通了,后面换算法、换分布都是水到渠成的事。