将不同长度的参数列表传递给scipy.optimize.minimize(理解参数)

时间:2015-06-17 20:48:57

标签: python optimization scipy

我想了解提供给scipy.optimize.minimize的参数。我正在调用我的优化

res = minimize(func, para_init, method= 'SLSQP', constraints=cons) 

para_init看起来像[x,y,np.array([a,b,c]),np.array([e,f])],而cons是一个约束字典。 func()接受para_init中列出的所有参数并给出标量对象。但是我面临以下问题:

1)错误:ValueError: setting an array element with a sequence

2)我想指定xtol = 0.001, ftol = 0.001, bounds = None, jac = None,如果我只是将这些行添加到minimize(),则会抱怨TypeError: minimize() got an unexpected keyword argument 'xtol'。此外,我希望具有以下规范options = {'maxiter': 100,'disp': True},但我也会发现类似的意外关键字错误。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

来自http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.optimize.minimize.html

  

scipy.optimize.minimize( fun,x0,args =(),method = None,jac = None,hess = None,hessp = None,bounds = None,constraints =(), tol =无,回调=无,选项=无

minimize()需要两个位置参数:funx0

此外,它没有xtolftol关键字参数,但有一个tol关键字arg(Tolerance for termination)。

xtolftolmaxfev特定于所使用的方法。特别是Nelder-Mead方法的特定,并且不适用于您正在使用的方法(SLSQP)。

特定于方法的选项可以通过options词典提供。

因此,您应该致电:

  

res = minimize(func,x0,args = para_init,method ='SLSQP',constraints = cons,bounds = ...,jac = ...,options = {...})

答案 1 :(得分:0)

minimize有两个必需的参数:最小化的函数和初始猜测。你没有提供后者。见this。考虑直接致电scipy.optimize.fmin_slsqpdocumentation更清楚,因为参数语义不依赖于优化方法。换句话说,minimize通过将前者的参数分配给后者来调用其他函数(例如fmin_slsqp),这使得minimize难以简明扼要地全面记录。