我想使用Sobol方法对python中的一个复杂模型进行敏感性分析。该模型包括连续的、离散的以及布尔输入参数。
是否可以使用SALib python包来执行此分析?具体地说,当一些输入参数实际上没有上界或下界,而只有几个离散选项(例如,0或1 )时,是否可以使用saltelli.sample方法生成输入参数的准随机集
以下是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)
发布于 2016-04-15 03:31:19
在Github上发布了解决方案,并想在这里与其他人分享:
现在还没有办法(正确地)对离散值或布尔值进行采样。所以我建议一个技巧:采样一个连续的范围,四舍五入到你想要的最接近的值。
如果它是一个布尔变量,在0,1上采样,然后向上或向下舍入。如果它是离散的,有N个结果,在0,N上采样,并四舍五入到最接近的整数。
前段时间有一篇关于这方面的博文:https://waterprogramming.wordpress.com/2014/02/11/extensions-of-salib-for-more-complex-sensitivity-analyses/ (列表中的第二项)
这有点老生常谈,但我认为这是或多或少被接受的做事方式,特别是当你混合连续和离散变量的时候。
https://stackoverflow.com/questions/36606101
复制相似问题