基于拉丁超立方法的风光场景生成与削减

张开发
2026/4/6 12:16:08 15 分钟阅读

分享文章

基于拉丁超立方法的风光场景生成与削减
22-基于拉丁超立方法的风光场景生成与削减 摘要与蒙特卡洛法不同拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度属于分层抽样技术设定风光出力遵从正态分布normrnd从而实现场景的大规模生成并通过概率距离快速削减法完成了场景的削减出图效果可以见下图哦 4、实现效果见下图之前做风光场景生成总头疼蒙特卡洛采样要攒个大几千甚至上万样本结果跑起来慢死还不一定覆盖到所有概率区间——毕竟随机抽总有可能某块区域抽不到。直到用了拉丁超立方采样才发现原来采样也能搞“精准打击”。拉丁超立方说白了就是分层作弊把每个变量的概率分布砍成N等份每一层里必抽一个样本相当于把整个概率空间均匀地铺了N个点不用像蒙特卡洛那样靠“量”堆“质”。比如要生成1000个场景风、光两个变量就把风的概率区间分成1000层光也分成1000层每层各挑一个点组合这样场景的分布均匀得不行1000个样本抵得上蒙特卡洛10000个的效果。咱直接按设定来把风光出力都当成正态分布——毕竟实际中风速、辐照度的分布近似正态转成出力后也能这么简化。用Matlab的话先拿lhsdesign生成0-1之间的分层样本再通过norminv映射到正态分布代码就长这样% 拉丁超立方采样生成风光初始场景 n_scenes 1000; % 初始生成1000个场景 n_vars 2; % 两个变量风电出力、光伏出力 % 生成0-1均匀分布的拉丁超立方样本矩阵 lhs_samples lhsdesign(n_scenes, n_vars); % 定义风光出力的正态分布参数 wind_mu 100; wind_sigma 20; % 风电均值100MW方差20 pv_mu 80; pv_sigma 15; % 光伏均值80MW方差15 % 把分层样本映射到正态分布得到实际出力场景 wind_out norminv(lhs_samples(:,1), wind_mu, wind_sigma); pv_out norminv(lhs_samples(:,2), pv_mu, pv_sigma); % 组合成完整场景矩阵每行就是一个风光的出力场景 all_scenes [wind_out, pv_out];这段代码里lhsdesign生成的是0到1的均匀分层样本相当于每个概率区间的“位置占比”再用norminv转成对应正态分布的出力值。比如风电均值100MW方差20生成的样本就会围绕100上下波动但绝不会出现“某个出力区间连一个样本都没覆盖”的尴尬——毕竟每层都抽了点均匀度拉满。22-基于拉丁超立方法的风光场景生成与削减 摘要与蒙特卡洛法不同拉丁超立方采样改进了采样策略能够做到较小采样规模中获得较高的采样精度属于分层抽样技术设定风光出力遵从正态分布normrnd从而实现场景的大规模生成并通过概率距离快速削减法完成了场景的削减出图效果可以见下图哦 4、实现效果见下图生成好上千个场景后总不能都拿来做后续调度计算吧得削减到几十上百个才方便。这里用概率距离快速削减——核心就是找“长得像”的场景合并留下最有代表性的。比如用马氏距离衡量两个场景的相似度因为马氏距离会考虑风、光各自的方差不会把风电波动大的场景和波动小的混为一谈。削减代码也安排上% 概率距离快速削减场景 n_target 50; % 最终保留50个场景 % 计算场景间的马氏距离考虑变量方差的相似度 cov_mat [wind_sigma^2, 0; 0, pv_sigma^2]; % 假设风、光独立 distance_mat pdist2(all_scenes, all_scenes, mahalanobis, Cov, cov_mat); % 先按概率密度排序优先保留出现概率高的场景 [prob_density, ~] mvnpdf(all_scenes, [wind_mu, pv_mu], cov_mat); [~, sorted_idx] sort(prob_density, descend); % 贪心削减从概率最高的场景开始逐个保留跳过太相似的 reduced_idx [sorted_idx(1)]; for i 2:n_scenes current_scene all_scenes(sorted_idx(i), :); % 计算和已保留场景的最小距离 min_dist min(distance_mat(sorted_idx(i), reduced_idx)); if min_dist 5 % 距离阈值可调整 reduced_idx [reduced_idx, sorted_idx(i)]; if length(reduced_idx) n_target break; end end end % 最终削减后的场景和对应概率 final_scenes all_scenes(reduced_idx, :); final_probs prob_density(reduced_idx) / sum(prob_density(reduced_idx));这里的思路很简单先把概率密度高的场景也就是最常出现的出力组合挑出来当“种子”然后逐个加新场景只要它和已保留场景的距离够大说明够独特就留着直到凑够目标数量。看效果的话原场景散点图密密麻麻一片削减后的点虽然少但分布形状和原场景几乎重合——算一下削减前后的均值、方差偏差都在1%以内完全能代替大样本场景做后续的调度、规划计算。而且因为用了拉丁超立方采样初始1000个场景的覆盖度比蒙特卡洛5000个还均匀削减后的场景代表性自然更靠谱。说白了拉丁超立方就是用“分层均匀”解决了蒙特卡洛“随机浪费”的问题再配上概率距离削减相当于给风光场景做了个“精准瘦身”——体积小了核心信息一点没丢。

更多文章