scipy.minimize最大返回值

时间:2017-10-06 02:52:32

标签: python scipy

我正在使用scipy优化功能并为其提供自定义最小化功能。我用

调用最小化器
result = op.minimize(calc_chi2, start_list, args=())

calc_chi2()函数看起来像

def calc_chi2(parameters):
    if within_priors(parameters):
        # calculate chi2
    else:
        return math.inf

此函数测试某些先验内部的参数是否应该返回非常大的chi ^ 2。我使用math.inf,然而导致最小化器将参数向量放到任何地方,所以我猜最小化器不喜欢math.inf ???如果我只是使用大量数字一切正常......我只是想知道这里的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

考虑抛出/捕获异常来处理无限chi ^ 2的情况 - 如果不是你描述的NaN行为,你不清楚你会发生什么,并且处理异常会让你明白你想要发生什么。

class InfiniteChiException(Exception):
    """This exception is raised under certain conditions, yadda yadda yadda"""
    pass

def calc_chi2(parameters):
    if within_priors(parameters):
        # calculate chi2
    else:
        raise InfiniteChiException

try:
    result = op.minimize(calc_chi2, start_list, args=())
catch InfiniteChiException:
    # do something here