使用Scipy QMC模块生成的二维Sobol点异常,求排查
解答
核心问题有两个:
未跳过Sobol序列的初始点
Sobol序列的前若干个点(通常前10~20个)低差异特性表现很差,分布会显得杂乱。维基百科的示例图一般展示的是跳过初始点后,序列进入稳定填充模式的状态。绘图未体现序列的生成顺序
维基百科的Sobol序列图通常会标记点的生成顺序(比如颜色渐变),能直观看到序列逐区域填充空间的模式。你直接绘制所有点,只能看到最终分布,看不到顺序特征,自然和示例图观感差异大。
修改后的代码:
from scipy import qmc import torch import matplotlib.pyplot as plt # 初始化采样器,关闭打乱 sampler = qmc.Sobol(d=2, scramble=False) # 跳过前10个初始点,让序列进入稳定分布状态 sampler.fast_forward(10) # 生成2^10=1024个点 sample = sampler.random_base2(10) points = torch.tensor(sample).numpy() # 按生成顺序用颜色渐变绘制,直观展示填充模式 plt.scatter(points[:, 0], points[:, 1], c=range(len(points)), s=0.2, cmap='viridis') plt.colorbar(label='点的生成顺序') plt.xlabel('X') plt.ylabel('Y') plt.show()
补充说明:
Scipy的Sobol实现采用标准方向向量集,和维基百科示例的核心低差异特性一致,只是初始点的差异导致观感不同。跳过初始点并展示生成顺序后,分布会和典型的Sobol序列图匹配。
内容的提问来源于stack exchange,提问作者BBB
相关产品推荐
相关产品推荐

