📄 mainpos.asv
字号:
%------基本粒子群优化算法(Particle Swarm Optimization)-----------
%------名称:基本粒子群优化算法(PSO)
%------作用:求解优化问题
%------说明:全局性,并行性,高效的群体智能算法
%------作者:孙明杰(dreamsun2001@126.com)
%------单位:中国矿业大学理学院计算数学硕2005
%------时间:2006年8月17日
%------------------------------------------------------------------
%------初始格式化--------------------------------------------------
clear all;
%clc;
format long;
%------给定初始化条件----------------------------------------------
c1=1.5; % =1.4962 %学习因子1
c2=2.5; % 1.4962 %学习因子2
w=0.8;%.7298; %惯性权重
MaxDT=10; %最大迭代次数
D=4; %搜索空间维数(未知数个数)
N=30; %初始化群体个体数目
eps=10^(-6); %设置精度(在已知最小值时候用)
Sample=150; %聚类的样本数
K=3; %聚类数目
y=zeros(N,K*D);
vbest=zeros(N,K*D); %记录最好速度的
q=0.14;
s=[5.1,3.5,1.4,0.2;
4.9,3.0,1.4,0.2;
4.7,3.2,1.3,0.2;
4.6,3.1,1.5,0.2;
5.0,3.6,1.4,0.2;
5.4,3.9,1.7,0.4;
4.6,3.4,1.4,0.3;
5.0,3.4,1.5,0.2;
4.4,2.9,1.4,0.2;
4.9,3.1,1.5,0.1;
5.4,3.7,1.5,0.2;
4.8,3.4,1.6,0.2;
4.8,3.0,1.4,0.1;
4.3,3.0,1.1,0.1;
5.8,4.0,1.2,0.2;
5.7,4.4,1.5,0.4;
5.4,3.9,1.3,0.4;
5.1,3.5,1.4,0.3;
5.7,3.8,1.7,0.3;
5.1,3.8,1.5,0.3;
5.4,3.4,1.7,0.2;
5.1,3.7,1.5,0.4;
4.6,3.6,1.0,0.2;
5.1,3.3,1.7,0.5;
4.8,3.4,1.9,0.2;
5.0,3.0,1.6,0.2;
5.0,3.4,1.6,0.4;
5.2,3.5,1.5,0.2;
5.2,3.4,1.4,0.2;
4.7,3.2,1.6,0.2;
4.8,3.1,1.6,0.2;
5.4,3.4,1.5,0.4;
5.2,4.1,1.5,0.1;
5.5,4.2,1.4,0.2;
4.9,3.1,1.5,0.1;
5.0,3.2,1.2,0.2;
5.5,3.5,1.3,0.2;
4.9,3.1,1.5,0.1;
4.4,3.0,1.3,0.2;
5.1,3.4,1.5,0.2;
5.0,3.5,1.3,0.3;
4.5,2.3,1.3,0.3;
4.4,3.2,1.3,0.2;
5.0,3.5,1.6,0.6;
5.1,3.8,1.9,0.4;
4.8,3.0,1.4,0.3;
5.1,3.8,1.6,0.2;
4.6,3.2,1.4,0.2;
5.3,3.7,1.5,0.2;
5.0,3.3,1.4,0.2;
7.0,3.2,4.7,1.4;
6.4,3.2,4.5,1.5;
6.9,3.1,4.9,1.5;
5.5,2.3,4.0,1.3;
6.5,2.8,4.6,1.5;
5.7,2.8,4.5,1.3;
6.3,3.3,4.7,1.6;
4.9,2.4,3.3,1.0;
6.6,2.9,4.6,1.3;
5.2,2.7,3.9,1.4;
5.0,2.0,3.5,1.0;
5.9,3.0,4.2,1.5;
6.0,2.2,4.0,1.0;
6.1,2.9,4.7,1.4;
5.6,2.9,3.6,1.3;
6.7,3.1,4.4,1.4;
5.6,3.0,4.5,1.5;
5.8,2.7,4.1,1.0;
6.2,2.2,4.5,1.5;
5.6,2.5,3.9,1.1;
5.9,3.2,4.8,1.8;
6.1,2.8,4.0,1.3;
6.3,2.5,4.9,1.5;
6.1,2.8,4.7,1.2;
6.4,2.9,4.3,1.3;
6.6,3.0,4.4,1.4;
6.8,2.8,4.8,1.4;
6.7,3.0,5.0,1.7;
6.0,2.9,4.5,1.5;
5.7,2.6,3.5,1.0;
5.5,2.4,3.8,1.1;
5.5,2.4,3.7,1.0;
5.8,2.7,3.9,1.2;
6.0,2.7,5.1,1.6;
5.4,3.0,4.5,1.5;
6.0,3.4,4.5,1.6;
6.7,3.1,4.7,1.5;
6.3,2.3,4.4,1.3;
5.6,3.0,4.1,1.3;
5.5,2.5,4.0,1.3;
5.5,2.6,4.4,1.2;
6.1,3.0,4.6,1.4;
5.8,2.6,4.0,1.2;
5.0,2.3,3.3,1.0;
5.6,2.7,4.2,1.3;
5.7,3.0,4.2,1.2;
5.7,2.9,4.2,1.3;
6.2,2.9,4.3,1.3;
5.1,2.5,3.0,1.1;
5.7,2.8,4.1,1.3;
6.3,3.3,6.0,2.5;
5.8,2.7,5.1,1.9;
7.1,3.0,5.9,2.1;
6.3,2.9,5.6,1.8;
6.5,3.0,5.8,2.2;
7.6,3.0,6.6,2.1;
4.9,2.5,4.5,1.7;
7.3,2.9,6.3,1.8;
6.7,2.5,5.8,1.8;
7.2,3.6,6.1,2.5;
6.5,3.2,5.1,2.0;
6.4,2.7,5.3,1.9;
6.8,3.0,5.5,2.1;
5.7,2.5,5.0,2.0;
5.8,2.8,5.1,2.4;
6.4,3.2,5.3,2.3;
6.5,3.0,5.5,1.8;
7.7,3.8,6.7,2.2;
7.7,2.6,6.9,2.3;
6.0,2.2,5.0,1.5;
6.9,3.2,5.7,2.3;
5.6,2.8,4.9,2.0;
7.7,2.8,6.7,2.0;
6.3,2.7,4.9,1.8;
6.7,3.3,5.7,2.1;
7.2,3.2,6.0,1.8;
6.2,2.8,4.8,1.8;
6.1,3.0,4.9,1.8;
6.4,2.8,5.6,2.1;
7.2,3.0,5.8,1.6;
7.4,2.8,6.1,1.9;
7.9,3.8,6.4,2.0;
6.4,2.8,5.6,2.2;
6.3,2.8,5.1,1.5;
6.1,2.6,5.6,1.4;
7.7,3.0,6.1,2.3;
6.3,3.4,5.6,2.4;
6.4,3.1,5.5,1.8;
6.0,3.0,4.8,1.8;
6.9,3.1,5.4,2.1;
6.7,3.1,5.6,2.4;
6.9,3.1,5.1,2.3;
5.8,2.7,5.1,1.9;
6.8,3.2,5.9,2.3;
6.7,3.3,5.7,2.5;
6.7,3.0,5.2,2.3;
6.3,2.5,5.0,1.9;
6.5,3.0,5.2,2.0;
6.2,3.4,5.4,2.3;
5.9,3.0,5.1,1.8;];
%初始化Vmax、Vmin
Vmin1(1,1:4)=s(1,1:4);
Vmax1(1,1:4)=s(1,1:4);
Vmin2(1,1:4)=s(51,1:4);
Vmax2(1,1:4)=s(51,1:4);
Vmin3(1,1:4)=s(101,1:4);
Vmax3(1,1:4)=s(101,1:4);
for j=1:4
for i=1:50
if(Vmin1(1,j)>s(i,j))
Vmin1(1,j)=s(i,j);
end
if(Vmax1(1,j)<s(i,j))
Vmax1(1,j)=s(i,j);
end
end
end
for j=1:4
for i=51:100
if(Vmin2(1,j)>s(i,j))
Vmin2(1,j)=s(i,j);
end
if(Vmax2(1,j)<s(i,j))
Vmax2(1,j)=s(i,j);
end
end
end
for j=1:4
for i=101:150
if(Vmin3(1,j)>s(i,j))
Vmin3(1,j)=s(i,j);
end
if(Vmax3(1,j)<s(i,j))
Vmax3(1,j)=s(i,j);
end
end
end
Vmin(1:4)=Vmin1(1:4);
Vmin(5:8)=Vmin2(1:4);
Vmin(9:12)=Vmin3(1:4);
Vmax(1:4)=Vmax1(1:4);
Vmax(5:8)=Vmax2(1:4);
Vmax(9:12)=Vmax3(1:4);
FieldDR(1,1:12)=Vmin(1:12);
FieldDR(2,1:12)=Vmax(1:12);
pos_temper=zeros(1,12);
pos_temper(1,1:12)=[4.9436 3.4024 1.4564 0.2498 5.8171 2.8550 4.3097 1.4095 6.6065 3.0805 5.5740 2.0594];%97.8979 50代30个时为97.4308——97.5200
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
for i=1:N
for j=1:3*D %粒子长度为:(聚类数目*每类的维数)
x(i,j)=rand*(Vmax(1,j)+Vmin(1,j))/2; %随机初始化位置
v(i,j)=0.14*rand*(Vmax(1,j)+Vmin(1,j))/2; %随机初始化速度
end
end
%for i=1:K*D
% Vmin(1,i)=Vmin(1,i);%/MaxDT;
% Vmax(1,i)=Vmax(1,i);%/MaxDT;
%end
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
for i=1:N
p(i)=fitness(x(i,:),s,D,K,Sample);
y(i,:)=x(i,:);
end
pg=x(1,:); %Pg为全局最优
for i=2:N
if(fitness(x(i,:),s,D,K,Sample)>fitness(pg,s,D,K,Sample))
pg=x(i,:);
end
end
%------进入主要循环,按照公式依次迭代,直到满足精度要求------------
for t=1:MaxDT
for i=1:N
%更新速度,并限制在[Vmin,Vmax]内
w=0.8-t*0.2/MaxDT;
v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
for j=1:D*K
if(v(i,j)>0.14*Vmax(1,j))
v(i,j)=0.14*Vmax(1,j);
elseif(v(i,j)<0.14*Vmin(1,j))
v(i,j)=0.14*Vmin(1,j);
end
end
pos(i,:)=x(i,:)+v(i,:); %更新位置
for j=1:D*K
if(pos(i,j)>Vmax(1,j))
pos(i,j)=pos_temper(1,j)*0.85;
elseif(pos(i,j)<Vmin(1,j))
pos(i,j)=pos_temper(1,j)*0.85;
end
end
x(i,:)=pos(i,:);
if(fitness(x(i,:),s,D,K,Sample)>p(i))
p(i)=fitness(x(i,:),s,D,K,Sample);
y(i,:)=x(i,:);
end
if(p(i)>fitness(pg,s,D,K,Sample))
pg=y(i,:);
end
end
Pbest(t)=fitness(pg,s,D,K,Sample);
end
%------最后给出计算结果
format short;%long;
disp('*************************************************************');
disp('pos函数的全局最优位置为:')
Solution=pg'
disp('pos函数的全局最优速度为:')
vbest
disp('最后得到的优化极值为:')
Result=fitness(pg,s,D,K,Sample)
disp('最后结果是:')
dis=(1/Result)-1
disp('*************************************************************');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -