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 方法最小化函数。

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

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

要最小化的目标函数。

x0ndarray

初始猜测。

argstuple, 可选

传递给 func 的额外参数。

xtolfloat, 可选

线搜索误差容限。

ftolfloat, 可选

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

maxiterint, 可选

要执行的最大迭代次数。

maxfunint, 可选

要执行的最大函数评估次数。

full_outputbool, 可选

如果为 True,则返回 foptxidireciterfuncallswarnflag

dispbool, 可选

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

retallbool, 可选

如果为 True,则返回每次迭代的解列表。

callback可调用对象, 可选

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

direcndarray, 可选

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

返回:
xoptndarray

最小化 func 的参数。

foptnumber

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

direcndarray

当前方向集。

iterint

迭代次数。

funcallsint

执行的函数调用次数。

warnflagint
整数警告标志

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

allvecslist

每次迭代的解列表。

另请参阅

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., 和 Flannery B.P.:数值方法(任何版本),剑桥大学出版社

示例

>>> 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)