用最速下降法求解无约束非线性规划问题

运 筹 学 实 习 报 告

姓 名: xxxxxxxxxx 学 号: xxxxxxxxxxx 专业班级: xxxxxxxxxxxx 2 0 1 3年 7 月 0 4 日

题目:用最速下降法求解无约束非线性规划问题

摘要:

无约束最优化问题的求解方法分为解析法和直接法两大类。解析法需要计

算函数的梯度,其中最速下降法就属于解析法中的一种。对于一个无约束非线性规划利用最速下降法求解,首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为止。本文通过理论的计算方法,进一步分析,最后用c++编程实现求出允许误差内的最优解。此编程可用于计算符合下列形式的函数求最优解过程:

f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]其中:a[i] (i=0,1,2,3,4,5) 为函数的系数。

本文以“ 李占利 主编,中国矿业大学出版社出版”的《最优化理论与方法》 第五章 “无约束最优化方法,5.1 最速下降法 ”例5—1为实例,首先利用上述迭代的方法,计算出各迭代点的函数值,梯度及其模。然后应用c++语言编程,得到在精度范围内的精确最优解。

*(3)T

xx[0.00823045,0.0329218] C++编程计算的最优解为 : 。

即转化为分数结果为:xx

*(3)

21 。 2434

满足精度要求的模为:

||p(3)||0.0736154

1

10。

关键词:无约束非线性规划 解析法 最速下降法 梯度 模 最优解

一、算法思想

无约束最优化方法中的最速下降法首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为止。主要依据解无约束非线性规划问题的最速下降法计算步骤进行设计算法。 具体步骤如下:

第1步 选取初始点x,给定终止误差 >0,令k=0;

kkf(xk)f(x) 第2步 计算,若,停止迭代,输出x,否则进行第3

步;

kk

pf(x); 第3步 取

f(xkkpk)minf(xkpk)k0

第4步 进行一维搜索,求k,使得,令

xk1xkkpk

,k=k+1。转第2步。

由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点。 依据以上步骤就可以用C++编程实现最速下降法求解最优解的算法。

二、算法流程图

三、程序代码

#include #include

double lamda(double x[2],double p[2],double a[2]) { double lam1,lam2; lam1=(pow(a[0],3)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]); lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2)); double s;

s=-lam2/(2*lam1); return s; }

void main() {

cout

cout>e; cout>m; cin>>n; x[0]=m; x[1]=n; cout>a[i];

p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]); p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]); g[0]=-p[0]; g[1]=-p[1]; i=0; cout

while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i

lamd=lamda(x,g,a); x[0]=x[0]+lamd*g[0]; x[1]=x[1]+lamd*g[1];

s=-lam2/(2*lam1); return s; }

void main() {

cout

cout>e; cout>m; cin>>n; x[0]=m; x[1]=n; cout>a[i];

p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]); p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]); g[0]=-p[0]; g[1]=-p[1]; i=0; cout

while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i

lamd=lamda(x,g,a); x[0]=x[0]+lamd*g[0]; x[1]=x[1]+lamd*g[1];

p[0]=2*a[0]*x[0]; p[1]=2*a[1]*x[1]; g[0]=-p[0]; g[1]=-p[1]; i++;

cout

cout

cout

四、例子与结果

例子为“ 李占利 主编,中国矿业大学出版社出版”的《最优化理论与方法》

第五章 “无约束最优化方法,5.1 最速下降法 ”例5—1。用最速下降法求解



中很明显有:a[0]=2,a[1]=1,a[2]=a[3]=a[4]=a[5]=0;e=0.1;x[0]=x[1]=1;

12

0.1。则体现在程序minf(x)2x12x2,初始迭代点x(0)1,精度为

则程序运行结果为:

12

即在允许的精度范围内minf(x)2x12x2,初始迭代点x(0)1,精度



为0.1。得到在精度范围内的精确最优解为:

*(3)T21*(3)xx[0.008230,40.5032921]8 ,即xx 。

