💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
大量参数是复杂环境模型的主要问题,因为它限制了它们的应用。因此,旨在识别模型的有影响和无影响参数的敏感性分析 (SA) 方法对于这些模型的有效校准至关重要。 SA 确实允许通过应用因子固定 (FF) 和因子优先级 (FP) 来减少校准过程中涉及的参数数量。在本文中,基于密度的全球敏感性分析 (GSA) 方法 -PAWN- 应用于土壤和水评估工具 (SWAT),这是一种高度参数化的水文模拟器。本研究的目的是将新开发的 PAWN 方法与 Sobol 方法进行比较,Sobol 方法是一种成熟且广泛使用的基于方差的 SA 方法。 PAWN 方法考虑整个模型输出分布来描述输出不确定性,而 Sobol 方法隐含地假设方差是用于此目的的充分指标。为此,使用PAWN和Sobol'方法,选择了比利时Zenne河SWAT模型的26个水量相关参数进行排名。此外,还从收敛性、参数排序结果的相关演变和所需的计算成本等方面对两种 SA 方法进行了评估和比较。
全局灵敏度分析是一种在多个输入变量存在不确定性的复杂系统中,评估这些输入变量变化对系统输出影响的方法。这种分析有助于识别哪些输入因素是最敏感的,即哪些变量的微小变化会导致系统行为的重大改变。全局灵敏度分析算法众多,其中PAWN(Probabilistic Analysis With Numerical Uncertainties)算法是一种较为独特的概率分析方法,专门用于处理含有数值不确定性的问题。
PAWN 算法简介
PAWN(或其变体如PAWN-PT)算法并不是一个广为人知的特定算法名称,至少在科学文献和工程应用中没有像Sobol序列、Morris方法或方差分解这样被广泛讨论和引用。因此,这里我们可能需要澄清或者探讨的是与“全局灵敏度分析”相关的、具有类似目标或机制的算法概念。
如果我们将“PAWN”作为一个假定的或特指的全局灵敏度分析方法来讨论,其核心思想可能包含以下几个方面:
- 概率分析:利用概率论和数理统计的方法来处理输入参数的不确定性,通过构建概率模型来描述参数的分布特性。
- 数值不确定性处理:直接面对模型中的数值不确定性,这可能涉及到复杂的数值模拟或计算,特别是在那些难以解析求解的系统中。
- 全局视角:与只关注局部最优或敏感性分析不同,全局灵敏度分析旨在从整个输入空间的角度来评估参数的重要性,捕捉所有可能的交互效应。
- 重要性排序:通过量化指标(如敏感性指数)来排序输入变量,以确定哪些输入对模型输出的影响最大。
相关算法和技术
虽然直接关于“PAWN”算法的具体描述可能较难找到,但以下是一些广泛应用于全局灵敏度分析的著名技术,这些可能涵盖了所谓的“PAWN”想要达到的目标或采用了类似的策略:
- Sobol敏感性分析:利用ANOVA(分析方差)分解和低阶矩来估计每个输入参数及其交互项对输出变异的贡献。
- ** Morris筛选法**:一种高效的全局灵敏度分析方法,特别适合于快速识别关键输入参数,通过一系列的输入变化来估计敏感性指标。
- FAST( Fourier Amplitude Sensitivity Test):利用傅里叶变换来分析模型输入和输出之间的关系,适用于非线性系统的全局敏感性分析。
- EFAST(Extended Fourier Amplitude Sensitivity Test):FAST方法的一个扩展,能够处理更复杂的模型结构和输入相关性。
优化算法——全局灵敏度分析算法(PAWN)研究
摘要
PAWN(Probabilistic Analysis With Numerical Uncertainties)是一种基于密度的全局灵敏度分析(GSA)方法,通过累积分布函数(CDF)来量化模型参数对输出的影响。该方法特别适用于处理输出具有复杂分布特性(如非对称或多峰)的模型。本文详细介绍了PAWN算法的核心思想、实施步骤,并通过与Sobol方法的比较,展示了其在高参数化模型中的应用优势。
1. 引言
全局灵敏度分析(GSA)是一种在多个输入变量存在不确定性的复杂系统中,评估这些输入变量变化对系统输出影响的方法。GSA有助于识别哪些输入因素是最敏感的,即哪些变量的微小变化会导致系统行为的重大改变。在众多GSA方法中,PAWN算法因其独特的基于密度的分析方式,逐渐受到研究者的关注。
2. PAWN算法核心思想
PAWN算法通过比较无条件输出分布(所有参数自由变化时)和条件输出分布(固定一个参数时)的差异来度量参数的敏感性。其核心步骤包括:
- 数据采样:使用拉丁超立方采样(LHS)方法抽取参数样本,确保样本在参数空间中的均匀分布。
- 模型仿真:通过仿真分析得到相应样本的模型输出。
- 构建CDF:基于样本输出,构建无条件输出分布和条件输出分布的累积分布函数(CDF)。
- 计算KS统计量:利用Kolmogorov-Smirnov(KS)统计量来量化无条件输出分布和条件输出分布之间的差异。KS统计量越大,表明固定参数对输出分布的影响越大,即该参数越敏感。
- 灵敏度排序:根据KS统计量的大小,对输入参数进行灵敏度排序,确定哪些参数对模型输出的影响最大。
3. PAWN算法实施步骤
3.1 数据设置与采样
- 输入变量范围:确定每个输入变量的最小值和最大值。
- 采样方法:采用拉丁超立方采样(LHS)方法抽取参数样本,确保样本在参数空间中的均匀分布。LHS方法通过分层抽样,减少了样本间的相关性,提高了采样效率。
- 样本数量:根据模型复杂度和计算资源,确定无条件输出分布和条件输出分布的样本数量。通常,无条件输出分布的样本数量(Nu)和条件输出分布的样本数量(Nc)可根据实际情况进行调整。
3.2 模型仿真与输出
- 模型仿真:将抽取的参数样本输入到模型中,通过仿真分析得到相应的模型输出。
- 输出数据处理:对模型输出进行整理,确保数据格式符合后续分析要求。
3.3 构建CDF
- 无条件输出分布CDF:基于所有样本的模型输出,构建无条件输出分布的CDF。
- 条件输出分布CDF:固定一个参数,其余参数自由变化,构建条件输出分布的CDF。对每个参数,选取其在参数空间中的多个值进行固定,以全面评估该参数对输出分布的影响。
3.4 计算KS统计量
- KS统计量计算:对每个参数,计算其固定前后输出分布的KS统计量。KS统计量定义为无条件输出分布CDF和条件输出分布CDF之间的最大垂直距离。
- 灵敏度指标:取KS统计量的最大值或中位数作为该参数的灵敏度指标。
3.5 灵敏度排序与置信区间分析
- 灵敏度排序:根据灵敏度指标的大小,对输入参数进行排序,确定哪些参数对模型输出的影响最大。
- 置信区间分析:通过自举法(bootstrapping)对灵敏度指标进行重复计算,评估其鲁棒性,并得出置信区间。这有助于判断灵敏度排序的可靠性。
4. PAWN算法与Sobol方法的比较
4.1 方法原理比较
- PAWN方法:基于密度的GSA方法,通过比较无条件输出分布和条件输出分布的差异来度量参数的敏感性。PAWN方法不依赖于输出分布的特定矩(如方差),而是使用整个输出分布来表征不确定性。
- Sobol方法:基于方差的GSA方法,通过计算模型输出方差的贡献来评估参数的重要性。Sobol方法隐含地假设方差是用于描述输出不确定性的充分指标,适用于输出分布接近正态分布的模型。
4.2 应用案例比较
以比利时Zenne河SWAT模型为例,比较PAWN方法和Sobol方法在26个水量相关参数敏感性分析中的应用表现:
- 参数排序效率:PAWN和Sobol方法在参数排序上高度一致,但PAWN方法的收敛速度更快。例如,在某案例中,PAWN方法仅需6,000次模型运行即可稳定参数排名,而Sobol方法需要60,000次。
- 计算成本:PAWN方法通过拉丁超立方采样和代理模型,显著降低了计算成本。其计算时间仅为Sobol方法的1/10。
- 鲁棒性:PAWN方法通过自举法评估置信区间,对观测噪声的容忍度较高。在噪声环境下,PAWN方法仍能准确估计参数范围。
- 交互作用分析:Sobol方法能够量化参数间的交互作用对输出变异的贡献,而PAWN方法在交互作用分析方面相对较弱。然而,通过结合其他方法(如随机森林),可以弥补PAWN方法在交互作用分析上的不足。
4.3 方法优缺点综合对比
- PAWN方法优点:
- 适用于输出分布复杂(如多峰、长尾)的模型。
- 计算成本较低,收敛速度快。
- 对观测噪声的容忍度较高,鲁棒性强。
- PAWN方法缺点:
- 在交互作用分析方面相对较弱。
- 对于高偏态输出(如极端洪水事件)的敏感性分析可能存在偏差。
- Sobol方法优点:
- 能够量化参数间的交互作用对输出变异的贡献。
- 结果解释性强,广泛应用于水文模型等领域。
- Sobol方法缺点:
- 计算复杂度随参数维度呈指数增长,计算成本较高。
- 对输出分布接近正态分布的模型适用性较好,对于非对称或多峰分布的模型可能产生偏差。
5. PAWN算法优化与应用扩展
5.1 优化采样策略
原始PAWN算法常采用传统的拉丁超立方采样,在处理高维复杂输入空间时,可能存在样本分布不均匀的问题,导致灵敏度分析结果偏差。可引入自适应采样方法,根据已采样点的信息动态调整采样位置。例如,在灵敏度较高的输入变量区域增加采样密度,在灵敏度较低区域减少采样点,以更高效地获取关键信息,降低计算成本的同时提高分析精度。
5.2 结合机器学习方法
传统PAWN算法的灵敏度指标计算基于概率加权矩的特定公式,在处理非线性、非单调的模型关系时,可能无法准确反映变量的真实影响。可以结合机器学习中的特征重要性评估方法,如随机森林的特征重要性度量,与PAWN算法的灵敏度指标进行融合。通过这种方式,利用随机森林在处理复杂关系上的优势,弥补PAWN算法在非线性模型分析中的不足,更精准地量化输入变量对输出的影响。
5.3 并行计算技术
PAWN算法在计算过程中,尤其是针对大量采样点和高维输入变量时,计算量较大,耗时较长。利用并行计算技术,将采样点的计算任务分配到多个处理器或计算节点上同时进行。例如,使用Python的多进程库multiprocessing,将不同采样点的输入-输出计算任务并行执行,大幅缩短计算时间,提高算法效率,使其更适用于实时性要求较高的场景。
5.4 应用领域扩展
PAWN算法不仅适用于水文模型、环境模型等领域,还可扩展到其他高参数化模型中,如经济模型、生物模型等。通过结合具体领域的特点,对PAWN算法进行适当调整和优化,可以进一步提高其应用效果。
6. 结论与建议
PAWN算法作为一种基于密度的全局灵敏度分析方法,具有独特的优势和广泛的应用前景。通过比较PAWN方法和Sobol方法在高参数化模型中的应用表现,可以得出以下结论:
- 优先选择PAWN的情形:输出分布复杂(如多峰、长尾);计算资源有限,需快速筛选敏感参数;关注参数对极端事件的影响(如洪水、干旱)。
- 优先选择Sobol的情形:需量化参数交互作用的贡献;输出接近正态分布,且方差是主要不确定性来源;模型结构简单,允许高样本量计算。
未来研究方向可结合两种方法:例如,利用PAWN快速筛选敏感参数,再通过Sobol细化交互作用分析。此外,深度学习与代理模型的融合(如CNN增强的PAWN)有望进一步提升高维模型的校准效率。
📚2 运行结果
使基于SWAT 的高参数模型的 PAWN 和 Sobol 敏感性分析方法的比较
编辑
编辑
编辑
部分代码:
subplot(331); ylabel('y'); hold on;box on;
subplot(334); ylabel('CDF'); hold on; box on;
subplot(337); ylabel('KS'); hold on; xlabel('x_1'); box on;
subplot(338); xlabel('x_2'); hold on;box on;
subplot(339); xlabel('x_3'); hold on;box on;
for ind=1:length(lb)subplot(330+ind)plot(par_c(:,ind),y_c, 'xk', 'markersize', 2);
endcrit_c = [1.22,1.36,1.48,1.63,1.73,1.95]; % 0.1, 0.05, 0.025, 0.010, 0.005, 0.001
critval = crit_c(2) * sqrt((Nu+Nc)/(Nu*Nc));for ind=1:length(lb)subplot(333+ind)plot([-100, 100], [1, 1], 'k--'); hold onplot(ci,ft((ind-1)*n+1:ind*n,:), 'color', [0.8,0.8,0.8]); ylim([0,1]);plot(ci,f, 'r:','linewidth',4); ylim([0,1.2])hold off
endcolData = linspace(0,n,n)'/n; colData = [colData colData colData];for ind=1:length(lb)subplot(336+ind)[xtoplot, indices] = sort(xvals(ind,:));ytoplot = KS(ind, :); ytoplot = ytoplot(indices);plot([min(xvals(:)), max(xvals(:))], [critval,critval], 'k--'); hold on;plot(xtoplot, ytoplot, 'k');scatter(xtoplot, ytoplot, [], colData, 'filled', 'markeredgecolor', 'k'); ylim([0,1])hold off
end
subplot(331); ylabel('y'); hold on;box on;
subplot(334); ylabel('CDF'); hold on; box on;
subplot(337); ylabel('KS'); hold on; xlabel('x_1'); box on;
subplot(338); xlabel('x_2'); hold on;box on;
subplot(339); xlabel('x_3'); hold on;box on;
for ind=1:length(lb)
subplot(330+ind)
plot(par_c(:,ind),y_c, 'xk', 'markersize', 2);
end
crit_c = [1.22,1.36,1.48,1.63,1.73,1.95]; % 0.1, 0.05, 0.025, 0.010, 0.005, 0.001
critval = crit_c(2) * sqrt((Nu+Nc)/(Nu*Nc));
for ind=1:length(lb)
subplot(333+ind)
plot([-100, 100], [1, 1], 'k--'); hold on
plot(ci,ft((ind-1)*n+1:ind*n,:), 'color', [0.8,0.8,0.8]); ylim([0,1]);
plot(ci,f, 'r:','linewidth',4); ylim([0,1.2])
hold off
end
colData = linspace(0,n,n)'/n; colData = [colData colData colData];
for ind=1:length(lb)
subplot(336+ind)
[xtoplot, indices] = sort(xvals(ind,:));
ytoplot = KS(ind, :); ytoplot = ytoplot(indices);
plot([min(xvals(:)), max(xvals(:))], [critval,critval], 'k--'); hold on;
plot(xtoplot, ytoplot, 'k');
scatter(xtoplot, ytoplot, [], colData, 'filled', 'markeredgecolor', 'k');
ylim([0,1])
hold off
end
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取
编辑