基于蒙特卡洛法的概率潮流 以IEEE33节点的电网为研究对象 建立了光伏和风电的概率出力模型 采用蒙特卡洛法进行随机抽样 之后基于抽样序列进行概率潮流计算 最后得到电网的电压概率出力曲线 程序有基于matpower和非matpowe的
先说说核心思路:生成大量符合概率分布的随机样本→挨个做潮流计算→统计电压分布规律。这里的关键在于怎么处理新能源的随机性。比如风电出力可以用两参数威布尔分布建模:
% 风速生成 shape = 2; scale = 8; % 形状和尺度参数 wind_speed = wblrnd(scale, shape, [sample_num,1]);光伏这边要考虑Beta分布模拟光照强度:
# Python版光伏出力生成 alpha, beta = 0.9, 1.5 solar_irrad = np.random.beta(alpha, beta, n_samples)在MATPOWER环境里做潮流计算确实方便,但有时候需要自己造轮子。比如处理节点注入功率时,可以这样动态修改节点数据:
% 修改PQ节点注入 mpc.bus(:,PD) = load_base + load_var*randn; mpc.bus(:,QD) = mpc.bus(:,PD).*0.6; results = runpf(mpc);不过当需要处理上千次抽样时,纯MATLAB可能有点慢。这时候用Python+PyPower的组合更灵活:
from pypower.api import runpf, case33bw case = case33bw() case['bus'][:, 2] = modified_load # 修改负荷 results = runpf(case)[0]有个坑要注意:新能源接入点的选择会影响电压分布。比如把风电接在末端节点时,电压波动会比接在主干节点大得多。这从我们跑的5000次抽样结果就能看出来:
% 电压统计 volt_stats = zeros(33,3); % 均值、95%分位、5%分位 for i = 1:33 volt_stats(i,:) = [mean(V(:,i)), quantile(V(:,i),0.95), quantile(V(:,i),0.05)]; end最终生成的电压包络曲线特别有意思——光伏接入点的电压中午下凹明显,而风电接入点则在夜间出现更大的波动幅度。这其实反映了新能源不同时段出力特性的差异,用热力图展示更直观:
plt.figure(figsize=(12,6)) sns.kdeplot(x=time_points, y=node17_voltage, cmap='viridis') plt.title('节点17电压概率分布') plt.colorbar(label='概率密度')代码里有个小技巧:在生成随机样本时,用拉丁超立方抽样代替纯随机,能让收敛速度加快不少。特别是当样本量在1000以下时,这种方法比简单随机抽样更有效率:
from scipy.stats.qmc import LatinHypercube sampler = LatinHypercube(dim=2) sample = sampler.random(n=500)搞概率潮流最过瘾的就是看结果分布——那些教科书上的理论分布,在真实电网模型中居然能呈现出蝴蝶效应般的复杂形态。下次试试把电动汽车的充电随机性也加进来,说不定会有更有趣的发现。