使用带有布尔或离散输入参数的python SALib saltelli.sample方法

使用带有布尔或离散输入参数的python SALib saltelli.sample方法,python,data-modeling,Python,Data Modeling,我想使用Sobol方法对python中的复杂模型进行敏感性分析。该模型包括连续、离散和布尔输入参数 是否可以使用SALib python包来执行此分析?具体来说,当一些输入参数实际上没有上界或下界,而是只有几个离散选项(例如0或1)时,我可以使用saltelli.sample方法生成准随机的输入参数集吗 以下是SALib文档中saltelli.sample方法(生成低差异序列)的一个示例: from SALib.sample import saltelli import numpy as np

我想使用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)

已在Github上发布解决方案,并希望在此处与其他人共享:

现在没有办法(正确地)对离散值或布尔值进行采样。所以我建议一种方法:采样一个连续的范围,并四舍五入到你想要的最接近的值

如果它是一个布尔变量,则在[0,1]上采样,然后向上或向下取整。如果结果为N,则在[0,N]上采样并四舍五入到最接近的整数

不久前有一篇关于这一点的博文: (清单上的项目2)


这有点老套,但我认为这或多或少是一种被接受的做法,尤其是在混合连续变量和离散变量的情况下。

这仍然是最好的解决方案,还是在SALib中实现了更为自然的方法?