2434

满足精度要求的模为:

||p(3)||0.0736154

1

10。

五、结论与总结

最速下降法为最优化万千方法中的一种,要想更好地利用最优化方法解决我们身边的问题,光靠这一种方法远远不够。因此我必须要好好掌握其他的各种方法。还有通过这次实习让我深深认识到,并不是所有的问题都能够手工完成的,我们平常接触的例题,都非常基础,那完全可以手工计算得到答案,但如果问题比较复杂时,我们是没有办法用手工完成的。所以我们必须借助计算机来解决那些复杂的问题。因此这就要求我们必须要熟练掌握编程技巧,要能够把实际的复杂问题通过编写程序来解决它。还有此次用最速下降法求解最优解的程序,我编的还不够完美,还有很多不足之处,只能用于研究二元函数的最优解问题,不能进行其他的更深入的研究,所以还有很多改进的地方,以后我还要继续努力。 对于编程一定要多练、多动手操作,通过这次实习让我深深地认识到,光靠理论知识是不行的,理论知道再多,如果不动手实践的话照样编不出程序,只有在实践中,在编写程序的过程中我们才能发现自己的不足,才能知道问题出在哪儿。所以无论学习什么编程语言,我今后一定要多动手,今后无论学习什么我都要勤动手,多动手,多写,多练。

六、参考文献

[1]龚尚福,贾澎涛. C/C++语言程序设计 [M].徐州:中国矿业大学出版社,2006.12.

[2]李占利,张卫国. 最优化理论与方法 [M].徐州:中国矿业大学出版社,2012.8. [3]范玉妹,徐尔.数学规划及其应用 [M].北京:冶金工业出版社,2009.9. [4]孙文瑜,徐成贤,朱德通. 最优化方法 [M].北京:高等教育出版社,2004.8.

运 筹 学 实 习 报 告

姓 名: xxxxxxxxxx 学 号: xxxxxxxxxxx 专业班级: xxxxxxxxxxxx 2 0 1 3年 7 月 0 4 日

题目:用最速下降法求解无约束非线性规划问题

摘要:

无约束最优化问题的求解方法分为解析法和直接法两大类。解析法需要计

算函数的梯度,其中最速下降法就属于解析法中的一种。对于一个无约束非线性规划利用最速下降法求解,首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为止。本文通过理论的计算方法,进一步分析,最后用c++编程实现求出允许误差内的最优解。此编程可用于计算符合下列形式的函数求最优解过程:

f(x)=a[0]x1*x1+a[1]x2*x2+a[2]x1*x2+a[3]x1+a[4]x2+a[5]其中:a[i] (i=0,1,2,3,4,5) 为函数的系数。

本文以“ 李占利 主编,中国矿业大学出版社出版”的《最优化理论与方法》 第五章 “无约束最优化方法,5.1 最速下降法 ”例5—1为实例,首先利用上述迭代的方法,计算出各迭代点的函数值,梯度及其模。然后应用c++语言编程,得到在精度范围内的精确最优解。

*(3)T

xx[0.00823045,0.0329218] C++编程计算的最优解为 : 。

即转化为分数结果为:xx

*(3)

21 。 2434

满足精度要求的模为:

||p(3)||0.0736154

1

10。

关键词:无约束非线性规划 解析法 最速下降法 梯度 模 最优解

一、算法思想

无约束最优化方法中的最速下降法首先需要确定其优化方向,此优化方向应该选择为f在当前点处的负梯度方向,利用一维搜索法找出沿此方向上的最小值及其对应点,此后将该点作为新的出发点重复上述过程,直到达到允许的误差为止。主要依据解无约束非线性规划问题的最速下降法计算步骤进行设计算法。 具体步骤如下:

第1步 选取初始点x,给定终止误差 >0,令k=0;

kkf(xk)f(x) 第2步 计算,若,停止迭代,输出x,否则进行第3

步;

kk

pf(x); 第3步 取

