Advertisement
Ostu

Untitled

Dec 10th, 2021
1,137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.23 KB | None | 0 0
  1. function PID=Mutacja(pot)
  2.  
  3. % pobranie rozmiaru macierzy
  4. [m,n]=size(pot(:,1:3))
  5.  
  6.  
  7.  
  8. % rozpisanie nastaw P, I oraz D
  9. pM=pot(:,1);
  10. iM=pot(:,2);
  11. dM=pot(:,3);
  12.  
  13. % ilosc genow w osobniku
  14. genMUT=8;
  15.  
  16. % przygotowanie nastaw pod mutacje
  17. Pmut=char(pM);
  18. Imut=char(iM);
  19. Dmut=char(dM);
  20.  
  21. % w rzeczywistosci jest o 2 mniej genow
  22. % jesli dojdzie do mutacji tych dwoch genow, o ktorych mowa wyzej, odpowiedzialnych za odstep
  23. % miedzy osobnikami, zwyczajnie je usuniemy z ostatecznej macierzy, kiedy
  24. % bedziemy rozlaczac wiersze by ponownie miec kazda nastawe osobno
  25.  
  26. % stowrzenie macierzy mutacji
  27. MUTpot=char(pot);
  28. cpot=char(pot); % stworzone do sprawdzania, kiedy to jeszcze nie bylo w funckji
  29.  
  30.  
  31. % jak o ze u nas dwie pierwsze pozycje podlegają elitaryzmowi to petele
  32. % rozpoczynamy od 3 a nie 1
  33. for i=3:m
  34.  
  35.     for j=1:3
  36.         switch j
  37.         case 1
  38.            
  39.             for k=1:genMUT
  40.                 % ustalony próg 0,5- pokaze ktore geney podlegaja mutacji
  41.              
  42.                 mutRUL=rand(1,genMUT)<0.05;
  43.                 if mutRUL(k) == 1
  44.                         if(Pmut(i,k) == '1') Pmut(i,k) = '0';
  45.                         else Pmut(i,k) = '1';
  46.                      end
  47.                     end
  48.             end
  49.            
  50.         case 2
  51.  
  52.            
  53.                 for k=1:genMUT
  54.                 mutRUL=rand(1,genMUT)<0.05;
  55.                 if mutRUL(k) == 1
  56.                         if(Imut(i,k) == '1') Imut(i,k) = '0';
  57.                         else Imut(i,k) = '1';
  58.                      end
  59.                     end
  60.                 end
  61.            
  62.         case 3
  63.            
  64.                 for k=1:genMUT
  65.                 mutRUL=rand(1,genMUT)<0.05;
  66.                 if mutRUL(k) == 1
  67.                         if(Dmut(i,k) == '1') Dmut(i,k) = '0';
  68.                         else Dmut(i,k) = '1';
  69.                      end
  70.                     end
  71.                 end
  72.            
  73.         otherwise;
  74.     end
  75. end
  76.  
  77.  
  78.  
  79.  
  80.  
  81. end
  82.  
  83. % przywrocenie zmutowanych nastaw do stringa
  84. pmut=string(Pmut);
  85. imut=string(Imut);
  86. dmut=string(Dmut);
  87.  
  88. % zamiana na wartosci decymalne
  89. P=bin2dec(pmut)/100;
  90. I=bin2dec(imut)/100;
  91. D=bin2dec(dmut)/100;
  92.  
  93. PID=[P I D]
  94. % otrzymane nastawy regulatora
  95. out=[P I D];
  96. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement