scipy.optimize.fmin_tnc

scipy.optimize.fmin_tnc(func, x0, fprime=None, args=(), approx_grad=0, bounds=None, epsilon=1e-08, scale=None, offset=None, messages=15, maxCGit=- 1, maxfun=None, eta=- 1, stepmx=0, accuracy=0, fmin=0, ftol=- 1, xtol=- 1, pgtol=- 1, rescale=- 1, disp=None, callback=None)[源代码]

使用截断牛顿算法中的梯度信息,最小化变量受限的函数。此方法包装了算法的C实现。

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

函数最小化。必须执行以下操作之一:

  1. 返回f和g,其中f是函数的值,g是其梯度(浮点数列表)。

  2. 返回函数值,但单独提供梯度函数为 fprime

  3. 返回函数值并设置 approx_grad=True

如果函数返回NONE,最小化将中止。

x0array_like

最低值的初步估计。

fPrime :可调用 fprime(x, *args) ,可选可调用

渐变 func 。如果没有,则任一 func 必须返回函数值和梯度 (f,g = func(x, *args) )或 approx_grad 一定是真的。

args元组,可选

要传递给函数的参数。

approx_grad布尔值,可选

如果为true,则在数值上近似渐变。

bounds列表,可选

X0中每个元素的(最小,最大)对,定义该参数的界限。如果在该方向上没有界限,则使用None或+/-inf表示min或max之一。

epsilon浮动,可选

在Approx_grad为True时使用。fPrime的有限差分近似中的步长。

scaleARRAY_LIKE,可选

应用于每个变量的比例因子。如果没有,则区间有界变量和1+的因子为上下限 |x| 为了其他人。默认为无。

offsetARRAY_LIKE,可选

要从每个变量中减去的值。如果没有,则区间有界变量的偏移量为(Up+Low)/2,其他变量的偏移量为x。

messages整型,可选

用于选择MSGS DICT中定义的最小化值期间显示的消息的位掩码。默认为MGS_ALL。

disp整型,可选

消息的整数接口。0=无消息,5=所有消息

maxCGit整型,可选

每个主迭代的最大Hessian*向量求值次数。如果maxCGit==0,则选择的方向为-梯度。如果maxCGit<0,则将maxCGit设置为max(1,min(50,n/2))。默认为-1。

maxfun整型,可选

函数求值的最大次数。如果无,则将maxFun设置为max(100,10*len(X0))。默认为无。

eta浮动,可选

行搜索的严重程度。如果<0或>1,则设置为0.25。默认为-1。

stepmx浮动,可选

行搜索的最大步长。在呼叫过程中可能会增加。如果太小,将设置为10.0。默认为0。

accuracy浮动,可选

有限差分计算的相对精度。如果<=MACHINE_PRECISION,则设置为SQRT(MACHINE_PRECISION)。默认为0。

fmin浮动,可选

最小函数值估计。默认为0。

ftol浮动,可选

停止准则中f的值的精度目标。如果ftol<0.0,则将ftol设置为0.0,默认为-1。

xtol浮动,可选

停止标准中x的值的精度目标(在应用x比例因子之后)。如果xtol<0.0,则将xtol设置为sqrt(MACHINE_PRECISION)。默认为-1。

pgtol浮动,可选

停止标准中投影坡度值的精度目标(在应用x比例因子之后)。如果pgtol<0.0,则将pgtol设置为1e-2*sqrt(精度)。不建议将其设置为0.0。默认为-1。

rescale浮动,可选

用于触发f值重新缩放的比例因子(Log10)。如果为0,则在每次迭代时重新缩放。如果值很大,千万不要重新缩放。如果<0,则重缩放设置为1.3。

callback可调用,可选

在每次迭代后调用,作为callback(Xk),其中xk是当前参数向量。

退货
xndarray

解决方案。

nfeval集成

函数求值的次数。

rc集成

返回代码,见下文

参见

minimize

与多变量函数的最小化算法的接口。请参阅“TNC” method 尤其是。

注意事项

其基本算法是截断牛顿,也称为牛顿共轭梯度法。此方法与scipy.Optimize.fmin_ncg的不同之处在于

  1. 它包装了算法的C实现

  2. 它允许给每个变量一个上下限。

该算法通过确定无约束截断牛顿算法中的下降方向,但不会采用足够大的步长来离开可行x的空间,从而合并了边界约束。该算法跟踪一组当前有效的约束,并在计算最小允许步长时忽略它们。(与活动约束关联的x保持不变。)如果允许的最大步长为零,则添加新的约束。在每次迭代结束时,可以认为约束之一不再有效并被移除。如果约束当前处于活动状态,但该变量的渐变从约束指向内部,则认为该约束不再处于活动状态。删除的特定约束是与约束不再有效的最大索引变量相关联的约束。

返回代码定义如下:

-1 : Infeasible (lower bound > upper bound)
 0 : Local minimum reached (|pg| ~= 0)
 1 : Converged (|f_n-f_(n-1)| ~= 0)
 2 : Converged (|x_n-x_(n-1)| ~= 0)
 3 : Max. number of function evaluations reached
 4 : Linear search failed
 5 : All lower bounds are equal to the upper bounds
 6 : Unable to progress
 7 : User requested end of minimization

参考文献

赖特·S,Nocedal J.(2006),“数值优化”

Nash S.G.(1984),“通过Lanczos方法的牛顿型最小化”,“SIAM数值分析杂志”,第21期,第770-778页