You are on page 1of 33

CHNG 8: TI U HO

1.KHINIMCHUNGVTIUHO

Tiuholthutngthngcdngcctiuhohaycci
homthm.Thngthngtachcntmcctiumthml.Victm
ccicaf(x)thchinmtcchnginbngcchtmcctiucahm
f(x) .Hmflhmgitrhayhmitng,cncgicctiu.Binx
lbincthhiuchnhtdo.

Ccthuttoncctiuholccththutlpihimtgitrban
ucabinx.Nuf(x)cnhiucctiuaphng,vicchngitrus
xcnhcctiunoctnh.Takhngccchnobomltmc
cctiutoncc.

Cc bin c th b rng buc bng cc ng thc hay bt ng thc.


Phnlnccphngphpltmcctiukhngrngbuc,nghalkhngc
hnchnoivibinx.Ccbitonnybaogmtmcctiucahm,
tmimtnhimcgradienttrittiu.Ccbitontmcctiucrng
buckhhnvthuttonkhphctp.

Trongchngnychngtaslnltxtccthuttontmcctiu
khngrngbucvcrngbuc.

2.PHNGPHPTITDINVNG

Taxtbitontmcctiucahmmtbinf(x).imcctiuc
xc nh theo iu kin df/dx = 0. Do c th c nhiu im cc tiu nn ta
phivyimcctiu(xcnhlncnchaimcctiu)trc.Ththut
vyimcctiukhngin:choimux0vtnhgitrcahmang
i xung ti cc im tip theo x1, x2, x3,... cho n ti xn hm tng li th
dng.imcctiubvytrongkhong(xn2,xn).Khong(xi+1,xi)khngnn
chnlhngsvnhvycnnhiubctnh.Hplnhtlnntngkch
thcbctnhtccctiunhanhhn,ngayckhicctiubvy
trong mt on kh rng. Ta chn kch thc tng theo dng hng s:
h i+1 = ch i vi c > 1 . ta xy dng hm goldbracket() vy im cc tiu ca
hm:

function[a,b]=goldbracket(func,x1,h)
%vaydiemcuctieucuaf(x).
c=1.618033989;
370

f1=feval(func,x1);
x2=x1+h;
f2=feval(func,x2);
iff2>f1
h=h;
x2=x1+h;
f2=feval(func,x2);
iff2>f1
a=x2;
b=x1h;
return
end
end
fori=1:100
h=c*h;
x3=x2+h;
f3=feval(func,x3);
iff3>f2
a=x1;
b=x3;
return
end
x1=x2;
f1=f2;
x2=x3;
f2=f3;
end
error(Goldbracketkhongtimthaydiemcuctieu)

Titdinvnglmtbinthcaphngphpchiaidngkhitm
nghimcaphngtrnhf(x)=0.Gisimcctiubvytrongkhong
(a, b) c di h. thu nh khong (a, b) ta tnh gi tr ca hm ti
x1 = b rh v x 2 = a + rh nhhnhv.Nuf1=f(x1)lnhnf2=f(x2)nhhnh
a th cc tiu nm trong khong (x1, b) nu ngc li cc tiu nm trong
khong(a,x2).
371


Gisf1 >f2 ,tata=x1vvx1=
x2vckhong(a,b)minhhnhb.
2rhh
thc hin bc thu gn tip theo ta li
rh
tnhgitrcahmtix2=a+rhvlp
rh
li qu trnh. Qu trnh lm vic ch nu
x1
x2
a
b
hnhavhnhbtngt, nghalhng
h
s r khng i khi xc nh x1 v x2 c
a
haihnh.Thnhatathy:

x 2 x1 = 2rh h
rh
Cngmtkhongcchthnhbtac:

x1a=hrh
rh
Cnbngcckhongnytac:
x2 b
a
x1

2rhh=hrh
h
Thayh=rhvkhh:

2r1=r(1r)
b
Giiphngtrnhnytanhnctlvng:
5 1

r=
= 0.618033989...
2
Chlmilnthugnkhongchaimcctiuthkhong(a,b)gimt
lvir.iunylmslntnhlnhnphngphpchiai.Tuynhin
phngphptlvngchihitnhgitrhmmtlntrongkhiphng
phpchiaicntnhgitrhm2ln.Slntnhxcnhbng:
b a rn =

ln
ba

= 2.078087 n

hay: n =
ln
ba

h=ba=0.382
Taxydnghmgolden()thchinthuttonny:

function[xmin,ymin]=golden(f,a,b,delta,epsilon)
%avabladoantimcuctieu
%deltasaisocuax
%epsilonsaisocuay
r1=(sqrt(5)1)/2;
r2=r1^2;
h=ba;
372

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

ymin=yp;

tmcctiucahmtadngchngtrnhctgolden.m:

clearall,clc
f=inline(1.6*x^3+3*x^22*x);
x=0;
delta=1e8;
epsilon=1e10;
[a,b]=goldbracket(f,x,0.2);
[xmin,ymin]=golden(f,a,b,delta,epsilon)

3.PHNGPHPXPXBCHAI

tngcaphngphpnyl:

xp x hm i tng f(x) bng mt hm bc 2 p2(x) qua 3 im cho


