拟牛顿法求解优化问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机械设计优化大作业
摘要:拟牛顿法是求解优化问题的一种重要方法,本文在Matlab平台上,运用拟牛顿法对最小值问题进行了无约束优化求解。计算结果表明,拟牛顿法能够比较精确地计算函数的极小值。
关键词:拟牛顿法,最小值
1 概述
随着计算机技术的飞速发展和数值计算方法的广泛应用,工程设计领域在设计方法和技术创新方面有了巨大发展和进步,这也大大推动了现代工程领域的技术进步和创新。优化设计就是其中发展最快的设计方法之一。
优化设计是20世纪60年代初发展起来的一门新兴学科,他将数学中的最优化理论与工程设计领域相结合,使人们在解决工程设计问题时,可以从无数设计方案中找到最优或尽可能完善的设计方案,大大提高了工程的设计效率和设计质量。目前,优化设计是工程设计中的一种重要方法,已经广泛应用于各个工程领域——航空航天、机械、船舶、交通、电子、通讯、建筑、纺织、冶金、是有、管理等,并产生了巨大的经济效益和社会效益。特别是由于现代国家、地区和企业之间的激烈竞争,各种原材料、能源的短缺,优化设计越来越受到人们广泛的重视,并成为21世纪工程设计人员必须掌握的的一种设计方法。
优化设计工作中,针对具体设计问题是否选择了合适的优化方法,相应的计算程序是否有效.数学模型构造是否合理,能否充分反映实际问题且尽量简化,这些都直接关系到优化设计进程和机械设计结果。目前,常用的机械优化设计过程:①分析设计变量,提出目标函数,确定约束条件,建立优化设计的数学模型;
②选择适当的优化方法,编写优化程序;③准备必须的初始数据并上机计算,对计算机求得的结果进行必要的分析。
2 拟牛顿法简介
拟牛顿法(Quasi-Newton Methods)是求解非线性优化问题最有效的方法之一,于20世纪50年代由美国Argonne国家实验室的物理学家W. C. Davidon 所提出来。Davidon设计的这种算法在当时看来是非线性优化领域最具创造性的发明之一。不久R. Fletcher和M. J. D. Powell证实了这种新的算法远比其他方法快速和可靠,使得非线性优化这门学科在一夜之间突飞猛进。在之后的20年里,拟牛顿方法得到了蓬勃发展,出现了大量的变形公式以及数以百计的相关论文。
拟牛顿法和最速下降法(Steepest Descent Methods)一样只要求每一步迭代时知道目标函数的梯度。通过测量梯度的变化,构造一个目标函数的模型使之足以产生超线性收敛性。这类方法大大优于最速下降法,尤其对于困难的问题。另外,因为拟牛顿法不需要二阶导数的信息,所以有时比牛顿法(Newton's Method)更为有效。如今,优化软件中包含了大量的拟牛顿算法用来解决无约束,约束,和大规模的优化问题。
拟牛顿法的基本思想如下。首先构造目标函数在当前迭代$x_k$的二次模型:m_k(p)=f_k+g_k^T p+p^T B_k p/2,这里f_k=f(x_k),g_k=▽f(x_k),B_k 是一个对称正定矩阵。于是我们取这个二次模型的最优解p_k=-B_k^{-1} g_k 作为搜索方向,并且得到新的迭代点x_{k+1}=x_k+a_k p_k ,其中我们要求步长a_k 满足Wolfe 条件。这样的迭代类似与牛顿法,区别就在于用近似的Hesse 矩阵B_k 代替真实的Hesse 矩阵。所以拟牛顿法最关键的地方就是每一步迭代中矩阵B_k 的更新。现在假设得到一个新的迭代x_{k+1},并得到一个新的二次模型:m_{k+1}(p)=f_{k+1}+g_{k+1}^T p + p^T B_{k+1} p/2。我们尽可能地利用上一步的信息来选取B_{k+1}。具体地,我们要求g_{k+1}-g_k=a_k B_{k+1} p_k ,从而得到B_{k+1}s_k=y_k ,其中s_k=x_{k+1}-x_k ,y_k=g_{k+1}-g_k 。这个公式被称为割线方程。
3.1 具体算例提出
224412342314min ()(10)5()(2)10()f x x x x x x x x x =++-+-+-
初始点:
00[3101],()215T x f x =-=
3.2 拟牛顿法优化流程图
3.3 编程
借助MATLAB软件进行了相关求解,其M文件程序如下:function f = objfun(x)
f = (x(1)+10*x(2))^2 +5*(x(3)-x(4))^2+(x(2)-2*x(3))^4+10*(x(1)-x(4))^4; x0 = [3,-1,0,1]; % Startin
g guess
options = optimset('Display','iter','TolFun',1e-8);
[x,fval,exitflag,output] = fminunc(@objfun,x0,options);
3.4 结果分析
MATLAB软件计算结果和处理分析结果分别如表1和图2所示:
表1 计算结果
Iteration Func-count f(x) Step-size infinity-norm
0 5 215 310
1 10 31.1301 0.00322581 67.5
2 15 19.1597 1 21.8
3 20 14.7875 1 17
4 2
5 11.9038 1 17.2
5 30 8.31909 1 16.5
6 35 7.50576 1 7.12
7 40 6.87303 1 5.15
8 45 6.41907 1 8.89
9 50 4.79648 1 16.6
10 55 3.10014 1 16.7
11 60 1.33439 1 9.13
12 65 0.49174 1 3.83
13 70 0.229551 1 2.46
14 75 0.101587 1 2.42
15 80 0.0519105 1 1.26
16 85 0.0431419 1 0.519
17 90 0.0389647 1 0.549
18 95 0.0316019 1 0.869
19 100 0.0203066 1 1.26
20 105 0.00792415 1 1
21 110 0.00162445 1 0.315
22 115 0.000517765 1 0.0419
23 120 0.00029596 1 0.117
24 125 0.000125548 1 0.106
25 130 3.33499e-005 1 0.0414
26 135 9.91503e-006 1 0.00112
27 140 4.44101e-006 1 0.0113
28 145 1.69096e-006 1 0.00963
29 150 4.73249e-007 1 0.00324
30 155 1.53806e-007 1 0.000446
31 160 6.23743e-008 1 0.00129
32 165 2.15312e-008 1 0.000878
33 170 6.38904e-009 1 0.000217
34 175 2.23596e-009 1 9.78e-005
35 180 8.47869e-010 1 0.000146
36 185 2.64596e-010 1 7.94e-005
37 190 6.59852e-011 1 8.21e-006
38 195 1.16442e-011 1 2.58e-005