首页 > 其他分享 >2023-07-11 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(六)

2023-07-11 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(六)

时间:2023-07-11 17:34:12浏览次数:39  
标签:11 end 07 梯度 肖现 Step 方向 x0 共轭

2023-07-11 《数值优化方法》-庞丽萍,肖现涛-无约束最优化(六)

数值优化方法Matlab共轭梯度法共轭方向法

回顾上节的最速下降法的特征:最速下降法迭代路径呈锯齿状,即. 这一节给出共轭的概念,其是正交性的推广,然后给出共轭方向(梯度)法.

**定义 1.7 ** 设 对称正定矩阵,维非零向量. 如果


那么称向量共轭的 (或共轭).

自然地, 两个向量的共轭可以推广到个向量共轭. 设维非零向量组,如果


那么称共轭的. 即两两共轭.

命题 1.2阶对称正定矩阵,若非零向量组共轭的,则是线性无关的.

证明只需要假设存在一组常数使得向量组线性相关,然后证得即可.

命题 1.3阶对称正定矩阵,若非零向量组共轭的. 若都直交,即, 则.

注意到构成中的一组基(命题 1.2), 则可由表示,由即得.

下面给出共轭方向法的算法:

Step 1. 取初始点, 搜索方向满足, 精度,

Step 2. 若, 置 则停止, 否则转下步.

Step 3. 线搜索:


Step 4. 选取搜索方向满足


其中是对称正定矩阵.

Step 5. 令, 转 Step 2.

上述算法中,令人疑惑的地方在于的选择和搜索方向的计算,其中搜索方向可以由一个线性方程组给出。

那么共轭方向法在什么情况下收敛到最优解呢,下面的定理将给出答案。

定理 1.8维对称正定矩阵, , 是任意初始点. 若搜索方向共轭的, 是精确线搜索步长, 是共轭方向法产生的迭代点, 则有
(1) 对每一个

(2) 算法至多次迭代可得无约束优化问题的最优解.

证明:
(1) 由 以及


反复带入上式,得到

由于共轭的,所以



由于是精确线搜索的步长 (即),因此

(2) 由于共轭,再有可知, 即.

二次终止性 若算法对任意的正定二次函数,从任意初始点出发,都能经过有限步达到其最优点,则称算法具有二次终止性.

正定二次函数中的即可看作是一般可导函数的Hesse矩阵,只不过不被当前迭代点的位置影响.

1. 共轭梯度法

如果在共轭方向发中利用目标函数的梯度来产生共轭方向,那么就称这样的方法维共轭梯度法.

下面给出生成正定二次函数的共轭梯度方向的方法.

给定初始点, . 如果对于第次迭代,是精确线搜索步长,要求共轭的且是下降方向,假设


通过选择合适的, 可以使得与之前的 共轭, 因此有

这就确定了下一步的下降方向.

上述公式中每一步的下降方向都与前面所有的下降方向有关,且需要计算当前点的Hesse矩阵,使得算法的复杂性较高. 下面给出一些更简单的下降方向的计算方法.

定理 1.9维对称正定矩阵, , 是任意初始点. 若搜索方向如, 是精确搜索步长,是由共轭梯度法产生的迭代点,则
(1) ;
(2) ;
(3) .

证明: (1) 由于, 因此


又由于共轭方向法都有对:每一个

因此

(2) 由,


以及

因此

由 (1) 可知分式上半部分为0, 因此 (2) 成立.

(3)


带入以及定理 1.8 的(1)即得
.

通过上面的证明能够得到几种不同的下降方向迭代格式:


其中在不同取值下有

  1. Fletcher-Reeves公式(FR公式)
  2. Crowder-Wolf 公式
  3. Polak-Ribiere-Polyak 公式
  4. Dixon 公式
  5. Dai-Yuan 公式

上面五个公式虽然形式有所不同,但是都是在定理1.9证明中出现过的等价形式,即目标函数是正定二次函数且采用精确线搜索时,这些公式是等价的. 但是对于一般的优化问题,上述搜索方向并不等价.

