Advertisement
ForeverStrong

Algorytm PSO

Feb 3rd, 2015
405
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.21 KB | None | 0 0
  1. clear all
  2. clc
  3. % Algorytm PSO
  4.  
  5. %Definicje
  6.  
  7. dg      = -5.12;    % dolna graica przedizału
  8. gg      =  5.12;    % górna granica przedizału
  9. krok    =  0.01;
  10.  
  11. osob    =  1000;      % ilość osobników w roju
  12.  
  13. ile     =  30;      % ilość wymiarów
  14.  
  15. % Poziomy ufności
  16.  
  17. c1      = 0.3;      % zaufanie do własnego kierunku
  18. c2      = 0.4;      % zaufanie swojej najlepszej pozycji
  19. c3      = 0.7;      % zaufanie najlepszej pozycji sąsidów
  20.  
  21. % Prędkość początkowa
  22. V(1,:)  = [0,0];
  23.  
  24. max     = 100;     % ilość iteracji
  25.  
  26. %% Generacja osobników w roju
  27. X=dg:krok:gg;
  28. rozmiar=length(X);
  29. X=X';
  30. for i=1:osob
  31.  
  32.     a=randi(rozmiar,1);
  33.     os(i,1)=X(a,:);
  34.     a=randi(rozmiar,1);
  35.     os(i,2)=X(a,:);
  36.    
  37. end
  38.  
  39. for k=1:max
  40. %% Wylicznie wartości funkcji
  41.  
  42. for i=1:osob
  43.     a = os(i,1)^2;
  44.     b = os(i,2)^2;
  45.     c = cos(2*pi*os(i,1));
  46.     d = cos(2*pi*os(i,2));
  47.     os(i,3)= ((a-(c*ile))+(b-(d*ile)));
  48.    
  49. end
  50.  
  51. plot3(os(:,1),os(:,2),os(:,3),'ro')
  52. title('Położenie osobników')
  53. %plot(os(:,1),os(:,2),'ro') % kontrola
  54.  
  55. %% Wybór najlepszego osobnika
  56. nr=0;
  57. M=os(:,3)';
  58. b=min(M);
  59. for i=1:osob
  60.        
  61.         if os(i,3) == b
  62.             nr = i;
  63.         end
  64.      
  65. end
  66. %% Przkazanie danych o najlepszym rozwiazaniu danej iteracji
  67.  
  68. X(k,:)=os(nr,1);
  69. Y(k,:)=os(nr,2);
  70. Z(k,:)=os(nr,3);
  71.  
  72. %% Zapis Najlepszego ogólnego położenia
  73. if k == 1
  74.     opti=Z(k,:);
  75.     px=X(k,:);
  76.     py=Y(k,:);
  77. end
  78.  
  79. if k > 1
  80.     if Z(k,:) < opti
  81.         opti=Z(k,:);
  82.         px=X(k,:);
  83.         py=Y(k,:);
  84.     else
  85.         opti=opti;
  86.         px=px;
  87.         py=py;
  88.     end
  89. end
  90.  
  91.    
  92. %% Nadanie prędkości
  93. for i=1:osob
  94.     r1  = rand(1,1);
  95.     r2  = rand(1,1);
  96.     r3  = rand(1,1);
  97.     ax   = c1*r1*V(i,1);
  98.     ay   = c1*r1*V(i,2);
  99.     bx   = c2*r2*(X(k,:)-os(i,1));
  100.     by   = c2*r2*(Y(k,:)-os(i,2));
  101.     c   =  c3*r3*(px-py);
  102.     u=i+1;
  103.     V(u,1)=ax+bx+c;
  104.     V(u,2)=ay+by+c;
  105. end
  106. %% Aktualizacja położenia
  107.  
  108. for i=1:osob
  109.  
  110.     os(i,1) =   os(i,1)+V(i+1,1);    
  111.     os(i,2) =   os(i,2)+V(i+1,2) ;  
  112.     drawnow
  113.  
  114. end
  115.  
  116. OP(k,:)=opti;
  117. czas(k,:)=k;
  118. pp(k,:)=px;
  119. ppp(k,:)=py;
  120. end
  121.  
  122. rysuj
  123. disp('Znalazłem min o wartości')
  124. disp(opti)
  125. disp('w')
  126. disp(px)
  127. disp(py)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement