📄 pso2.m
字号:
function pso2
POPSIZE= 100;
DIMENSION=2;
chushicishu=50;%调整w次数
turn=50;%不通初始值次数
%全局变量定义
W=1.0;
C1=1.8;
C2=1.8;
VMAX=2;
VMIN=-2;%可以取大些
XMIN=2.0105;
XMAX=4.0001;
total=0;
sum=0;
for rr=1:turn
%initiate();
%****************%初始化
for(i=1:POPSIZE)
for(j=1:DIMENSION)
weizhi(i,j)=rand()*(XMAX-XMIN)+XMIN;
speed(i,j)=rand()*(VMAX-VMIN)+VMIN;%VMAX*rand();
best(i,j)=weizhi(i,j);
end
end
for(i=1:POPSIZE) %计算适应度
s=0;
h=0;
s=weizhi(i,1)+weizhi(i,2);
h=weizhi(i,1)-weizhi(i,2);
fitness(i)=s*h;
bestfitness(i)=fitness(i);
end
s=fitness(1); %初始种群历史最优位置修改程序
flag=1;
for(m=1:POPSIZE)
if fitness(m)<s
s=fitness(m);
flag=m;
end
end
for(n=1:DIMENSION)
P(n)=weizhi(flag,n);%为初始时最好适应度时x1,x2位置值
end
PBEST=fitness(flag); %找出初始时最好适应度
%**************************************************************************
for g=0:chushicishu
W=1.0-g*0.6/chushicishu;
% if PBEST-3.0<0.000001
% total=total+1;
% sum=sum+1;
% break;
% else
for(i=1:POPSIZE)
for(j=1:DIMENSION)
speed(i,j)=W*speed(i,j)+C1*rand()*(best(i,j)...
-weizhi(i,j))+C2*rand()*(P(j)-weizhi(i,j));
if speed(i,j)>VMAX
speed(i,j)=VMAX;
% speed(i,j)=2*VMAX-speed(i,j);
end
if speed(i,j)<VMIN
speed(i,j)=VMIN;
%speed(i,j)=2*VMIN-speed(i,j);
end
weizhi(i,j)=weizhi(i,j)+speed(i,j);
if weizhi(i,j)<XMIN
weizhi(i,j)=XMIN;%2*XMIN-weizhi(i,j);
end
if weizhi(i,j)>XMAX
weizhi(i,j)=XMAX;%2*XMAX-weizhi(i,j);
end
end
%calculation(k);
%*******************************%%
%for(i=1:POPSIZE)
s=0;
h=0;
s=weizhi(i,1)+weizhi(i,2);
h=weizhi(i,1)-weizhi(i,2);
fitness(i)=s*h;
%**********************
% localbest(i);
if bestfitness(i)>fitness(i)
for n=1:DIMENSION
best(i,n)=weizhi(i,n);
end
end
bestfitness(i)=fitness(i);
%**************************8
end
% globalbest(2);
%for i=1:POPSIZE
if bestfitness(i)<PBEST
for j=1:DIMENSION
P(j)=best(i,j);
end
PBEST=bestfitness(i);
end
%end
%******************************
end
%***************
%g,
chishu(rr,1)=PBEST ;
%P
chishu(rr,2)=P(1);
chishu(rr,3)=P(2);
end
% total,sum
format long , chishu
mm=1;
zuixiaozhi=chishu(rr,1);
for rr=2:turn
if zuixiaozhi>chishu(rr,1)
zuixiaozhi=chishu(rr,1);
mm=rr;
end
end
zuixiaozhi
mm
chishu(mm,2),chishu(mm,3)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -