一维搜索方法c语言,优化方法基础系列-非精确的一维搜索技术
选择最优步长的精确搜索方法往往计算量大,特别是当迭代点远离最优解时,效率很低,而且很多最优化算法的收敛速度并不依赖于精确的一维搜索过程。这促使一些研究者放宽了一维搜索的精确要求,而去保证目标函数在每次迭代有满意的下降量,这类方法称为非精确的一维搜索方法或可接受的一维搜索方法,它可以大大节省计算量。
不精确的一维搜索方法核心问题是选取可接受的步长
使得
得到一个满意的水平,即足够的下降且大范围收敛。因此,研究者提出了一些准则,以满足不精确搜索能也能收敛的条件。Armijo-Goldstein和Wolf-Powell准则为非精确一维搜索的两大准则。
Armijo-Goldstein准则
Armijo-Goldstein准则核心思想就两点:
1、目标函数值应该有足够的下降
2、一维搜索的步长
不应该太小
这两点意图是非常明显,由于最优化问题就是寻找极小值,所以使得目标函数值下降,是我们努力的方向,此外如果搜索步长太小,可能原地打转,影响收敛速度。具体方法如下:
假设
是一个下降方向,记
,有:
则
的一个合理的下界(保证下降):
再给其一个上界限制(
不能太小):
那么Armijo-Goldstein准则可描述为:
可接受的
应该满足:
注:如果
不在这个范围内,将影响其超线性收敛性。
图1 Armijo-Goldstein准则示例
令
,即固定
和方向
,求解满足条件的步长,则Armijo-Goldstein可写为:
从上图和公式中,可以看出
在
的下方,
在
的下方,所以
区间都是在满足条件的步长。然而,Armijo-Goldstein准则可能会把极值点判断在可接受的范围之外,所以为了解决这一问题,Wolf-Powell准则应用而生。
图 2 Armijo-Goldstein 准则流程图
Algorithm 9 Armijo-Goldstein准则
function lamda = ArmijoGoldstein(func,gfunc,lamda0,ro,apha,iterNum,plotFlag)
if nargin<7
plotFlag = 1;
end
if nargin<6
iterNum = 100;
end
if nargin<5
apha = 2;
end
if nargin<4
ro = 0.1;
end
if nargin<3
lamda0 = 1;
end
a = 0;
b = inf;
lamda =lamda0;
f0 = func(0);
g0 = gfunc(0);
if plotFlag == 1
figH = figure();
end
while iterNum
flamda = func(lamda);
if plotFlag == 1
pause(1)
plot(0:0.01:4,func(0:0.01:4),'-b');
hold on;
plot([0,4],[f0,f0],'-y');
plot([0,4],[f0,f0+ro*4*g0],'-or');
plot([0,4],[f0,f0+(1-ro)*4*g0],'-og');
plot([0,lamda],[f0,flamda],'-*k');
plot(a,func(a),'-*g');
if ~isinf(b)
plot(b,func(b),'-*r');
end
hold off;
end
if flamda<=f0+ro*lamda*g0 %满足Armijo准则,足够的下降
if flamda>=f0+(1-ro)*lamda*g0 %满足Goldstein,步长不会太小
break;
else %不满足Goldstein,步长太小,左端的a设置为lamda
a = lamda;
if isinf(b)%右端的b为空的时候,说明Armijo准则一直是满足的,步长太小了,扩大步长
lamda = apha*lamda;
else
lamda = (a+b)/2; %步长设定为区间的中值
end
end
else%下降不足,缩小b和步长
b = lamda;
lamda = (a+b)/2;
end
iterNum = iterNum - 1;
end
%示例
%lamda = ArmijoGoldstein(@(x)(sin(-4+x)-1),@(x)(cos(-4+x)),1,0.4,2,100,1)
Wolf-Powell 准则
Wolf-Powell准则下界和Armijo-Goldstein准则是一样的,即:
为了保证足够的步长以及可接受的区间包含极小值点,上界被定义:
也就是:
其说明在点
处的斜率应该大于起始点斜率的
倍。
是负值,所以上界的含义就是可接受的范围中斜率应该是接近零的负值或者正值。
此外,还有一种更为严苛的准则,称为强Wolf调节,即:
强Wolf条件使得可接受的范围的斜率的正值不至于过大,可以将远离极小值点的步长排除在外。一般
越小,线性搜索越精确,不过
越小,工作量越大,一般取
图 3 强Wolf条件示意图
Algorithm 10 Wolf-Powell 准则
function lamda = WolfPowell(func,gfunc,lamda0,ro,sigma,apha,iterNum,plotFlag)
if nargin<8
plotFlag = 1;
end
if nargin<7
iterNum = 100;
end
if nargin<6
apha = 2;
end
if nargin<5
ro = 0.1;
end
if nargin<4
sigma = 0.7;
end
if nargin<3
lamda0 = 1;
end
a = 0;
b = inf;
lamda =lamda0;
f0 = func(0);
g0 = gfunc(0);
if plotFlag == 1
figH = figure();
for i=0:0.01:4
if gfunc(i)>=sigma*g0;
gs_i = i;
break;
end
end
end
while iterNum
flamda = func(lamda);
if plotFlag == 1
pause(1)
plot(0:0.01:4,func(0:0.01:4),'-b');
hold on;
plot([0,4],[f0,f0],'-y');
plot([0,4],[f0,f0+ro*4*g0],'-or');
plot([gs_i-0.5,gs_i+0.5],[func(gs_i)+(-0.5)*sigma*g0,func(gs_i)+(0.5)*sigma*g0],'-og');
plot([0,lamda],[f0,flamda],'-*k');
plot(a,func(a),'-*g');
if ~isinf(b)
plot(b,func(b),'-*r');
end
hold off;
end
if flamda<=f0+ro*lamda*g0 %满足Armijo准则,足够的下降
if gfunc(lamda)>=sigma*g0 %满足wolf-powell,步长不会太小
break;
else %不满足wolf-powell,步长太小,左端的a设置为lamda
a = lamda;
if isinf(b)%右端的b为空的时候,说明Armijo准则一直是满足的,步长太小了,扩大步长
lamda = apha*lamda;
else
lamda = (a+b)/2; %步长设定为区间的中值
end
end
else%下降不足,缩小b和步长
b = lamda;
lamda = (a+b)/2;
end
iterNum = iterNum - 1;
end
%example
%lamda = WolfPowell(@(x)(sin(-4+x)-1),@(x)(cos(-4+x)),1,0.4,0.45,2,100,1)
图4 Wolf-Powell条件示意图
后退法(简单准则)
后退法仅采用了Armijo-Goldstein准则的下界限制,即保证函数的下降,此外要求
不要太小即可。其基本思想是:
给定
Step1 令
Step2 如果
,则令
停止迭代,输出
;否则转Step3
Step3
,转Step2
关于这些准则的有效性,比如步长的存在性,大范围收敛性质可参阅刘红英版本的数值规划基础或者Numerical Optimization。后来学者们又发展了Curry-Altman步长律、Danilin-Pshenichuyi步长律、De Leone-Grippo步长律等,这些步长律或者准则会在后文的具体优化算法中有所涉及,使用的过程中可能会大大加速优化方法的收敛。
参考文献:
[1] Numerical Optimization. Jorge Nocedal
一维搜索方法c语言,优化方法基础系列-非精确的一维搜索技术相关推荐
- mysql 优化方法_Mysql的优化方法介绍
本篇文章给大家带来的内容是关于Mysql的优化方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.应用访问优化1).减少数据访问(Nosql作用) 2).返回更少数据 3). ...
- javascript基础系列:DOM相关的技术知识点
DOM及其基础操作 DOM: document object model 文档对象模型,提供一些属性和方法供我们操作页面中的元素 获取DOM元素的方法 document.getElementById( ...
- 【javascript基础——系列10】js中隐藏元素的几种方法以及代码
系列文章 [javascript基础--系列1]前端页面ajax连接后台服务器传输数据 [javascript基础--系列2]前端页面axios连接后台服务器传输数据 [javascript基础--系 ...
- 【机器学习】算法模型自动超参数优化方法
什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...
- 模型效果差?我建议你掌握这些机器学习模型的超参数优化方法
模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般模型参 ...
- 全网最全:机器学习算法模型自动超参数优化方法汇总
什么是超参数? 学习器模型中一般有两类参数,一类是可以从数据中学习估计得到,我们称为参数(Parameter).还有一类参数时无法从数据中估计,只能靠人的经验进行设计指定,我们称为超参数(Hyper ...
- 拓扑优化中SIMP方法与水平集方法有何优缺点,水平集法变换到高维,不是更复杂了...
作者:周平章 链接:https://www.zhihu.com/question/52008623/answer/187927508 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转 ...
- 快排算法及常见两种常见优化方法
简书同步发布 正常快排 最近在找实习,然而我觉得博客还是要坚持日更,我相信时间总是挤出来的,不扯淡了,快排这是个面试常考题,今天主要着重于讲他的优化方法,那我就直接先贴快排代码,再来细细道来我所知道的 ...
- 【Go语言编程】基础知识篇
文章目录 一.Go语言简介 1.优势 2.劣势 3.前景 二.数据集的导入及编辑 1.包及其导入 2.变量 3.预定义常量 4.基础数据类型 5.派生数据类型 6.类型转换与类型别名 三.流程控制 四 ...
最新文章
- Spring工厂常识
- 公开课报名 | 基于自定义模板的OCR结果的结构化处理技术
- mysql 写binlog 原理_MySQL binlog原理及应用
- 解决错误:No module named ‘Cryptodome‘ 和错误rosbag.bag.ROSBagException: unsupported compression type: lz4
- SAP BTP 应用 mta.yaml 里的 sap-btp-project1-dest-content module
- oracle多次发运,Oracle EBS-SQL (OM-4):检查发运网络.sql
- freeswitch 发update sip消息_LeetCode LCP 05——发 LeetCoin
- 0元包邮 | 多传感器融合感知知识导图
- 函数【Python】
- 安卓系统按键映射修改
- python自动化框架pytest pdf_Python自动化测试框架-pytest,python
- expect以及rsync实现远程连接自动推送密码
- 过本命年有什么讲究吗?
- React Native 画虚线 DashLine
- 中美线规线径对照表(详细版)
- Log4j(三)——Log4j配置文件位置详解
- 数列极限的性质与判定
- 高等数学 - 两平面的夹角
- [linux] grep -rn 当前目录搜索字符串
- confluence 下admin用户密码恢复方法