最优化方法实验报告.docx
- 文档编号:6141440
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:30
- 大小:1.11MB
最优化方法实验报告.docx
《最优化方法实验报告.docx》由会员分享,可在线阅读,更多相关《最优化方法实验报告.docx(30页珍藏版)》请在冰豆网上搜索。
最优化方法实验报告
最优化方法实验报告
optimizationmethodExperimentReport
学生所在学院:
理学院
学生所在班级:
信息1
学生姓名:
教务处
20014年5月
最优化方法实验报告书
说明:
1.下面程序在MATLABR2012a中均能正常运行。
2.程序之间有关联。
实验一 熟悉MATLAB基本功能(2学时)
实验的目的和要求:
在本次实验中,通过亲临使用MATLAB,对该软件做一全面了解并掌握重点内容。
实验内容:
1、全面了解MATLAB系统
2、实验常用工具的具体操作和功能
学习建议:
本次实验在全面了解软件系统基础之上,学习和熟悉一些MATLAB的基础用途,重点掌握优化工具箱函数选用的内容。
重点和难点:
优化工具箱函数选用。
利用Matlab的优化工具箱,可以求解线性规划、非线性规划和多目标规划问题。
具体而言,包括线性、非线性最小化,最大最小化,二次规划,半无限问题,线性、非线性方程(组)的求解,线性、非线性的最小二乘问题。
另外,该工具箱还提供了线性、非线性最小化,方程求解,曲线拟合,二次规划等问题中大型课题的求解方法,为优化方法在工程中的实际应用提供了更方便快捷的途径。
优化工具箱中的函数
优化工具箱中的函数包括下面几类:
1.最小化函数
表1最小化函数表
函 数
描 述
fgoalattain
多目标达到问题
fminbnd
有边界的标量非线性最小化
fmincon
有约束的非线性最小化
fminimax
最大最小化
fminsearch,fminunc
无约束非线性最小化
fseminf
半无限问题
linprog
线性课题
quadprog
二次课题
2.方程求解函数
表2方程求解函数表
函 数
描 述
/
线性方程求解
fsolve
非线性方程求解
fzero
标量非线性方程求解
3.最小二乘(曲线拟合)函数
表3最小二乘函数表
函 数
描 述
/
线性最小二乘
lsqlin
有约束线性最小二乘
lsqcurvefit
非线性曲线拟合
lsqnonlin
非线性最小二乘
lsqnonneg
非负线性最小二乘
4.实用函数
表4实用函数表
函 数
描 述
optimset
设置参数
optimget
5.大型方法的演示函数
表5大型方法的演示函数表
函 数
描 述
circustent
马戏团帐篷问题—二次课题
molecule
用无约束非线性最小化进行分子组成求解
optdeblur
用有边界线性最小二乘法进行图形处理
6.中型方法的演示函数
表6中型方法的演示函数表
函 数
描 述
bandemo
香蕉函数的最小化
dfildemo
过滤器设计的有限精度
goaldemo
目标达到举例
optdemo
演示过程菜单
tutdemo
教程演示
下面以我们最常用的线性规划模型求解函数linprog作为典型对优化工具箱进行简单的介绍。
linprog函数
功能:
求解线性规划问题。
在命令窗口,键入doclinprog,得到下图(该图为帮助窗口)
数学模型:
其中f, x, b, beq, lb和ub为向量,A 和Aeq为矩阵。
语法:
x=linprog(f,A,b,Aeq,beq)
x=linprog(f,A,b,Aeq,beq,lb,ub)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)
[x,fval]=linprog(...)
[x,fval,exitflag]=linprog(...)
[x,fval,exitflag,output]=linprog(...)
[x,fval,exitflag,output,lambda]=linprog(...)
描述:
x=linprog(f,A,b)求解问题minf'*x,约束条件为A*x<=b。
x=linprog(f,A,b,Aeq,beq)求解上面的问题,但增加等式约束,即Aeq*x=beq。
若没有不等式存在,则令A=[]、b=[]。
x=linprog(f,A,b,Aeq,beq,lb,ub)定义设计变量x的下界lb和上界ub,使得x始终在该范围内。
若没有等式约束,令Aeq=[]、beq=[]。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0)设置初值为x0。
该选项只适用于中型问题,缺省时大型算法将忽略初值。
x=linprog(f,A,b,Aeq,beq,lb,ub,x0,options)用options指定的优化参数进行最小化。
[x,fval]=linprog(...)返回解x处的目标函数值fval。
[x,lambda,exitflag]=linprog(...)返回exitflag值,描述函数计算的退出条件。
[x,lambda,exitflag,output]=linprog(...)返回包含优化信息的输出变量output。
[x,fval,exitflag,output,lambda]=linprog(...)将解x处的拉格朗日乘子返回到lambda参数中。
变量:
lambda参数
lambda参数是解x处的拉格朗日乘子。
它有以下一些属性:
lambda.lower –lambda的下界。
lambda.upper –lambda的上界。
lambda.ineqlin –lambda的线性不等式。
lambda.eqlin –lambda的线性等式。
其它参数意义同前。
算法:
大型优化算法 大型优化算法采用的是LIPSOL法,该法在进行迭代计算之前首先要进行一系列的预处理。
中型优化算法 linprog函数使用的是投影法,就象quadprog函数的算法一样。
linprog函数使用的是一种活动集方法,是线性规划中单纯形法的变种。
它通过求解另一个线性规划问题来找到初始可行解。
诊断:
大型优化问题 算法的第一步涉及到一些约束条件的预处理问题。
有些问题可能导致linprog函数退出,并显示不可行的信息。
在本例中,exitflag参数将被设为负值以表示优化失败。
若Aeq参数中某行的所有元素都为零,但Beq参数中对应的元素不为零,则显示以下退出信息:
Exitingduetoinfeasibility:
anallzerorowintheconstraintmatrixdoesnothaveazeroincorrespondingrighthandsizeentry.
若x的某一个元素没在界内,则给出以下退出信息:
Exitingduetoinfeasibility:
objectivef'*xisunboundedbelow.
若Aeq参数的某一行中只有一个非零值,则x中的相关值称为奇异变量。
这里,x中该成分的值可以用Aeq和Beq算得。
若算得的值与另一个约束条件相矛盾,则给出以下退出信息:
Exitingduetoinfeasibility:
Singletonvariablesinequalityconstraintsarenotfeasible.
若奇异变量可以求解但其解超出上界或下界,则给出以下退出信息:
Exitingduetoinfeasibility:
singletonvariablesintheequalityconstraintsarenotwithinbounds.
应用实例
这是matlab帮助窗口里给出的一个例子:
Findxthatminimizes
f(x)=–5x1–4x2–6x3,
subjectto
x1–x2+x3≤20
3x1+2x2+4x3≤42
3x1+2x2≤30
0≤x1,0≤x2,0≤x3.
First,enterthecoefficients
f=[-5;-4;-6];
A=[1-11
324
320];
b=[20;42;30];
lb=zeros(3,1);
Next,callalinearprogrammingroutine.
[x,fval,exitflag,output,lambda]=linprog(f,A,b,[],[],lb);
ExaminethesolutionandLagrangemultipliers:
x,lambda.ineqlin,lambda.lower
x=
0.0000
15.0000
3.0000
ans=
0.0000
1.5000
0.5000
ans=
1.0000
0.0000
0.0000
下面在来用linprog解我们最优化考试的题:
Minf(x)=-3x1+x2+x3;
S.T.x1–2*x2+x3<=11
-4*x1+x2+2*x3–x4=3
-2*x1+x3=1
X1,x2,x3,x4>=0;
在matlabcommandwindow中键入以下指令:
f=[-3;1;1];
>>A=[1-21;4-1-2];
>>b=[11;-3];
>>Aeq=[-201];
>>beq=1;
>>lb=zeros(3,1);
>>[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb)
Optimizationterminated.
x=
4.0000
1.0000
9.0000
fval=
-2.0000
exitflag=
1
实验二 一维搜索方法的MATLAB实现(2学时)
实验的目的和要求:
通过本次实验应使学生掌握如何使用MATLAB软件进行一维搜索,并学会对具体问题进行分析。
实验内容:
1、0.618法的MATLAB实现
2、Fibonacci法的MATLAB实现
学习建议:
本次实验是学生初次使用MATLAB进行优化问题的实验,本次实验就是要通过对一些具体问题的分析学会软件的操作并加深对理论知识的理解。
重点和难点:
具体问题的步长因子的确定,理解、掌握精度与效率的关系。
实验内容:
0.618法和Fibonacci法都是分割方法,其基本思想是通过取试探点和进行函数值的比较,使包含极小点的搜索区间不断缩短,当区间长度缩短到一定程度时,区间上每个点的函数值均接近极小值,从而各点可以看作为极小点的近似。
这类方法仅需计算函数值,不涉及导数,又称直接法。
他们用途很广,尤其适用于非光滑及导数表达式复杂或写不出的情形。
注意,这些方法要求所考虑区间上的目标函数是单峰函数,如果这个条件不满足,我们可以把所考虑的区间分成若干个小区间,在每个区间上的函数式单峰的。
这样,我们在每个小区间上求极小点,然后选取其中的最小点。
一0.618法
1.0.618法方法原理:
0.618法的基本思想是通过取试探点使包含极小点的区间(不确定区间)不断缩短,当区间长度小到一定程度时,区间上各点的函数值均接近极小值,因此任意一点都可作为极小点的近似.
0.618法计算试探点的公式:
2.0.618法的算法步骤:
置初始区间
及精度要求
计算试探点
和
计算函数值
和
.计算公式是
令
.
若
则停止计算.否则,当
时,转步骤
;当
时,转步骤
.
置
计算函数值
转步骤
.
置
计算函数值
转步骤
.
置
返回步骤
.
MATLAB实现:
3.代码及数值算例:
(1)程序源代码:
function[X,FMIN,K]=find0618(f,a1,b1,e)
%[X,FMIN,K]=find0618(f,a1,b1,e)0.618法一维搜索
%f目标函数
%a1,b1初始区间
%e精度要求
%X极小点
%FMIN极小值
%K迭代次数
%2014张超
a=a1;b=b1;k=1;
r=a+0.328*(b-a);
u=a+0.618*(b-a);
while1
iff(r)>f(u)
if(b-r)<=e
u;
break;
else
a=r;b=b;r=u;u=a+0.618*(b-a);
end
elseif(u-a)<=e
r;
break;
else
a=a;b=u;u=r;r=a+0.382*(b-a);
end
k=k+1;
end
X=(r+u)/2;
FMIN=double(f(X));
K=k;
end
(2)数值算例:
Minf(x)=2*x*x–x–1;
初始区间
精度e<=0.16.
键入命令并输出结果:
symsx
f(x)=2*x^2-x-1;
a1=-1;b1=1;
e=0.16;
[X,FMIN,K]=find0618(f,a1,b1,e)
X=
0.2258
FMIN=
-1.1238
K=
6
二Fibonacci法
1.Fibonacci法基本原理和步骤
思想:
搜索区间长度缩短率采用Fibonacci数
1123581321345589……
MATLAB实现:
2.代码及数值算例:
(1)程序源代码:
function[X,Fmin,K]=fibonacci(f,a0,b0,e)
%fibonacci()Fibonacci法求极小值
%X极值点
%Fmin极小值
%K需要用到第K个Fibonacci数
%a0,b0初始搜索区间
%e精度
%张超编写于2014/04/01
a=a0;b=b0;
F=[11];
i=1;
whileF(i)<=(b-a)/e
F(i+2)=F(i)+F(i+1);
i=i+1;
end
m=i;
r=a+F(m-2)/F(m)*(b-a);
u=a+F(m-1)/F(m)*(b-a);
fork=1:
m-3
iff(r) a=a;b=u;u=r;r=a+F(m-k-2)/F(m-k)*(b-a); else a=r;b=b;r=u;u=a+F(m-k-1)/F(m-k)*(b-a); end end X=(r+u)/2; Fmin=double(f(X)); K=m; end (2)数值算例: Minf(x)=x*x–x+2; 初始区间 精度e<=0.08. 容易验证,在此区间上的函数为严格凸函数。 为了进行 比较我们给出其精确解: t*=0.5,f(t*)=1.75。 键入命令并输出结果: symsx f(x)=x^2-x+2; a1=-1;b1=3; e=0.08; [X,FMIN,K]=fibonacci(f,a1,b1,e) X= 0.5273 FMIN= 1.7507 K= 10 实验三 无约束最优化方法的MATLAB实现(2学时) 实验的目的和要求: 通过本次实验使学生进一步熟悉掌握使用MATLAB软件,并能利用该软件进行无约束最优化方法的计算。 实验内容: 1、最速下降法的MATLAB实现 2、牛顿法的MATLAB实现 3、共轭梯度法的MATLAB实现 学习建议: 本次实验就是要通过对一些具体问题的分析进一步熟悉软件的操作并加深对理论知识的理解。 重点和难点: 通过同一个具体问题用不同的方法解决的比较,加深理解恰当选用优化问题解决方法的重要性。 一最速下降法 1.最速下降法基本原理和步骤 思想: 寻求最速下降方向即负梯度方向 MATLAB实现: 2.代码及数值算例: (1)程序源代码: function[X,FMIN,K]=zuisuxiajiang(f,x,x0,e) %[X,FMIN,N]=zuisuxiajiang()法求解无约束问题 %X极小点 %FMIN极小值 %K迭代次数 %f问题函数 %x变量 %x0初始点 %e终止误差 %张超编写于2014/04/15 count=0; td=jacobian(f,x)'; whilenorm(subs(td,x,x0))>e P=-subs(td,x,x0); symsr y=x0+r*P; ft(r)=subs(f,x,y); [r0]=fibonacci(ft,0,100,0.01); x0=x0+r0*P; count=count+1; end X=x0; FMIN=subs(f,x,x0); K=count; end 二牛顿法 1.牛顿法基本原理和步骤 思想: 在第k次迭代的迭代点x(k)邻域内,用一个二次函数(如二阶泰勒多项式)去近似代替原目标函数f(x),然后求出该二次函数的极小点作为对原目标函数求优的下一个迭代点,依次类推,通过多次重复迭代,使迭代点逐步逼近原目标函数的极小点。 设f(x)二次连续可微,在点x(k)处的Hesse矩阵正定。 MATLAB实现: 2.代码及数值算例: (2)程序源代码: function[X,FMIN,K]=ysNewton(f,x,x0,e) %[X,FMIN,N]=ysNewton()原始牛顿法求解无约束问题 %X极小点 %FMIN极小值 %K迭代次数 %f问题函数 %x变量 %x0初始点 %e终止误差 %张超编写于2014/04/15 count=0; td=jacobian(f,x)'; H=jacobian(td',x); whilenorm(subs(td,x,x0))>e P=-subs(H,x,x0)^(-1)*subs(td,x,x0); x0=x0+P; count=count+1; end X=x0; FMIN=subs(f,x,x0); K=count; end 牛顿法对于二次正定函数只需做一次迭代就得到最优解。 特别在极小点附近,收敛性很好速度也很快。 但牛顿法也有缺点,它要求初始点离最优解不远,若初始点选的离最优解太远时,牛顿法并不能保证其收敛,甚至也不是下降方向。 为了克服牛顿法的缺点,人们保留了从牛顿法中选取牛顿方向作为搜索方向,摒弃其步长恒取1的作法,而用一维搜索确定最优步长来构造算法。 (3)程序源代码: function[X,FMIN,K]=xzNewton(f,x,x0,e) %[X,FMIN,N]=xzNewton()带步长牛顿法求解无约束问题 %X极小点 %FMIN极小值 %K迭代次数 %f问题函数 %x变量 %x0初始点 %e终止误差 %张超编写于2014/04/15 count=0; td=jacobian(f,x)'; H=jacobian(td',x); whilenorm(subs(td,x,x0))>e P=-subs(H,x,x0)^(-1)*subs(td,x,x0); symsr y=x0+r*P; ft(r)=subs(f,x,y); [r0]=fibonacci(ft,0,100,0.01); x0=x0+r0*P; count=count+1; end X=x0; FMIN=subs(f,x,x0); K=count; end 三共轭梯度法 1.共轭梯度法基本原理和步骤 思想: 将共轭性和最速下降方向相结合,利用已知迭代点处的梯度方向构造一组共轭方向,并沿此方向进行搜索,求出函数的极小点。 MATLAB实现: 2.代码及数值算例: (1)程序源代码: function[X,FMIN,K]=gongetidu(f,x,x0,e) %[X,FMIN,N]=gongetidu()共轭梯度法求解无约束问题 %X极小点 %FMIN极小值 %K迭代次数 %f问题函数 %x变量 %x0初始点 %e终止误差 %张超编写于2014/04/15 count=1; td=jacobian(f,x)'; H=jacobian(td',x); ifnorm(subs(td,x,x0))>e P=-subs(td,x,x0); r0=-subs(td,x,x0)'*P/(P'*H*P); x0=x0+r0*P; else x0; end whilenorm(double(subs(td,x,x0)))>e b0=subs(td,x,x0)'*subs(td,x,x0)/(P'*P); P=-subs(td,x,x0)+b0*P; r0=-subs(td,x,x0)'*P/(P'*H*P); x0=x0+r0*P; count=count+1; end X=x0; FMIN=subs(f,x,x0); K=count; end 四一个算例 分别用上述三中方法计算下题,并比较各算法. Minf(x)=(x1-2)^2+(x1–2*x2)^2 初始点x0=(0,3)T 允许误差e=0.1 键入命令并输出结果: symsx1x2 >>f=(x1-2)^2+(x1-2*x2)^2; >>x=[x1;x2]; >>x0=[0;3]; >>e=0.1; [X,FMIN,N]=zuisuxiajiang(f,x,x0,e) X= 1.9763 0.9818 FMIN= 7.2076e-04 N= 10 >>[X,FMIN,N]=ysNewton(f,x,x0,e) X= 2 1 FMIN= 0 N= 1 [X,FMIN,N]=gongetidu(f,x,x0,e) X= 2 1 FMIN= 0 N
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优化 方法 实验 报告