Scipy盆地跳跃最小化功能与自由和固定参数

时间:2014-08-22 13:32:52

标签: python scipy mathematical-optimization

我有一个函数,它输入一个自由参数元组和一个固定参数元组,并作为输出一个标量值。运行起来很昂贵,我想找到这个函数的最小值,而不需要任何渐变/ Hessians的知识。我决定使用Basin跳跃方法,使用最小化函数COBYLA,因为在使用廉价函数的测试运行中,这使用了最少的函数调用并且能够使用边界。

但是,我不知道如何告诉Pool跳跃方法哪些参数可以自由优化,哪些是固定的。

def func(x_free, x_fixed):
    '''Do some expensive stuff here'''
    global FUNC_CALLS
    FUNC_CALLS += 1
    return scalar_value

在文档中,我读到我可以使用字典minimizer_kwargs将参数传递给此func。但是,它没有解释我应该使用哪些关键字。任何人都可以帮助我找到minimizer_kwargs允许的关键字列表,以及它们的作用吗?

如果没有参数x_fixed,我的代码如下所示:

from scipy.optimize._basinhopping import basinhopping
global FUNC_CALLS
FUNC_CALLS = 0
x0 = (1.0, 0.0, 0.0)
minimizer_kwargs = {"method": "COBYLA"}
ret = basinhopping(func, x0, minimizer_kwargs=minimizer_kwargs, niter=10)
print("Global minimum: x = [%.4f, %.4f, %.4f], f(x0) = %.4f" % (ret.x[0], ret.x[1], ret.x[2], ret.fun))
print("Number of function calls: {0}".format(FUNC_CALLS))

简而言之:我应该怎么做才能将x_fixed插入到函数中?

1 个答案:

答案 0 :(得分:3)

根据basinhopping的文档字符串,向args添加minimizer_kwargs键,其值为(x_fixed,)

例如:

minimizer_kwargs = {"method": "COBYLA", "args": (x_fixed,)}