Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function PID=Mutacja(pot)
- % pobranie rozmiaru macierzy
- [m,n]=size(pot(:,1:3))
- % rozpisanie nastaw P, I oraz D
- pM=pot(:,1);
- iM=pot(:,2);
- dM=pot(:,3);
- % ilosc genow w osobniku
- genMUT=8;
- % przygotowanie nastaw pod mutacje
- Pmut=char(pM);
- Imut=char(iM);
- Dmut=char(dM);
- % w rzeczywistosci jest o 2 mniej genow
- % jesli dojdzie do mutacji tych dwoch genow, o ktorych mowa wyzej, odpowiedzialnych za odstep
- % miedzy osobnikami, zwyczajnie je usuniemy z ostatecznej macierzy, kiedy
- % bedziemy rozlaczac wiersze by ponownie miec kazda nastawe osobno
- % stowrzenie macierzy mutacji
- MUTpot=char(pot);
- cpot=char(pot); % stworzone do sprawdzania, kiedy to jeszcze nie bylo w funckji
- % jak o ze u nas dwie pierwsze pozycje podlegają elitaryzmowi to petele
- % rozpoczynamy od 3 a nie 1
- for i=3:m
- for j=1:3
- switch j
- case 1
- for k=1:genMUT
- % ustalony próg 0,5- pokaze ktore geney podlegaja mutacji
- mutRUL=rand(1,genMUT)<0.05;
- if mutRUL(k) == 1
- if(Pmut(i,k) == '1') Pmut(i,k) = '0';
- else Pmut(i,k) = '1';
- end
- end
- end
- case 2
- for k=1:genMUT
- mutRUL=rand(1,genMUT)<0.05;
- if mutRUL(k) == 1
- if(Imut(i,k) == '1') Imut(i,k) = '0';
- else Imut(i,k) = '1';
- end
- end
- end
- case 3
- for k=1:genMUT
- mutRUL=rand(1,genMUT)<0.05;
- if mutRUL(k) == 1
- if(Dmut(i,k) == '1') Dmut(i,k) = '0';
- else Dmut(i,k) = '1';
- end
- end
- end
- otherwise;
- end
- end
- end
- % przywrocenie zmutowanych nastaw do stringa
- pmut=string(Pmut);
- imut=string(Imut);
- dmut=string(Dmut);
- % zamiana na wartosci decymalne
- P=bin2dec(pmut)/100;
- I=bin2dec(imut)/100;
- D=bin2dec(dmut)/100;
- PID=[P I D]
- % otrzymane nastawy regulatora
- out=[P I D];
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement