接手这类题目,第一反应是:这不就是“用随机抽样把不确定性摊开来看”的典型场景吗。风电、光伏出力天生带波动,配电网里接了这两个东西,传统的单一“确定性潮流”只能告诉你某个固定出力下电压和潮流是多少,根本回答不了“电压越限概率有多高”“线路最大负载率到哪一档”这类工程上真正关心的问题。所以蒙特卡洛法加概率潮流就成了最直接、也最容易实现的思路,配上 IEEE33 节点标准配电系统,用 Matlab 一步步把随机出力、随机负荷、潮流计算和结果统计串起来,就能得到一份完整的概率风电光伏出力分析与概率潮流报告。
这个项目本身不算高深,但对新手特别友好:它既有物理建模(风速、光照、风机和光伏板出力),又有数值算法(随机抽样、潮流迭代),还有统计分析(均值、方差、累积概率分布、越限概率),一套流程走通,基本上把科研论文里“不确定性分析”那些套路摸了个遍。我从拿到题到跑通,前后折腾了将近两周,踩了不少坑,这里把思路、代码框架、参数选择、调试经验全部摊开讲,希望能帮你少走弯路。不管你是准备做课程设计、毕业设计,还是第一次接触概率潮流,这篇文章里都有可以直接抄作业的东西。
1. 项目到底在做什么:为什么把蒙特卡洛和概率潮流绑在一起
1.1 从确定性潮流到概率潮流的跃迁
传统潮流计算解决的是“给定一个确定的系统状态,求各节点电压和各支路功率”。这个状态是死的,负荷是多少就是多少,发电出力是多少就是多少,算完得到一组唯一的解。但现实不是这样,风速今天早上和下午可能差一倍,光照被云遮一下瞬间掉一半,负荷曲线的峰谷也每天都在变。如果只做一次确定性潮流,你只能得到“在某一秒”的运行状态,无法回答“一天里有百分之几的时间电压会偏高”。
概率潮流就把这些输入量变成随机变量,每个随机变量都有各自的概率分布,然后通过某种数学手段把这些分布映射到潮流结果上,最终得到节点电压、支路功率、网损这些输出量的概率分布或者统计特征。换句话说,确定性潮流回答“是多少”,概率潮流回答“有多大概率和落在哪个范围”。这个信息对配电网规划、分布式电源容量配置、无功补偿方案评估都很有价值。
1.2 为什么选蒙特卡洛而不是那些“更高级”的解析算法
一提到概率潮流,有些论文会用什么点估计法、半不变量法、Gram-Charlier级数展开、以及各种改进型多项式混沌法。听起来很专业,但自己动手实现的时候你会发现,解析法每一步都要重新推导公式,特别是负荷和电源分布类型一多,相关性一引入,公式复杂度直接爆炸。而蒙特卡洛法思路简单到令人发指:既然不知道结果分布,那就按输入分布反复抽样,每种抽到的场景都当成一个确定性状态,跑一次确定性潮流,抽一万次就跑一万次,最后把一万组结果汇总,画直方图、算分位数,分布自然就出来了。
这种方法的优点有三个:第一是不挑模型,风机、光伏、负荷甚至储能,任何分布都能塞进去,随机数生成函数一调就行;第二是精度可控,样本量越大结果越稳定,误差大致按样本数的平方根衰减,你想提高精度就多抽几次;第三是便于扩展,想加入风速和光照的相关性,只需在抽样那一步处理,不用改潮流算法本身。缺点也很明显,就是计算量大。但老话讲得好,能用算力换推导,对绝大多数人和大多数场景来说是划算的。
1.3 为什么是IEEE33节点:一个皮实好用的配电网实验场
IEEE33节点是配电网概率潮流赛道里的“标准白鼠”,它来自一个北美中压配电系统的公开测试算例,共33个节点、32条支路,额定电压常见取12.66 kV,总负荷约3715 kW加2300 kvar,呈辐射状网络。这个系统规模不大不小,节点数不至于让回路矩阵太吓人,又能体现出电压沿着馈线逐渐下降、接入分布式电源后局部电压抬升这些配电网典型特征。
更关键的是它的参数是公开的、约定俗成的,文献里大量对比都用它,你做出来的结果有参照系,不会觉得自己在自说自话。接入位置通常放在末端节点,比如把风电接在节点18,光伏接在节点33,这样电压抬升效果更明显,概率潮流的分布特性也更容易观察。负荷重、支路长,算不出结果或者算出来的电压分布特别宽,反而说明你对模型的理解不到位,这个系统本身就是很好的“照妖镜”。
2. 风电和光伏出力的不确定性建模
2.1 风速模型:两参数Weibull分布与风机出力折算
风速概率建模最经典的就是两参数Weibull分布,概率密度函数长这样:
f(v) = (k/c) * (v/c)^(k-1) * exp(-(v/c)^k)
其中k是形状参数,控制分布的偏斜程度;c是尺度参数,大致和平均风速成正比。做项目时一般取k在2.0~2.5之间,c在7~10之间。比如我常用k=2.1、c=8.0,这一组参数对应的平均风速约为7.1 m/s,比较贴近内陆常风区域的实际情况。Matlab里一句wblrnd(k,c,N,1)就能生成N个服从该分布的风速样本,不需要手写逆变换采样。
拿到风速后不能直接当风电出力,中间必须经过风机功率特性曲线。我见过不少初学者直接把风速样本当功率样本,结果结果分布完全失真。风机出力折算公式一般是分段函数:切入风速3 m/s,额定风速13 m/s,切出风速25 m/s。风速小于切入或大于切出时出力为0;在切入和额定之间近似线性增长;额定到切出之间保持额定功率。折算函数建议单独写一个函数文件,输入风速、额定容量、切入风速、额定风速、切出风速,输出风电机组出力。这样后续调整风机参数只改一处,不用动主程序。
2.2 光照模型:Beta分布与光伏出力简化
光伏出力建模比风电稍微细一点,核心随机量是太阳辐照度。辐照度在某一个时段内常用Beta分布描述,概率密度要用Gamma函数表示:
f(r) = Gamma(a+b)/(Gamma(a)*Gamma(b)) * r^(a-1) * (1-r)^(b-1)
这里r是归一化辐照度,通常除以一个最大值比如1000 W/m²,使r落在0和1之间。Beta分布的两个形状参数a和b决定了分布的均值和方差,比如a=2.3、b=2.7时,平均辐照度约为0.46,典型晴到多云天气的日平均辐照度差不多在这个水平。在Matlab里,betarnd(a,b,N,1)就能生成一组r样本。
光伏出力简化模型比较常见的是直接线性折算:P_pv = r * A * eta,其中A是光伏板面积,eta是光电转换效率倍率,r是辐照度归一化值。也有人为了更精细,额外加环境温度修正系数和逆变器效率,但对概率潮流研究来说,线性模型已经足够把随机性传递过去。值得注意的是,实际光伏容量一般以额定容量给出,如果你已知额定容量P_pv_nom,可以设定在标准辐照度1 kW/m²下的出力为P_pv_nom,于是实际出力就是r乘以额定容量。这样省去了讨论面积和效率的麻烦,确定性转换关系更直观。
2.3 负荷不确定性怎么处理
把风电和光伏都当成随机量,负荷如果还取固定值,概率潮流的分布其实是不完整的。实际配电网负荷同样有波动性,特别是居民负荷,早上和晚上的差异非常大。但在概率潮流研究中,负荷不需要刻意做成时间序列,只需在每个蒙特卡洛场景里让各节点负荷在均值附近随机波动即可。
一种常见做法是假设负荷期望值为系统给定值,随机波动服从正态分布,标准差取期望值的一定比例,比如5%或10%。Matlab里用normrnd很方便,但要注意一个问题:各节点负荷如果独立抽样,可能出现大负荷配上小出力的极端场景,会让潮流不收敛或者电压特别低;这在真实系统中虽然是小概率事件,但蒙特卡洛本身就会把它采到,你需要在结果解释阶段认真对待这些尾部场景。
我在实际项目里通常把标准差设成5%,这样既保留了负荷随机性,又不会让极端情况把所有注意力都抢走。如果你想看更恶劣的运行风险,可以把标准差调到15%或20%,电压分布会明显更胖,越限概率也会显著上升,这对研究配电网承载能力很有参考价值。
2.4 随机采样时容易忽略的相关性
风电和光伏出力之间,以及它们和负荷之间,并不是天然独立的。比如夜里光照为零,光伏出力必然为0,但风速可能还很大;夏天傍晚负荷在峰附近,光伏出力却开始衰减。如果完全独立抽样,生成的场景里可能出现“深夜光伏大出力”这种实际不可能发生的情况,虽然概率很低,但会污染结果尾部。
处理相关性有两个层次:初级做法是物理上调整分布参数,让光照只在白天时段抽样,夜间样本设为零,风速独立抽样;高级做法是引入Copula函数或者使用Cholesky分解处理相关系数矩阵,再生成相关随机数。做毕业设计或课程项目,用初级做法就够了,方法上更符合工程直觉。如果导师要看到“计及相关性”,那可以在Matlab里把风速和辐照度构造一个相关系数矩阵,用mvnrnd生成相关正态随机变量,再做正态到Weibull、Beta的等概率转换,不过这一步细节较多,后文有我整理的实现要点。
3. Matlab实现全过程:从采样到概率潮流
3.1 数据准备:搭出IEEE33节点系统
第一次做这个项目,最容易被卡的不是算法,而是“IEEE33节点到底长什么样”。其实网上有很多公开数据表,核心信息是支路首末端节点编号、支路电阻电抗、节点负荷有功无功。我的习惯是先把线路参数、负荷参数、拓扑信息分别放进三个矩阵,结构清晰,后面潮流函数调用也方便。
下面代码是IEEE33节点系统数据初始化的一个片段,这部分可以直接复制作为工程骨架:
%% IEEE33节点配电系统参数初始化 clear; clc; baseMVA = 10; % 基准容量 MVA basekV = 12.66; % 基准电压 kV Zbase = basekV^2 / baseMVA; % 阻抗基准值 Ohm % 支路表:支路编号 首端 末端 R(Ohm) X(Ohm) branch = [ 1 1 2 0.0922 0.0470 2 2 3 0.4930 0.2511 3 3 4 0.3660 0.1864 4 4 5 0.3811 0.1941 5 5 6 0.8190 0.7070 ... ]; % 节点负荷列向量:潮流计算前填入各节点有功负荷(kW)和无功负荷(kvar) bus = zeros(33, 2); bus(:,1) = [... ]; % 有功负荷kW bus(:,2) = [... ]; % 无功负荷kvar % 节点1为变电站母线,电压设为1.05pu,作为平衡节点 V0 = ones(33,1); V0(1) = 1.05;我知道直接给一串省略号看起来不够友好,但完整数据表有上百个数字,全贴出来很占篇幅。这里重点是让你理解数据矩阵的组织方式。真正写程序时,去公开来源找一份标准参数表,逐行填入即可。要强调一点:电阻电抗必须以欧姆为单位整理好,或者直接用标幺值并标注基准容量,单位混乱是第一次跑数据时最常见的低级错误。
3.2 核心采样:生成一次蒙特卡洛场景
以N为蒙特卡洛总次数,每一轮循环里都要生成一组风速、辐照度和负荷样本。核心采样代码如下:
rng(2024); % 固定随机种子,保证结果可复现 N = 5000; % 蒙特卡洛样本数 k_w = 2.1; c_w = 8.0; % Weibull参数 a_r = 2.3; b_r = 2.7; % Beta参数 v = wblrnd(k_w, c_w, [N, 1]); % 风速样本 m/s r = betarnd(a_r, b_r, [N, 1]); % 归一化辐照度样本 Pwind = wind_power_curve(v, 1000, 3, 13, 25); % 额定容量1000 kW Ppv = 800 * r; % 额定容量800 kW % 负荷正态波动,负荷期望由bus矩阵提供,标准差取5% loadP = bus(:,1) .* (1 + 0.05 * randn([N, 1])); % 这里需按节点维度合理扩展注意这个示例里的loadP写法只是为了表达思路,实际循环中不能直接用[N,1]去乘所有节点负荷。严谨的做法是在循环内部每次都生成33维随机向量,或者预先生成N×33的负荷扰动矩阵再循环取行。抽样放在循环外,主要是为了能提前预分配矩阵、提高运行速度,同时方便固定随机种子后不同工况之间做对比。
说到风速转功率,函数应该单独建。上面的wind_power_curve函数内容就是分段判断风速落在哪个区间,然后线性插值。我一般情况下会把切入风速、额定风速、切出风速作为函数入参,而不用全局变量,这样后面想换一台风机型号时最优。
3.3 潮流计算:用前推回代还是牛顿法
IEEE33节点是辐射状配电网,用前推回代法比牛顿法更合适。前推回代的本质是反复利用网络拓扑的径向关系:先假设各节点电压初值为1.0 pu,由末端向始端累加各支路功率得到总功率分布,这个叫前推;再由始端电压和支路功率向末端逐段修正电压降落,这个叫回代。两轮交替迭代直到电压变化小于阈值。
这个方法实现起来比导纳矩阵求逆的牛拉法直观得多,而且对配电网收敛性好,不会出现雅可比矩阵奇异的问题。缺点是处理环网比较麻烦,但IEEE33本来就是单馈线辐射网,不存在环。如果你手头有Matpower,用牛拉法也行,但每个蒙特卡洛场景都要重新构造算例对象,会有大量重复开销;而自写前推回代函数每次只要更新负荷和注入功率数组,几百行代码以内就能搞定。
前推回代的核心部分大致是这个结构:
function [V, It, iter] = backward_forward_radial(branch, bus, gen, V0, maxIter, tol) % branch: 支路表 % bus: 节点负荷 % gen: 分布式电源注入 % V0: 电压初值 V = V0; for iter = 1:maxIter % 保持上次电压值,用于收敛判断 V_old = V; % 前推:从末端向根节点累加支路功率 % ... 根据网络拓扑顺序计算每个支路末端复功率 % 回代:由根节点电压和功率更新各节点电压 % ... 逐步计算电压降落 if max(abs(V - V_old)) < tol break; end end end这里省略了具体拓扑矩阵操作,因为展开代码会很长。我可以告诉你最容易出错的地方是节点编号顺序。IEEE33的支路顺序并不是按儿子节点从小到大规整排序的,前推回代需要先根据拓扑做一次广度优先排序,再按“节点到根的距离”从大到小回代。很多小白直接按支路表顺序算,最后电压越算越乱。
3.4 循环、统计与可视化
完成一次潮流后,把感兴趣的结果保存下来。需要保存的量包括每个节点的电压幅值、每个支路的有功和无功、系统总网损等。建议用预分配矩阵避免反复扩容,例如电压结果矩阵是N × 33,支路有功结果矩阵是N × 32,网损向量是N × 1。在循环外先zeros(N,33),循环内按行赋值,这样速度比动态追加要快得多。
统计部分是我认为最能体现“概率潮流”味道的地方。不要光把几千组场景跑完就完事,要重点计算以下指标:
- 各节点电压的均值、标准差、最小值、最大值;
- 节点电压低于0.95 pu或高于1.05 pu的概率;
- 支路功率越限概率;
- 网损的概率分布与90%分位数。
可视化建议画两类图:第一类是节点电压的盒形图或区间图,横轴是节点编号,纵轴是电压幅值,每个节点表现出一个竖条区间,一眼能看出哪些节点波动最剧烈;第二类是某几个关键节点的电压概率密度图,可以直接用histogram加Normalization设为pdf,也可以用ksdensity绘制平滑曲线。Matlab的绘图交互体验好,这部分做出来非常有利于报告展示。
3.5 收敛性判断与样本数选择
蒙特卡洛误差和样本数的平方根成反比,理论上样本数越多越好,但计算时间线性增长。具体选多少样本取决于你关心的精度。我的经验是:如果只看均值,2000次已经能稳定到小数点后三位;如果看尾部概率(比如越限概率小于1%),5000次起步,甚至要10000次。因为越限属于小概率事件,你需要足够多的样本落入尾部区间,不然统计出来的越限概率会剧烈抖动。
可以用一个收敛判据来判断样本数够不够:每增加500次,计算一下所有节点电压均值的最大变化量,如果连续几批变化都小于0.0001 pu,就可以认为已经收敛。这个方法操作起来很简单,还能写进论文里作为样本量选择的依据,比毫无理由地拍一个“10000次”更有说服力。我自己的项目里跑5000次大约耗时几十秒到几分钟,完全取决于潮流函数写得多高效、是否预先给矩阵分配了内存。
4. 结果怎么读:概率潮流的输出指标
4.1 电压概率分布与越限风险
概率潮流算完之后,第一个该看的就是节点电压。传统确定性潮流给你的是一根曲线,有高有低;概率潮流给你的是带上“置信带”的曲线,每条线都是一个分布。我一般把节点1到18画成一条以均值为中心、以标准差为误差棒的曲线,再把0.95和1.05两条越限线画上去,立刻就能看出分布式电源接入点的电压风险。
以节点18为例,如果风电额定容量设得比较大,电压均值可能被抬高到1.02 pu附近,但因为有风机出力随机波动的存在,尾部可能超过1.05 pu,越限概率也许有几个百分点。这时你就要思考是不是应该限制并网容量,或者加强无功补偿。越限概率这个量比电压均值更能反映实际风险,均值在正常范围内不代表峰值安全。
4.2 支路功率分布
支路功率同样重要,尤其要看最靠近变电站的馈线首端支路,因为这条支路承载了所有下游负荷加分布式电源的净交换功率。如果风大光伏猛的时候,下游净注入功率可能向上游倒送,首端支路功率会反向,甚至超过线路热极限。而负荷大、风光弱的时候,首端功率又会很大。两种场景叠加起来,支路功率分布往往是双峰或者扁平的宽分布,这比单一确定值信息量大得多。
我建议输出各支路功率的5%和95%分位数,再和线路额定载流量比较,找出风险支路。大概率你会看到馈线中段某个支路的压力最大,而不是末段,因为末端接了DG后电压抬升,反而部分承担了本地负荷,而中段既要供末端负荷又要承担上游输电任务。
4.3 网损概率特征
网损是分布式电源接入后讨论最多的话题之一。风光大发时,部分就地消纳,网损可能下降;风光出力小、负荷大时,网络重新变成高输送模式,网损又会上升。所以网损也是一个随机变量,不是单一的数值。跑完蒙特卡洛,你可以算一下网损的期望与标准差,再看看网损小于某个值的概率是多少。
有一类更有意思的判断是,把“无分布式电源”时的网损期望和“接入风光”时的网损期望对比,如果分布式电源容量合理,网损期望会有明显下降;如果容量过大、发生大量倒送,网损期望反而可能上升。这种“先降后升”的现象是配电网承载力研究的典型叙事逻辑,做项目报告的结论部分很吃香。
4.4 风光出力结果本身的价值
概率潮流之前,你其实已经获得了一组风电和光伏出力的样本分布。别急着把它们丢进潮流里就完事,先单独画出风功率和光伏出力的直方图,计算它们的均值、标准差和出力峰值的持续时间特征。这一步能帮你验证随机数生成得对不对,也能直观判断风光出力曲线与典型负荷曲线的匹配程度。
比如风电Weibull形状参数k取得偏大,出力概率密度会集中在高出力段附近;光伏Beta分布a和b不同组合,出力分布可能偏左偏右。你可以算一算风电和光伏同时高出的概率,这就是“互补性”指标。论文里把这一小节写清楚,能体现你对发电侧不确定性的理解,而不只是埋头算节点电压。
5. 实操中的坑与排查经验
5.1 随机数种子和结果可复现
蒙特卡洛的核心是随机,但工程实践里最怕的就是“随机得不可复现”。你今天跑的结果和明天跑的结果不一样,评审人就很难相信你。最粗暴也最有效的解决办法就是固定随机种子:在程序最开头的一行写rng(2024)。只要随机种子不变,Matlab生成的随机数序列完全一致,整个项目结果可完全复现。
另外要特别注意一个细节:如果主程序里采样和潮流循环之间有其他函数也调用了随机数,比如rand、randn,会把随机数流状态改掉,导致同一段循环里的抽样结果不完全一致。我的习惯是采样阶段把随机种子固定一次,之后所有需要随机的部分都从这一套随机流里取数,不在循环内部重新rng。不同工况之间做对比时,可以显式把种子重置到同一个值,这样两次运行只是随机数重新开始,但逻辑上可对比。
5.2 潮流不收敛是怎么回事
前推回代法在正常情况下的IEEE33上收敛很快,一般迭代不到10次就满足误差要求。如果你发现某个场景下潮流怎么都不收敛,最大可能是负荷或分布式电源注入量出现了不合常理的组合。比如负荷正态波动到非常高的数值,同时风机出力也为零,末端节点电压被拉到0.8 pu以下,迭代过程可能发散。
排查的时候先把你随机抽到的那个极端样本找出来,看看它对应的风速、辐照度、负荷分别是多少,是不是已经超出合理物理范围。还有一种可能是节点编号排序错乱,前推回代时支路功率累加顺序不对,导致计算出的电压一路偏大或偏小,甚至出现数值振荡。这种问题一般不是随机引起的,而是代码结构写错了,需要对照拓扑仔细检查。
5.3 采样次数太大导致计算慢
5000次前推回代看起来不多,但如果你在每次潮流里都对所有节点重新计算矩阵,而且Matlab循环没有预分配存储,速度能慢到让人怀疑人生。解决思路是把能提出循环的操作全部提前:样本矩阵一次性生成,潮流函数里避免动态变量增长,迭代循环里尽量用向量化操作。
我试过一个很有效的优化技巧:把前推回代里的拓扑关系用“父节点索引向量”存下来,替代每次都做拓扑搜索。这样每次迭代只需把支路功率从末端向父节点累加,再按父节点顺序回代,省掉大量find操作。优化前后同样的5000次计算,时间能从十几分钟降到两三分钟,这个优化值得写进报告。
5.4 容易出错的几类细节
以下是我做这个项目时踩过或看别人踩过的坑,整理成表,建议你也对照检查一遍:
| 容易出错的地方 | 典型表现 | 处理办法 |
|---|---|---|
| 单位混用 | 阻抗用标幺又用了欧姆,结果电压严重偏低偏高 | 全部统一为欧姆或者标幺,并记录基准值 |
| 风机切入风速以上线性段用错斜率 | 功率曲线不连续,出力分布在某处异常跳跃 | 严格按分段函数写,用中间风速校验 |
| Beta分布参数设错 | 光伏出力均值高达0.9甚至接近1,不符合常态 | 均匀值等于a/(a+b),先算一下再定参数 |
| 负荷扰动矩阵维度不匹配 | 矩阵乘法报错或者广播错误 | 用N×33预分配矩阵,循环按行取 |
| 随机种子被循环重置 | 每次蒙特卡洛场景完全一样,结果没意义 | 全局只设置一次rng |
| 收敛阈值设太小 | 迭代次数多导致计算极慢 | 一般取1e-4即可 |
| 接入DG注入方向写反 | 潮流算出来电压比不接DG时更低 | 明确发电机注入电流方向,复验单节点案例 |
这些坑每一个都不是大问题,但它们组合在一起,足以让第一次做概率潮流的人熬夜到凌晨。建议每改一个参数,都先用100次小样本数跑通,再上5000或10000次的大规模计算。小样本下如果结果符合直觉,再放大也不会出太大问题。
6. 从Demo走向工程:还能怎么扩展
6.1 用拉丁超立方采样加速
普通蒙特卡洛是纯粹的随机抽样,样本点会成团出现,覆盖效率不高。拉丁超立方采样(LHS)可以对每个输入维度分层,使得样本在区间内更均匀地铺开。同样的方差精度下,LHS需要样本数往往只有普通蒙特卡洛的几分之一,这在样本数大、单次潮流慢的时候特别有价值。
Matlab里没有内置的LHS函数,但可以用lhsdesign生成一个N维单位超立方体内的拉丁超立方样本,再通过等概率转换得到风速和光照样本。转换时用相应分布的分位函数,风速用wblinv,光照用betainv。这个扩展不复杂,改完采样模块就能看到方差明显减小,是很加分的进阶动作。
6.2 相关性场景拓展
如果你不想只停留在“独立随机”这个假设上,可以考虑让风速和光照之间存在负相关关系。文献里常取值-0.2到-0.5,反映“大风时云多、光照弱”的物理直觉。实现步骤大概分三步:先用mvnrnd生成两列有相关性的标准正态样本;然后把每列分别映射到标准均匀分布;最后再用Weibull和Beta的分位函数逆变换得到目标分布。这个过程就是Nataf变换,学名听着唬人,实际代码量不超过20行。
加完相关性你会发现,风光的联合分布被压缩到了一块特定区域,而不是四四方方铺满整个平面,概率潮流的电压分布形状也会有微妙变化。把这部分内容写进论文,能明显提升技术深度。
6.3 多目标与优化
概率潮流的输出不只是用来“看”,还可以嵌入优化模型。比如以分布式电源接入容量为决策变量,以电压越限概率不超过给定阈值、网损期望最小为目标,做一个容量配置优化。由于每次搜索都要重新跑一轮概率潮流,直接嵌套会非常慢,常见的做法是先用蒙特卡洛生成一批典型场景,再用智能算法搜索。 不过这一步已经超出“分析”本身,属于电力系统不确定优化方向了,如果时间充裕再深入。
6.4 讲讲我做完这个项目的体会
这个项目让我印象最深的,不是蒙特卡洛方法本身有多高深,而是“随机性”需要被量化才能变成决策依据。跑第一版程序时,我看到节点18电压均值才1.01 pu,觉得一切正常;直到画出概率密度图,才发现尾部已经有相当一部分样本越过1.05 pu,真实风险远比均值显示的严重。从那以后我做分布式电源评估,再也不只看所谓“典型运行方式”了。
如果让我给后来者一个建议,那就是先从小样本、小系统把整个链条完整跑通,再去优化精度和速度。不要一上来就追求10000次、不要一上来就上Copula相关模型,先把确定性潮流函数调到和Matpower结果一致,再做蒙特卡洛,你会发现后面所有问题都不再是问题。概率潮流的精髓不在算法炫技,而在于你对每一处随机量建模的物理意义是否清楚。把风电、光伏、负荷的分布定准,把潮流算法跑稳,剩下的就是耐心和统计直觉了。