Tải bản đầy đủ (.pdf) (33 trang)

Tài liệu CHƯƠNG 8: TỐI ƯU HOÁ pptx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (405.62 KB, 33 trang )


370
CHƯƠNG 8: TỐI ƯU HOÁ

§1.KHÁINIỆMCHUNGVỀTỐIƯUHOÁ
 Tốiưuhoálàthuậtngữthườngđượcdùngđểcựctiểuhoáhaycựcđại
hoámộthàm.Thôngthườngtachỉcầntìmcựctiểu mộthàm
làđủ.Việctìm
cựcđạicủaf(x)thựchiệnmộtcáchđơngiảnbằngcáchtìmcựctiểu củahàm
−f( x).Hàmflàhàmgiátrịhayhàmđốitượng,cầnđượcgiữcựctiểu.Biếnx
làbiếncóthểhiệuchỉnhtựdo.
 Cácthuậttoáncựctiểu hoálàcácthủthuậtlặpđ
òihỏimộtgiátrịban 
đầucủabiếnx.Nếuf(x)cónhiềucực tiểuđịaphương,việcchọngiátrịđầusẽ
xácđịnhcựctiểunàođượctính.Takhôngcócáchnàobả
ođảmlàtìmđược
cựctiểutoàncục.
 Các biến có thể bị ràng buộc bằng cácđẳng thức hay bấtđẳng thức.
Phầnlớncácphươngpháplàtìmcựctiểukhôngràngbuộ
c,nghĩalàkhôngcó
hạnchếnàođốivớibiếnx.Cácbàitoánnàybaogồmtìmcựctiểucủa hàm,
tìmđiểmtĩnh‐điểmcógradienttriệttiêu.Cácbàitoántìmcựctiểu
córàng
buộckhóhơnvàthuậttoánkháphứctạp.
 Trongchươngnàychúngtasẽlầnlượtxétcácthuậttoántìmcựctiểu
khôngràngbuộcvàcóràngbuộc.

§2.PHƯƠNG
PHÁPTIẾTDIỆNVÀNG
 Taxétbàitoántìmcựctiểucủahàmmộtbiếnf(x).Điểmcựctiểuđược
xácđịnhtheođiềukiệndf/dx=0.Docóthểcónhiềuđiểmcựctiểunênta


phải
vâyđiểmcựctiểu(xácđịnhlâncậnchứađiểmcựctiểu)trước.Thủthuật
vâyđiểmcựctiểukháđơngiản:chođiểmđầux
0vàtínhgiátrịcủahàmđang
đi xuống tại cácđiểm tiếp theo x
1, x2, x3,  chođến tại xn hàm tăng lại thì
dừng.Điểmcựctiểubịvâytrongkhoảng(x
n‐2,xn).Khoảng(xi+1,xi)khôngnên
chọnlàhằngsốvìnhưvậycầnnhiềubướctính.Hợplínhấtlànêntăngkích
thướcbướctínhđểđạtđượccựctiểunhanhhơn,ngaycảkhicựctiểu
bịvây
trong mộtđoạn khá rộng. Ta chọn kích thước tăng theo dạng hằng số:
+
=
i1 i
hchvới >c1.taxâydựnghàmgoldbracket()đểvâyđiểmcựctiểucủa
hàm:

function[a,b]=goldbracket(func,x1,h)
%vaydiemcuctieucuaf(x).
c=1.618033989;

371
f1=feval(func,x1);
x2=x1+h;
f2=feval(func,x2);
iff2>f1
h=‐h;
x2=x1+h;
f2=feval(func,x2);

iff2>f1
a=x2;
b=x1‐h;
return
end
end
fori=1:100

h=c*h;
x3=x2+h;
f3=feval(func,x3);
iff3>f2
a=x1;
b=x3;
return
end
x1=x2;
f1=f2;
x2=x3;
f2=f3;
end
error(ʹGoldbracketkhongtimthaydiemcuctieuʹ
)

 Tiếtdiệnvànglàmộtbiếnthểcủaphươngphápchiađôidùngkhitìm
nghiệmcủaphươngtrìnhf(x)=0.Giảsửđiểmcựctiểubịvâytrongkhoảng
(a, b) cóđộdài h.Đểthu
 nhỏ khoảng (a, b) ta tính giá trị của hàm tại
=−
1

xbrhvà =+
2
xarhnhưhìnhvẽ.Nếuf1=f(x1)lớnhơnf2=f(x2)nhưhình
a thì cực tiểu nằm trong khoảng (x
1, b) nếu ngược lại cực tiểu nằm trong
khoảng(a,x
2).

372
 Giảsửf1> f2,tađặta=x1vàvàx1=
x
2vàcókhoảng(a,b)mớinhưhìnhb.Để
thực hiện bước thu gọn tiếp theo ta lại
tínhgiátrịcủahàmtạix
2=a+rh’vàlặp
lạiquátrình.Quátrìnhlàmviệcchỉnếu
hìnhavàhìnhbtươngtự,nghĩalàhằng
sốrkhôngđổikhixácđịnhx
1vàx2ởcả
haihình.Từhìnhatathấy:
 −= −
21
xx2rhh
Cùngmộtkhoảngcáchđótừhìnhbtacó:
 x
