💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥
目录
2 使基于SWAT 的高参数模型的 PAWN 和 Sobol 敏感性分析方法的比较
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方法的一个扩展,能够处理更复杂的模型结构和输入相关性。
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);
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
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