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