Python SciPy'中的多变量和参数;s.fmin
我希望使用scipy的optimize.fmin函数来找到函数的最小值,这是我希望最小化的变量和不变(未优化)的参数的函数 我可以在优化单个变量时做到这一点:Python SciPy'中的多变量和参数;s.fmin,python,scipy,minimization,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,x
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'
我确实找到了,这里给出了一个解决方案,其中需要优化的变量需要分组为它们自己的数组。我尝试下面这样的方法:
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后在双_标量中遇到溢出。(此外,我尝试使用optimize.minimize命令执行相同的操作,但在添加额外参数时无法使其工作,但我没有在此处发布该代码,因为问题已经越来越长了)
所以这似乎不是正确的方法
如何在多个变量上使用optimize.fmin函数进行优化,同时为函数提供其他参数?“因此这似乎不是正确的方法。”这是正确的方法。问题是您的目标函数
g
没有最小值。x*y+c
的图形是一个。尝试将g
更改为,例如,x**2+y**2+c1+c2
。是的,你是对的-显然我没有太多考虑我的功能!谢谢,一切都好了!