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)[source]#
使用截断牛顿算法中的梯度信息,最小化变量满足约束的函数。此方法封装了该算法的 C 实现。
- 参数:
- func可调用函数
func(x, *args)
需要最小化的函数。必须执行以下一项
返回 f 和 g,其中 f 是函数的值,而 g 是其梯度(一个浮点数列表)。
返回函数值,但将梯度函数单独作为 fprime 提供。
返回函数值并设置
approx_grad=True
。
如果函数返回 None,则中止最小化。
- x0类似数组
最小值的初始估计值。
- fprime可调用函数
fprime(x, *args)
,可选 func 的梯度。如果为 None,则func 必须返回函数值和梯度 (
f,g = func(x, *args)
) 或者 approx_grad 必须为 True。- args元组,可选
传递给函数的参数。
- approx_grad布尔值,可选
如果为真,则对梯度进行数值逼近。
- bounds列表,可选
x0 中每个元素的 (最小值,最大值) 对,定义该参数的范围。如果在该方向上没有范围,请对 min 或 max 使用 None 或 +/-inf。
- epsilon浮点数,可选
如果 approx_grad 为 True,则使用。fprime 的有限差分近似中的步长。
- scale类似数组,可选
要应用于每个变量的比例因子。如果为“无”,比例因子为区间限定变量的上下限,对其他变量为 1+|x|。默认为“无”。
- offsetarray_like,可选
从每个变量中减去的数值。如果为“无”,偏移量为区间限定变量的 (上界+下界)/2,对其他变量为 x。
- messagesint,可选
用于在最小化期间选择显示信息的位掩码,此信息在 MSGS 字典中定义。默认为 MGS_ALL。
- dispint,可选
消息的整数接口。0 = 无消息,5 = 所有消息
- maxCGitint,可选
每个主迭代允许的最大赫斯矩阵*向量的评估次数。如果 maxCGit == 0,maxCGit 会在 maxCGit < 0 时设置为 -gradient,而在 maxCGit < 0 时设置为 max(1,min(50,n/2))。默认为 -1。
- maxfunint,可选
允许的最大函数评估次数。如果为“无”,maxfun 会设置为 max(100, 10*len(x0))。默认为“无”。请注意,由于会通过数值微分方式评估梯度,此函数可能会违背这一限制。
- etafloat,可选
线性搜索的严重性。如果 < 0 或 > 1,设置为 0.25。默认为 -1。
- stepmxfloat,可选
线性搜索的最大步长。在调用期间可能会增加。如果太小,它会设置为 10.0。默认为 0。
- accuracyfloat,可选
有限差分计算的相对精确度。如果 <= 机器精度,设置为 sqrt(机器精度)。默认为 0。
- fminfloat,可选
最小函数值估计。默认为 0。
- ftolfloat,可选
停止判定标准中 f 值的精度目标。如果 ftol < 0.0,ftol 会设置为 0.0,默认为 -1。
- xtolfloat,可选
停止判定标准中 x 值的精度目标(在应用 x 比例因子后)。如果 xtol < 0.0,xtol 会设置为 sqrt(机器精度)。默认为 -1。
- pgtolfloat,可选
停止判定标准中预测梯度值的精度目标(在应用 x 比例因子后)。如果 pgtol < 0.0,pgtol 会设置为 1e-2 * sqrt(精度)。不建议将其设置为 0.0。默认为 -1。
- rescalefloat,可选
用于触发 f 值重新缩放的比例因子(以 log10 为单位)。如果为 0,每次迭代都进行重新缩放。如果为一个较大的值,则永不重新缩放。如果 < 0,rescale 会设置为 1.3。
- callbackcallable,可选
在每次迭代后,以 callback(xk) 的形式进行调用,其中 xk 是当前参数向量。
- func可调用函数
- 返回:
- xndarray
解。
- nfeval整数型
函数评价值。
- rc整数型
返回代码,见下面
另请参见
最小化
多元函数最小化算法的接口。特别参见‘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), ‘Numerical Optimization’
Nash S.G. (1984), “Newton-Type Minimization Via the Lanczos Method”, SIAM Journal of Numerical Analysis 21, pp. 770-778