clear all clc % Algorytm PSO %Definicje dg = -5.12; % dolna graica przedizału gg = 5.12; % górna granica przedizału krok = 0.01; osob = 1000; % ilość osobników w roju ile = 30; % ilość wymiarów % Poziomy ufności c1 = 0.3; % zaufanie do własnego kierunku c2 = 0.4; % zaufanie swojej najlepszej pozycji c3 = 0.7; % zaufanie najlepszej pozycji sąsidów % Prędkość początkowa V(1,:) = [0,0]; max = 100; % ilość iteracji %% Generacja osobników w roju X=dg:krok:gg; rozmiar=length(X); X=X'; for i=1:osob a=randi(rozmiar,1); os(i,1)=X(a,:); a=randi(rozmiar,1); os(i,2)=X(a,:); end for k=1:max %% Wylicznie wartości funkcji for i=1:osob a = os(i,1)^2; b = os(i,2)^2; c = cos(2*pi*os(i,1)); d = cos(2*pi*os(i,2)); os(i,3)= ((a-(c*ile))+(b-(d*ile))); end plot3(os(:,1),os(:,2),os(:,3),'ro') title('Położenie osobników') %plot(os(:,1),os(:,2),'ro') % kontrola %% Wybór najlepszego osobnika nr=0; M=os(:,3)'; b=min(M); for i=1:osob if os(i,3) == b nr = i; end end %% Przkazanie danych o najlepszym rozwiazaniu danej iteracji X(k,:)=os(nr,1); Y(k,:)=os(nr,2); Z(k,:)=os(nr,3); %% Zapis Najlepszego ogólnego położenia if k == 1 opti=Z(k,:); px=X(k,:); py=Y(k,:); end if k > 1 if Z(k,:) < opti opti=Z(k,:); px=X(k,:); py=Y(k,:); else opti=opti; px=px; py=py; end end %% Nadanie prędkości for i=1:osob r1 = rand(1,1); r2 = rand(1,1); r3 = rand(1,1); ax = c1*r1*V(i,1); ay = c1*r1*V(i,2); bx = c2*r2*(X(k,:)-os(i,1)); by = c2*r2*(Y(k,:)-os(i,2)); c = c3*r3*(px-py); u=i+1; V(u,1)=ax+bx+c; V(u,2)=ay+by+c; end %% Aktualizacja położenia for i=1:osob os(i,1) = os(i,1)+V(i+1,1); os(i,2) = os(i,2)+V(i+1,2) ; drawnow end OP(k,:)=opti; czas(k,:)=k; pp(k,:)=px; ppp(k,:)=py; end rysuj disp('Znalazłem min o wartości') disp(opti) disp('w') disp(px) disp(py)