You are on page 1of 5

1.

Thng s khi to:


- S th h: 200
- S c th trong qun th: 20
- Mi c th c 1 nhim sc th, trong nhim sc th c 3 gen ng vi 3 gi
tr KP, KI, KD mt li gii ca bi ton.
- Tm ca cc gen l t 0-1000. Do khong tm kim cc gi tr KP, KI, KD
khng nm khong trn nn ta dng cc hng s D, d1, d2, d3 thay i
vng tm kim. KP, KI, KD ln lt s bng gi tr ca cc gen tr i D, sau
chia cho di.
- Mi gen s c 3 ch s sau du phy v 4 ch s c ngha.
- H s lai ghp: 0.7; h s t bin 0.3.
- Gi tr nh gi xp hng c th s tnh bng 1/J, vi J=e*e; e l ma
trn trch mu ca sai lch e gia u ra v gi tr t.
2. Khi to qun th:
Ta s dng hm random to ra 20 c th vi gi tr cc gen ngu nhin trong
khong 0-1000.
Sau khi c th h u tin, ta s nh gi xp hng cc c th bng cch ly
cc gi tr KP, KI, KD t chng ri thay vo m hnh m phng trong simulink.

M hnh m phng h trong simulink.


Gi tr sai s e s c a ra workspace. Vi thi gian ly mu 0.01s v thi
gian m phng 20s, e s l ma trn 1x2000. Gi tr in p u cng c a ra work
space kim tra.
Vi iu kin in p u vo khng vt qu 12V, ta s t iu nh sau:
1

if (length(e)>1900)&&(max(abs(u))<12)
Kp
Ki
Kd
J=e'*e
fitness(pop_index)=1/J;
else
J=10^100;
fitness(pop_index)=1/J;
end

Nu di ca e>1900 c ngha m phng tin hnh c 19s giy m ko c


li, ng thi gi tr tuyt i ln nht ca in p u khng vt qu 12V th ta s
chp nhn nhim sc th (hay c th) v gi tr fitness ca c th s c tnh
bng 1/J vi J=e*e. Gi tr fitness cng ln c ngha kh nng thch nghi ca c
th cng cao, c th s c xp hng cao hn v c to ra nhiu c th con hn.
Ngc li, nu iu kin khng tha mn, J s l mt s v cng ln, khi
fitness tng ng vi c th s v cng nh.
Sau khi nh gi c th h u tin, ta s bt u tin hnh vng lp li ghp
cho n khi tm c gi tr tha mn, hoc n khi 200 th h.
2. M ha.
Cc b m s ln lt c m ha c th tin hnh lai ghp v t bin.
y ta chn php m ha base-10. Php m ha ny s tch ri cc ch s thp phn
ca mi gen thnh cc ch s n l. VD 128 m ha s c 3 ch s 1, 2 v 8.
3. Xp hng.
B m sau khi m ha s c xp hng theo gi tr thch nghi fitness. B m
c gi tr fitness cao s c xp hng cao hn.
4. Lai ghp.
B m sau khi xp hng s cho tin hnh lai ghp thu c th h con.
y ta lun gi li cha m tt nht (c xp hng cao nht) sang th h tip theo
m bo khng b mai mt ngun gen tt.
Trong php lai ny ta s dng php lai ghp 2 im, c ngha chn ngu nhin
2 im mi gen ri trao i ngu nhin cc ch s mi gen theo h s cross_prob.
5. t bin.
Sau khi lai ghp ta s cho t bin mt vi c th trong th h con mi c
to ra. Mt ch s ngu nhin trong mt gen (c th) ngu nhin s b thay i gi
tr. T l t bin da trn h s mutate_prob.

6. Gii m.
Qun th thu c sau t bin s c gii m, tr v cc s thc t 01000 trong cc gen.
7. Chy th, nh gi.
Sau khi thu c qun th mi, ta s ly b s KP, KI, KD trong tng c th ri
a vo m phng kim tra. C th no cho kt qu m phng tt s c gi tr J
nh hn, tng ng l fitness-kh nng thch nghi ln hn
8. Kim tra iu kin dng.
Sau khi chy m phng kim tra ht 20 c th ta s nh gi gi tr fitness, nu
t yu cu th ta cho dng vng lp m khng cn chy ht 200 th h. Nu
khng vng lp s quay li t u, c th cho n khi 200 th h th thi.
Cui cng sau khi chy ht vng lp, ta s nh gi vng lp GA bng gi tr
th bestfit (bestfit l nhng gi tr J tt nht ca tng th h). Nu th gim
dn v sau nhiu th h m khng gim c thm na th c th coi gi tr cui
cng thu c l cc tr ca bi ton.

