%YSPSO_yx
clear all
global popNum dim b5 P sample_number e5
load("b5.mat");
load("phi5.mat");
load("e5.mat");
load("sample_number.mat");
kk=30; %大循环次数
N =50; % 初始种群个数
dim =9;
M =1000; % 最大迭代次数
c1=3;
c2=2;
phi = c1 + c2;
if phi <= 4
disp('c1 与 c2 的 和 必 须 大 于 4 !');
xm = NaN;
fv = NaN;
return;
end
format long;
e5_bound0 =[1 5]; %定义系统误差范围i
e5_bound1 =[-5 -1]; %定义系统误差范围i
e5_bound2 =[-0.1 0.1]; %定义系统误差范围i
e5_bound3 =[-0.01 0.01]; %定义系统误差范围i
for k=1:kk
tic
%------初始化种群的个体------------
x(:,1,1)= e5_bound0(1)+rand(N,1,1)*(e5_bound0(2)-e5_bound0(1));%随机生成系统误差
x(:,2,1)= e5_bound1(1)+rand(N,1,1)*(e5_bound1(2)-e5_bound1(1));%随机生成系统误差
x(:,3,1)= e5_bound0(1)+rand(N,1,1)*(e5_bound0(2)-e5_bound0(1));%随机生成系统误差
x(:,4,1)= e5_bound2(1)+rand(N,1,1)*(e5_bound2(2)-e5_bound2(1));%随机生成系统误差
x(:,5,1)= e5_bound2(1)+rand(N,1,1)*(e5_bound2(2)-e5_bound2(1));%随机生成系统误差
x(:,6,1)= x(:,2,1)./(100+100*rand(N,1));%随机生成系统误差
x(:,7,1)= x(:,3,1)./(100+100*rand(N,1));%随机生成系统误差
x(:,8,1)= x(:,4,1)./(100+100*rand(N,1));%随机生成系统误差
x(:,9,1)= x(:,5,1)./(100+100*rand(N,1));%随机生成系统误差
for i=1:N
for j=1:dim
% x(i,j)=randn; %随机初始化位置
v(i,j)=randn; %随机初始化速度
end
end
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:N
p(i)=f(x(i,:));
y(i,:)=x(i,:);
end
pg = x(N,:); %Pg为全局最优
for i=1:(N-1)
if f(x(i,:))<f(pg)
pg=x(i,:);
end
end
%------进入主要循环,按照公式依次迭代------------
for t=1:M
for i=1:N
ksi = 2 / abs(2 - phi - sqrt(phi^2 - 4*phi));
v(i,:) = v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
v(i,:) = ksi*v(i,:);
x(i,:)=x(i,:)+v(i,:);
if f(x(i,:))<p(i)
p(i)=f(x(i,:));
y(i,:)=x(i,:);
end
if p(i)<f(pg)
pg=y(i,:);
end
end
Pbest(k,t)=f(pg);
end
pgsave(k,:)=pg;
yspso_tm(k)=toc;
end
% xm = pg';
% fv = f(pg);
% figure(1)
% semilogy(Pbest,'r-*','linewidth',2);
yspso_fit=zeros(M,1);
yspso_pg=zeros(kk,dim);
for i=1:M
for j=1:kk
yspso_fit(i,1)=yspso_fit(i,1)+Pbest(j,i);
end
end
for i=1:dim
for j=1:kk
yspso_pg(j,i)=yspso_pg(j,i)+pgsave(j,i);
end
end
yspso_fit=yspso_fit/kk;
yspso_pg=yspso_pg/kk;
semilogy(yspso_fit,'r-*','linewidth',2);