1‐a=h’‐rh’
Cânbằngcáckhoảngnàytađược:
 2rh‐h=h’‐rh’
Thayh’=rhvàkhửh:
 2r‐1=r(1‐r)

Giảiphươngtrìnhnàytanhậnđượctỉlệvàng:


==
51
r 0.618033989
2

Chúýlàmỗilầnthugọnkhoảngchứađiểmcựctiểuthìkhoảng(a,b)giảmtỉ
lệvớir.Điều nàylàmsốlầntínhlớnhơnphươngphápchia
đôi.Tuynhiên
phươngpháptỉlệvàngchỉđòihỏitínhgiátrịhàmmộtlầntrongkhiphương
phápchiađôicầntínhgiátrịhàm2lần.Sốlầntínhxácđịnhbằng:

−=ε
n
b
ar 
hay:
ε

ε
==−

ln
ba
n 2.078087n
ln b a

h=b‐a=0.382

Taxâydựnghàm
golden()đểthựchiệnthuậttoánnày:

function[xmin,ymin]=golden(f,a,b,delta,epsilon)
%avabladoantimcuctieu
%deltasaisocuax
%epsilonsaisocuay
r1=(sqrt(5)‐1)/2;
r2=r1^2;
h=b‐a;
a
b
x1 x2
h
rh
2rh‐h
rh
a
a
b
x1
x2
h’
rh’
rh’
b


373
fa=f(a);

fb=f(b);
x1=a+r2*h;
x2=a+r1*h;
f1=f(x1);
f2=f(x2);
k=1;
while(abs(fb‐fa)>epsilon)|(h>delta)
k=k+1;
if(f1<f2)
b=x2;
fb=f2;
x2
=x1;
f2=f1;
h=b‐a;
x1=a+r2*h;
f1=f(x1);
else
a=x1;
fa=f1;
x1=x2;
f1=f2;
h=b‐a;
x2=a+r1*h;
f2=f(x2);
end
end
dp=abs(b‐a);
dy=abs(fb‐fa);
p=a;

yp=fa;
if(fb<fa)
p=b;
yp=fb;
end
xmin=p;

374
ymin=yp;

Đểtìmcựctiểucủahàmtadùngchươngtrình
ctgolden.m:

clearall,clc
f=inline(ʹ1.6*x^3+3*x^2‐2*xʹ);
x=0;
delta=1e‐8;
epsilon=1e‐10;
[a,b]=goldbracket(f,x,0.2);
[xmin,ymin]=golden(f,a,b,delta,epsilon)


§3.PHƯƠNGPHÁPXẤPXỈBẬCHAI
 Ýtưởngcủaphươngphápnàylà:
‐xấpxỉhàmđốitượngf(x)bằngmộthàmbậc2p
2(x)qua3điểmcho
trước
‐cậpnhật3điểmnàybằngcáchthaymộttrong3điểmbằngcựctiểu
củahàmp
2(x)

 Qua3điểm:
