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)[源代码]

使用改进的鲍威尔方法最小化函数。

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

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

要最小化的目标函数。

x0ndarray

初步猜测是这样的。

args元组,可选

传递给函数的额外参数。

xtol浮动,可选

线搜索容错。

ftol浮动,可选

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

maxiter整型,可选

要执行的最大迭代次数。

maxfun整型,可选

要进行的函数求值的最大数量。

full_output布尔值,可选

如果为True, foptxidireciterfuncalls ,以及 warnflag 都被退回了。

disp布尔值,可选

如果为True,则打印收敛消息。

retall布尔值,可选

如果为True,则在每次迭代时返回解决方案列表。

callback可调用,可选

用户提供的可选函数,在每次迭代后调用。称为 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集成

迭代次数。

funcalls集成

进行的函数调用数。

warnflag集成
整数警告标志:

1:函数求值的最大次数。2:最大迭代次数。3:遇到NaN结果。4:结果超出提供的范围。

allvecs列表

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

参见

minimize

与多变量函数的无约束最小化算法的接口。请特别看看“鲍威尔”方法。

注意事项

使用对Powell方法的修改来求N个变量的函数的最小值。鲍威尔方法是一种共轭方向法。

该算法有两个循环。外部循环只是在内部循环上迭代。内环在方向集合中的每个电流方向上最小化。在内循环结束时,如果满足某些条件,则丢弃给出最大降幅的方向,并用当前估计x与内循环开始处估计x之间的差值代替。

更换最大涨幅方向的技术条件相当于检查

  1. 不能沿着该迭代的最大增加方向进行进一步的增益。

  2. 最大增加的方向占了内循环的那个迭代导致的函数值减少的很大的足够部分。

参考文献

鲍威尔·M·J·D(1964)一种求多元函数最小值的有效方法而无需计算导数,计算机学报,7(2):155-162。

出版社,Teukolsky S.A.,Vetterling W.T.和Flannery B.P.:Numerical Recipes(任意版本),剑桥大学出版社

示例

>>> 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: 18
>>> minimum
array(0.0)