f(xkkpk)minf(xkpk)k0

第4步 进行一维搜索,求k,使得,令

xk1xkkpk

,k=k+1。转第2步。

由以上计算步骤可知,最速下降法迭代终止时,求得的是目标函数驻点的一个近似点。 依据以上步骤就可以用C++编程实现最速下降法求解最优解的算法。

二、算法流程图

三、程序代码

#include #include

double lamda(double x[2],double p[2],double a[2]) { double lam1,lam2; lam1=(pow(a[0],3)*x[0]*x[0]+pow(a[1],3)*x[1]*x[1]); lam2=-(pow(a[0]*x[0],2)+pow(a[1]*x[1],2)); double s;

s=-lam2/(2*lam1); return s; }

void main() {

cout

cout>e; cout>m; cin>>n; x[0]=m; x[1]=n; cout>a[i];

p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]); p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]); g[0]=-p[0]; g[1]=-p[1]; i=0; cout

while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i

lamd=lamda(x,g,a); x[0]=x[0]+lamd*g[0]; x[1]=x[1]+lamd*g[1];

s=-lam2/(2*lam1); return s; }

void main() {

cout

cout>e; cout>m; cin>>n; x[0]=m; x[1]=n; cout>a[i];

p[0]=(2*a[0]*x[0]+a[2]*x[1]+a[3]); p[1]=(2*a[1]*x[1]+a[2]*x[0]+a[4]); g[0]=-p[0]; g[1]=-p[1]; i=0; cout

while(sqrt(g[0]*g[0]+g[1]*g[1])>e&&i

lamd=lamda(x,g,a); x[0]=x[0]+lamd*g[0]; x[1]=x[1]+lamd*g[1];

p[0]=2*a[0]*x[0]; p[1]=2*a[1]*x[1]; g[0]=-p[0]; g[1]=-p[1]; i++;

cout

cout

cout

四、例子与结果

例子为“ 李占利 主编,中国矿业大学出版社出版”的《最优化理论与方法》

第五章 “无约束最优化方法,5.1 最速下降法 ”例5—1。用最速下降法求解



中很明显有:a[0]=2,a[1]=1,a[2]=a[3]=a[4]=a[5]=0;e=0.1;x[0]=x[1]=1;

12

0.1。则体现在程序minf(x)2x12x2,初始迭代点x(0)1,精度为

则程序运行结果为:

12

即在允许的精度范围内minf(x)2x12x2,初始迭代点x(0)1,精度



为0.1。得到在精度范围内的精确最优解为:

*(3)T21*(3)xx[0.008230,40.5032921]8 ,即xx 。

2434

满足精度要求的模为:

||p(3)||0.0736154

1

10。

五、结论与总结

最速下降法为最优化万千方法中的一种,要想更好地利用最优化方法解决我们身边的问题,光靠这一种方法远远不够。因此我必须要好好掌握其他的各种方法。还有通过这次实习让我深深认识到,并不是所有的问题都能够手工完成的,我们平常接触的例题,都非常基础,那完全可以手工计算得到答案,但如果问题比较复杂时,我们是没有办法用手工完成的。所以我们必须借助计算机来解决那些复杂的问题。因此这就要求我们必须要熟练掌握编程技巧,要能够把实际的复杂问题通过编写程序来解决它。还有此次用最速下降法求解最优解的程序,我编的还不够完美,还有很多不足之处,只能用于研究二元函数的最优解问题,不能进行其他的更深入的研究,所以还有很多改进的地方,以后我还要继续努力。 对于编程一定要多练、多动手操作,通过这次实习让我深深地认识到,光靠理论知识是不行的,理论知道再多,如果不动手实践的话照样编不出程序,只有在实践中,在编写程序的过程中我们才能发现自己的不足,才能知道问题出在哪儿。所以无论学习什么编程语言,我今后一定要多动手,今后无论学习什么我都要勤动手,多动手,多写,多练。

六、参考文献

[1]龚尚福,贾澎涛. C/C++语言程序设计 [M].徐州:中国矿业大学出版社,2006.12.

[2]李占利,张卫国. 最优化理论与方法 [M].徐州:中国矿业大学出版社,2012.8. [3]范玉妹,徐尔.数学规划及其应用 [M].北京:冶金工业出版社,2009.9. [4]孙文瑜,徐成贤,朱德通. 最优化方法 [M].北京:高等教育出版社,2004.8.


相关内容

  • 最优化工程设计
  • 工程优化设计方法研究报告 一.三种约束方法概述 1.1 Zoutendijk's Method概述 1.1.1算法思想 Zoutendijk's Method称为最速可行方向法.可行方向法是求解如下不等式约束问题: (1-1) 的一种直接算法,这种算法的思路是:从可行域内的一个可行点出发,选择一个合 ...

  • 约束条件下多变量函数的寻优方法
  • 第十章 约束条件下多变量函数 的寻优方法 ● 将非线性规划→线性规划 ● 将约束问题→无约束问题 ● 将复杂问题→较简单问题 10.1约束极值问题的最优性条件 非线性规划:min f(X) h i (X)=0 (i=1,2,„,m) (10.1.1) g j (X)≥0 (j=1,2,„,l) 一. ...

  • 现代设计方法(第二章 优化设计)
  • 1. 直接搜索法.它只利用目标函数值构成的搜索方法,如POWELL ,单纯形法: 2. 梯度法.它需要有目标函数及其导数的解析式. 对于非线性的显函数,且变量数较少或中等的问题,用复合形法或罚函数法(其中尤其是内点罚函数法)的求解效果一般都比较理想,前者求得全域最优解的可能性较大.建议当找不到一个可 ...

  • 最优化基础理论与方法
  • 目录 1.最优化的概念与分类 ................................................................................................................. 2 2. 最优化问题的求解方法 ..... ...

  • 81010218[最优化算法]教学大纲
  • <最优化算法>课程教学大纲 课程编号: 81010218 课程名称:最优化算法 英文名称:Optimization Algorithm 总 学 时:32 学 分:2 适用对象: 信息与计算科学本科专业 先修课程:数学分析(1-3),高等代数(1-2),运筹学 一.课程性质.目的和任务 & ...

  • 结构拓扑优化设计的理论与方法
  • 2011年第1期 2011年1月 化学工程与装备 Chemical Engineering & Equipment 155 结构拓扑优化设计的理论与方法 张德恒,鹿晓阳 (山东建筑大学 力学研究所,山东 济南 250101) 摘 要:从离散结构拓扑优化和连续体结构拓扑优化两个方面,分别对结构 ...

  • 2012--2013运筹学期末考试试题及答案
  • 楚大 2012---2013上学期 经济信息管理及计算机应用系 <运筹学>期末考试试题及答案 学号 一.单项选择题: 1.在下面的数学模型中,属于线性规划模型的为( A ). 22maxS4XYmaxSXYminS2XYminS3XYXY2D.s.t. ...

  • 简单的数学建模
  • 数 学 建 模 最 优 化 问 题 最优化问题 摘 要:自从1946年世界上第一台电子数字计算机诞生以来,计算机技术便以一种势不可挡的速度开始发展,与之伴随的是数学的广泛应用,不仅在工程技术.自然科学等等领域,数学的应用发挥着无与伦比的重要作用,并且在广度和深度上还渗透到了新的领域中,如医学.地质. ...

  • 关于动力配煤的意义及模型讨论
  • 第2期2010年4月 选煤技术 No.2 曼Q垒坠 12010J 02-0051一03 呈堕望!垒曼皇!!Q堕!兰£旦塑Q坠Q壁!垒£生三里!壁 文苹编号:1001-3571 关于动力配煤的意义及模型讨论 余 星,王学敏,彭 迪 (湖南人文科技学院,湖南娄底417000) 摘要:阐述了动力配煤技术的 ...