由于共轭方向对多能生成个,因此对于一般目标函数当迭代次数大于时需要重置下降方向,如下所示

算法 7 FR共轭梯度法
Step 1. 选取初始点, 给定精度.

Step 2. 计算, 置.

Step 3. 做线搜索


得到.

Step 4. 如果, 则停止算法, ; 否则转下步.

Step 5. 如果, 则令, 转Step 1.; 否则转下步.

Step 6. 计算


, 转Step 2.

定理 1.10 设无约束优化问题的目标函数连续可微且有下界,梯度是Lipschitz连续. 若采用精确线搜索的FR共轭梯度法产生无穷点列, 则.

定理 1.10 说明FR共轭梯度法对于一般的连续可微有下界函数是可以收敛到局部最优解的,FR最开始提出可能是 Function minimization by conjugate gradients, Fletcher and Reeves. 070149.pdf 3.21 MB

下面是FR共轭梯度法的Matlab实现

  1. % Fletcher-Reeves 共轭梯度法 
  2. function [x xlog] = FRCG(f, x0, epsilon) 
  3. % f 目标函数,函数句柄 
  4. % g 梯度函数 函数句柄 
  5. % epsilon 精度要求 
  6. % method 线搜索方法 
  7. k = 0; 
  8. iter = 0; 
  9. maxIt = 1e4; 
  10. n = length(x0); 
  11. d1 = - My_Gradient(f, x0); 
  12. while iter <= maxIt 
  13. [alpha tx] = SuccFa(f, 1, x0, d1, 1, epsilon, 1e4); 
  14. x1 = x0 + alpha * d1; 
  15. d2 = My_Gradient(f, x1); 
  16. xlog(iter+1) = norm(d2); 
  17. x = x1; 
  18. x0 = x1; 
  19. if norm(d2) < epsilon 
  20. break 
  21. end 
  22. if k+1 == n 
  23. d1 = - My_Gradient(f, x0); 
  24. k = 0; 
  25. else 
  26. d1 = - d2 + d1 * norm(d2)^2/norm(d1)^2; 
  27. k = k+1; 
  28. end 
  29. iter = iter + 1; 
  30. end 
  31. end 
  32.  
  33. function [alphak xlog] = SuccFa(fun, alpha, x0, diff_x, h, epsil, maxIt) 
  34. k = 0; 
  35. xlog = alpha; 
  36. while k <= maxIt 
  37. alphak = alpha + h; 
  38. if fun(x0 + alphak * diff_x) < fun(x0 + alpha * diff_x) 
  39. h = 2 * h; 
  40. alpha = alphak; 
  41. else 
  42. h = - h / 4; 
  43. end 
  44. k = k + 1; 
  45. xlog(k) = alphak; 
  46. if abs(h) < epsil 
  47. break 
  48. end 
  49. end 
  50. end 
  51.  
  52. function [x] = F_alpha(alpha) 
  53. x = f(x0 + alpha * diff_x); 
  54. end 
  55.  
  56.  
  57. function [gd] = My_Gradient(f, x) 
  58. gd = x; 
  59. epsil = 1e-5; 
  60. d = [-2* epsil, -epsil 0 epsil 2*epsil]; 
  61. tx = [x x x x x]; 
  62. fx = [0,0,0,0,0]; 
  63. for i = 1:length(x) 
  64. tx(i,:) = tx(i,:) + d; 
  65. for h = 1:5 
  66. fx(h) = f(tx(:,h)); 
  67. end 
  68. gf = gradient(fx); 
  69. gd(i) = gf(3); 
  70. end 
  71. end 

测试程序

  1. f = @(x) sin(x(1)) + cos(x(2)); 
  2. x0 = [1, 1]'; 
  3. epsilon = 1e-6; 
  4. [x xlog] = FRCG(f, x0, epsilon) 
  5.  
  6. %% 书上的例子 
  7. f = @(x) 2*x(1)^4 - 4 * x(1)^2*x(2) + x(1)^2 + 2* x(2)^2-2*x(1)+5; 
  8. x0 = [0 ,0]'; 
  9. epsilon = 1e-6; 
  10. [x xlog] = FRCG(f, x0, epsilon) 

