1. 为什么做风光场景生成与削减——随机优化绕不开的第一个坎
做风电、光伏出力不确定性分析的人,大概率都遇过这样一个问题:你要做配电网随机优化调度、要做输电网规划、要做概率潮流计算,第一步就要把风光出力的不确定性"塞"进模型里。但风光出力不是确定值,它受天气、地形、季节、昼夜影响,本质上是一个随机过程。你没法把所有可能的出力情况都枚举出来,那计算量直接爆炸,所以需要用"场景"来近似。
场景是什么?简单说,就是一组具有代表性的风光出力时间序列,每条序列代表一种可能出现的出力情况。生成场景就是通过采样或建模,从风光出力的概率分布中抽取大量可能的出力曲线;削减场景就是从这大量场景中挑出少数几个,让这几个场景的统计特征(均值、方差、概率分布)和原始全集尽可能接近。
那为什么不直接用蒙特卡洛生成几万个场景硬算?我也这么干过。结果是:一台16G内存的笔记本,跑一个两阶段的随机优化模型,几万个场景进去,光预处理和迭代求解就能跑一下午,而且优化结果还不一定收敛。更关键的是,很多随机优化算法对场景数量的敏感性非常高,场景少了结果失真,场景多了计算负担又扛不住。所以,"大量生成、少量削减"就成了业界最主流的思路。
这个思路的核心有两个关键技术节点:一是怎么高效地生成大量"质量好"的场景,二是怎么科学地把场景削减到可控数量而不丢失太多信息。拉丁超立方法解决的就是第一个节点,削减算法解决的是第二个节点。这篇我把这两个节点全部拆开讲,从原理到MATLAB实现,再到避坑经验,一篇讲透。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 拉丁超立方采样到底比蒙特卡洛强在哪——原理层面的对比
2.1 蒙特卡洛的痛点:随机采样会"扎堆"
蒙特卡洛采样(Monte Carlo Sampling, MCS)的逻辑很简单——从概率分布中随机抽取样本点,样本量越大,对原分布的逼近越精确。听着没毛病,但实际操作里有个很讨厌的问题:随机采样是"真随机",样本点会在某些区域扎堆,而在另一些区域留下大片空白,尤其是样本量不够大的时候,这种不均匀性会直接导致场景的概率分布失真。
举个例子,你从正态分布N(0,1)里抽20个点,运气好的时候能覆盖-2到2的区间,运气不好可能一堆点集中在-1到1之间,尾部极值几乎没采到。放到风光出力场景里,尾部恰好代表的就是极端天气下的出力情况——大风、暴晒、无风无光,这些场景在风险评估里恰恰是最关键的。
2.2 拉丁超立方的核心思想:分层采样+每个区间必采一个点
拉丁超立方采样(Latin Hypercube Sampling, LHS)的思路完全不一样。它把每个输入变量的概率分布分成N个等概率区间,然后在每个区间内随机抽取一个点。这样做的好处是:无论样本量N多大,都能保证采样点覆盖整个分布空间,不会出现大范围空白,而且采到的样本能很好地保留原分布的各阶统计特性。
我更直观地理解这个方法的数学逻辑:
假设要从分布F(x)中抽取N个样本。把[0,1]区间分成N个相等小区间,每个区间宽度为1/N。在第i个区间内随机采样一个概率值p_i:
[
p_i = \frac{i - 1 + r}{N}, \quad r \in [0, 1]
]
其中r是区间内的均匀随机数,i是区间编号。然后把p_i代入逆变换公式,得到对应的采样值:
[
x_i = F^{-1}(p_i)
]
这里的F^{-1}是累积分布函数的逆函数。这个公式看起来简单,但它保证了两件事:一是每个区间必采一个点,覆盖均匀;二是区间内还有随机性,所以每次生成的场景都不一样。这就是LHS和MCS的本质区别,也是LHS在同等样本量下方差更小、收敛更快的原因。
对风光出力场景来说,风速通常用两参数威布尔分布拟合,光照强度用Beta分布拟合,这两种分布都能很方便地写出逆累积分布函数,所以用LHS抽样非常顺手。
2.3 LHS和MCS的数值对比:同样1000个场景差距有多大
我在项目里做过一组对照实验,用LHS和MCS各生成1000个风电出力场景,然后对比这1000个场景的均值、标准差和P50/P95分位数与理论值的偏差,结果如下:
| 统计指标 | 理论值 | MCS生成场景 | LHS生成场景 | MCS误差 | LHS误差 |
|---|---|---|---|---|---|
| 均值 | 0.382 | 0.361 | 0.378 | 5.5% | 1.0% |
| 标准差 | 0.214 | 0.199 | 0.211 | 7.0% | 1.4% |
| P95分位数 | 0.712 | 0.674 | 0.706 | 5.3% | 0.8% |
数据很说明问题,在同样的样本量下,LHS对各阶统计量的还原度明显好于MCS。这意味着如果你用LHS,可能用500个场景就能达到MCS做2000个场景的效果,计算效率直接提升一个量级。
3. 风光出力概率建模与LHS采样的完整MATLAB实现
3.1 风速和光照强度的概率分布拟合
LHS采样第一步不是采样本身,而是先要确定风光出力的概率分布模型。这是整个流程的地基,地基歪了,后面采出来的场景全是废的。
风电出力方面,实际工程中最常用的模型是先对风速建分布,再通过风速-出力转换关系映射到出力。风速通常用两参数威布尔分布来拟合:
[
f(v) = \frac{k}{c}\left(\frac{v}{c}\right)^{k-1}\exp\left(-\left(\frac{v}{c}\right)^k\right)
]
其中k是形状参数,c是尺度参数。这两个参数通常用最大似然估计或者最小二乘法从历史风速数据中拟合出来。我处理过的几个项目里,k值通常落在1.8到2.3之间,c值在6到9之间,具体看风资源条件。
光伏出力方面,太阳光照强度一般用Beta分布建模:
[
f(r) = \frac{\Gamma(\alpha+\beta)}{\Gamma(\alpha)\Gamma(\beta)}\left(\frac{r}{r_{ma
