📄 changdata.m
字号:
%------基本粒子群优化算法(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=50; %最大迭代次数
D=4; %搜索空间维数(未知数个数)
N=30; %初始化群体个体数目
eps=10^(-6); %设置精度(在已知最小值时候用)
Sample=120; %聚类的样本数
K=3; %聚类数目
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.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;
5.1,3.5,1.4,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;
4.9,3.1,1.5,0.1;
5.0,3.2,1.2,0.2;
4.9,3.1,1.5,0.1;
5.1,3.4,1.5,0.2;
5.0,3.5,1.3,0.3;
4.5,2.3,1.3,0.3;
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;
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;
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.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;
6.0,3.4,4.5,1.6;
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.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;
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;
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.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.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;
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.9,3.1,5.4,2.1;
6.7,3.1,5.6,2.4;
6.9,3.1,5.1,2.3;
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;];
%初始化Vmax、Vmin
Vmin1(1,1:4)=s(1,1:4);
Vmax1(1,1:4)=s(1,1:4);
Vmin2(1,1:4)=s(41,1:4);
Vmax2(1,1:4)=s(41,1:4);
Vmin3(1,1:4)=s(81,1:4);
Vmax3(1,1:4)=s(81,1:4);
for j=1:4
for i=1:40
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=41:80
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=81:120
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);
x=zeros(N,K*D);
v=zeros(N,K*D);
for i=1:N
% x(i,1:D)=s(i,:);
% v(i,1:D)=0.15*s(i,:);
% x(i,1+D:2*D)=s(5+i,:);
% v(i,1+D:2*D)=0.15*s(50+i,:);
% x(i,2*D+1:3*D)=s(10+i,:);
% v(i,2*D+1:3*D)=0.15*s(100+i,:);
end
for i=1:N
for j=1:K*D %粒子长度为:(聚类数目*每类的维数)
x(i,j)=rand*(Vmax(1,j)+Vmin(1,j))/2; %随机初始化位置
v(i,j)=rand*0.14*(Vmax(1,j)+Vmin(1,j))/2; %随机初始化速度
end
end
%Vmin(1:12)=Vmin(1:12)MaxDT;
%Vmax(1:12)=Vmax(1:12)/MaxDT;
%------初始化种群的个体(可以在这里限定位置和速度的范围)------------
%x=crtrp(N,FieldDR);
%x
%------先计算各个粒子的适应度,并初始化Pi和Pg----------------------
format short;
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-(1+t)*0.2/MaxDT;
%w=0.9-(0.5/MaxDT)*t;
% w=-0.8;
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)>Vmax(1,j)*0.14)
v(i,j)=Vmax(1,j)*0.14;
elseif(v(i,j)<Vmin(1,j)*0.14)
v(i,j)=Vmin(1,j)*0.14;
end
end
pos(i,:)=x(i,:)+v(i,:); %更新位置
for j=1:D*K
if(pos(i,j)>Vmax(1,j))
pos(i,j)=Vmax(1,j);
elseif(pos(i,j)<Vmin(1,j))
pos(i,j)=Vmin(1,j);
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(fitness(x(i,:),s,D,K,Sample)>fitness(pg,s,D,K,Sample))
pg=x(i,:);
end
% disp('个体的适应度:');
% 1/fitness(x(i,:),s,D,K)
end
% Pbest(t)=fitness(pg,s,D,K);
%disp('个体最好解:');
% disp('全局最好解:');
% 1/fitness(pg,s,D,K)
end
%------最后给出计算结果
format short;%long;
disp('*************************************************************');
disp('pos函数的全局最优位置为:')
Solution=pg'
disp('最后得到的优化极值为:')
Result=fitness(pg,s,D,K,Sample)
disp('最后结果是:')
dis=1/Result
disp('*************************************************************');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -