is_z4_aden_abazovic_i_arnel_selimovic

14
UNIVERZITET U TUZLI FAKULTET ELEKTROTEHNIKE TEHNIČKA INFORMATIKA Domaća zadaća br : 4 INTELIGENTNI SISTEMI Studenti: Abazović Aden II-9/08 Selimović Arnel II-37/08 ZADATAK

Upload: arnel89

Post on 21-Apr-2015

18 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

UNIVERZITET U TUZLI FAKULTET ELEKTROTEHNIKE TEHNIČKA INFORMATIKA

Domaća zadaća br : 4 INTELIGENTNI SISTEMI

Studenti: Abazović Aden II-9/08 Selimović Arnel II-37/08

ZADATAK

Page 2: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Analizirati rad genetskog algoritma na optimizaciji funkcije dvije realne promjenljive (naći globalni optimum funkcije), koju je potrebno samostalno pronaći. Ispitati ponašanje algoritma za različite vrijednosti broja generacija, veličine populacije, vjerovatnoće ukrštanja i vjerovatnoće mutacije. Grafički prikazati rezultate i obrazložiti zaključke.

PROBLEM:

Page 3: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Naziv problema: Određivanje minimuma funkcije dvije realne promjenjive . Funkcija tipa:

Matlab kod i funkcije koje bi dovele do rješenja navedenog problema dati su u nastavku: Osnovna MATLAB skripta: % Genetski algoritmi za računanje min i max funkcije cilja generation_n=60 % Broj generacija popuSize=20 % Veličina populacije xover_rate= 0.6 %Vjerovatnoća ukrštanja mut_rate=0.02 %Vjerovatnoća mutacije bit_n=16 % Broj bita korišten za predstavu svake ul.varijable figure; obj_fcn='G_Pfunction2'; % Funkcija cilja var_n=2 % Broj ulaznih varijabli range=[-10,10;-10,10]; % Domen ulaznih varijabli % crtanje funkcije (G_PFunction) G_PFunction; % Inicijalna slučajna populacija popu=randn(popuSize,bit_n*var_n)<0.5 fprintf('Inicijalna populacija: \n') for i=1:popuSize for j=1:bit_n*var_n fprintf('%1.0f,popu(i,j)') end fprintf('\n'); end upper= zeros(generation_n,1); % Glavna petlja GA for i=1:generation_n; k=i; %Izračunavanje funkcije cilja za svaku individuu fcn_value=evalpopu(popu,bit_n,range,obj_fcn); if(i==1), fprintf('Inicijalna populacija: \n') for j=1:popuSize fprintf('f(%f,)=%f\n',bit2num(popu(j,1:bit_n),range(1,:)),fcn_value(j)) end end % Punjenje matrica cilja upper(i)=max(fcn_value); %prikazivanje najbolje individue [best,index]=max(fcn_value); fprintf('Generation %i:',i) fprintf('f(%f)=%f\n',bit2num(popu(index,1:bit_n),range(1,:)),best) % generisanje nove populacije pomoću ukrštanja i mutacije popu=nextpopu(popu,fcn_value,xover_rate,mut_rate,k); if(i==1|i==10|i==20|i==30|i==40|i==50) fprintf('Populacija nakon %d-te generacije: \n',i) end end figure; x=(1:generation_n)'; plot(x,upper,'*');

Page 4: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

hold on; plot(x,[upper]); hold off; xlabel('Generacije') ylabel('Fitnes') Funkcija bit2num function num=bit2num(bit_n,range) integer=polyvalm(bit_n,1); num=integer.*((range(1)-range(2))/(2.^length(bit_n)-1))+range(1);

Funkcija evaleach function out=evaleach(string,bit_n,range,obj_fcn) var_n=length(string)/bit_n; input=zeros(1,var_n); for i=1:var_n input(i)=bit2num(string((i-1).*bit_n+1:i.*bit_n),range(i,:)); end out=feval(obj_fcn,input);

Funkcija evalpopu function fitness=evalpopu(popu,bit_n,range,obj_fcn) pop_n=size(popu,1); fitness=zeros(pop_n,1); for count=1:pop_n fitness(count)=evaleach(popu(count,:),bit_n,range,obj_fcn); end Funkcija nextpopu function new_popu=nextpopu(popu,fitness,xover_rate,mutate_rate,k) new_popu=popu; popu_s=size(popu,1); string_leng=size(popu,2); % Nalaženje dva najbolja hromosoma tmp_fitness=fitness; [junk,index1]=min(tmp_fitness); % nalaženje najboljeg tmp_fitness(index1)=min(tmp_fitness); [junk,index2]=min(tmp_fitness);% nalaženje narednog najboljeg new_popu([1 2],:)=popu([index1 index2],:); fitness=max(fitness)-fitness; total=sum(fitness); if (k==1) fprintf('Fitnes svakog hromosoma nakon oduzimanja\n'); for i=1:popu_s fprintf('%10.3f \n',fitness(i)); end fprintf('suma fitnesa %10.5f \n',total); end if total==0 fprintf('=== Upozorenje konvergira ka jednoj tacki ===\n'); fitness=ones(popu_s,1)/popu_s; % suma je 1 else fitness=fitness/sum(fitness);% suma je 1 end cum_prob=cumsum(fitness);

