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

初始猜测。

args元组,可选

传递给 func 的额外参数。

xtol浮点数,可选

线搜索误差容差。

ftol浮点数,可选

func(xopt) 中可接受的相对误差,用于判断收敛。

maxiter整数,可选

要执行的最大迭代次数。

maxfun整数,可选

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

full_output布尔值,可选

如果为 True,则返回 foptxidireciterfuncallswarnflag

disp布尔值,可选

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

retall布尔值,可选

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

callback可调用,可选

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

direcndarray,可选

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

返回:
xoptndarray

使 func 最小化的参数。

fopt数值

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

direcndarray

当前方向集。

iter整数

迭代次数。

funcalls整数

函数调用次数。

warnflag整数
整数警告标志

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

allvecs列表

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

另请参阅

minimize

多元函数无约束最小化算法的接口。特别参阅“Powell”方法。

注意

使用修正的 Powell 方法寻找 N 变量函数的最小值。Powell 方法是一种共轭方向方法。

该算法有两个循环。外层循环仅迭代内层循环。内层循环在方向集中的每个当前方向上进行最小化。在内层循环结束时,如果满足某些条件,则舍弃产生最大下降的方向,并替换为当前估计的 x 与内层循环开始时估计的 x 之间的差值。

替换最大增长方向的技术条件归结为检查:

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

  2. 最大增长方向占内层循环该迭代中函数值下降的足够大部分。

参考文献

Powell M.J.D. (1964) 一种不计算导数寻找多变量函数最小值的有效方法, Computer Journal, 7 (2):155-162。

Press W., Teukolsky S.A., Vetterling W.T., and 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)