SciPy的optimize.fmin中的多个变量和参数

时间:2019-02-22 18:33:13

标签: python scipy minimization

我希望使用scipy的optimize.fmin函数查找函数的最小值,该函数是我希望最小化的变量和不变的(未优化的)参数的函数。

在此处对单个变量进行优化时,我能够做到这一点:

from scipy import optimize

c1=4
c2=-1

def f(x,c1,c2):
    return x**2+c1+c2

guess_f=1
minimum = optimize.fmin(f,guess_f,args=(c1,c2),maxfun=400,maxiter=400,ftol=1e-2,xtol=1e-4)

但是,当我添加另一个变量以最小化溢出时,我无法使它起作用:

def g(x,y,c1,c2):
    return x*y+c1+c2

guess_g=[1,1]

minimum2= optimize.fmin(g,guess_g,args=(c1,c2),maxfun=400,maxiter=400,ftol=1e-2,xtol=1e-4)

我收到以下错误消息:

TypeError: g() missing 1 required positional argument: 'c2'

我确实找到了Multiple variables in SciPy's optimize.minimize,并在这里提出了一个解决方案,其中需要将要优化的变量组合在一起作为它们自己的数组。我在下面尝试这样的事情:

def g(params,c1,c2):
    x,y=params
#    print(params)
    return x*y+c1*x+c2

guess_g=[1,1]
minimum2= optimize.fmin(g,guess_g,args=(c1,c2),maxfun=4000,maxiter=4000,ftol=1e-2,xtol=1e-4)

我没有收到TypeError,但是我得到的是“警告:已超过函数评估的最大数量”。消息以及RuntimeWarning:从sys.path中删除cwd后,在double_scalars中遇到溢出。 (此外,我尝试使用optimize.minimize命令执行相同的操作,但是在添加额外的参数时无法使它正常工作,但是由于问题已经很长,因此我没有在此处发布该代码)。

所以这似乎不是正确的方法。

如何在多个变量上使用optimize.fmin函数进行优化,同时还为函数提供其他参数?

0 个答案:

没有答案