Page 5: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

if(k==1) fprintf('Vjerovatnoća svakog hromosoma i kumulativna suma\n'); for i=1:popu_s fprintf('%10.3f %10.3f\n',fitness(i),cum_prob(i)); end end % ===== SELEKCIJA I UKRŠTANJE for i=2:popu_s/2 % === Odabir dva roditela na osnovu njihovog skaliranog fitnesa tmp=find(cum_prob-rand>0); tmp1=tmp(1); parent1=popu(tmp(1),:); tmp=find(cum_prob-rand>0); tmp2=tmp(1); parent2=popu(tmp(1),:); % === ukrštanje if rand<xover_rate % Izvođenje ukrštanja xover_point=ceil(rand.*(string_leng-1)); new_popu(i.*2-1,:)=... [parent1(1:xover_point) parent2(xover_point+1:string_leng)]; new_popu(i.*2,:) = ... [parent2(1:xover_point) parent1(xover_point+1:string_leng)]; end if (k==1) fprintf('Tacka_ukrstanja = %d\n',xover_point); fprintf('Roditelj je %d hromosom u populaciji \n',tmp1); for j=1:string_leng fprintf('%d',parent1(j)); end fprintf('\n'); fprintf('Roditelj je %d hromosom u populaciji \n',tmp2); for j=1:string_leng fprintf('%d',parent2(j)); end fprintf ('Nakon ukrstanja\n'); for j=1:string_leng fprintf('%d',new_popu(i.*2-1,j)) end fprintf('\n'); end end if (k==1) fprintf ('Nakon ukrstanja populacije\n'); for i=1:popu_s for j=1:string_leng fprintf('%d',new_popu(i,j)) end fprintf('\n') fprintf('\n') end end % ==== MUTACIJA mask=rand(popu_s,string_leng)<mutate_rate; new_popu=xor(new_popu,mask); if(k==1) fprintf('Rezultati nakon mutacije\n'); for i=1:popu_s for j=1:string_leng fprintf('%d',new_popu(i,j)) end fprintf('\n'); fprintf('\n'); end

Page 6: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

end new_popu([1 2],:)=popu([index1 index2],:); Funkcija G_PFunction function z=G_PFunction(arg1,arg2); if nargin==0 dx=3/10; [x,y]=meshgrid(-10:dx:10); elseif nargin==1 if length(arg1)==1 [x,y]=meshgrid(-10:4/(arg1-1):10); else [x,y]=meshgrid(arg1,arg2) end else x=arg1; y=arg2; end z=cos(sqrt(x.^2+y.^2))+((sin(x.^2-y.^2)).^2)./((x.^2+y.^2).^2); if nargout>1 x=x; elseif nargout==1 x=z; else % Prikaz izraza funkcije disp(' ') disp('z=cos(sqrt(x.^2+y.^2))+((sin(x.^2-y.^2)).^2)./((x.^2+y.^2).^2)') axis([min(min(x)) max(max(x)) min(min(y)) max(max(x))... min(min(z)) max(max(z))]) surf(x,y,z) xlabel('x'),ylabel('y'),title('z=cos(sqrt(x.^2+y.^2))+((sin(x.^2-y.^2)).^2)./((x.^2+y.^2).^2)') end Funkcija G_Pfunction2 function z=G_Pfunction2(input) % G_Pfunction2 vraca vrijednost funkcije x=input(1);y=input(2); z=cos(sqrt(x.^2+y.^2))+((sin(x.^2-y.^2)).^2)./((x.^2+y.^2).^2);