trc

cp nht 3 im ny bng cch thay mt trong 3 im bng cc tiu


cahmp2(x)

Qua3im:
{[(x0 ,f(x0 )] , [(x1 ,f(x1 )] , [(x2 ,f(x2 )]} x0<x1<x2

tatmcathcnisuyp2(x)vimcohmbngzero:
f0 (x12 x 22 ) + f1 (x 22 x02 ) + f2 (x02 x12 )

x = x3 =

2 f0 (x1 x 2 ) + f1 (x 2 x 0 ) + f2 (x0 x1 )

(1)

cbit,nuccimtmctrcyphnbuvikhongcchh(
nghalx2x1=x1x0=h)th(1)trthnh:
f0 (x12 x 22 ) + f1 (x 22 x 02 ) + f2 (x02 x12 )
3f0 4f1 + f2
x3 =
= x0 + h
(2)

2( f0 + 2f1 f2 )
2 f0 (x1 x 2 ) + f1 (x 2 x0 ) + f2 (x0 x1 )
Ta cp nht 3 im theo cch ny cho n khi

x 2 x0 0 hay

f(x 2 ) f(x 0 ) 0 vcctiulx3.Quytccpnht3iml:

Trongtrnghp x0 < x 3 < x1 tadng (x0 , x 3 , x1 ) hay (x 3 , x1 , x 2 ) lm3

immitutheof(x3)<f(x1)haykhng

Trongtrnghp x1 < x 3 < x 2 tadng (x1 , x 3 , x 2 )hay (x0 , x1 , x 3 ) lm3


immitutheof(x3)f(x1)haykhng.
Qutrnhtmcctiucmttrnhnhsau:
374


Taxydnghmoptquad()thchinthuttonny.

function[xo,fo]=optquad(f,x0,tolx,tolfun,maxiter)
%Timcuctieucuaf(x)bangphuongphapxapxibac2
iflength(x0)>2
x012=x0(1:3);
else
iflength(x0)==2
a=x0(1);
b=x0(2);
else
a=x010;
b=x0+10;
end
x012=[a(a+b)/2b];
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);
375

f0=f012(1);
f1=f012(2);
f2=f012(3);
nd=[f0f2f1f0f2f1]*[x1*x1x2*x2x0*x0;x1x2x0];
x3=nd(1)/2/nd(2);
f3=feval(f,x3);%Pt.(1)
ifk<=0|abs(x3x1)<tolx|abs(f3f1)<tolfun
xo=x3;
fo=f3;
ifk==0
fprintf(Daycothexemladiemcuctieu)
end
else
ifx3<x1
iff3<f1
x012=[x0x3x1];
f012=[f0f3f1];
else
x012=[x3x1x2];
f012=[f3f1f2];
end
else
iff3<=f1
x012=[x1x3x2];
f012=[f1f3f2];
else
x012=[x0x1x3];
f012=[f0f1f3];
end
end
[xo,fo]=optquad0(f,x012,f012,tolx,tolfun,k1);
end

tmimcctiutadngchngtrnhctoptquad.m:

clearall,clc
376

%f=inline((x.^24).^2/81);
a=0;
b=3;
delta=1e8;
epsilon=1e10;
maxiter=100;
[xmin,ymin]=optquad(f,[ab],delta,epsilon,maxiter)

4.PHNGPHPNELDERMEAD

PhngphpNelderMeadcthdngtmcctiucahmnhiu
bin m phng php tit din vng hay phng php xp x bc 2 khng
dngc.ThuttonNelderMeadgmccbcnhsau:
Bc1:Cho3imutina,b,cvif(a)<f(b)<f(c)
Bc2:Nu3imvccgitrtngngcahmgnnhauthta
coialimcctiuvktthcqutrnhtnh
Bc 3: Nu khng ta coi
a
im cc tiu nm i din vi
c2
c
1
im c trn ng ab(xem hnh
r
e
v)vly:
s
2
s1 m
c

e=m+2(mc)
vi
b
m=(a+b)/2
vnuf(e)<f(b)thly:
m=(a+b)/2
r=m+(mc)

r=(m+e)/2=2mc
e=m+2(mc) s1=(c+m)/2
v nuf(r) < f(c) th ly r lm gi
c1=(c+a)/2
s2=(m+r)/2
tr mi ca c; nu f(r) f(b) th
c2=(r+a)/2
ly:

s=(c+m)/2
vnuf(s)<f(c)thlyslmgitrmicac;nukhngbccimb,cv
dngmvc1=(a+c)/2lmimbvcmivchorngcctiunmquanh
ima.
Bc4:Trvbc1

Taxydnghmneldermead()thchinthuttonny:

function[xo,fo]=neldermead(f,x0,tolx,tolfun,maxiter)
n=length(x0);
377

ifn==1%truonghopham1bien
[xo,fo]=optquad(f,x0,tolx,tolfun);
return
end
S=eye(n);
fori=1:n
i1=i+1;
ifi1>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);
ifn<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=fbfa;
fcb=fcfb;
ifk<=0|abs(fba)+abs(fcb)<tolfun|abs(ba)+abs(cb)<tolx
xo=a;
fo=fa;
ifk==0
fprintf(Xemdayladiemcuctieu)
end
else
378

m=(a+b)/2;
e=3*m2*c;
fe=feval(f,e);
iffe<fb
c=e;
fc=fe;
else
r=(m+e)/2;
fr=feval(f,r);
iffr<fc
c=r;
fc=fr;
end
iffr>=fb
s=(c+m)/2;
fs=feval(f,s);
iffs<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],[fafbfc],tolx,tolfun,k1);
end

