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 的梯度。如果为 None,则 func 必须返回函数值和梯度(
f,g = func(x, *args)
),或者 approx_grad 必须为 True。- 参数tuple, 可选
传递给函数的参数。
- approx_gradbool, 可选
如果为真,数值近似梯度。
- 边界列表,可选
(min, max) 对 x0 中的每个元素定义了该参数的边界。当在该方向上没有边界时,对 min 或 max 使用 None 或 +/-inf。
- epsilonfloat, 可选
如果 approx_grad 为 True,则使用此参数。这是在 fprime 的有限差分近似中的步长。
- 比例类似数组, 可选
应用于每个变量的缩放因子。如果为 None,则区间有界变量的因子为上-下,其他变量的因子为 1+|x|。默认为 None。
- 偏移量类似数组, 可选
要从每个变量中减去的值。如果为 None,则区间有界变量的偏移量为 (up+low)/2,其他变量的偏移量为 x。
- 消息int, 可选
位掩码用于在最小化期间选择消息显示,其值在MSGS字典中定义。默认为MGS_ALL。
- dispint, 可选
消息的整数接口。0 = 无消息,5 = 所有消息
- maxCGitint, 可选
每个主迭代中Hessian*向量评估的最大次数。如果 maxCGit == 0,选择的方向是 -梯度;如果 maxCGit < 0,maxCGit 被设置为 max(1, min(50, n/2))。默认为 -1。
- maxfunint, 可选
最大函数评估次数。如果为 None,maxfun 设置为 max(100, 10*len(x0))。默认为 None。请注意,由于通过数值微分评估梯度,此函数可能会违反限制。
- etafloat, 可选
线搜索的严重性。如果 < 0 或 > 1,则设置为 0.25。默认为 -1。
- stepmxfloat, 可选
线搜索的最大步长。在调用过程中可能会增加。如果太小,将被设置为10.0。默认为0。
- 准确性float, 可选
有限差分计算的相对精度。如果 <= 机器精度,则设置为 sqrt(机器精度)。默认为 0。
- fminfloat, 可选
最小函数值估计。默认为 0。
- ftolfloat, 可选
停止准则中 f 值的精度目标。如果 ftol < 0.0,ftol 将设置为 0.0 默认值为 -1。
- xtolfloat, 可选
停止准则中 x 值的精度目标(在应用 x 缩放因子之后)。如果 xtol < 0.0,则 xtol 设置为 sqrt(machine_precision)。默认为 -1。
- pgtolfloat, 可选
停止准则中投影梯度值的精度目标(在应用x缩放因子之后)。如果 pgtol < 0.0,则 pgtol 设置为 1e-2 * sqrt(accuracy)。不建议将其设置为 0.0。默认为 -1。
- 重新缩放float, 可选
缩放因子(以log10为单位)用于触发f值的重缩放。如果为0,则在每次迭代时重缩放。如果是一个较大的值,则从不重缩放。如果< 0,则重缩放设置为1.3。
- 回调可调用,可选
在每次迭代后调用,作为回调函数 callback(xk),其中 xk 是当前的参数向量。
- func : 可调用的
- 返回:
- xndarray
解决方案。
- nfeval整数
函数评估的次数。
- rc整数
返回代码,见下文
参见
minimize
用于多变量函数最小化算法的接口。特别参见 ‘TNC’ 方法。
注释
底层算法是截断牛顿法,也称为牛顿共轭梯度法。这种方法与 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
参考文献
Wright S., Nocedal J. (2006), ‘数值优化’
Nash S.G. (1984), “通过Lanczos方法的牛顿型最小化”, SIAM数值分析杂志21, pp. 770-778