Page 7: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Da bi analizirali GA posmatrat ćemo pet primjera: Parametri i poziv za prvi primjer: generation_n=60 % Broj generacija popuSize=20 % Veličina populacije xover_rate= 0.6 %Vjerovatnoća ukrštanja mut_rate=0.02 %Vjerovatnoća mutacije Populacija nakon 1-te generacije: Generation 2:f(-10.002747)=-0.008206 Generation 3:f(-10.003052)=-0.009069 Generation 4:f(-10.003052)=-0.009069 Generation 5:f(-10.003357)=-0.009069 Generation 6:f(-10.003357)=-0.009069 Generation 7:f(-10.003357)=-0.009069 Generation 8:f(-10.003052)=-0.009284 Generation 9:f(-10.003967)=-0.009716 Generation 10:f(-10.003052)=-0.009716 Populacija nakon 10-te generacije: Generation 11:f(-10.003052)=-0.009716 Generation 12:f(-10.003052)=-0.009500 Generation 13:f(-10.002747)=-0.009500 Generation 14:f(-10.002747)=-0.009500 Generation 15:f(-10.002747)=-0.009500 Generation 16:f(-10.002441)=-0.009284 Generation 17:f(-10.002441)=-0.009500 Generation 18:f(-10.003357)=-0.009932 Generation 19:f(-10.003357)=-0.009500 Generation 20:f(-10.003052)=-0.009932 Populacija nakon 20-te generacije: Generation 21:f(-10.003357)=-0.009932 Generation 22:f(-10.003357)=-0.009716 Generation 23:f(-10.003662)=-0.009932 Generation 24:f(-10.003662)=-0.009932 Generation 25:f(-10.003662)=-0.010363 Generation 26:f(-10.003967)=-0.010795 Generation 27:f(-10.003967)=-0.010795 Generation 28:f(-10.003967)=-0.010579 Generation 29:f(-10.003662)=-0.010795 Generation 30:f(-10.003967)=-0.010795 Populacija nakon 30-te generacije: Generation 31:f(-10.003967)=-0.010795 Generation 32:f(-10.003967)=-0.010579 Generation 33:f(-10.003967)=-0.010363 Generation 34:f(-10.003662)=-0.010579 Generation 35:f(-10.003662)=-0.010579 Generation 36:f(-10.003662)=-0.010795 Generation 37:f(-10.003967)=-0.010795 Generation 38:f(-10.003052)=-0.010148 Generation 39:f(-10.003967)=-0.010579 Generation 40:f(-10.003967)=-0.010363 Populacija nakon 40-te generacije: Generation 41:f(-10.003357)=-0.010148

Page 8: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Generation 42:f(-10.003357)=-0.010148 Generation 43:f(-10.004273)=-0.011011 Generation 44:f(-10.004273)=-0.011011 Generation 45:f(-10.004273)=-0.010795 Generation 46:f(-10.003662)=-0.010148 Generation 47:f(-10.003662)=-0.009932 Generation 48:f(-10.003662)=-0.009932 Generation 49:f(-10.003662)=-0.009932 Generation 50:f(-10.003662)=-0.009932 Populacija nakon 50-te generacije: Generation 51:f(-10.003662)=-0.010148 Generation 52:f(-10.003967)=-0.010363 Generation 53:f(-10.003052)=-0.010148 Generation 54:f(-10.003052)=-0.010148 Generation 55:f(-10.003052)=-0.009932 Generation 56:f(-10.003052)=-0.009932 Generation 57:f(-10.003052)=-0.010363 Generation 58:f(-10.003967)=-0.010148 Generation 59:f(-10.003662)=-0.009716 Generation 60:f(-10.003967)=-0.010795

Page 9: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic
Page 10: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Parametri i poziv za drugi primjer: generation_n=160 % Broj generacija popuSize=20 % Veličina populacije xover_rate= 0.6 %Vjerovatnoća ukrštanja mut_rate=0.02 %Vjerovatnoća mutacije

Page 11: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Parametri i poziv za treci primjer: generation_n=60 % Broj generacija popuSize=50 % Veličina populacije xover_rate= 0.6 %Vjerovatnoća ukrštanja mut_rate=0.02 %Vjerovatnoća mutacije

Page 12: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Parametri i poziv za cetvrti primjer: generation_n=60 % Broj generacija popuSize=20 % Veličina populacije xover_rate= 1 %Vjerovatnoća ukrštanja mut_rate=0.02 %Vjerovatnoća mutacije

Page 13: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Parametri i poziv za peti primjer: generation_n=60 % Broj generacija popuSize=20 % Veličina populacije xover_rate= 0.6 %Vjerovatnoća ukrštanja mut_rate=0.5 %Vjerovatnoća mutacije

Page 14: IS_Z4_Aden_Abazovic_i_Arnel_Selimovic

Zaključak: Analizom dobijenih rezultata i analitički i grafički za prethodnih pet primjera može se zaključiti neka ovisnost rezultata genetskog algoritma u ovisnosti od veličine populacije ,broja generacija te vjerovatnoće ukrštanja i mutacije. Ukoliko je broj generacija veći , konvergencija postupka je vjerovatnija. Veća vjerovatnoća ukrštanja vodi tome da će se „geni“ dobrih „hromozoma“ češće javljati u populaciji . Upravo ti geni će vjerovatno dovesti ili voditi do konvergiranja ka pravom rješenju problema. Što je vjerovatnoća mutacije veća , tada je i prostor eventualnih rješenja veći pa samim tim i nastaju novi smjerovi traženja rješenja . Time se stvaraju uslovi za sprečavanje eventualnog zadržavanja oko lokalnog optimuma. Veća veličina populacije implicira povećanom broju hromozoma , što ponovo stvara veću mogućnost pojavljivanja dobrih hromozoma. Očigledno je i logično da se u ovisnosti o problemu koji se rješava ovi parametri podešavaju po potrebi. S tim u vezi ne bi trebalo pretjerivati u nekim zahtjevima.