粒子群算法 粒子群算法,也称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的"交叉"(Crossover) 和"变异"(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。 介绍优化问题是工业设计中经常遇到的问题, 许多问题最后都可以归结为优化问题.为了解决各种各样的优化问题,人们提出了许多优化算法,比较著名的有爬山法、遗传算法等.优化问题有两个主要问题:一是要求寻找全局最小点,二是要求有较高的收敛速度.爬山法精度较高,但是易于陷入局部极小.遗传算法属于进化算法(EvolutionaryAlgorithms)的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解.遗传算法有三个基本算子:选择、交叉和变异.但是遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码,另外三个算法的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验.1995年Eberhart博士和kennedy博士提出了一种新的算法;粒子群优化(ParticalSwarmOptimization-PSO)算法.这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性. 粒子群优化(ParticalSwarmOptimization-PSO)算法是近年来发展起来的一种新的进化算法(Evolu2tionaryAlgorithm-EA).PSO算法属于进化算法的一种,和遗传算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质.但是它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover)和“变异”(Mutation)操作.它通过追随当前搜索到的最优值来寻找全局最优. 引言同遗传算法比较,PSO的优势在于简单容易实现并且没有许多参数需要调整。目前已广泛应用于函数优化,神经网络训练,模糊系统控制以及其他遗传算法的应用领域 人工生命"人工生命"是来研究具有某些生命基本特征的人工系统.人工生命包括两方面的内容 1.研究如何利用计算技术研究生物现象 2.研究如何利用生物技术研究计算问题 我们现在关注的是第二部分的内容.现在已经有很多源于生物现象的计算技巧.例如,人工神经网络是简化的大脑模型.遗传算法是模拟基因进化过程的. 现在我们讨论另一种生物系统-社会系统.更确切的是,在由简单个体组成的群落与环境以及个体之间的互动行为.也可称做"群智能"(swarmintelligence).这些模拟系统利用局部信息从而可能产生不可预测的群体行为.例如floys和boids,他们都用来模拟鱼群和鸟群的运动规律,主要用于计算机视觉和计算机辅助设计. 在计算智能(computationalintelligence)领域有两种基于群智能的算法.蚁群算法(antcolonyoptimization)和粒子群算法(particleswarmoptimization).前者是对蚂蚁群落食物采集过程的模拟.已经成功运用在很多离散优化问题上. 粒子群优化算法(PSO)也是起源对简单社会系统的模拟.最初设想是模拟鸟群觅食的过程.但后来发现PSO是一种很好的优化工具. 算法介绍如前所述,PSO模拟鸟群的捕食行为。设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。 PSO从这种模型中得到启示并用于解决优化问题。PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitnessvalue),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO初始化为一群随机粒子(随机解)。然后通叠代找到最优解。在每一次叠代中,粒子通过跟踪两个"极值"来更新自己。第一个就是粒子本身所找到的最优解。这个解叫做个体极值pBest.另一个极值是整个种群目前找到的最优解。这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分最为粒子的邻居,那么在所有邻居中的极值就是局部极值。在找到这两个最优值时,粒子根据如下的公式来更新自己的速度和新的位置 v[]=w*v[] c1*rand()*(pbest[]-present[]) c2*rand()*(gbest[]-present[]) (a) present[]=persent[] v[] (b) v[]是粒子的速度,w是惯性权重,persent[]是当前粒子的位置.pbest[]andgbest[]如前定义rand()是介于(0,1)之间的随机数.c1,c2是学习因子.通常c1=c2=2,大多数情况 0≤c1=c2≤4 程序的伪代码如下 Foreachparticle ____Initializeparticle END Do ____Foreachparticle ________Calculatefitnessvalue ________Ifthefitnessvalueisbetterthanthebestfitnessvalue(pBest)inhistory ____________setcurrentvalueasthenewpBest ____End ____ChoosetheparticlewiththebestfitnessvalueofalltheparticlesasthegBest ____Foreachparticle ________Calculateparticlevelocityaccordingequation(a) ________Updateparticlepositionaccordingequation(b) ____End Whilemaximumiterationsorminimumerrorcriteriaisnotattained 在每一维粒子的速度都会被限制在一个最大速度Vmax,如果某一维更新后的速度超过用户设定的Vmax,那么这一维的速度就被限定为Vmax 比较大多数演化计算技术都是用同样的过程: 1.种群随机初始化 2.对种群内的每一个个体计算适应值(fitnessvalue).适应值与最优解的距离直接有关 3.种群根据适应值进行复制 4.如果终止条件满足的话,就停止,否则转步骤2 从以上步骤,我们可以看到PSO和GA有很多共同之处。两者都随机初始化种群,而且都使用适应值来评价系统,而且都根据适应值来进行一定的随机搜索。两个系统都不是保证一定找到最优解。但是,PSO没有遗传操作如交叉(crossover)和变异(mutation).而是根据自己的速度来决定搜索。粒子还有一个重要的特点,就是有记忆。 与遗传算法比较,PSO的信息共享机制是很不同的.在遗传算法中,染色体(chromosomes)互相共享信息,所以整个种群的移动是比较均匀的向最优区域移动.在PSO中,只有gBest(orlBest)给出信息给其他的粒子,这是单向的信息流动.整个搜索更新过程是跟随当前最优解的过程.与遗传算法比较,在大多数的情况下,所有的粒子可能更快的收敛于最优解 网络和PSO人工神经网络(ANN)是模拟大脑分析过程的简单数学模型,反向转播算法是最流行的神经网络训练算法。近来也有很多研究开始利用演化计算(evolutionarycomputation)技术来研究人工神经网络的各个方面。 演化计算可以用来研究神经网络的三个方面:网络连接权重,网络结构(网络拓扑结构,传递函数),网络学习算法。 不过大多数这方面的工作都集中在网络连接权重,和网络拓扑结构上。在GA中,网络权重和/或拓扑结构一般编码为染色体(Chromosome),适应函数(fitnessfunction)的选择一般根据研究目的确定。例如在分类问题中,错误分类的比率可以用来作为适应值。 演化计算的优势在于可以处理一些传统方法不能处理的例子例如不可导的节点传递函数或者没有梯度信息存在。但是缺点在于:在某些问题上性能并不是特别好。2.网络权重的编码而且遗传算子的选择有时比较麻烦。最近已经有一些利用PSO来代替反向传播算法来训练神经网络的论文。研究表明PSO是一种很有潜力的神经网络算法。PSO速度比较快而且可以得到比较好的结果。而且还没有遗传算法碰到的问题。 这里用一个简单的例子说明PSO训练神经网络的过程。这个例子使用分类问题的基准函数(Benchmarkfunction)IRIS数据集。(Iris是一种鸢尾属植物)在数据记录中,每组数据包含Iris花的四种属性:萼片长度,萼片宽度,花瓣长度,和花瓣宽度,三种不同的花各有50组数据.这样总共有150组数据或模式。 我们用3层的神经网络来做分类。现在有四个输入和三个输出。所以神经网络的输入层有4个节点,输出层有3个节点我们也可以动态调节隐含层节点的数目,不过这里我们假定隐含层有6个节点。我们也可以训练神经网络中其他的参数。不过这里我们只是来确定网络权重。粒子就表示神经网络的一组权重,应该是4*6 6*3=42个参数。权重的范围设定为[-100,100](这只是一个例子,在实际情况中可能需要试验调整).在完成编码以后,我们需要确定适应函数。对于分类问题,我们把所有的数据送入神经网络,网络的权重有粒子的参数决定。然后记录所有的错误分类的数目作为那个粒子的适应值。现在我们就利用PSO来训练神经网络来获得尽可能低的错误分类数目。PSO本身并没有很多的参数需要调整。所以在实验中只需要调整隐含层的节点数目和权重的范围以取得较好的分类效果。 参数设置从上面的例子我们可以看到应用PSO解决优化问题的过程中有两个重要的步骤:问题解的编码和适应度函数。 PSO的一个优势就是采用实数编码,不需要像遗传算法一样是二进制编码(或者采用针对实数的遗传操作.例如对于问题f(x)=x1^2 x2^2 x3^2求解,粒子可以直接编码为(x1,x2,x3),而适应度函数就是f(x).接着我们就可以利用前面的过程去寻优.这个寻优过程是一个叠代过程,中止条件一般为设置为达到最大循环数或者最小错误 PSO中并没有许多需要调节的参数,下面列出了这些参数以及经置: 粒子数:一般取20–40.其实对于大部分的问题10个粒子已经足够可以取得好的结果,不过对于比较难的问题或者特定类别的问题,粒子数可以取到100或200 粒子的长度:这是由优化问题决定,就是问题解的长度。 粒子的范围:由优化问题决定,每一维可是设定不同的范围。 Vmax:最大速度:决定粒子在一个循环中最大的移动距离,通常设定为粒子的范围宽度,例如上面的例子里,粒子(x1,x2,x3)x1属于[-10,10],那么Vmax的大小就是20。Vmax大时,探索能力较强,但开发能力弱,Vmax小时,开发能力较强,但探索能力弱。 学习因子:c1和c2通常等于2.不过在文献中也有其他的取值.但是一般c1等于c2并且范围在0和4之间 中止条件:最大循环数以及最小错误要求.例如,在上面的神经网络训练例子中,最小错误可以设定为1个错误分类,最大循环设定为2000,这个中止条件由具体的问题确定. 全局PSO和局部PSO:我们介绍了两种版本的粒子群优化算法:全局版和局部版.前者速度快不过有时会陷入局部最优.后者收敛速度慢一点不过很难陷入局部最优.在实际应用中,可以先用全局PSO找到大致的结果,再有局部PSO进行搜索. 惯性权重w:Shi和Eb erhart指出(Amodifiedparticleswarmoptimizer,1998):当Vmax很小时(对schaffer的f6函数,Vmax=3),使用权重w=0.8较好.如果没有Vmax的信息,使用0.8作为权重也是一种很好的选择.另外,对于使用时变的权重,结果不清楚,但是预计结果应比较好。w常根据实际问题来确定其最优值,w取值大时,探索能力较强;w取值小时,开发能力较弱。 PSO的改进基于大量实验证明: 如果,W随算法迭代的进行而线性减小,将显著改善算法的收敛性能。Wmin≤W≤Wmax,其中wmax为最大加权系数,,Wmin为最小加权系数,Enter_max为总迭代次数,i为当前迭代次数,则有公式: Wi=Wmax-(Wmax-Wmin)÷Enter _max×i 优化问题一是要求寻找全局最优点,二是要求有较高的收敛速度. 约束优化问题近年来,一些学者将PSO 算法推广到约束优化问题,其关键在于如何处理好约束,即解的可行性。如果约束处理的不好,其优化的结果往往会出现不能够收敛和结果是空集的状况。基于PSO算法的约束优化工作主要分为两类:(1)罚函数法。罚函数的目的是将约束优化问题转化成无约束优化问题。(2 )将粒子群的搜索范围都限制在条件约束簇内,即在可行解范围内寻优。根据文献介绍,Parsopoulos等采用罚函数法,利用非固定多段映射函数对约束优化问题进行转化,再利用PSO算法求解转化后问题,仿真结果显示PSO算法相对遗传算法更具有优越性,但其罚函数的设计过于复杂,不利于求解;Hu等采用可行解保留政策处理约束,即一方面更新存储中所有粒子时仅保留可行解,另一方面在初始化阶段所有粒子均从可行解空间取值,然而初始可行解空间对于许多问题是很难确定的;Ray等提出了具有多层信息共享策略的粒子群原理来处理约束,根据约束矩阵采用多层Pareto排序机制来产生优良粒子,进而用一些优良的粒子来决定其余个体的搜索方向。但是,目前有关运用PSO算法方便实用地处理多约束目标优化问题的理论成果还不多。处理多约束优化问题的方法有很多,但用PSO算法处理此类问题目前技术并不成熟,这里就不介绍了。 遗传算法属于进化算法( Evolutionary Algorithms) 的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解. 遗传算法有三个基本算子:选择、交叉和变异. 但是遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码,另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验。 PSO算法粒子群优化算法(PSO) 是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。PSO同遗传算法类似,是一种基于迭代的优化算法。系统初始化为一组随机解,通过迭代搜寻最优值。但是它没有遗传算法用的交叉(crossover) 以及变异(mutation),而是粒子在解空间追随最优的粒子进行搜索。同遗传算法比较,PSO 的优势在于简单容易实现并且没有许多参数需要调整。目前已广泛应用于函数优化,神经网络训练,模糊系统控制以及其他遗传算法的应用领域。
5 k3 X+ H' t- `$ S$ ~, k来源:360百科, b/ s. r9 c2 p4 V' }
3 J2 J2 q2 p. ~* Z5 a |