粒子群算法分类.docx
《粒子群算法分类.docx》由会员分享,可在线阅读,更多相关《粒子群算法分类.docx(17页珍藏版)》请在冰豆网上搜索。
粒子群算法分类
粒子群算法分类
目录
粒子群算法分类1
一、经典的微粒群算法(PSO)简介1
二、经典的微粒群算法的运算过程2
三、两种基本的进化模型4
四、改进的微粒群算法5
五、流程及代码7
结论19
参考文献20
粒子群算法分类
一、经典的微粒群算法(PSO)简介
微粒群算法(ParticleSwarmOptimization)是由美国社会心理学家JamesKennedy和电气工程师RussellEberhart在1995年共同提出的,是继蚁群算法之后的又一种新的群体智能算法,目前已成为进化算法的一个重要分支。
经典粒子群算法的基本思想是模拟鸟类群体行为,并利用了生物学家的生物群体模型,因为鸟类的生活使用了简单的规则:
(1)飞离最近的个体;
(2)飞向目标;(3)飞向群体的中心;来确定自己的飞行方向和飞行速度,并且成功的寻找到栖息地。
Heppner受鸟类的群体智能启发,建立了模型。
Eberhart和Kennedy对Heppner的模型进行了修正,同时引入了人类的个体学习和整体文化形成的模式,一方面个体向周围的优秀者的行为学习,另一方面个体不断总结自己的经验形成自己的知识库。
从而提出了微粒群算法(PSO)。
该算法由于运算速度快,局部搜索能力强,参数设置简单,近些年已收到学术界的广泛重视,现在微粒群算法在函数优化,神经网络训练,模式分类,模糊系统控制以及其他工程领域都得到了广泛的应用。
二、经典的微粒群算法的运算过程
经典粒子群算法和其他的进化算法相似,也采用“群体”与“进化”的概念,同样是根据个体即微粒(particle)的适应度大小进行操作。
所不同的是,微粒群算法不像其他进化算法那样对个体使用进化算子,而是将每个个体看作是在N维搜索空间中的一个无重量无体积的微粒,并在搜索空间中以一定的速度飞行。
该飞行速度是根据个体的飞行经验和群体的飞行经验来进行动态地调整。
Kennedy和Eberhart最早提出的PSO算法的进化方程如下:
其中:
下标“i”表示第i个微粒,下标“j”表示的是微粒i的第j维分量,t表示第t代,学习因子
和
为非负常数,
用来调节微粒向本身最好位置飞行的步长,
用来调节微粒向群体最好位置飞行的步长,通常
和
在[0,2]间取值。
迭代终止条件根据具体问题一般选为最大迭代次数或粒子群搜索到的最优位置满足于预先设定的精度。
经典微粒群算法的算法流程如下:
步骤一、依照如下初始化过程,对微粒群的随机位置和速度进行初始设定。
①、设定群体规模,即粒子数为N。
②、对任意i,j,随机产生
③对任意i初始化局部最优位置为:
=
。
④、初始化全局最优位置
步骤一、根据目标函数,计算每个微粒的适应度值。
步骤二、对于每个微粒,将其适应度值与其本身所经历过的最好位置
的适应度值进行比较,如更好,则将现在Xi的位置作为新的
。
步骤三、对每个微粒,将其经过的最好位置
的适应度值与群体的最好位置的适应度值比较,如果更好,则将
的位置作为新的
。
步骤四、对微粒的速度和位置进行更替。
如未达到结束条件,则返回步骤二。
三、两种基本的进化模型
在基本的PSO算法中,根据直接相互作用的微粒群定义可构造PSO算法的两种不同版本,也就是说,可以通过定义全局最好微粒(位置)或局部最好微粒(位置)构造具有不同行为的PSO算法。
(一)
模型(全局最好模型)
模型以牺牲算法的鲁棒性为代价提高算法的收敛速度,基本PSO算法就是典型的该模型的体现。
在该模型中,整个算法以该微粒(全局最好的微粒)为吸引子,将所有微粒拉向它,使所有的微粒最终收敛于该位置。
如果在进化过程中,该全局最优解得不到更新,则微粒群将出现类似于遗传算法早熟的现象。
(二)
模型(局部最好模型)
为了防止
模型可能出现早熟现象,
模型采用多个吸引子代替
模型中的单一吸引子。
首先将为粒子群分解为若干个子群,在每个粒子群中保留其局部最好微粒
称为局部最好的位置或邻域最好位置。
实验表明,局部最好模型的PSO比全局最好模型的收敛慢,但不容易陷入局部最优解。
四、改进的微粒群算法
最初的PSO是从解决连续优化问题发展起来的,Eberhart等又提出了PSO的二进制版本,来解决工程实际中的优化问题。
微粒群算法是一种局部搜索效率高的搜索算法,收敛快,特别是在算法的早期,但也存在着精度较低,易发散等缺点。
若加速系数、最大速度等参数太大,粒子群可能错过最优解,算法不能收敛;而在收敛的情况下,由于所有的粒子都同时向最优解的方向飞去,所以粒子趋向同一化(失去了多样性),这样就使算法容易陷入局部最优解,即算法收敛到一定精度时,无法继续优化,,因此很多学者都致力于提高PSO算法的性能。
Y.Shi和Eberhart在1998年对微粒群算法引入了惯性权重w(t),并提出了在进化过程中线性调整惯性权重的方法,来平衡全局和局部搜索的性能,该方程已被学者们称为标准PSO算法,其方程形式如下:
这里w是惯性权重,
和
加速常数,速度的计算以下面三个基值为基础:
(1)其第一部分
为微粒先前的速度
(2)第二部分
为“认知”部分,因为它仅考虑了微粒自身的经验,是局部最优位置
(3)第三部分
是“社会”部分,表示微粒间的社会信息共享,是全局最优位置。
下面的实验用到的
。
当惯性权重w(t)=1时,两种怎么算法相同,从而表明代惯性权重的微粒群算法是基本微粒群算法的扩展,建议w(t)的取值范围为[0,1.4],但实验结果表明当w(t)取[0.8,1.2]时,算法收敛速度更快,而当w(t)>1.2时,算法则较多的陷入局部极值。
惯性权重w(t)表明微粒的原先的速度能在多大的程度上得到保留,较大的w(t)值有较好的全局搜索能力,而较小的w(t)则由较强的局部搜索能力。
因此,随着迭代次数的增加,线性的减小惯性权重w(t),就可以使得微粒群算法在初期具有较强的全局收敛能力,而在晚期具有较强的局部收敛能力。
惯性权重系数线性更新公式:
五、流程及代码
MATLAB实现代码:
clc;
clearall;
formatlong;
%------初始化------------
%数据
%sam=xlsread('.xls');%读样本数据
sam=[2793.363009.261073.55
1766.081803.141895.18
1207.881600.623123.07
245.753373.672248.45
2785.363052.811035.65
315.423088.292187.12
1243.282451.723111.99
829.841555.913139.21
1347.072364.313096.88
1926.981507.341626.47
1808.571608.781565.95
1124.11840.982819.41
26613302.391710.32
1805.551899.092400.6
1130.181902.422753.7
1355.191566.162927.81
1651.141774.031725.56
2110.633308.04702.06
2788.113395.231684.45
1807.611680.562356.65
1363.581729.442749.55
1992.421526.91581.42
%2232.433077.871298.87
%1580.11752.072463.04
%1962.41594.971835.95
%1495.181957.443498.02
%1125.171594.392937.73
%24.223447.312145.01
%1269.071910.722701.97
%1802.071725.811966.35
%1817.361927.42328.79
%1860.451782.881875.13
%1237.912055.133405.09
%688.942104.723198.51
%1675.651747.231580.39
%1806.021810.192191.12
%74.563288.022433.87
%307.353363.842021.61
%1988.271657.512069.2
%2173.922608.551803.57
%372.163077.442163.46
%576.62140.983320
%1724.131704.491798.75
%2501.212652.65984.56
%1656.941913.342459.07
%362.513150.032472
%565.742284.973024.58
%1978.061536.132375.64
%1661.061552.42005.05
%790.292419.983051.16
%1557.271746.271879.13
];
N=50;%种群粒子数
c1=1.3;c2=1.9;%经学习选取的学习因子
wmax=0.9;wmin=0.4;%权重系数的最大与最小
M=200;%种群代数
K=4;%类别数,根据需要修改%%%%%%%%%%%%%%%%%%%%%%%%
[SD]=size(sam);%%样本数和特征维数
v=rand(N,K*D);%初始速度
%初始化分类矩阵
fori=1:
N
clmat(i,:
)=randperm(S);
clmat(i,clmat(i,:
)>K)=ceil(rand(1,sum(clmat(i,:
)>K))*K);
end
fitt=inf*ones(1,N);%初始化个体最优适应度
fg=inf;%初始化群体最优适应度
fljg=clmat(1,:
);%当前最优分类
x=zeros(N,K*D);%初始化粒子群位置
y=x;%初始化个体最优解
pg=x(1,:
);%初始化群体最优解
cen=zeros(K,D);%类别中心定维
fitt2=fitt;%粒子适应度定维
%------循环优化开始------------
fort=1:
M
fori=1:
N
ww=zeros(S,K);%
forii=1:
S
ww(ii,clmat(i,ii))=1;%加权矩阵,元素非0即1
end
ccc=[];tmp=0;
forj=1:
K
sumcs=sum(ww(:
j)*ones(1,D).*sam);
countcs=sum(ww(:
j));
ifcountcs==0
cen(j,:
)=zeros(1,D);
else
cen(j,:
)=sumcs/countcs;%求类别中心
end
ccc=[ccc,cen(j,:
)];%串联聚类中心
aa=find(ww(:
j)==1);
iflength(aa)~=0
fork=1:
length(aa)
tmp=tmp+(sum((sam(aa(k),:
)-cen(j,:
)).^2));
end
end
end
x(i,:
)=ccc;
fitt2(i)=tmp;%Fitnessvalue
end
%更新群体和个体最优解
fori=1:
N
iffitt2(i)fitt(i)=fitt2(i);
y(i,:
)=x(i,:
);%个体最优
iffitt2(i)pg=x(i,:
);%群体最优
fg=fitt2(i);%群体最优适应度
fljg=clmat(i,:
);%当前最优聚类
end
end
end
bfit(t)=fg;%最优适应度记录
%w=wmax-t*(wmax-wmin)/M;%更新权重
fori=1:
N
%更新粒子速度和位置
v(i,:
)=v(i,:
)+c1*rand(1,K*D).*(y(i,:
)-x(i,:
))+c2*rand(1,K*D).*(pg-x(i,:
));%v(i,:
)=w*v(i,:
)+c1*rand(1,K*D).*(y(i,:
)-x(i,:
))+c2*rand(1,K*D).*(pg-x(i,:
));
x(i,:
)=x(i,:
)+v(i,:
);
fork=1:
K
cen(k,:
)=x((k-1)*D+1:
k*D);%拆分粒子位置,获得K个中心
end
%重新归类
forj=1:
S
tmp1=zeros(1,K);
fork=1:
K
tmp1(k)=sum((sam(j,:
)-cen(k,:
)).^2);%每个样本关于各类的距离
end
[tmp2clmat(i,j)]=min(tmp1);%最近距离归类
end
end
end
%------循环结束------------
fljg%最优聚类输出
fg%最优适应度输出
%plot(bfit);%绘制最优适应度轨迹
%plot3(sam(:
1),sam(:
2),sam(:
3),'*');
fori=1:
22
iffljg(1,i)==1
plot3(sam(i,1),sam(i,2),sam(i,3),'r*');
holdon;
gridon;
box;
elseiffljg(1,i)==2
plot3(sam(i,1),sam(i,2),sam(i,3),'g*');
holdon;
gridon;
box;
elseiffljg(1,i)==3
plot3(sam(i,1),sam(i,2),sam(i,3),'k*');
holdon;
gridon;
box;
else
plot3(sam(i,1),sam(i,2),sam(i,3),'b*');
holdon;
gridon;
box;
end
end
六、仿真结果
基本算法输出:
输出对比:
结论
通过粒子群算法能够很快的实现分类。
而且通过惯性权重系数的线性更新,可以防止局部最优输出。
虽然运行时间稍有增加,但效果明显。
每种聚类数目下的最优聚类可以根据输出的适应度fg判断,适应度值越小越好,并且需多次运行判断。
参考文献
[1]杨淑莹.模式识别与智能计算[M].北京:
电子工业出版社,2008.1
[2]侯志荣,吕振肃.基于MATLAB的粒子群优化算法及其应用[J].计算机仿真第20卷,第10期
[3]齐敏,李大健,郝重阳.模式识别导论[M].北京:
清华大学出版社,2009.6