th bestfit. ( y gi t bestfit t 50 tr v trc l v cng ln v


ngha, nn ta b qua)
Code:
clc;%xoa bo man hinh
clear all%xoa bo toan bo du lieu truoc do
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Km=0.05; tm=0.1; D=500; d1=5; d2=2; d3=200;

c=0.0001; wn=30; E=100;


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
max_generation=300;
epsilon=0.001; %J chuan(neu the he nao co J<=epsilon tuc la da tim duoc thog
so thoa man, GA khong can chay tiep nua)
pop_size=20; % so ca the trong qun the(so cha me)
npar = 3;
range=[ 0
0
0;...
1000 1000 1000]; %tam cua cac NST
dec=[3 3 3]; %vi tri dau cham thap phan
sig=[4 4 4]; %so chu so co nghia trong moi nhiem sac the
cross_prob = 0.7; %he so lai ghep
mutate_prob = 0.3; %he so dot bien(he so dot bien + he so lai ghep =1)
elitism = 1; %luon giu lai gia tri tot nhat
par=Init(pop_size,npar,range); %khoi tao 20 ca the cha me dau tien
Terminal=0;
%KHOI DONG
generation = 0;
%CAC GIA TRI
stall_generation=0;%DAU TIEN TRUOC KHI CHAY ga
for pop_index=1:pop_size,
Kp=(par(pop_index,1)-D)/d1;
Ki=(par(pop_index,2)-D)/d2;
Kd=(par(pop_index,3)-D)/d3;
sim('SIMU.mdl');
if (length(e)>1900)&&(max(abs(u))<12)
Kp
Ki
Kd
J=e'*e
fitness(pop_index)=1/(J);
else
J=10^100;
fitness(pop_index)=1/(J);
end
end;
[bestfit,bestchrom]=max(fitness);
Kp10=(par(bestchrom,1)-D)/d1;
Ki10=(par(bestchrom,2)-D)/d2;
Kd10=(par(bestchrom,3)-D)/d3;
J0=1/bestfit+0.001;

%cac
%nhiem sac the

while ~Terminal, %Terminal se bang 1 neu chay du 200 the he hoac trong qua
trinh chay co 1 the he con cai c bestfit thoa man sai so <epsilon
generation = generation+1;
disp(['generation #' num2str(generation) ' of maximum '
num2str(max_generation)]);
pop=Encode_Decimal_Unsigned(par,sig,dec);
parent=Select_Linear_Ranking(pop,fitness,0.2,elitism,bestchrom);
child=Cross_Twopoint(parent,cross_prob,elitism,bestchrom);
pop=Mutate_Uniform(child,mutate_prob,elitism,bestchrom);
par=Decode_Decimal_Unsigned(pop,sig,dec);
for pop_index=1:pop_size,
Kp=(par(pop_index,1)-D)/d1;
Ki=(par(pop_index,2)-D)/d2;
Kd=(par(pop_index,3)-D)/d3;
sim('SIMU.mdl');
if (length(e)>1900)&&(max(abs(u))<12)

Kp
Ki
Kd
J=e'*e
fitness(pop_index)=1/(J);
else
J=10^100;
fitness(pop_index)=1/(J);
end
end;
[bestfit(generation),bestchrom]=max(fitness);
if generation == max_generation
Terminal = 1;
elseif generation>1,
if abs(bestfit(generation)-bestfit(generation-1))<epsilon,
stall_generation=stall_generation+1;
if stall_generation == max_stall_generation, Terminal = 1;
end
else
stall_generation=0;
end;
end;
end;
plot(1./bestfit)
Kp=(par(bestchrom,1)-D)/d1
%hien thi
Ki=(par(bestchrom,2)-D)/d2
%cac nhiem sac the
Kd=(par(bestchrom,3)-D)/d3
J=1/bestfit(end) %ham tieu chuan tuong ung ca the con tot nhat do
sim('SIMU.mdl');

You might also like