一、預(yù)備知識(shí)
二、無(wú)約束最優(yōu)化方法的基本結(jié)構(gòu)
三、凸集和凸函數(shù)
四、負(fù)梯度方法和Newton型方法
五、共軛梯度法
六、約束最優(yōu)化問(wèn)題的最優(yōu)性理論
七、罰函數(shù)方法
八、期末復(fù)習(xí)
8.1 知識(shí)點(diǎn)復(fù)習(xí)
8.2 習(xí)題復(fù)習(xí)
8.3 大實(shí)驗(yàn)代碼
8.3.1實(shí)驗(yàn)內(nèi)容
利用Matlab編程,實(shí)現(xiàn)采用簡(jiǎn)單Armijo非精確線搜索求步長(zhǎng)的三種方法:負(fù)梯度法、BFGS法及FR共軛梯度法,并求解如下無(wú)約束優(yōu)化問(wèn)題:
m
i
n
f
(
x
)
=
10
(
x
1
3
?
x
2
)
2
+
(
x
1
?
1
)
2
min f(x) =10(x_1^3-x_2)^2+(x_1-1)^2
minf(x)=10(x13??x2?)2+(x1??1)2
通過(guò)實(shí)驗(yàn)過(guò)程進(jìn)一步理解三種方法的原理和步驟,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析比較。
8.3.2實(shí)驗(yàn)?zāi)康?/h4>
掌握無(wú)約束最優(yōu)化算法的基本架構(gòu),并能熟練使用Matlab軟件實(shí)現(xiàn)一些基本實(shí)用的算法并進(jìn)行數(shù)值試驗(yàn)分析。
8.3.3算法描述
8.3.4程序中的參數(shù)設(shè)置、終止準(zhǔn)則、關(guān)鍵技術(shù)(語(yǔ)句)等說(shuō)明
8.3.5實(shí)驗(yàn)代碼
8.3.5.1 目標(biāo)函數(shù)
%%計(jì)算函數(shù)值
function f=func(X)
f=10.*(X(1).^3-X(2)).^2+(X(1)-1).^2;
end
8.3.5.2 計(jì)算梯度
%計(jì)算梯度值
function g=grd(X)
%計(jì)算梯度表達(dá)式
% syms x1 x2;
% f=10*(x1^3-x2)^2+(x1-1)^2;
% diff(f,x1)
% diff(f,x2)
% ans = 2*x1 - 60*x1^2*(- x1^3 + x2) - 2
% ans = - 20*x1^3 + 20*x2
g=[2*X(1) - 60*X(1).^2*(- X(1).^3 + X(2)) - 2;- 20*X(1).^3 + 20*X(2)];
end
8.3.5.3 Armijo準(zhǔn)則更新步長(zhǎng)
function x=armijo(func,xk,dk,gk)
m=0;max_m=1000;
rho=0.001;alpha=1;belta=0.618;
gd=gk'*dk;
fk=feval(func,xk);%初始化條件
while m<max_m
x=xk+alpha*dk;%試探點(diǎn)
f=feval(func,x);%試探點(diǎn)的函數(shù)值
if f<=fk+alpha*rho*gd%終止條件
break;
end
alpha=alpha*belta;%修改alpha的值
m=m+1;
end
8.3.5.4最速下降法
function [x1 fval1 k1]=fd(x0,func,gfunc,eps,kmax)
k1 = 0;
x1 = x0;%設(shè)置初始條件
while k1 < kmax
g = feval(gfunc,x1);%計(jì)算梯度,x改變時(shí)更新梯度
if norm(g)<eps%迭代終止條件
break;
end
d=-g;%更新方向
x1=armijo(func,x1,d,g);%采用Armijo搜索計(jì)算當(dāng)前點(diǎn)x,最終找到近似最優(yōu)解
k1=k1+1;
end
fval1=feval(func,x1);%計(jì)算目標(biāo)函數(shù)值
8.3.5.5 BFGS法
function [x2,fval2,k2]=bfgs(x0,func,grd,H0,eps,kmax)
k2=0;
H=H0;
x2=x0;
g=feval(grd,x2);%設(shè)置初始條件
while k2<kmax
if norm(g)<eps%終止條件
break;
end
d=-H*g;%更新方向
x_=x2;%原來(lái)的x
x2=armijo(func,x2,d,g);%更新后的x
g_=g;%原來(lái)的g
g=feval(grd, x2);%更新后的梯度
s=x2-x_;
y=g-g_;
if s'*y>0
v=y'*s;
H=H+(1+(y'*H*y)/v)*(s*s')/v-(s*y'*H+H*y*s')/v;
%采用BFGS方法更新H
end
k2=k2+1;
end
fval2=feval(func,x2);%計(jì)算目標(biāo)函數(shù)值
8.3.5.6 FR共軛梯度法
function [x3,fval3,k3]=FR(x0,func,gfunc,eps,kmax)
n=9;k3=0;x3=x0;%設(shè)置初始條件
while k3<kmax
g=feval(gfunc,x3);%更新g
m=g'*g;%更新后的g*g
if norm(g)<eps%終止條件
break;
end
if mod(k3,n)==0%n步重新開(kāi)始策略
d=-g;
else
belta=m/q;%belta的計(jì)算
d=-g+belta*d;%更新d的值
if g'*d>=0
d=-g;
end
end
x3=armijo(func,x3,d,g);%采用Armijo搜索計(jì)算當(dāng)前點(diǎn),最終找到近似最優(yōu)解
q=g'*g;%更新前的g*g
k3=k3+1;
end
fval3=feval(func,x3);%計(jì)算目標(biāo)函數(shù)值
8.3.5.7 主程序
clear;clc
x0=unifrnd(-5,5,2,1);%產(chǎn)生滿足[-5, 5]均勻分布的初始點(diǎn)
%x0=[3.4913;-1.0777];%[-5,5]均勻分布產(chǎn)生的初始點(diǎn)
...x0=[0.2753;-0.1224];x0=[0.1232;1.1167];x0=[-1.1955;0.6782];x0=[-3.7301;4.1338];x0=[1.3236;-4.0246];
...x0=[2.9221;4.3399];x0=[4.5949;1.7874];x0=[1.5574;2.5774];x0=[-4.6429;2.4313];x0=[3.4913;-1.0777]
eps=1.e-8;%設(shè)置精度1.e-4,1.e-5;1.e-6;1.e-7;1.e-8;
kmax=100000;%設(shè)置迭代上限
H0=eye(2);%H初始為一個(gè)2×2的單位矩陣
%%采用Armijo搜索的負(fù)梯度法程序
tic
[x1,fval1,k1]=fd(x0,'func','grd',eps,kmax);
t1=toc;
%%采用Armijo搜索的BFGS法程序
tic
[x2,fval2,k2]=bfgs(x0,'func','grd',H0,eps,kmax)
t2=toc;
%%采用Armijo搜索的FR共軛梯度法程序
tic
[x3,fval3,k3]=FR(x0,'func','grd',eps,kmax);
t3=toc;
SSE1=sqrt(sum((x1-[1;1]).^2,1));%負(fù)梯度法下近似解與精確解的2范數(shù)下的誤差
SSE2=sqrt(sum((x2-[1;1]).^2,1));%BFGS法下近似解與精確解的2范數(shù)下的誤差
SSE3=sqrt(sum((x3-[1;1]).^2,1));%FR共軛梯度法下近似解與精確解的2范數(shù)下的誤差
A=[SSE1 fval1 k1 t1;SSE2 fval2 k2 t2;SSE3 fval3 k3 t3]'%分別記錄【誤差,函數(shù)值,迭代次數(shù),運(yùn)行時(shí)間】
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-783422.html
九、總結(jié)
本篇文章詳細(xì)的講解最優(yōu)化理論的一些常見(jiàn)方法,有了這些基礎(chǔ)的最優(yōu)化知識(shí),方便我們以后深入學(xué)習(xí)最優(yōu)化理論以及人工智能方面的知識(shí)。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-783422.html
到了這里,關(guān)于最優(yōu)化理論筆記及期末復(fù)習(xí)(《數(shù)值最優(yōu)化》——高立)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!