Python scipy.optimize.fmin_cg实例讲解
用法:
scipy.optimize.fmin_cg(f, x0, fprime=None, args=(), gtol=1e-05, norm=inf, epsilon=1.4901161193847656e-08, maxiter=None, full_output=0, disp=1, retall=0, callback=None)
使用非线性共轭梯度算法最小化函数。
- f: 可调用,
f(x, *args)
要最小化的目标函数。这里 x 必须是在搜索最小值时要更改的变量的一维数组,而 args 是 f 的其他(固定)参数。
- x0: ndarray
用户提供的 xopt 初始估计值,即 x 的最优值。它必须是一维值数组。
- fprime: 可调用,
fprime(x, *args)
,可选 返回 f 在 x 处的梯度的函数。这里 x 和 args 与上面对 f 的说明相同。返回的值必须是一维数组。默认为 None,在这种情况下,梯度是数值近似的(参见下面的 epsilon)。
- args: 元组,可选
传递给的参数值f和fprime.当需要额外的固定参数来完全指定函数时,必须提供f和fprime.
- gtol: 浮点数,可选
当梯度的范数小于 gtol 时停止。
- norm: 浮点数,可选
用于梯度范数的顺序(
-np.Inf
是最小值,np.Inf
是最大值)。- epsilon: float 或 ndarray,可选
何时使用的步长fprime是数值近似的。可以是标量或一维数组。默认为
sqrt(eps)
, 用 eps 表示浮点机器精度。通常sqrt(eps)
约为 1.5e-8。- maxiter: int 可选
要执行的最大迭代次数。默认为
200 * len(x0)
。- full_output: 布尔型,可选
如果为 True,除了 xopt 之外,还返回 fopt、func_calls、grad_calls 和 warnflag。有关可选返回值的更多信息,请参阅下面的返回部分。
- disp: 布尔型,可选
如果为 True,则返回收敛消息,然后是 xopt。
- retall: 布尔型,可选
如果为 True,则将每次迭代的结果添加到返回值中。
- callback: 可调用的,可选的
一个可选的用户提供的函数,在每次迭代后调用。称为
callback(xk)
,其中xk
是的当前值x0.
- f: 可调用,
- xopt: ndarray
最小化 f 的参数,即
f(xopt) == fopt
。- fopt: 浮点数,可选
找到最小值,f(xopt)。仅在 full_output 为 True 时返回。
- func_calls: int 可选
function_calls 的数量。仅在 full_output 为 True 时返回。
- grad_calls: int 可选
进行的梯度调用次数。仅在 full_output 为 True 时返回。
- warnflag: int 可选
带有警告状态的整数值,仅在 full_output 为 True 时返回。
0:成功。
1:超过最大迭代次数。
- 2 梯度和/或函数调用没有改变。可能表明
该精度丢失了,即例程没有收敛。
3:遇到NaN 结果。
- allvecs: ndarray 列表,可选
数组列表,包含每次迭代的结果。只有当retall 为True 时才返回。
参数:
返回:
注意:
这种共轭梯度算法基于 Polak 和 Ribiere [1] 的算法。
在以下情况下,共轭梯度方法往往效果更好:
f 具有唯一的全局最小化点,并且没有局部最小值或其他固定点,
f 至少是局部地,由变量的二次函数相当好地近似,
f 是连续的并且具有连续的梯度,
fprime 不太大,例如,范数小于 1000,
初始猜测 x0 相当接近 f 的全局最小化点 xopt。
参考:
Wright & Nocedal,“Numerical Optimization”,1999 年,第 120-122 页。
scipy.optimize.fmin_cg:
例子:
示例 1:为给定的参数值和初始猜测
(u, v) = (0, 0)
寻找表达式a*u**2 + b*u*v + c*v**2 + d*u + e*v + f
的最小值。>>> args = (2, 3, 7, 8, 9, 10) # parameter values >>> def f(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... return a*u**2 + b*u*v + c*v**2 + d*u + e*v + f >>> def gradf(x, *args): ... u, v = x ... a, b, c, d, e, f = args ... gu = 2*a*u + b*v + d # u-component of the gradient ... gv = b*u + 2*c*v + e # v-component of the gradient ... return np.asarray((gu, gv)) >>> x0 = np.asarray((0, 0)) # Initial guess. >>> from scipy import optimize >>> res1 = optimize.fmin_cg(f, x0, fprime=gradf, args=args) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res1 array([-1.80851064, -0.25531915])
示例 2:使用scipy.optimize.minimize函数。 (这关注字典显示了所有可用的选项,尽管实际上只需要非默认值。返回的值将是一个字典。)
>>> opts = {'maxiter' : None, # default value. ... 'disp' : True, # non-default value. ... 'gtol' : 1e-5, # default value. ... 'norm' : np.inf, # default value. ... 'eps' : 1.4901161193847656e-08} # default value. >>> res2 = optimize.minimize(f, x0, jac=gradf, args=args, ... method='CG', options=opts) Optimization terminated successfully. Current function value: 1.617021 Iterations: 4 Function evaluations: 8 Gradient evaluations: 8 >>> res2.x # minimum found array([-1.80851064, -0.25531915])
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter Widgets 之 AnimatedContainer
- Flutter Widgets 之 Opacity 和AnimatedOpacity
- 聊聊常见的服务(接口)认证授权
- Flutter Widgets 之 FutureBuilder
- [Hei-Ocelot-Gateway ].Net Core Api网关Ocelot的开箱即用版本
- Flutter Widgets 之 InkWell 和 Ink
- Flutter Widgets 之 BottomNavigationBar
- Flutter Widgets 之 PageView
- 笔试题:代码如何实现“百钱买百鸡”?
- Flutter Widgets 之 Dialog 对话框
- 全网最详细的一篇Flutter 尺寸限制类容器总结
- 一篇带你看懂Flutter叠加组件Stack
- Flutter 拖拽排序组件 ReorderableListView
- 女神节 | 程序员如何低调而又不失逼格
- Flutter 拖拽控件Draggable看这一篇就够了