最优化建模算法理论之Goldstein准则(数学原理及MATLAB实现)
文章目录
- 一、前言
- 二、Goldstein准则
- 1. 定义
- 2. 几何含义
- 三、代码实现
- 四、与Armjio准则的对比
- 五、总结
一、前言
为了克服 Armijo 准则的缺陷,我们需要引入其他准则来保证每一步的 αk\alpha^kαk 不会太小。
既然 Armijo 准则只要求点 (α,ϕ(α))(\alpha, \phi(\alpha))(α,ϕ(α)) 必须处在某直线下方,我们也可使用相同的形式使得该点必须处在另一条直线的上方。
这就是 Armijo-Goldstein 准则
,简称 Goldstein 准则。
二、Goldstein准则
1. 定义
设 dkd^kdk 是点 xkx^kxk 处的下降方向,若
f(xk+αdk)≤f(xk)+cα∇f(xk)Tdk,f(xk+αdk)≥f(xk)+(1−c)α∇f(xk)Tdk\begin{aligned} &f(x^k + \alpha d^k) \le f(x^k) + c\alpha \nabla f(x^k)^Td^k,\\ &f(x^k + \alpha d^k) \ge f(x^k) + (1 - c)\alpha \nabla f(x^k)^Td^k \end{aligned} f(xk+αdk)≤f(xk)+cα∇f(xk)Tdk,f(xk+αdk)≥f(xk)+(1−c)α∇f(xk)Tdk
则称步长 α\alphaα 满足 Goldstein 准则
,其中 c∈(0,12)c \in (0, \dfrac{1}{2})c∈(0,21)。
2. 几何含义
与 Armjio 准则相类似,Goldstein 准则也有非常直观的几何含义,它指的是点 (α,ϕ(α))(\alpha, \phi(\alpha))(α,ϕ(α)) 必须在两条直线
l1(α)=ϕ(0)+cα∇f(xk)Tdk,l2(α)=ϕ(0)+(1−c)α∇f(xk)Tdk\begin{aligned} &l_1(\alpha) = \phi(0) + c\alpha \nabla f(x^k)^Td^k,\\ &l_2(\alpha) = \phi(0) + (1 - c)\alpha \nabla f(x^k)^Td^k \end{aligned} l1(α)=ϕ(0)+cα∇f(xk)Tdk,l2(α)=ϕ(0)+(1−c)α∇f(xk)Tdk
之间。如下图所示:
区间 [α1,α2][\alpha_1, \alpha_2][α1,α2] 中的点均满足 Goldstein 准则
,同时我们也注意到 Goldstein 准则确实去掉了过小的 α\alphaα。
三、代码实现
MATLAB 代码如下:
function [alpha, xk, f, k] = Goldstein(fun, grid, x0, dk)%% Function [alpha, xk, fx, k] = Goldstein(fun, grid, x0, dk)% 求出函数fun在x0处以dk为下降方向时的步长alpha,同时返回相对应的下% 一个下降点xk以及xk处的函数值fx,k为迭代次数% -----------------------------------------------------------% 输入: % fun 函数名称(字符变量)% grid 梯度函数名称(字符变量)% x0 迭代点(列向量)% dk 函数在迭代点处的下降方向(列向量)%% 输出:% alpha 函数在x0处以dk为下降方向时的下降步长% xk 函数在x0处以dk为下降方向,以alpha为步长% 求得的下降点% f 函数在下降点xk处的函数值% k 求步长算法迭代次数% -----------------------------------------------------------% by Zhi Qiangfeng %c = 0.3; % 泰勒展开式补足系数,0 < c < 1/2alpha = 1; % 初始步长为 1k = 0; % 统计迭代次数a = 0; b = inf; % 二分法确定 alpha 值gk = feval(grid, x0); % x0处的梯度值fk = feval(fun, x0 + alpha * dk); % 函数在下一个迭代点处的目标函数值l1 = feval(fun, x0) + c * alpha * gk' * dk; % Armjio准则l2 = feval(fun, x0) + (1 - c) * alpha * gk' * dk; % Armjio准则的补全while trueif fk > l1k = k + 1;b = alpha;alpha = (a + b) / 2;fk = feval(fun, x0 + alpha * dk);l1 = feval(fun, x0) + c * alpha * gk' * dk;l2 = feval(fun, x0) + (1 - c) * alpha * gk' * dk;continue;endif fk < l2k = k + 1;a = alpha;alpha = min([2 * alpha, (a + b) / 2]);fk = feval(fun, x0 + alpha * dk);l1 = feval(fun, x0) + c * alpha * gk' * dk;l2 = feval(fun, x0) + (1 - c) * alpha * gk' * dk;continue;endbreak;endxk = x0 + alpha * dk; % 下降点f = feval(fun, xk); % 下降点处函数值
end
四、与Armjio准则的对比
以求解 Rosenbrock
函数为例,这是优化领域中一个著名的检验函数,函数表达式如下:
f(x)=100(x2−x12)2+(1−x1)2,g(x)=[−400x1x2+400x13+2x1−2;200x2−200x12]\begin{aligned} &f(x) = 100(x_2 - x_1^2)^2 + (1 - x_1)^2,\\ &g(x) = \left[\begin{aligned}-400x_1x_2 + 400x_1^3 + 2x_1 - 2;\\200x_2 - 200x_1^2\end{aligned}\right] \end{aligned} f(x)=100(x2−x12)2+(1−x1)2,g(x)=[−400x1x2+400x13+2x1−2;200x2−200x12]
编写函数文件 fun.m
如下:
function f = fun(x)
f = 100 * (x(2) - x(1)^2)^2 + (1 - x(1))^2;
end
随后是梯度函数文件 grid.m
如下:
function g = grid(x)
g = [-400 * x(1) * x(2) + 400 * x(1)^3 + 2 * x(1) - 2;200 * x(2) - 200 * x(1)^2];
end
Armjio 准则
代码参考此篇博客:最优化建模算法理论之Armjio准则(数学原理及MATLAB实现)
求解方法采用 BFGS 拟牛顿方法
,代码参考此篇博客:最优化建模算法理论之BFGS/DFP拟牛顿方法(数学原理及MATLAB实现)
编写求解代码如下:
x0 = [-10; 10];
[f, xk, k] = BFGS(x0, 'fun', 'grid', 1e-5, 1000)
初始点选为 [-10, 10],若采用 Armjio 准则求步长,输出如下:
>> resolve
f =8.7712e-17
xk =1.00001.0000
k =70
>>
迭代了 70
次,若采用 Goldstein 准则,输出如下:
>> resolve
f =8.3501e-20
xk =1.00001.0000
k =60
>>
迭代了 60
次即达到了精度要求,并且求解的函数值 f = 8.3501e-20
还要优于 Armjio 准则。
五、总结
不喜欢写总结。
最优化建模算法理论之Goldstein准则(数学原理及MATLAB实现)相关推荐
- 【建模算法】基于遗传算法求解TSP问题(matlab求解)
[建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...
- 学数学建模算法对计算机的好处,数学建模中常见十种算法 (期末论文).doc
数学建模中常见十种算法 (期末论文) 数 学 系 毕 业 论 文 论文 (设计)题目: 数学建模中常见的十种算法 姓 名 黄小芬______ 学 号 100501313 专 业 数学与应用数学 班 级 ...
- 数学建模算法汇总(全网最全,含matlab案例代码)
数学建模常用的算法分类 全国大学生数学建模竞赛中,常见的算法模型有以下30种: 最小二乘法 数值分析方法 图论算法 线性规划 整数规划 动态规划 贪心算法 分支定界法 蒙特卡洛方法 随机游走算法 遗传 ...
- 数学建模算法与应用_《数学建模算法与应用》笔记【1】
Chapter1.线性规划 import def Chapter2.整数规划 def Chapter3.非线性规划 def def def Chapter4.图与网络模型及方法 老本行了,先放一放 C ...
- 使用(VAE)生成建模,理解可变自动编码器背后的数学原理
理解可变自动编码器背后的原理 生成模型是机器学习中一个有趣的领域,在这个领域中,网络学习数据分布,然后生成新的内容,而不是对数据进行分类.生成建模最常用的两种方法是生成对抗网络(GAN)和可变自编 ...
- RD算法及其距离徙动校正(原理及matlab仿真)
RD算法流程图: 图1 RD算法流程图 因为是在word里写的,这里直接上截图了,不然mathtype公式显示不出来. 对于RD算法的原理这里就不展开讨论了,重点分析距离徙动校正的原理. 仿真程序,F ...
- Matlab彩色图像卷积的数学原理及纯手工实现
一.引言 在图像处理中,不论是提取图像边缘特征,还是尺度空间变换,亦或者目前大火的深度学习,图像卷积都是非常重要的基础工作.卷积从整体上说是卷积,从局部上说其实就是内积.卷积不论在数学上还是信号处理中 ...
- Matlab图像水平方向错切变换的数学原理及实现
一.引言 图像的几何变换在图像处理中被经常使用,其中图像错切变换也是常用的图像变换.图像错切错切变换包括水平方向错切变换和竖直方向错切变换,本文给出了灰度图像和彩色图像的水平方向错切变换的数学原理及m ...
- matlab中yita怎么打,数学建模算法之模拟退火
数学建模算法之模拟退火 模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增大,而徐徐冷却时粒子渐趋有序,在每个温度都 ...
最新文章
- webpack 项目使用--转换为React项目(4)
- python time智能等待_python中等待怎么表示
- 【转】解决keepalived正常启动但是虚IP(VIP)没有生成的问题
- how is sap-ui-core.js initialize the reqeust of sap-ui-core-dbg.js
- mysql dateformat 索引_DATE_FORMAT索引问题
- day05 数据类型
- 【GRE协议】CentOS配置GRE隧道
- PHP连接mysql数据库使用方法,PHP连接MySQL数据库的操作方法
- PowerShell中远程管理简单配置
- SRS之SrsRtmpConn::publishing详解
- Windows下QQ聊天记录中图片的默认存放位置
- php后台发送qq消息,WebQQ消息发送功能
- 改进YOLOv5!GSConv+Slim Neck进一步提升YOLOv5性能!
- Linux常用命令-时刻更新
- haproxy配置sni实现https多域名代理
- 微信小程序跳转公众号文章非web-view
- 动态规划——斐波那契数列(70. 爬楼梯、198. 打家劫舍、213. 打家劫舍II、信件错排、母牛生产)
- cad调了比例因子没反应_CAD入门学习之如何修改比例因子
- 王爽汇编语言 实验7
- 犀牛书第七版学习笔记:数据类型与结构-数字
热门文章
- r语言中残差与回归值的残差图_R语言逻辑回归、方差分析、伪R平方分析
- GSM MODEM的基本用法-收发短信篇
- Java多线程Zip压缩
- 记一次3dmax入门
- 安全狗防护引擎安装失败
- linux 游戏 复刻,魔法门复刻手游官网版-魔法门复刻下载v4.00.9-Linux公社
- 新海诚画集[秒速5センチメートル:樱花抄·春]
- 如何用python计算函数的值域_(完整版)求函数定义域及值域方法及典型题归纳
- iPad/Iphone抓包
- QQ音乐评论分布可视化