?? basicpso.m
字號:
%by 38171545
function exepso()
pso_size=30;%種群大小
dimens=10;%待優化問題的維數
run_max=3000;%迭代次數上限
BasicPSO(dimens,run_max,pso_size);%調用PSO函數
function [XX,fitness]=Calculate(XX,ddimens)%適應度值計算函數
%........................
fitness=0;
%Rastrigrin函數
for i=1:ddimens
if(XX(i)>5.12||XX(i)<-5.12)
XX(i)=10.24*rand-5.12;
end
end
for i=1:ddimens
fitness=fitness+(XX(i)*XX(i)-10*cos(2*pi*XX(i))+10);
end
fitness=-fitness;
function BasicPSO(dimens,run_max,pso_size)%PSO主函數
Pb=-9999999;%記錄群體最優適應度值
w_max=0.9;%最大權重
w_min=0.4;%最小權重
w=w_max;
c1=2;c2=2;%學習因子取值
check=0;m=0;
for i=1:pso_size%粒子位置、速度初始化
Yb(i)=0;
for j=1:dimens
Xb(i,j)=10.24*rand-5.12;%Xb記錄個體最優位置
X(i,j)=Xb(i,j);
V(i,j)=10*rand-5;
end
end
for i=1:pso_size
[X(i,:),Yb(i)]=Calculate(X(i,:),dimens);%計算適應度值
if Yb(i)>Pb
Pb=Yb(i);%Yb記錄個體最優適應度值
for j=1:dimens
Pp(j)=X(i,j);%Pp記錄群體最優位置
end
end
end
for count=1:run_max
for k=1:pso_size
for j=1:dimens
V(k,j)=w*V(k,j)+c1*rand*(Xb(k,j)-X(k,j))+c2*rand*(Pp(j)-X(k,j));%速度更新公式
if abs(V(k,j))>5.12%限制速度
if V(k,j)>0
V(k,j)=5.12;
else
V(k,j)=-5.12;
end
end
end
for i=1:dimens
X(k,i)=X(k,i)+V(k,i);%位置更新公式
end
[X(k,:),temp]=Calculate(X(k,:),dimens);%計算適應度值
if temp>=Yb(k)%更新個體最優適應度值和位置
Yb(k)=temp;
for i=1:dimens
Xb(k,i)=X(k,i);
end
end
if Yb(k)>=Pb%更新群體最優適應度值和位置
Pb=Yb(k);
for i=1:dimens
Pp(i)=X(k,i);
end
end
end
w=w_max-count*(w_max-w_min)/run_max;%基本慣性權重的計算公式
end
s=Pb
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -