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)
可调用 函数最小化。必须执行以下操作之一:
返回f和g,其中f是函数的值,g是其梯度(浮点数列表)。
返回函数值,但单独提供梯度函数为 fprime 。
返回函数值并设置
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是当前参数向量。
- func :可调用
- 退货
- xndarray
解决方案。
- nfeval集成
函数求值的次数。
- rc集成
返回代码,见下文
参见
minimize
与多变量函数的最小化算法的接口。请参阅“TNC” method 尤其是。
注意事项
其基本算法是截断牛顿,也称为牛顿共轭梯度法。此方法与scipy.Optimize.fmin_ncg的不同之处在于
它包装了算法的C实现
它允许给每个变量一个上下限。
该算法通过确定无约束截断牛顿算法中的下降方向,但不会采用足够大的步长来离开可行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页