scipy.optimize.

fmin_powell#

scipy.optimize.fmin_powell(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None, direc=None)[源代码][源代码]#

使用修正的Powell方法最小化一个函数。

此方法仅使用函数值,不使用导数。

参数:
函数可调用函数 f(x,*args)

要最小化的目标函数。

x0ndarray

初始猜测。

参数tuple, 可选

传递给 func 的额外参数。

xtolfloat, 可选

线搜索误差容限。

ftolfloat, 可选

func(xopt) 中的相对误差可接受以实现收敛。

maxiterint, 可选

要执行的最大迭代次数。

maxfunint, 可选

最大函数评估次数。

完整输出bool, 可选

如果为真,则返回 foptxidireciterfuncallswarnflag

dispbool, 可选

如果为真,打印收敛消息。

retallbool, 可选

如果为真,返回每次迭代时的解列表。

回调可调用,可选

一个可选的用户提供的函数,在每次迭代后调用。调用方式为 callback(xk),其中 xk 是当前的参数向量。

direcndarray,可选

初始拟合步骤和参数顺序设置为一个 (N, N) 数组,其中 N 是 x0 中的拟合参数数量。默认为步长 1.0 同时拟合所有参数(np.eye((N, N)))。要防止在步骤中初始考虑值或更改初始步长,请在 M 块的第 J 个位置设置为 0 或所需步长,其中 J 是 x0 中的位置,M 是所需的评估步骤,步骤按索引顺序评估。随着最小化的进行,步长和顺序将自由变化。

返回:
xoptndarray

最小化 func 的参数。

fopt数字

函数在最小值处的值:fopt = func(xopt)

direcndarray

当前方向已设定。

iter整数

迭代次数。

函数调用整数

函数调用的次数。

警告标志整数
整数警告标志:

1 : 函数评估的最大次数。 2 : 最大迭代次数。 3 : 遇到 NaN 结果。 4 : 结果超出提供的界限。

allvecs列表

每次迭代的解决方案列表。

参见

minimize

用于多变量函数无约束最小化算法的接口。特别参见’Powell’方法。

注释

使用 Powell 方法的修改版来找到 N 变量函数的极小值。Powell 方法是一种共轭方向方法。

该算法有两个循环。外循环仅迭代内循环。内循环在方向集中的每个当前方向上进行最小化。在内循环结束时,如果满足某些条件,则给出最大减少的方向将被丢弃,并替换为当前估计的 x 与内循环开始时的估计 x 之间的差异。

替换最大增加方向的技术条件相当于检查

  1. 从该迭代中,沿最大增加方向无法再获得进一步的增益。

  2. 在函数值从内循环的该次迭代中减少的方向上,最大增加的方向占据了足够大的比例。

参考文献

Powell M.J.D. (1964) 一种在不计算导数的情况下寻找多元函数最小值的有效方法,计算机杂志,7 (2):155-162。

Press W., Teukolsky S.A., Vetterling W.T., and Flannery B.P.: Numerical Recipes (任意版本), Cambridge University Press

示例

>>> def f(x):
...     return x**2
>>> from scipy import optimize
>>> minimum = optimize.fmin_powell(f, -1)
Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 2
         Function evaluations: 16
>>> minimum
array(0.0)