[]
[]
[
]
{
}
00 11 22
(x ,f(x ) , (x ,f(x ) , (x , f(x ) x0<x1<x2
tatìmđượcđathứcnộisuyp
2(x)vàđiểmcóđạohàmbằngzero:

−+ −+ −
==
⎡⎤
−+ −+ −
⎣⎦
22 22 22
01 2 12 0 20 1
3
01 2 12 0 20 1
f(x x) f(x x) f(x x)
xx
2 f (x x ) f (x x ) f (x x )
(1)
Đặcbiệt,nếu cácđiểmtìmđượctrướcđâyphânbốđềuvớikhoảngcáchh(
nghĩalàx
2‐x1=x1‐x0=h)thì(1)trởthành:

−+ −+ − −+

==+

+−
⎡⎤
−+ −+ −
⎣⎦
22 22 22
01 2 12 0 20 1 0 1 2
30
012
01 2 12 0 20 1
f(x x) f(x x) f(x x) 3f 4f f
xxh
2( f 2f f )
2 f (x x ) f (x x ) f (x x )
 (2)
Ta cập nhật 3điểm theo cách này chođến khi
−≈
20
xx 0 hay
−≈
20
f(x ) f(x ) 0
vàcựctiểulàx3.Quytắccậpnhật3điểmlà:
‐Trongtrườnghợp
<
<
031
xxxtadùng
031

(x ,x ,x)
hay
312
(x ,x,x )
làm3
điểmmớituỳtheof(x
3)<f(x1)haykhông
‐Trongtrườnghợp
<
<
132
xxxtadùng
132
(x ,x ,x )hay
013
(x ,x,x )làm3
điểmmớituỳtheof(x
3)≤f(x1)haykhông.
Quátrìnhtìmcựctiểuđượcmôtảtrênhìnhsau:

375

Taxâydựnghàm
optquad()đểthựchiệnthuậttoánnày.

function[xo,fo]=optquad(f,x0,tolx,tolfun,maxiter)
%Timcuctieucuaf(x)bangphuongphapxapxibac2
iflength(x0)>2
x012=x0(1:3);
else

iflength(x0)==2
a=x0(1);
b=x0(2);
else
a=x0‐10;
b=x0
+10;
end
x012=[a(a+b)/2b];
end
f012=f(x012);
[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,maxiter);

function[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,k)
x0=x012(1);
x1=x012(2);
x2=x012(3);

376
f0=f012(1);
f1=f012(2);
f2=f012(3);
nd=[f0‐f2f1‐f0f2‐f1]*[x1*x1x2*x2x0*x0;x1x2x0]ʹ;
x3=nd(1)/2/nd(2);
f3=feval(f,x3);%Pt.(1)
ifk<=0|abs(x3‐x1)<tolx|abs(f3‐f1)<tolfun
xo=x3;
fo=
f3;
ifk==0

fprintf(ʹDaycothexemladiemcuctieuʹ)
end
else
ifx3<x1
iff3<f1
x012=[x0x3x1];
f012=[f0f3f1];
else
x012=[x3x1x2];
f012=[f3f1
f2];
end
else
iff3<=f1
x012=[x1x3x2];
f012=[f1f3f2];
else
x012=[x0x1x3];
f012=[f0f1f3];
end
end
[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,k‐1);
end


Đểtìmđiểmcựctiểutadùngchươngtrình
ctoptquad.m:

clearall,clc


377
%f=inline(ʹ(x.^2‐4).^2/8‐1ʹ);
a=0;
b=3;
delta=1e‐8;
epsilon=1e‐10;
maxiter=100;
[xmin,ymin]=optquad(f,[ab],delta,epsilon,maxiter)


§4.PHƯƠNGPHÁPNELDER‐MEAD
 PhươngphápNelder‐Meadcóthểdùngđểtìmcựctiểucủahàmnhiều
biếnmàphươngphápti ếtdiệnvànghayphươngphápxấpxỉbậc2không
dùngđược.ThuậttoánNelder‐Meadgồmcác
bướcnhưsau:
Bước1:Cho3điểmđầutiêna,b,cvớif(a)<f(b)<f(c)
Bước2:Nếu3điểmvàcácgiátrịtươngứngcủahàmđủgầnnhauthìta
coialàđiểmcựctiểuvàkếtthúcquátrìnhtính
Bước 3: Nếu không ta coi
điểm cực tiểu nằmđối diện với
điểm c trênđường ab(xem hình
vẽ)vàlấy:
 e=m+2(m‐c)
với
m=(a+b)/2
vànếuf(e)<
f(b)thìlấy:
 r=(m+e)/2=2m‐c
vànếuf(r)<f(c)thìlấyrlàmgiá
trị mới của c; nếu f(r)

≥ f(b) thì
lấy:
 s=(c+m)/2
vànếuf(s)<f(c)thìlấyslàmgiátrịmớicủa c;nếukhôngbỏcácđiểmb,cvà
dùngmvàc
1=(a+c)/2làmđiểmbvàcmớivàchorằngcựctiểunằmquanh
điểma.

Bước4:Trởvềbước1
Taxâydựnghàm
neldermead()đểthựchiệnthuậttoánnày:

function[xo,fo]=neldermead(f,x0,tolx,tolfun,maxiter)
n=length(x0);
e
c1
a
m
r
c
b
s2
s1
c2
m=(a+b)/2 r=m+(m‐c)
e=m+2(m‐c) s
1=(c+m)/2
s
2=(m+r)/2 c1=(c+a)/2
c

2=(r+a)/2

378
ifn==1%truonghopham1bien
[xo,fo]=optquad(f,x0,tolx,tolfun);
return
end
S=eye(n);
fori=1:n
i1=i+1;
ifi1>n
i1=1;
end
abc=[x0;x0+S(i,:);x0+S(i1,:)];
fabc
=[feval(f,abc(1,:));feval(f,abc(2,:));feval(f,abc(3,:))];
[x0,fo]=neldermead0(f,abc,fabc,tolx,tolfun,maxiter);
ifn<3,
break;
end
end
xo=x0;


function[xo,fo]=neldermead0(f,abc,fabc,tolx,tolfun,k)
[fabc,I]=sort(fabc);
a=abc(I(1),:);
b=abc(I(2),:);
c=abc(I(3),:);
fa=fabc(1);

fb=fabc(2);
fc=fabc(3);
fba=fb‐fa;
fcb=fc‐fb;
ifk<=0|abs(fba)+abs(fcb)
<tolfun|abs(b‐a)+abs(c‐b)<tolx
xo=a;
fo=fa;
ifk==0
fprintf(ʹXemdayladiemcuctieuʹ)
end
else

379
m=(a+b)/2;
e=3*m‐2*c;
fe=feval(f,e);
iffe<fb
c=e;
fc=fe;
else
r=(m+e)/2;
fr=feval(f,r);
iffr<fc
c=r;
fc=fr;
end
iffr>=fb
s=(c+m)/2;
fs=feval(f,s);

iffs<fc
c=s;
fc=fs;
else
b=m;
c=(a+c)/2;
fb=feval(f,b);
fc=feval(f,c);
end
end
end

[xo,fo]=neldermead0(f,[a;b;c],[fafbfc],tolx,tolfun,k‐1);
end

Để tìm cực tiểu của hàm
=
=− − +−
22
112 122
zf(x,y)x xx 4x x x lân cận [0 0] ta
dùngchươngtrình
ctneldermead.m:

clearall,clc
f=inline(ʹx(1)*x(1)‐x(1)*x(2)‐4*x(1)+x(2)*x(2)‐x(2)ʹ);
x0=[00];

380
b=1;

delta=1e‐8;
epsilon=1e‐10;
maxiter=100;
[xmin,ymin]=neldermead(f,x0,delta,epsilon,maxiter)


§5.PHƯƠNGPHÁPĐỘDỐCLỚNNHẤT
 Phương pháp này tìmđiểm cực tiểu của hàm n biến theo hướng
gradientâm:

[] []
⎡⎤
∂∂ ∂
−=−∇=−
⎢⎥
∂∂ ∂
⎣⎦
L
12 n
f(x) f(x) f(x)
g( x ) f ( x )
xx x

vớikíchth ướcbướctínhα
ktạilầnlặpthứkđượchiệuchỉnhsaochogiátrị
hàmcựctiểutheohướngtìm.Thuậttoángồmcácbướcsau:
 •Tạilầnlặpthứk=0,tìmgiátrịhàm
f(x0)vớiđiểmkhởiđầux0
•Tạilầnlặpthứk,tìmα
ktheohướng‐g(x)


(
)
−−−−
α= −α
k1 k1 k1 k1
fx g /g (1)
•Tínhgiátrịx
k:

−−−−
=−α
kk1k1k1k1
xx g/g(2)
•Nếux
k≈xk‐1vàf(xk)≈f(xk‐1)thìcoilàcựctiểu,nếukhông thìquayvề
bước2.

function[xo,fo]=steepest(f,x0,tolx,tolfun,alpha0,maxiter)
ifnargin<6
maxiter=100;
end
ifnargin<5
alpha0=10;%kichthuockhoigan
end
ifnargin<4
tolfun=1e‐8;
end%|f(x)|<tolfunmongmuon
ifnargin<3
tolx=

1e‐6;
end%|x(k)‐x(k‐1)|<tolxmongmuon
x=x0;

381
fx0=feval(f,x0);
fx=fx0;
alpha=alpha0;
kmax1=25;
warning=0;
fork=1:maxiter
g=grad(f,x);
g=g/norm(g);%gradientlavectohang
alpha=alpha*2;%dethuditheohuonggradientam
fx1=feval(f,x‐alpha*2*g);
for
k1=1:kmax1%timbuoctoiuu
fx2=fx1;
fx1=feval(f,x‐alpha*g);
iffx0>fx1+tolfun&fx1<fx2‐tolfun%fx0>fx1<fx2
den=4*fx1‐2*fx0‐2*fx2;
num=den‐fx0+fx2;%
alpha=alpha*num/den;Pt.(1)
x=
x‐alpha*g;
fx=feval(f,x);%Pt.(2)
break;
else
alpha=alpha/2;
end

end
ifk1>=kmax1
warning=warning+1;%kgtimduocbuoctoiuu
else
warning=0;
end
ifwarning>=2|(norm(x‐x0)<tolx&abs(fx‐fx0)<tolfun)
break;
end
x0=x;
fx0=fx;
end
xo=x;fo=fx;

382
ifk==maxiter
fprintf(ʹDaylaketquatotnhatsau%dlanlapʹ,maxiter)
end


functiong=grad(func,x)
%Tinhgradientcuahamf(x).
h=1.0e‐6;
n=length(x);
g=zeros(1,n);
f0=feval(func,x);
fori=1:n
temp=x(i);
x(i)=temp+h;
f1=feval(func,x);

x(i)=temp;
g(1,i)=
(f1‐f0)/h;
end


Đểtìmcựctiểucủahàmtadùngchươngtrình
ctsteepest.m:

clearall,clc
f=inline(ʹx(1)*x(1)‐x(1)*x(2)‐4*x(1)+x(2)*x(2)‐x(2)ʹ);
x0=[0.50.5];
tolx=1e‐4;
tolfun=1e‐9;
alpha0=1;
maxiter=100;
[xo,fo]=steepest(f,x0,tolx,tolfun,alpha0,maxiter)


§6.PHƯƠNGPHÁPNEWTON
 Việctìmđiểmcựctiểucủahàmf(x)tươngđươngvớiviệcxácđịnhxđể
chogradientg(x)củahàmf(x)bằngzero.Nghiệmcủag(x)=0cóth ểtìmđược
bằngcáchdùngphương
phápNewtonchohệphươngtrình phituyến.Hàm
newtons(x)dùngđểtìmnghiệmcủaphươngtrìnhg(x)=0là:

function[x,fx,xx]=newtons(f,x0,tolx,maxiter)

383
h=1e‐4;

tolfun=eps;
EPS=1e‐6;
fx=feval(f,x0);
nf=length(fx);
nx=length(x0);
ifnf~=nx
error(ʹKichthuoccuagvax0khongtuongthich!ʹ);
end
ifnargin<4
maxiter=100;
end
ifnargin<3

tolx=EPS;
end
xx(1,:)=x0(:).ʹ;
fork=1:maxiter
dx=‐jacob(f,xx(k,:),h)\fx(:);%‐[dfdx]ˆ‐1*fx
xx(k+1,:)=xx(k,:)+dx.ʹ;
fx=feval(f,xx(k+1,:));
fxn=norm(fx);
iffxn<tolfun|norm(dx)
<tolx
break;
end
end
x=xx(k+1,:);
ifk==maxiter
fprintf(ʹKetquatotnhatsau%dlanlap\nʹ,maxiter)
end



functiong=jacob(f,x,h)%Jacobiancuaf(x)
ifnargin<3
h=1e‐4;
end
h2=2*h;
n=length(x);

384
x=x(:).ʹ;
I=eye(n);
forn=1:n
g(:,n)=(feval(f,x+I(n,:)*h)‐feval(f,x‐I(n,:)*h))ʹ/h2;
end


ĐểtìmcựctiểucủahàmbằngphươngphápNewtonstadùngchươngtrình
ctnewtons.m:

clearall,clc
f=inline(ʹx(1).^2‐x(1)*x(2)‐4*x(1)+x(2).^2‐x(2)ʹ);
g=inline(ʹ[(2*x(1)‐x(2)‐4)(2*x(2)‐x(1)‐1)]ʹ);
x0=[0.10.1];
tolx=1e‐4;
maxiter=100;
[xo,fo]=newtons(g,x0,tolx,maxiter)


§7.PHƯƠNGPHÁPGRADIENTLIÊNHỢP

1.Kháiniệmchung
:Mộttrongcácphươngphápgiảibàitóntìmcựctiểucủa
hàmnhiềubiếnlàtìmcựctiểutheomộtbiếnliêntiếpđểđếngầnđiểmcực
tiểu.Chiếnthuật
chunglà:
 •chọnđiểm[x0]
•lặpvớii=1,2,3, 
‐chọnvectơ[v
i]
‐cựctiểuhoáf([x])dọctheođường[x
i‐1]theohướng[vi].Coi[xi]
làcựctiểu.Nếu
[
]
[
]



ii1
xx thìkếtthúclặp
•kếtthúc
2.Gradientliênhợp:Takhảosáthàmbậc2:

[]
()
[]
[] [][ ][]
=− + =− +
∑∑∑

T
T
ii i,jij
iij
11
fx c bx Axx c b x x Ax
22
 (1)
đạohàmcủahàmtheox
ichota:


=− +


ii,jj
j
i
f
b
Ax
x

Viếtdướidạngvectơtacó:

[]
[][]
∇=− +fbAx(2)

385

với∇flàgradientcủaf.
 Bâygiờtakhảosátsựthayđổigradientkhitadichuyểntừ[x
0]theo
hướngcủavectơ[u]dọctheođường:
 [x]=[x
0]+s[u]
vớislàkhoảngcáchdichuyển.Thaybiểuthứcnàyvào(2)tacógradientdọc
theo[u]:

[]
[]
[]
[]
[]
[
]
(
)
[]
[
]
[
]
+
∇=−+ +=∇+
0 0
0
xsu x
fbAxsufsAu


Nhưvậysựthayđổigradientlàs[A][u].Nếutadichuyểntheohướngvuông
gócvớivectơ[v],nghĩalà
[v]
T
[u]=0hay[v]
T
[A][u]=0(3)
thìhướngcủa[u]và[v]là liênhợp.Đi ềunàychoth ấykhitamuốncựctiểu
hoáf(x)theo hướng[v],tacầndichuyểntheohướng[u]đểkhônglàmhỏng
c
ựctiểutrướcđó.Vớihàmbậchainbiếnđộclậpta cóthểxây dựngnhướng
liênhợp.Cácphươngphápgradientliênhợpkhácnhaudùngcáckỹthuật
khácnhauđểtìmhướng
liênhợp.
3.PhươngphápPowell:PhươngphápPowelllàphươngphápbậczero,chỉ
đòihỏitínhf([x]).Thuậttoángồmcácbước:
 •
chọnđiểm[x0]
• chọn vec tơ [vi], thường lấy [vi] = [ei] với [ei] là vec tơ đơn vị theo
hướng[x
i]

vòngtròn
 ‐lặpvớii=1,2, 
∗ tìm cực tiểu của f([x])dọc theođườngđi qua [x
i‐1] theo
hướng[v
i];coi[xi]làcựctiểu
‐kếtthúclặp
‐[v

n+1]=[x0]‐[xn];tìmcựctiểucủaf([x])dọctheođườngđiqua[x0]
theohướng[v
n+1];coi[xn+1]làcựctiểu
‐nếu
[][]
+
−<ε
n1 n
xxthìkếtthúcvònglặp
‐lặp
∗[v
i+1]=[v]
 •
kếtthúcvòngtròn
Taxâydựnghàmpowell()đểthựchiệnthuậttoántrên:

function[xmin,fmin,ncyc]=powell(h,tol)
%PhuongphapPowelldetimcuctieucuahamf(x1,x2, ,xn).

386
globalxfuncv
ifnargin<2;
tol=1.0e‐6;
end
ifnargin<1
h=0.1;
end
ifsize(x,2)>1
x=xʹ;
end

n=length(x);
df=zeros(n,1);
u=eye(n);
xold=x;
fold=feval(func,xold);
for
i=1:n
v=u(1:n,i);
[a,b]=goldbracket(@fline,0.0,h);
[s,fmin]=golden(@fline,a,b);
df(i)=fold‐fmin;
fold=fmin;
x=x+s*v;
end
v=x‐xold;
[a,b]=goldbracket(@fline,0.0,h);
[s,fMin]=golden(@fline,a,
b);
x=x+s*v;
ifsqrt(dot(x‐xold,x‐xold)/n)<tol
xmin=x;
ncyc=j;
return
end
imax=1;
dfmax=df(1);
fori=2:n
ifdf(i)>dfmax

387

imax=i;
dfmax=df(i);
end
end
fori=imax:n‐1
u(1:n,i)=u(1:n,i+1);
end
u(1:n,n)=v;
end
error(ʹPhuongphapPowellkhonghoituʹ)


functionz=fiine(s)%ftheohuongcuav
globalxfuncv
z=feval(func,x+s*v);



functiony=f(x)
y=100.0*(x(2)‐x(1).^2).^2+(1.0‐x(1)).^2;


Đểtìmđiểmcựctiểutadùngchươngtrình
ctpowell.m:

clearall,clc
globalxfunc
func=@f;
x=[‐1.0;1.0];
[xmin,fmin,numcycles]=powell

fminsearch(func,x)


3.PhươngphápFletcher‐Reeves:PhươngphápPowellcầnnđườngcựcti ểu
hoá.Tacóthểchỉcầndùngmộtđườngvớiphươngphápbậc1.Phươngpháp
nàycó2phươngán:thuậttoánFletcher‐Reeves(FR)vàthuậttoánPolak
‐
Ribiere(PR).Thuậttoántómtắtnhưsau:
‐cho[x
0],tínhf([x0])
‐khởigánx(n)=x
k;tính[g0]=‐∇f([x0]);s(k)=‐g(xk)
‐lặpk=0,1,2, 
 •[x
k+1]=[xk]+αk[sk]

388
 •
[][]
(
)
[]
[][]
++

β=
TT
k1 k k1
k
T

kk
ggg
(FR)
gg
hay
[
][ ]
[][]
++
β=
T
k1 k1
k
T
kk
gg
(PR )
gg

 •
[]
[]
[
]
++
=− +β
k1 k1 k k
sg s
 •cậpnhật[x
k]

chođếnkhihộitụ
Taxâydựnghàm
conjugate()đểthựchiệnthuậttoántrên:

function[xo,fo]=conjugate(f,x0,tolx,tolfun,alpha0,maxiter,KC)
%KC=1:PhuongphapgradientlienhopPolak–Ribiere
%KC=2:PhuongphapgradientlienhopFletcher–Reeves
ifnargin<7
KC=0;
end
ifnargin<6
maxiter=100;
end
ifnargin<5

alpha0=10;
end
ifnargin<4
tolfun=1e‐8;
end
ifnargin<3
tolx=1e‐6;
end
n=length(x0);
nmax1=20;
warning=0;
h=1e‐4;
x=x0;
fx=feval(f,x0);
fx0=fx;

fork=1:
maxiter
xk0=x;
fk0=fx;

389
alpha=alpha0;
g=grad(f,x);
s=‐g;
forn=1:n
alpha=alpha0;
fx1=feval(f,x+alpha*2*s);
forn1=1:nmax1
fx2=fx1;
fx1=feval(f,x+alpha*s);
if(fx0>fx1+tolfun)&(fx1<fx2‐tolfun)
%fx0>fx1<fx2
den=4*fx1‐2*fx0‐2*fx2;
num=den‐fx0+fx2;
alpha=alpha*num/den;
x=x+alpha*s;
fx=feval(f,x);
break;
elseifn1==nmax1/2
alpha=‐alpha0;
fx1=feval(f,x+alpha*2*s);
else
alpha=
alpha/2;
end

end
x0=x;
fx0=fx;
ifn<n
g1=grad(f,x,h);
ifKC<=1
s=‐g1+(g1‐g)*g1ʹ/(g*gʹ+1e‐5)*s;
else
s=‐g1+g1*g1ʹ/(g*gʹ+1e‐5)*s;
end
g=
g1;
end
ifn1>=nmax1
warning=warning+1;%kgtimduockichthuoctoiuu

390
else
warning=0;
end
end
if(warning>=2)|((norm(x‐xk0)<tolx)&(abs(fx‐fk0)<tolfun))
break;
end
end
xo=x;
fo=fx;
ifk==maxiter
fprintf(ʹ’Giatritotnhatsau%dlanlapʹ,maxiter)
end



§8.PHƯƠNGPHÁPMÔPHỎNGQUÁTRÌNHỦ
 Tấtcảcácphươngpháptìmđiểmcựctiểumàtaxétđếnnaychỉlàm
việccóhiệuquảkhiđiểmbanđầuđượclựcchọnđủgầnvớiđiểmcựctiểu.
Điểm
cực tiểu tìmđược là một trong nhiềuđiểm cực tiểu có thể có và ta
khôngchắclàtìmđượcđiểmcựctiểu toàncục.Vấnđềlàlàmsaolặplạithủ
tụcđểtìm
đượctấtcảcácđiểmcựctiểutừcácđiểmđầukhácnhauvàđưara
điểm cực tiểu toàn cục.Đây là mộtbàitoánkhóvìkhôngcó một phương
phápnàođểxácđịnhđượccác
điểmđầuthíchhợpđểtìmđượctấtcảcác
điểmcựctiểu.Mộtsựlựachọnthúvịdựatrênsựtươngtựgiữasựủvàcực
tiểuhoá.Ủlàquátrìnhgianhiệtkh
ốikimloạilênđến nhiệtđộcaohơnnhiệt
độnóngchảyvàsauđóhạnhiệtđộtừtừđểcácnguyêntửbịkíchthíchmạnh
cóthểtrởvềtrạngtháinănglượngthấp,tạothànhmột
tinhthểduynhấtcó
cấutrúchìnhchữnhật.Làmnguộinhanhsẽcóthểtạorasựkhôngđồngnhất
vàlàmbiếndạngcấutrúctinhthểgiốngnhưkhitìmcựctiểutoàncụ
cquá
nhanh.Phươngphápmôphỏngquátrìnhủ(simulatedannealing‐SA)cóthể
thựchiệnbằngcáchdùngphânbốxácsuấtBoltzmanncủamứcnăng lượngE
tạinhiệtđộT,đượcmôtảbằng:



E
KT

p(E) e (1)
Chúýlàởnhiệtđộcao,đườngcongphânbốxácsuấtphẳngtrongmộtphạm
viErộng,ngụýlàhệthốngcóthểởtrạngtháinănglượngcaocũngngang
bằngởtrạngtháin
ănglượngthấp.Trongkhiđóởnhiệtđộthấpđườngcong

391
phânbốxácsuấtcaoởnhiệtđộthấpvàthấpởnhiệtđộcao,ngụýlàhệthống
cókhảnăngởmứcnănglượngthấpnhiềuhơnnhưngvẫncómộtcơhộinhỏ
ởtrạ
ngtháinănglượngcaođểnócóthểthoátkhỏitrạngtháinănglượngcực
tiểuđịaphương.
 ÝtưởngcủathuậttoánSAgồmcácbướcsau:
•Chogiátrịbanđầu[x
o],biêndưới[l],biêntrên[u],sốlầnlặpcựcđai,
k
max,hệsốtắtq>0(tắtnhanhhaychậm)vàsaisốtươngđốiεfcủadao
độnggiátrịcủahàm.
•Cho[x]=[x
o];[x
o
]=[x];[f
o
]=f([x])
•Lặptừk=1đếnk
max
 ∗tạoravectơngẫunhiênN×1:[U]=[‐1,+1]
∗biếnđổivectơ[U]bằngluậtµnghịchđảovới
⎛⎞
⎜⎟

⎝⎠
µ=
q
max
k
100
k
10 để
tạora[∆x]vàlấy[x
1]=[x]+[∆x]
∗nếu[∆f]=f([x
1])‐f([x])<0
‐[x]=[x
1]vànếuf([x])<[f
o
]thì[x]=[x
o
]và[f
o
]=f([xo])
∗khôngthì:
‐tạosốngẫunhiênztrong đoạn[0,1]vàcho[x]=[x
1]chỉ
trongtrườnghợpz<p
•Với[x
o
]gầnvớiđiểmcực tiểumàtađangtìmtacóthểdùngnónhư
giátrịđầuvàdùngcácquytắctìmcựctiểuđịaphươngkhácđểtìm
điểmcựctiểucủahàmf([x])
Dựatrênthuậttoánnàytaxâydựnghàmsimannealing(). Hàmnàycóhai

phầncósốbướclặpthayđổikhinhiệtđộgiảm.Mộtphầncókíchthước của
bướctính [∆x]tạorabởivectơngẫunhiên[y]cócác giátrịn
ằmtrongđoạn[‐
1,1]vớibiến[x]cócùngkíchthướcvànhânµ
‐1
([y])vớihiệu([u]‐[l]).Quytắc
µnghịchđảo:


µ

=≤
µ
y
1
(1 )
gsign(y)y1(2)
thựchiệntronghàm
invmu()vớiµtăngtheoquyluật:

⎛⎞
⎜⎟
⎝⎠
µ=
q
max
k
100
k
10 (3)


functionx=muinv(y,mu)%luatmunghichdaoPt.(2)
x=(((1+mu).^abs(y)‐1)/mu).*sign(y);



392
Phầncònlạilàxácsuấtcủaviệcdùngbước[∆x].Tươngtự(1)tacó:

[]
()
⎛⎞


⎜⎟
ε
⎝⎠
=∆>
q
max
f
kf
k
fx
pe f0 (4)
Taxâydựnghàm
simannealing()đểthựchiênthuậttoántrên:

function[xo,fo]=simannealing(f,x0,l,u,kmax,q,tolfun)
%PhuongphapSAdetimcuctieucuahamf(x)l<=x<=u

n=length(x0);
x=x0;
fx=feval(f,x);
xo=x;
fo=fx;
ifnargin<7
tolfun=1e‐
10;
end
ifnargin<6
q=1;
end%hesotat
ifnargin<5
kmax=100;
end%solanlapmax
fork=0:kmax
Ti=(k/kmax)^q;
mu=10^(Ti*100);%Pt.(3)
dx=muinv(2*rand(size(x))‐1,mu).*(u‐l);
x1=x+dx;

x1=(x1<l).*l+(l<=x1).*(x1<=u).*x1+(u<x1).*u;
fx1=feval(f,x1);
df=fx1‐fx;
if(df<0)|(rand<exp(‐Ti*df/(abs(f(x)+eps))/tolfun))%Pt.(4)
x=x1;
fx=fx1;
end
iffx<fo
xo=x;

fo=fx1;

393
end
end


Đểtìmcựctiểucủahàmtadùngchươngtrình
ctsimannealing.m:

clear,clc
f=inline(ʹx(1)^4‐16*x(1)^2‐5*x(1)+x(2)^4‐16*x(2)^2‐5*x(2)ʹ,ʹxʹ);
l=[‐5‐5];
u=[55];%bienduoi/tren
%x0=[‐0.5‐1];
x0=[00];
kmax=500;
q=1;
tolfun=1e‐10;
[xmin,fmin]=simannealing(f,x0,l,
u,kmax,q,tolfun)
[xmin1,fmin1]=neldermead(f,x0,1e‐5,1e‐8,kmax)
[xmin2,fmin2]=fminsearch(f,x0)


Trongchươngtrìn htrên,tadùngthêmcácthuậttoánkhácđểsosánh.Kết
quảlàthuậttoánSAcóthểtìmđượccựctiểutoàncục.Tuynhiênkhôngphải
khinàothuậttoáncũngthànhcông.Sựthành
côngcủathuậttoánnàyphụ
thuộcgiátrịđầuvàmaymắn,trongkhicácthuậttoánkhácsựthànhcôngchỉ

phụthuộcgiátrịđầu.

§9.THUẬTTOÁNDITRUYỀN
 Thuậttoánditruyền(geneticalgorithm‐GA)làmộtkỹthuậttìmngẫu
nhiêncóđịnhhướng,môphỏngsựchọnlọctựnhiênđểcócáccáthểsốngsót
thích nghinhất.Cũngnhư thuậttoán
 SA,GAcho phép tìmđượccựctiểu
toàncụcngaycảkhihàmđốitượngcónhiềucựctrịgồmcácđiểmuốn,các
cựctiểuđịaphương,cáccựcđạiđịa phương.Thuật
toánditruyềnlaigồmcác
bước:khởigán,chọnlọc,vượtqua,độtbiến.Thuậttoángồmcácbướcsau:
•Chogiátrịđầu[x
o]=[xo1,xo2, ,xoN](Nlà kíchthướccủabi ến),biên
dưới[l]=[l
1, ,lN],biêntrên[u]=[u1, ,uN],kíchthướccủaquầnthểNp,
vectơN
b=[Nb1, ,NbN]gồmsốbitcácgánchomỗithểhiệncủamỗi
biếnx
i,xácsuấtsốngsótPc,xácsuấtđộtbiếnPm,tỉlệhọcη(0≤η≤1,thể

394
hiệnhọcnhanhhaychậm),sốlầnlặpcựcđạikmax.Chúýlàkíchthước
của[x
o],[u],[l]đềulàN.
•Khởitạongẫunhiênsốcáthểbanđầucủaquầnthể.
Cho[x
o
]=[xo],f
o
=f([xo])vàxâydựngtheocáchngẫunhiênmảngcáccá

thểbanđầu[X
1]chứaNptrạngthái(trongvùngchophépbáobởibiên
trên[u]vàbiêndưới[l])baogồmcảtrạngtháibanđầu[x
o]bằngccáh
đặt:
 [X
1(1)]=[xo],[X1(k)]=[l]+rand.×([u]‐[l])k=2, ,Np (1)
Sauđó mã hoá mỗi s ố của mảng quần thể này thnàh một chuỗi nhị
phânbằng:

==
⎛⎞
+
⎜⎟
⎝⎠
∑∑
m1 m
1bibi
i1 i1
Pn,1 N: N =biểudiễnnhịphâncủaX1(n,m)vớiNbmbit

()

=−

bm
N
1
X (n , m) l(m)
21

u(m) l(m)
  (2)
vớin=1, ,N
pvàm=1, ,N
saochotoànthểmảngquầnthểtrởthànhmảngmàmỗihànglàmột
nhiễnsắcthểđượcbiểudiễnbằngchuỗinhịphân
=

N
b
i
i1
N bit.
•Lặptừk=1đếnk
max:
 ∗giảimãmỗisốcủamảngthànhsốthậpphânbằng:
=
k
X(n,m) biểudiễn thậpphâncủa

==
⎛⎞
+
⎜⎟
⎝⎠
∑∑
m1 m
1bibi
i1 i1
Pn,1 N: N 

vớiN
bmbit

()

=+

bm
k
N
u(m) l(m)
P(n,.) l(m)
21
  (3)
n=1, ,N;m=1, ,N
vàtínhgiátrịf(n)củahàmđốivớimỗihàngX
k(n,:)=[x(n)]
tươngứngvớimỗinhiễmsắcthểvàtìmcựctiểuf
min=f(nb)
tươngứngvớiX
k(n,:)=[x(nb)]
∗nếuf
min=f(nb)<f
o
thìđặtf
o

=f(nb)và[x
o
]=[x(nb)]

∗biếnđổigiátrịcủahàmthànhgiátrịthíchhợpbằng:

{
}
=−
p
N
1n=1
f(n) Max f(n) f(n)(4)
∗nếu
{
}

p
N
n=1
Max f (n) 0,kếtthúcquátrìnhvà[x
o
]làgiátrịtốtnhất.
Nếukhông,đểtạonhiềunhiễnsắcthểhơnquanhđiểmtốtnhất
[x(nb)]chothếhệsau,tadùngquytắcchọnlọc:

×