文档介绍:运筹学课程实验报告
姓名:********
学号:********
班级:********
日期:2012/12/17
一、实验目的:
1、掌握求解无约束最优化问题的 F-R共轭梯度法,以及约束最优化问题 Wolfe简约梯度法。
2、学会用MATLAB编程求解问题,并对以上方法的计算过程和结果进行分析。
二、实验原理与步骤:
1、F-R共轭梯度法
基本步骤是在点处选取搜索方向, 使其与前一次的搜索方向关于共轭,即
然后从点出发,沿方向求得的极小值点, 即
如此下去, 得到序列{}。不难求得的解为
注意到的选取不唯一,我们可取
由共轭的定义可得:
共轭梯度法的计算过程如下:
第一步:取初始向量, 计算
第步:计算
2、Wolfe简约梯度法
Wolfe基本计算步骤:
第一步:取初始可行点 x0∈Xl ,给定终止误差ε>0 ,令k:=0;
第二步:设 IBk是xk的 m 个最大分量的下标集,对矩阵A进行相应分解 A=(Bk , Nk);
第三步:计算∇fxk=∇Bfxk∇Nfxk ,然后计算简约梯度rNk=-(Bk-1Nk)T∇Bfxk+∇Nfxk;
第四步:构造可行下降方向 pk. 若||pk||≤ε,停止迭代,输出xk。否则进行第五步。
第五步:进行有效一维搜索,求解minfxk+tpk,得到最优解tk
. 令xk+1=xk+ tkpk , k:=k+1, 转入第二步。
三、实验内容:
1、(运筹学P153页第20题)用F-R法求解
min(1-x1)2+2(x2-x12)2
选取初始点x0=(0,0)T, ε=10-6.
2、(运筹学P154页第25题)用Wolfe法求解以下问题:
minfx1,x2=2x12+2x22-2x1x2-4x1-. x1+x2≤2 x1+5x2≤5 x1≥0, x2≥0
选取初始可行点 x0=(0,0)T, ε=10-6.
四、问题求解:
问题1求解:(F-R法)
程序代码如下:
(1)主函数
syms x1 x2 r;
f=(1-x1)^2+2*(x2-x1^2)^2;
x=[x1,x2];
df=jacobian(f,x);
df=df.';
error=;
x0=[0,0]';
g1=subs(df,x,x0);
k=0;
while(norm(g1)>error)
if k==0
d=-g1;
else
bta=g1'*g1/(g0'*g0);
d=-g1+bta*d0;
end
y=subs(f,x,x0+r*d);
result=jintuifa(y,r);
result2=golden(y,r,result);
step=result2;
x0=x0+step*d;
g0=g1;g1=subs(df,x,x0);
d0=d;k=k+1;
end;
k
x0
(2)子函数
进退法确定一维搜索区间:
function result=jintuifa(y,r)
t0=0; step=;
t1=t0+step;
ft0=subs(y,{r},{t0});
ft1=subs(y,{r},{t1});