首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SALib的Python中的敏感度分析错误

使用SALib的Python中的敏感度分析错误
EN

Stack Overflow用户
提问于 2019-01-31 03:22:11
回答 1查看 1K关注 0票数 1

Performing a sensitivity analysis with python之后,我收到一个错误。

我的代码如下:

代码语言:javascript
运行
复制
from SALib.sample import saltelli
from SALib.analyze import sobol

def ls(X):
    # column 0 = demand, column 1 =  bookings, column 2 = inventory
    return max(X[:,0] - X[:,1] - X[:,2])

problem = {'num_vars': 3,
           'names': ['demand', 'bookings', 'inventory'],
           'bounds': [[0, 1250],
                     [0, 11000],
                     [0, 120000]]
           } 

# Generate samples
param_values = saltelli.sample(problem, 10000000, calc_second_order=False)

# Run model
Y = ls(param_values)

# Perform analysis
Si = sobol.analyze(problem, Y)

我收到以下错误。RuntimeError:模型输出文件中的样本数不正确。确认calc_second_order与采样期间使用的选项匹配。

当我查看https://github.com/SALib/SALib/blob/master/SALib/analyze/sobol.py时,我看到:

代码语言:javascript
运行
复制
if calc_second_order and Y.size % (2 * D + 2) == 0:
        N = int(Y.size / (2 * D + 2))
    elif not calc_second_order and Y.size % (D + 2) == 0:
        N = int(Y.size / (D + 2))
    else:
        raise RuntimeError("""
        Incorrect number of samples in model output file.
        Confirm that calc_second_order matches option used during 
sampling.""")

然而,这并不能真正帮助我解决这个错误。这是否与saltelli.sample()中的第二个参数有关?

EN

Stack Overflow用户

发布于 2019-02-14 22:40:32

有两个问题。首先,当函数ls()应该是一个长度等于param_values中的行数的向量时,它会返回一个值。其次,saltelli.sample()sobol.analyze()中的默认假设是拥有calc_second_order=True,因此在这两种情况下都需要将其设置为False。下面是一些运行的示例代码,但您可能需要调整ls()函数以满足您的需求。

代码语言:javascript
运行
复制
from SALib.sample import saltelli
from SALib.analyze import sobol

def ls(X):
    # column 0 = demand, column 1 =  bookings, column 2 = inventory
    # modified to return a vector (max was returning max value of vector)
    return (X[:,0] - X[:,1] - X[:,2])

problem = {'num_vars': 3,
           'names': ['demand', 'bookings', 'inventory'],
           'bounds': [[0, 1250],
                     [0, 11000],
                     [0, 120000]]
           } 

# Generate samples
param_values = saltelli.sample(problem, 10000000, calc_second_order=False)

# Run model
Y = ls(param_values)

# Perform analysis
Si = sobol.analyze(problem, Y,calc_second_order=False)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54448056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档