首页 > 解决方案 > SciPy 的 optimize.fmin 中的多个变量和参数

问题描述

我希望使用 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'

我确实在 SciPy 的 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 函数进行优化,同时还为我的函数提供额外的参数?

标签: pythonscipyminimization

解决方案


推荐阅读