tm cc tiu ca hm z = f(x,y) = x12 x1x 2 4x1 + x 22 x 2 ln cn [0 0] ta


dngchngtrnhctneldermead.m:

clearall,clc
f=inline(x(1)*x(1)x(1)*x(2)4*x(1)+x(2)*x(2)x(2));
x0=[00];
379

b=1;
delta=1e8;
epsilon=1e10;
maxiter=100;
[xmin,ymin]=neldermead(f,x0,delta,epsilon,maxiter)

5.PHNGPHPDCLNNHT

Phng php ny tm im cc tiu ca hm n bin theo hng


gradientm:
f(x) f(x)
f(x)
L

g([ x ]) = f([ x ]) =

x
x
x

2
n
1

vikchthcbctnhktilnlpthkchiuchnhsaochogitr
hmcctiutheohngtm.Thuttongmccbcsau:

Tilnlpthk=0,tmgitrhmf(x0)viimkhiux0
Tilnlpthk,tmktheohngg(x)
k 1 = f ( x k1 g k1 / g k1 )

(1)

Tnhgitrxk:

x k = x k 1 k 1g k1 / g k1

(2)

Nuxk xk1vf(xk) f(xk1)thcoilcctiu,nukhngthquayv


bc2.

function[xo,fo]=steepest(f,x0,tolx,tolfun,alpha0,maxiter)
ifnargin<6
maxiter=100;
end
ifnargin<5
alpha0=10;%kichthuockhoigan
end
ifnargin<4
tolfun=1e8;
end%|f(x)|<tolfunmongmuon
ifnargin<3
tolx=1e6;
end%|x(k)x(k1)|<tolxmongmuon
x=x0;
380

fx0=feval(f,x0);
fx=fx0;
alpha=alpha0;
kmax1=25;
warning=0;
fork=1:maxiter
g=grad(f,x);
g=g/norm(g);%gradientlavectohang
alpha=alpha*2;%dethuditheohuonggradientam
fx1=feval(f,xalpha*2*g);
fork1=1:kmax1%timbuoctoiuu
fx2=fx1;
fx1=feval(f,xalpha*g);
iffx0>fx1+tolfun&fx1<fx2tolfun%fx0>fx1<fx2
den=4*fx12*fx02*fx2;
num=denfx0+fx2;%
alpha=alpha*num/den;Pt.(1)
x=xalpha*g;
fx=feval(f,x);%Pt.(2)
break;
else
alpha=alpha/2;
end
end
ifk1>=kmax1
warning=warning+1;%kgtimduocbuoctoiuu
else
warning=0;
end
ifwarning>=2|(norm(xx0)<tolx&abs(fxfx0)<tolfun)
break;
end
x0=x;
fx0=fx;
end
xo=x;fo=fx;
381

ifk==maxiter
fprintf(Daylaketquatotnhatsau%dlanlap,maxiter)
end

functiong=grad(func,x)
%Tinhgradientcuahamf(x).
h=1.0e6;
n=length(x);
g=zeros(1,n);
f0=feval(func,x);
fori=1:n
temp=x(i);
x(i)=temp+h;
f1=feval(func,x);
x(i)=temp;
g(1,i)=(f1f0)/h;
end

tmcctiucahmtadngchngtrnhctsteepest.m:

clearall,clc
f=inline(x(1)*x(1)x(1)*x(2)4*x(1)+x(2)*x(2)x(2));
x0=[0.50.5];
tolx=1e4;
tolfun=1e9;
alpha0=1;
maxiter=100;
[xo,fo]=steepest(f,x0,tolx,tolfun,alpha0,maxiter)

6.PHNGPHPNEWTON

Victmimcctiucahmf(x)tngngvivicxcnhx
chogradientg(x)cahmf(x)bngzero.Nghimcag(x)=0cthtmc
bngcchdngphngphpNewtonchohphngtrnhphituyn.Hm
newtons(x)dngtmnghimcaphngtrnhg(x)=0l:

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

h=1e4;
tolfun=eps;
EPS=1e6;
fx=feval(f,x0);
nf=length(fx);
nx=length(x0);
ifnf~=nx
error(Kichthuoccuagvax0khongtuongthich!);
end
ifnargin<4
maxiter=100;
end
ifnargin<3
tolx=EPS;
end
xx(1,:)=x0(:).;
fork=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);
iffxn<tolfun|norm(dx)<tolx
break;
end
end
x=xx(k+1,:);
ifk==maxiter
fprintf(Ketquatotnhatsau%dlanlap\n,maxiter)
end

functiong=jacob(f,x,h)%Jacobiancuaf(x)
ifnargin<3
h=1e4;
end
h2=2*h;
n=length(x);
383

