📄 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 + -