我想使用Sobol方法在python中对复杂模型运行灵敏度分析。该模型包括连续,离散和布尔输入参数。
是否可以使用SALib python包来执行此分析?具体来说,我可以使用saltelli.sample方法生成准随机的输入参数集,当其中一些实际上没有上限或下限但只有几个离散选项(例如0或1)< / p>
以下是SALib文档中saltelli.sample方法(生成低差异序列)的示例:
from SALib.sample import saltelli
import numpy as np
problem = {
'num_vars': 3,
'names': ['x1', 'x2', 'x3'],
'bounds': [[-np.pi, np.pi]]*3
}
# Generate samples
param_values = saltelli.sample(problem, 1000, calc_second_order=True)
我的问题是,如果我的输入参数更像是这样的话,我怎么用(如果有的话)这个方法:
x1: continuous (so possible values could be 0, 0.01, 1.2...0.987)
x2: boolean (so possible values are 0 or 1)
x3: discrete (so possible values are 0, 0.25, 0.5, 0.75, or 1)
答案 0 :(得分:1)
解决方案发布在Github上,并想在这里与其他人分享:
现在没有办法(正确)采样离散值或布尔值。因此,我建议进行黑客攻击:对连续范围进行采样并舍入到您想要的最接近的值。
如果它是一个布尔变量,则在[0,1]上采样并向上或向下舍入。如果它与N个结果分离,则在[0,N]上采样并舍入到最接近的整数。
有一篇关于此事的博客文章: https://waterprogramming.wordpress.com/2014/02/11/extensions-of-salib-for-more-complex-sensitivity-analyses/(清单上的第2项)
这有点像hacky,但我认为这是或多或少被接受的做事方式,特别是如果你正在混合连续和离散变量。