x=x(:).;
I=eye(n);
forn=1:n
g(:,n)=(feval(f,x+I(n,:)*h)feval(f,xI(n,:)*h))/h2;
end

tmcctiucahmbngphngphpNewtonstadngchngtrnh
ctnewtons.m:

clearall,clc
f=inline(x(1).^2x(1)*x(2)4*x(1)+x(2).^2x(2));
g=inline([(2*x(1)x(2)4)(2*x(2)x(1)1)]);
x0=[0.10.1];
tolx=1e4;
maxiter=100;
[xo,fo]=newtons(g,x0,tolx,maxiter)

7.PHNGPHPGRADIENTLINHP
1.Khinimchung:Mttrongccphngphpgiibitntmcctiuca
hmnhiubinltmcc tiutheomtbinlintipngnimcc
tiu.Chinthutchungl:

chnim[x0]
lpvii=1,2,3,...

chnvect[vi]
cctiuhof([x])dctheong[xi1]theohng[vi].Coi[xi]
lcctiu.Nu [ xi ] [ xi1 ] < thktthclp
ktthc
2.Gradientlinhp:Takhosthmbc2:
1
1 T
T
f ([ x ]) = c bi xi + A i ,jxi x j = c [ b] [ x ] + [ x ] [ A ][ x ]

2 i j
2
i

(1)

ohmcahmtheoxichota:
f
= bi + A i ,jx j

x i
j
Vitdidngvecttac:
f = [ b ] + [ A ][ x ]

(2)
384

viflgradientcaf.

By gi ta kho st s thay i gradient khi ta di chuyn t [x0] theo


hngcavect[u]dctheong:

[x]=[x0]+s[u]
vislkhongcchdichuyn.Thaybiuthcnyvo(2)tacgradientdc
theo[u]:

f [x0 ]+s[u] = [ b ] + [ A ] ([ x0 ] + s [ u ]) = f [x0 ] + s [ A ][ u ]


Nhvysthayigradientls[A][u].Nutadichuyntheohngvung
gcvivect[v],nghal

(3)
[v]T[u]=0hay[v]T[A][u]=0
thhngca[u]v[v]llinhp.iunychothykhitamuncctiu
hof(x)theohng[v],tacndichuyntheohng[u]khnglmhng
cctiutrc.Vihmbchainbinclptacthxydngnhng
lin hp. Cc phng php gradient lin hp khc nhau dng cc k thut
khcnhautmhnglinhp.
3.PhngphpPowell:PhngphpPowelllphngphpbczero,ch
ihitnhf([x]).Thuttongmccbc:

chnim[x0]
chn vec t [vi], thng ly [vi] = [ei] vi [ei] l vec t n v theo
hng[xi]
vngtrn

lpvii=1,2,...
tm cc tiu ca f([x]) dc theo ng i qua [xi1] theo
hng[vi];coi[xi]lcctiu

ktthclp
[vn+1]=[x0][xn];tmcctiucaf([x])dctheongiqua[x0]
theohng[vn+1];coi[xn+1]lcctiu
nu [ x n +1 ] [ x n ] < thktthcvnglp

lp

[vi+1]=[v]

ktthcvngtrn
Taxydnghmpowell()thchinthuttontrn:

function[xmin,fmin,ncyc]=powell(h,tol)
%PhuongphapPowelldetimcuctieucuahamf(x1,x2,...,xn).
385

globalxfuncv
ifnargin<2;
tol=1.0e6;
end
ifnargin<1
h=0.1;
end
ifsize(x,2)>1
x=x;
end
n=length(x);
df=zeros(n,1);
u=eye(n);
xold=x;
fold=feval(func,xold);
fori=1:n
v=u(1:n,i);
[a,b]=goldbracket(@fline,0.0,h);
[s,fmin]=golden(@fline,a,b);
df(i)=foldfmin;
fold=fmin;
x=x+s*v;
end
v=xxold;
[a,b]=goldbracket(@fline,0.0,h);
[s,fMin]=golden(@fline,a,b);
x=x+s*v;
ifsqrt(dot(xxold,xxold)/n)<tol
xmin=x;
ncyc=j;
return
end
imax=1;
dfmax=df(1);
fori=2:n
ifdf(i)>dfmax
386

imax=i;
dfmax=df(i);
end
end
fori=imax:n1
u(1:n,i)=u(1:n,i+1);
end
u(1:n,n)=v;
end
error(PhuongphapPowellkhonghoitu)

functionz=fiine(s)%ftheohuongcuav
globalxfuncv
z=feval(func,x+s*v);

functiony=f(x)
y=100.0*(x(2)x(1).^2).^2+(1.0x(1)).^2;

tmimcctiutadngchngtrnhctpowell.m:

clearall,clc
globalxfunc
func=@f;
x=[1.0;1.0];
[xmin,fmin,numcycles]=powell
fminsearch(func,x)

3.PhngphpFletcherReeves:PhngphpPowellcnnngcctiu
ho.Tacthchcndngmtngviphngphpbc1.Phngphp
ny c 2 phng n: thut ton Fletcher Reeves(FR) v thut ton Polak
Ribiere(PR).Thuttontmttnhsau:

