⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainpos.asv

📁 最基本的粒子群算法实现的数据聚类
💻 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 + -