结果表明我们编写的程序确实收敛到了最优解.

标签:11,end,07,梯度,肖现,Step,方向,x0,共轭
From: https://www.cnblogs.com/NEFPHYS/p/17545399.html

相关文章

  • 行业追踪,2023-07-11,新增加 rps50 排名,汽车零部件回落 10 日均线,直接反弹
    自动复盘2023-07-11成交额超过100亿排名靠前,macd柱由绿转红成交量要大于均线有必要给每个行业加一个上级的归类,这样更能体现主流方向rps有时候比较滞后,但不少是欲杨先抑,应该持续跟踪,等macd反转时参与一线红:第一次买点出现后往往是顶峰,等回调,macd反转,rps50还一直红......
  • 202307 成都集训游记
    题单内容总结:20230708数据结构-金天Treasure-HDU7144Fightandupgrade-HDU7181长存不灭的过去、逐渐消逝的未来-LGP5067DataStructureQuiz-Baekjoon18756小球进洞-LOJ578DuffisMad–CF587FBreadboardCapacity-CF1368H2BearandBowling-CF......
  • 7.11
    十、打印对象classStudent{   publicStringname;   publicintage;   publicdoubleweight;    publicStudent(Stringname,intage,doubleweight){       this.name=name;       this.age=age;       this.wei......
  • (2023.7.11)usb: ring buffer full
    现象:在对usb接口的5G模组灌包时出现异常打印,xhci-hcdxhci-hcd.0.auto:ERRORunkown eventtype37/USBGadgetDriver定义了很多traceevent,使用者可以在用户空间通过ftrace接口,追踪USBGadgetDriver的行为;/用户空间接口路径为/sys/kernel/debug/tracing/events/dwc3:包含了......
  • poj 1182 食物链 并查集
    食物链TimeLimit:1000MSMemoryLimit:10000KTotalSubmissions:56297Accepted:16500Description动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形。A吃B,B吃C,C吃A。现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种......
  • abc078d <博弈>
    D-ABS//https://atcoder.jp/contests/abc078/tasks/arc085_b//<博弈>//思路://首先注意到两点://1.a[n]一定会是游戏结束时某个人的数字//2.对于先手,他可以直接导致两种确定的游戏结果//1.a[n],w(先手选择a[n],游戏结束)//2.a[n-1],a[......
  • 107.你知道静态绑定和动态绑定吗?讲讲?
    107.你知道静态绑定和动态绑定吗?讲讲?1.对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2.对象的动态类型:目前所指对象的类型。是在运行期决定的。对象的动态类型可以更改,但是静态类型无法更改。3.静态绑定:绑定的是对象的静态类型,某特性(比如函数依赖于对象的静态类型......
  • 7.11
    上午去了邢台南和参加科目一考试在那里等了好久好久都有点不耐烦了从八点半等到了十点多才开始考感觉脑子里的东西忘得很快但是好消息是顺利地考完了93分顺利通过下午也是按照进度学习了功课......
  • 1141-查询近30天活跃用户数
    查询近30天活跃用户数原文地址:1141.查询近30天活跃用户数-力扣(LeetCode)题目如下所示个人题解这题主要考察MySQL中DATE数据类型的操作和GROUPBY用法。个人思考过程如下所示--1.建表CREATETABLE1141_Activity( user_idINT, session_idINT, activit......
  • 2023.7.11
    学习java类中的方法方法的声明:权限修饰符 返回值类型 方法名(形参列表){方法体}方法的说明:关于权限修饰符:Java规定的4种权限修饰符:private、public、缺省、protected如果方法有返回值,则必须在方法声明时,指定返回值的类型。同时,方法中,需要使用return关键字来返回指定类型的......