cho[x0],tnhf([x0])
khignx(n)=xk;tnh[g0]=f([x0]);s(k)=g(xk)
lpk=0,1,2,...

[xk+1]=[xk]+k[sk]
387

[g
(
=

T
] [g k ] )[g k+1 ]
g k +1 ] [ g k +1 ]
[
(PR)
k
(FR) hay k =
T
T
[g k ] [g k ]
[g k ] [g k ]
[ s k+1 ] = [g k +1 ] + k [ s k ]

k +1

cpnht[xk]
chonkhihit
Taxydnghmconjugate()thchinthuttontrn:

function[xo,fo]=conjugate(f,x0,tolx,tolfun,alpha0,maxiter,KC)
%KC=1:PhuongphapgradientlienhopPolakRibiere
%KC=2:PhuongphapgradientlienhopFletcherReeves
ifnargin<7
KC=0;
end
ifnargin<6
maxiter=100;
end
ifnargin<5
alpha0=10;
end
ifnargin<4
tolfun=1e8;
end
ifnargin<3
tolx=1e6;
end
n=length(x0);
nmax1=20;
warning=0;
h=1e4;
x=x0;
fx=feval(f,x0);
fx0=fx;
fork=1:maxiter
xk0=x;
fk0=fx;
388

alpha=alpha0;
g=grad(f,x);
s=g;
forn=1:n
alpha=alpha0;
fx1=feval(f,x+alpha*2*s);
forn1=1:nmax1
fx2=fx1;
fx1=feval(f,x+alpha*s);
if(fx0>fx1+tolfun)&(fx1<fx2tolfun)%fx0>fx1<fx2
den=4*fx12*fx02*fx2;
num=denfx0+fx2;
alpha=alpha*num/den;
x=x+alpha*s;
fx=feval(f,x);
break;
elseifn1==nmax1/2
alpha=alpha0;
fx1=feval(f,x+alpha*2*s);
else
alpha=alpha/2;
end
end
x0=x;
fx0=fx;
ifn<n
g1=grad(f,x,h);
ifKC<=1
s=g1+(g1g)*g1/(g*g+1e5)*s;
else
s=g1+g1*g1/(g*g+1e5)*s;
end
g=g1;
end
ifn1>=nmax1
warning=warning+1;%kgtimduockichthuoctoiuu
389

else
warning=0;
end
end
if(warning>=2)|((norm(xxk0)<tolx)&(abs(fxfk0)<tolfun))
break;
end
end
xo=x;
fo=fx;
ifk==maxiter
fprintf(Giatritotnhatsau%dlanlap,maxiter)
end

8.PHNGPHPMPHNGQUTRNH

Tt c cc phng php tm im cc tiu m ta xt n nay ch lm


vicchiuqukhiimbanuclcchngnviimcctiu.
im cc tiu tm c l mt trong nhiu im cc tiu c th c v ta
khngchcltmcimcctiutoncc.Vnllmsaolplith
tctmcttcccimcctiutccimukhcnhauvara
im cc tiu ton cc. y l mt bi ton kh v khng c mt phng
php no xc nh c cc im u thch hp tm c tt c cc
imcctiu.Mtslachnthvdatrnstngtgiasvcc
tiuho.lqutrnhgianhitkhikimloilnnnhitcaohnnhit
nngchyvsauhnhitttccnguyntbkchthchmnh
cthtrvtrngthinnglngthp,tothnhmttinhthduynhtc
cutrchnhchnht.Lmnguinhanhscthtoraskhngngnht
v lm bin dngcu trc tinh th ging nh khi tmcc tiu ton cc qu
nhanh.Phngphpmphngqutrnh(simulatedannealingSA)cth
thchinbngcchdngphnbxcsutBoltzmanncamcnnglngE
tinhitT,cmtbng:

E
KT

p(E) = e

(1)
Chlnhitcao,ngcongphnbxcsutphngtrongmtphm
viErng,nglhthngcthtrngthinnglngcaocngngang
bngtrngthinnglngthp.Trongkhinhitthpngcong
390

phnbxcsutcaonhitthpvthpnhitcao,nglhthng
ckhnngmcnnglngthpnhiuhnnhngvncmtchinh
trngthinnglngcaoncththotkhitrngthinnglngcc
tiuaphng.

tngcathuttonSAgmccbcsau:
Chogitrbanu[xo],bindi[l],bintrn[u],slnlpccai,
kmax,hsttq>0(ttnhanhhaychm)vsaistngifcadao
nggitrcahm.
Cho[x]=[xo];[xo]=[x];[fo]=f([x])
Lptk=1nkmax

toravectngunhinN1:[U]=[1,+1]
k
100

k max

bin i vec t [U] bng lut nghch o vi = 10


tora[x]vly[x1]=[x]+[x]
nu[f]=f([x1])f([x])<0

[x]=[x1]vnuf([x])<[fo]th[x]=[xo]v[fo]=f([xo])
khngth:
to s ngu nhin z trong on [0, 1] v cho [x] = [x1] ch
trongtrnghpz<p
Vi[xo]gnviimcctiumtaangtmtacthdngnnh
gi tr u v dng cc quy tc tm cc tiu a phng khc tm
imcctiucahmf([x])
Da trn thut ton ny ta xy dng hm simannealing(). Hm ny c hai
phncsbclpthayikhinhitgim.Mtphnckchthcca
bctnh[x]torabivectngunhin[y]cccgitrnmtrongon[
1,1]vibin[x]ccngkchthcvnhn1([y])vihiu([u][l]).Quytc
nghcho:
y
(1 + )
1
g =
sign(y) y 1

(2)

thchintronghminvmu()vitngtheoquylut:
= 10

k
100

k max

(3)

functionx=muinv(y,mu)%luatmunghichdaoPt.(2)
x=(((1+mu).^abs(y)1)/mu).*sign(y);

391

Phncnlilxcsutcavicdngbc[x].Tngt(1)tac:
q

p=e

k
f

k max f ([ x ]) f

f > 0

(4)

Taxydnghmsimannealing()thchinthuttontrn:

function[xo,fo]=simannealing(f,x0,l,u,kmax,q,tolfun)
%PhuongphapSAdetimcuctieucuahamf(x)l<=x<=u
n=length(x0);
x=x0;
fx=feval(f,x);
xo=x;
fo=fx;
ifnargin<7
tolfun=1e10;
end
ifnargin<6
q=1;
end%hesotat
ifnargin<5
kmax=100;
end%solanlapmax
fork=0:kmax
Ti=(k/kmax)^q;
mu=10^(Ti*100);%Pt.(3)
dx=muinv(2*rand(size(x))1,mu).*(ul);
x1=x+dx;
x1=(x1<l).*l+(l<=x1).*(x1<=u).*x1+(u<x1).*u;
fx1=feval(f,x1);
df=fx1fx;
if(df<0)|(rand<exp(Ti*df/(abs(f(x)+eps))/tolfun))%Pt.(4)
x=x1;
fx=fx1;
end
iffx<fo
xo=x;
fo=fx1;
392

end
end

tmcctiucahmtadngchngtrnhctsimannealing.m:

clear,clc
f=inline(x(1)^416*x(1)^25*x(1)+x(2)^416*x(2)^25*x(2),x);
l=[55];
u=[55];%bienduoi/tren
%x0=[0.51];
x0=[00];
kmax=500;
q=1;
tolfun=1e10;
[xmin,fmin]=simannealing(f,x0,l,u,kmax,q,tolfun)
[xmin1,fmin1]=neldermead(f,x0,1e5,1e8,kmax)
[xmin2,fmin2]=fminsearch(f,x0)

Trong chng trnh trn, ta dng thm cc thut ton khc so snh. Kt
qulthuttonSActhtmccctiutoncc.Tuynhinkhngphi
khi no thut ton cng thnh cng. S thnh cng ca thut ton ny ph
thucgitruvmaymn,trongkhiccthuttonkhcsthnhcngch
phthucgitru.

9.THUTTONDITRUYN

Thuttonditruyn(geneticalgorithmGA)lmtkthuttmngu
nhincnhhng,mphngschnlctnhinccccthsngst
thch nghi nht. Cng nh thut ton SA, GA cho php tm c cc tiu
tonccngayckhihmitngcnhiucctrgmccimun,cc
cctiuaphng,cccciaphng.Thuttonditruynlaigmcc
bc:khign,chnlc,vtqua,tbin.Thuttongmccbcsau:
Cho gi tr u [xo] = [xo1, xo2,...,xoN] (N l kch thc ca bin), bin
di[l]=[l1,...,lN],bintrn[u]=[u1,...,uN],kchthccaqunthNp,
vec t Nb = [Nb1,..., NbN] gm s bit cc gn cho mi th hin ca mi
binxi,xcsutsngstPc,xcsuttbinPm,tlhc(01,th
393

hinhcnhanhhaychm),slnlpccikmax.Chlkchthc
ca[xo],[u],[l]ulN.
Khitongunhinscthbanucaqunth.
Cho[xo]=[xo],fo=f([xo])vxydngtheocchngunhinmngccc
thbanu[X1]chaNptrngthi(trongvngchophpbobibin
trn[u]vbindi[l])baogmctrngthibanu[xo]bngcch
t:
(1)

[X1(1)]=[xo],[X1(k)]=[l]+rand.([u][l])k=2,..,Np
Sau m ho mi s ca mng qun th ny thnh mt chui nh
phnbng:
m 1
m

P1 n,1 + N bi : N bi =biudinnhphncaX1(n,m)viNbmbit
i =1
i =1

X (n,m) l(m)
= ( 2 Nbm 1) 1

(2)
u(m) l(m)
vin=1,...,Npvm=1,...,N
sao cho ton th mng qun th tr thnh mng m mi hng l mt
N

nhinscthcbiudinbngchuinhphn N bi bit.
i =1

Lptk=1nkmax:

giimmiscamngthnhsthpphnbng:
m 1
m

X k (n,m) = biu din thp phn ca P1 n,1 + N bi : N bi

i =1
i =1
viNbmbit
u(m) l(m)
+ l(m)
= Pk (n,.)

(3)
( 2Nbm 1)
n=1,...,N;m=1,...,N
vtnhgitrf(n)cahmivimihngXk(n,:)=[x(n)]
tngngviminhimscthvtmcctiufmin=f(nb)
tngngviXk(n,:)=[x(nb)]
nufmin=f(nb)<fothtfo=f(nb)v[xo]=[x(nb)]
binigitrcahmthnhgitrthchhpbng:
N

f1 (n) = Max n=1p {f(n)} f(n)

(4)
nu Max n=1p {f(n)} 0 ,ktthcqutrnhv[xo]lgitrttnht.
N

Nukhng,tonhiunhinscthhnquanhimttnht
[x(nb)]chothhsau,tadngquytcchnlc:
394

f1 (n b ) f1 (n)
(5)
{[ x(n b )] [ x(n)]}
f1 (n b )
ccqunthmi[Xk+1]cXk+1(n,:)=[x(n)]vmhon
xydngmngPk+1mitheo(2)
xotrnchshngcamngPk+1
vixcsuttntiPc,thayiphncuibtutvibitngu
nhin ca cc s trong 2 cp nhim sc th ngu nhin(hng c
Pk+1)viccnhimscthkhccmatrn Pk +1
vixcsuttbinPm,nghchomtbtngunhinca mi
hngbiudinbinhimscth(hngca Pk +1 )toramng
Pk+1
Luthuttonnhsau:

Khign

nhgi

Nugitr
hmcaccnhimsc

Ktthc
thbngnhau

Chnlc

Vtqua

tbin

Taxydnghmgenetic()thchinthuttontrn:

function[xo,fo]=genetic(f,x0,l,u)

[ x(n)] = [ x(n)] +

395

%ThuattoanGeneticAlgorithmtimcuctieucuahamf(x)tgdoanl<=x<=u
N=length(x0);
kmax=100;%solanlap(thehe)
eta=1;%tilehoc(0<eta<1)
Pm=0.01;%xacsuatdotbien
Pc=0.5;end%xacsuattontai
Nb=8*ones(1,N);
Np=10;%sonhiemsacthe
%khoigan
NNb=sum(Nb);
xo=x0(:);
l=l(:);
u=u(:);
fo=feval(f,xo);
X(1,:)=xo;
forn=2:Np
X(n,:)=l+rand(size(x0)).*(ul);%Pt.(1)
end
P=genencode(X,Nb,l,u);%Pt.(2)
fork=1:kmax
X=gendecode(P,Nb,l,u);%Pt.(3)
forn=1:Np
fX(n)=feval(f,X(n,:));
end
[fxb,nb]=min(fX);
iffxb<fo
fo=fxb;
xo=X(nb,:);
end
fX1=max(fX)fX;%Pt.(4)
fXm=fX1(nb);
iffXm<eps
return;
end%ketthucneutatcacacnhiemsacthenhunhau
%Chonlocthehtieptheo
forn=1:Np
396

X(n,:)=X(n,:)+eta*(fXmfX1(n))/fXm*(X(nb,:)X(n,:));%Pt.(5)
end
P=genencode(X,Nb,l,u);
is=shuffle([1:Np]);
forn=1:2:Np1
ifrand<Pc
P(is(n:n+1),:)=crossover(P(is(n:n+1),:),Nb);
end
end
%Dotbien
P=mutation(P,Nb,Pm);
end

functionX=gendecode(P,Nb,l,u)
%giaima
Np=size(P,1);
N=length(Nb);
forn=1:Np
b2=0;
form=1:N
b1=b2+1;
b2=b1+Nb(m)1;%Pt.(3)
X(n,m)=bin2dec(P(n,b1:b2))*(u(m)l(m))/(2^Nb(m)1)+l(m);
end
end

functionP=genencode(X,Nb,l,u)
Np=size(X,1);
N=length(Nb);
forn=1:Np
b2=0;
form=1:N
b1=b2+1;
b2=b2+Nb(m);
Xnm=(2^Nb(m)1)*(X(n,m)l(m))/(u(m)l(m));%Pt.(2)
P(n,b1:b2)=dec2bin(Xnm,Nb(m));
397

end
end
functionchrms=crossover(chrms2,Nb)
Nbb=length(Nb);
b2=0;
form=1:Nbb
b1=b2+1;
bi=b1+mod(floor(rand*Nb(m)),Nb(m));
b2=b2+Nb(m);
tmp=chrms2(1,bi:b2);
chrms(1,bi:b2)=chrms(2,bi:b2);
chrms(2,bi:b2)=tmp;
end

functionP=mutation(P,Nb,Pm)
Nbb=length(Nb);
forn=1:size(P,1)
b2=0;
form=1:Nbb
ifrand<Pm
b1=b2+1;
bi=b1+mod(floor(rand*Nb(m)),Nb(m));
b2=b2+Nb(m);
P(n,bi)=~P(n,bi);
end
end
end

functionis=shuffle(is)
N=length(is);
forn=N:1:2
in=ceil(rand*(n1));
tmp=is(in);
is(in)=is(n);
is(n)=tmp;
end
398

tmcctiucahmtadngchngtrnhctgenetic.m:
clearall,clc
f=inline(x(1).^2+2*x(2).^2);
l=[55];
u=[55];%bienduoi/tren
x0=[00];
[xmin,fmin]=genetic(f,x0,l,u)

10.THUTTONFIBONACCI
Trongthuttontlvng,hailntnhgitrcahmcthchin
tilnlputinvsauchtnhgitrhmmtlntrongcclnlptip
theo.Gitrcarlhngstrongmionconvvictmimcctiukt
thctionconthkc a k b k < hay f(b k f(a k ) < .Phngphptm
theothuttonFibonaccikhcphngphptlvngchrkhngphil
hngstrnmioncon.Ngoirasoncon(sbclp)cxcnh
trc.ThuttontmFibonaccidatrndysFibonaccicxcnhbng
phngtrnh:

fo=0

f1=1

fn=fn1+fn2vin=2,3,...
NhvydysFibonaccil:0,1,1,2,3,5,8,13,21,34,55,...

Gistachmf(x)ccctiutrnon[a,b].Nhtrongphng
phptlvng,0.5<ro<1cchnsaochochaiimbntrongcovdo
s c dng trong on con tip theo v nh vy ch cn tnh gi tr ca
hmmtln.Nuf(co)<f(do)thcctiunmtrongon[ao,do]vtathay
a1 = a o v b1 = do vtiptctmtrongkhongmi [a1 ,b1 ] = [a o ,do ] .Nuf(co)
>f(do)thcctiunmtrongon[co,bo]vtathaya1=covb1=bovtip
tctmtrongkhongmi [a1 ,b1 ] = [ c o ,bo ] nhhnhv.

ao eo co

do

bo

ao

co

do

eo bo

399

Nuf(co)<f(do)vchmuntnhgitrcahmmtlntrongon[ao,bo]ta
schnr1(0.5<r1<1)trongoncon [a1 ,b1 ] = [a o , bo ] . Takhiub1=dov
doco[ao,do]nntac:

doco=b1d1

(1)
Tsrocchnsaochodoao=ro(boao)vcoao=(1ro)(boao)vthay
th:

doco=(doao)(coao)

doco=ro(boao)(1ro)(boao)

doco=(2ro1)(boao)

(2)
vr1cchnsaocho:

b1d1=(1r1)(b1a1)

(3)
Thay(2)v(3)vo(1)tac:

(2ro1)(boao)=(1r1)(b1a1)

(4)
Nhvyon[a,b]bcongnbnghsrov(b1a1)=ro(boao)v:

(2ro1)(boao)=(1r1)ro(boao)

(5)
Rtgntac:

(2ro1)=(1r1)ro

(6)
T(6)tatnhcr1:
1 ro
r1 =

(7)

ro
f
Trong(7),thay ro = n 1 tac:
fn
f
1 n 1
f f
f
fn
= n n 1 = n 2
r1 =

fn 1
fn 1
fn 1
fn
TartrarngthuttontmFibonaccicthbtubng:
f
f

ro = n 1
r1 = n2
fn
fn 1
v:
f
rk = n 1k ,k=1,2,...,n3
fn k

Bccuicngl:
f 1

rn3 = 2 =
f3 2
400

Thut ton tm Fibonacci gm (n 2) ln tnh. on con th (k+1) c c


f
bng cch gim di ca on th k bng h s rk = n 1k . Sau (n 2) ln
fn k
tnh,dicabccuicngl:
fn 1 fn 2 fn 3 f3 f3
f
1

(bo a o ) = 2 (bo a o ) = (bo a o )


L
fn fn 1 fn 2 f4 f3
fn
fn
1
Nusaischotrcl,nghal (bo a o ) < vcndngnlnlpvinl
fn
snguynnhnhtsaocho:
b ao
fn > o

(8)

Ccimbntrongckvdkcxcnhbng:

(9)
c k = a k + 1 + n 1k (bk a k )
f
nk

(10)

d k = a k +1 + n1k (b k a k )
fn k
Taxydnghmfibonacci()thchinthuttontrn:

function[x,y]=fibonacci(f,a,b,n)
%PhuongphapFibonaccidetimcuctieucua
%hamftrong(a,b)voinbuoctinh
fn2=1;
fn1=1;
fn=fn1+fn2;
fori=3:n
fn2=fn1;
fn1=fn;
fn=fn1+fn2;
end
l=(ba)*fn2/fn;
x1=a+l;
x2=bl;
f1=feval(f,x1);
f2=feval(f,x2);
fibn=fn;
ll1=ba;
401

forj=3:n
llj=ll1*fn2/fibn;
fn=fn1;
fn1=fn2;
fn2=fnfn1;
iff2>f1
b=x2;
l=(ba)*fn2/fn;
x2=x1;
x1=a+l;
f2=f1;
f1=feval(f,x1);
else
a=x1;
l=(ba)*fn2/fn;
x1=x2;
x2=bl;
f1=f2;
f2=feval(f,x2);
end
end
x=x1;y=f1;

tmcctiucahmtrongon(a,b)tadngchngtrnhctfibonacci.m:

clearall,clc
f=inline(1.6*x^23*x+2);
a=0.;
b=1;
n=50;
[x,y]=fibonacci(f,a,b,n)

402

You might also like