本文简要介绍 python 语言中 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,则中止最小化。
- x0: array_like
最小值的初始估计。
- fprime: 可调用
fprime(x, *args)
,可选 梯度为函数。如果没有,那么或者函数必须返回函数值和梯度(
f,g = func(x, *args)
) 或者approx_grad必须为真。- args: 元组,可选
传递给函数的参数。
- approx_grad: 布尔型,可选
如果为真,则以数值近似梯度。
- bounds: 列表,可选
x0 中每个元素的 (min, max) 对,定义该参数的界限。当该方向没有界限时,使用 None 或 +/-inf 作为 min 或 max 之一。
- epsilon: 浮点数,可选
如果approx_grad 为真,则使用。 fprime 的有限差分近似中的步长。
- scale: 数组,可选
应用于每个变量的比例因子。如果没有,则因子为up-low 用于区间有界变量和 1+|x|为其他人。默认为无。
- offset: 数组,可选
从每个变量中减去的值。如果没有,则偏移量为 (up+low)/2 用于区间有界变量,x 用于其他变量。
- messages: 整数,可选
用于在 MSGS 字典中定义的最小化值期间选择消息显示的位掩码。默认为MGS_ALL。
- disp: 整数,可选
消息的整数接口。 0 = 无消息,5 = 所有消息
- maxCGit: 整数,可选
每次主迭代的最大 hessian*vector 评估次数。如果 maxCGit == 0,则选择的方向是 -gradient 如果 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(accuracy)。不建议将其设置为 0.0。默认为 -1。
- rescale: 浮点数,可选
用于触发 f 值重新缩放的缩放因子(以 log10 为单位)。如果为 0,则在每次迭代时重新缩放。如果值很大,则永远不要重新缩放。如果 < 0,则重新缩放设置为 1.3。
- callback: 可调用的,可选的
在每次迭代后调用,作为 callback(xk),其中 xk 是当前参数向量。
- func: 可调用
- x: ndarray
解决方案。
- nfeval: int
函数评估的数量。
- rc: int
返回码,见下文
参数 ::
返回 ::
注意:
底层算法是截断牛顿算法,也称为牛顿共轭梯度算法。此方法与 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),“Newton-Type 通过 Lanczos 方法最小化”,SIAM Journal of Numerical Analysis 21,第 770-778 页
相关用法
- Python SciPy optimize.fmin_cobyla用法及代码示例
- Python SciPy optimize.fmin_bfgs用法及代码示例
- Python SciPy optimize.fmin_slsqp用法及代码示例
- Python SciPy optimize.fmin_cg用法及代码示例
- Python SciPy optimize.fmin_powell用法及代码示例
- Python SciPy optimize.fmin用法及代码示例
- Python SciPy optimize.fminbound用法及代码示例
- Python SciPy optimize.fsolve用法及代码示例
- Python SciPy optimize.fixed_point用法及代码示例
- Python SciPy optimize.rosen_der用法及代码示例
- Python SciPy optimize.line_search用法及代码示例
- Python SciPy optimize.rosen用法及代码示例
- Python SciPy optimize.shgo用法及代码示例
- Python SciPy optimize.minimize_scalar用法及代码示例
- Python SciPy optimize.root用法及代码示例
- Python SciPy optimize.NonlinearConstraint用法及代码示例
- Python SciPy optimize.KrylovJacobian用法及代码示例
- Python SciPy optimize.toms748用法及代码示例
- Python SciPy optimize.linprog_verbose_callback用法及代码示例
- Python SciPy optimize.bracket用法及代码示例
- Python SciPy optimize.milp用法及代码示例
- Python SciPy optimize.diagbroyden用法及代码示例
- Python SciPy optimize.bisect用法及代码示例
- Python SciPy optimize.isotonic_regression用法及代码示例
- Python SciPy optimize.golden用法及代码示例
注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.optimize.fmin_tnc。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。