📄 pso_m.m
字号:
%-------------------------------PSO-----------------------------------%
% 粒子群优化算法 %
%---------------------------------------------------------------------%
nn=10; %粒子群规模,即粒子数
m=2; %粒子的维数,即寻优参数的个数
X_pso=rand(nn,m); %初始化粒子群的位置
V=rand(nn,m); %初始化粒子群的速度
Pbest=rand(nn,m); %粒子群的个体最优解
Gbest=rand(1,m); %粒子群的全体最优解
%Wmax=0.9;
%Wmin=0.1;
ITERmax=100; %进化代数
iter=1;
C1=2.05; %学习因子
C2=2.05; %学习因子
%K=2/abs(2-(C1+C2)-sqrt((C1+C2)^2-4*(C1+C2))); %压缩因子
%a=1 ; %约束因子
Xmax=100;
Vmax=10;
while(iter<=ITERmax)
for i=1:nn
for j=1:m
R1=rand;
R2=rand;
%W_pso=Wmax-(Wmax-Wmin)/ITERmax*iter; %惯性因子
Vinter=V(i,j)+R1*C1*(Pbest(i,j)-X_pso(i,j))+R2*C2*(Gbest(1,j)-X_pso(i,j));
if Vinter>Vmax
V(i,j)=Vmax;
elseif Vinter<-Vmax
V(i,j)=-Vmax;
else
V(i,j)=Vinter;
end
Xinter=X_pso(i,j)+V(i,j);
if Xinter>Xmax
X_pso(i,j)=Xmax;
elseif Xinter<-Xmax
X_pso(i,j)=-Xmax;
else
X_pso(i,j)=Xinter;
end
end
end
for i=1:nn
pres_X=fit_m(X_pso(i,:));
pres_Pbest=fit_m(Pbest(i,:));
pres_Gbest=fit_m(Gbest(1,:));
if pres_X<pres_Pbest
Pbest(i,:)=X_pso(i,:);
end
if pres_X<pres_Gbest
Gbest(1,:)=X_pso(i,:)
end
end
err(iter)=pres_Gbest;
if pres_Gbest<=10^(-30)
iter=ITERmax;
else
iter=iter+1;
end
end
%figure(1)
ploterr(err/2)
Gbest'
err/2
hold on
% figure(1)
% iter=1:1:ITERmax;
% plot(iter,err(iter),'b-o'); %每次迭代对应的gBest位置
%------------------------------备注-----------------------------------%
% %
%---------------------------------------------------------------------%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -