粒子群算法
- 格式:docx
- 大小:127.49 KB
- 文档页数:8
基本粒子群算法粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能算法。
粒子群算法的灵感来源于模拟一群鸟的行为,这些鸟往往会通过互相沟通,得到更好的食物来源。
类比到优化问题中,粒子群算法的每个个体被称为粒子,它们互相传递信息,从而实现全局最优解的搜索。
在粒子群算法中,每个粒子代表了一个解空间内的可行解。
每个粒子的位置被编码成一组向量,这个向量就是这个粒子的位置,每个粒子还有一个速度向量,决定了它在解空间内的运动方向和速度大小。
在每一次迭代中,每个粒子会对自己的位置和速度进行更新,这依赖于当前的个体最优解,和全局最优解。
个体最优解是这个粒子对解空间的局部搜索结果,全局最优解是所有粒子对解空间的全局搜索结果。
粒子群算法通过不断迭代,更新每个粒子的位置和速度,直到达到收敛条件。
收敛条件可以通过迭代次数,目标函数的阈值等来定义。
在应用上,粒子群算法已被广泛应用于优化问题中,包括函数优化,组合优化,路径规划等等。
它的应用在电力系统,通信网络,机器人,图像处理和数据挖掘等领域也被证明是有效的。
在实际应用中,粒子群算法需要注意一些问题。
一是在选择惯性权重时需要遵守准则,即越接近最优解惯性权重应该越小,越远离最优解惯性权重应该越大。
二是需要确定好种群大小,如果种群太小,可能会导致粒子局限于局部最优解,而丢失全局优解的机会。
三是需要合适的约束条件,保证解空间的可行性,尤其是在优化问题中。
综上所述,粒子群算法是一种十分有用的优化算法,它通过模拟鸟群的行为,实现有效的搜索全局最优解。
但是在实际应用中需要注意一些问题,特别是在惯性权重,种群大小和约束条件的确定上,这样才能达到最好的优化效果。
粒子群算法粒子个数
粒子群算法中粒子个数的计算方法通常有以下几种:
1. 经验法则:根据经验公式来设定。
例如,对于一般性问题,粒子数一般取20~40;对于较为复杂的问题,粒子数则取50~100。
2. 实验法则:通过一定的实验来确定。
从小到大逐渐增加粒子数,直到算法的收敛速度趋于平缓,此时的粒子数即为最优粒子数。
3. 网格法则:根据问题的维数来设定。
一般来说,对于每个维度,将其范围等分为10~20份,粒子数取各维度粒子数之积。
需要注意的是,粒子数的多少对算法的运行效率和结果质量都有影响。
过少的粒子数会导致算法的局限性,而过多的粒子数则会使算法的收敛速度变慢。
因此,选择合适的粒子数是粒子群算法优化的关键。
粒子群算法原理及简单案例[ python ]介绍粒子群算法(Particle swarm optimization,PSO)是模拟群体智能所建立起来的一种优化算法,主要用于解决最优化问题(optimization problems)。
1995年由 Eberhart和Kennedy 提出,是基于对鸟群觅食行为的研究和模拟而来的。
假设一群鸟在觅食,在觅食范围内,只在一个地方有食物,所有鸟儿都看不到食物(即不知道食物的具体位置。
当然不知道了,知道了就不用觅食了),但是能闻到食物的味道(即能知道食物距离自己是远是近。
鸟的嗅觉是很灵敏的)。
假设鸟与鸟之间能共享信息(即互相知道每个鸟离食物多远。
这个是人工假定,实际上鸟们肯定不会也不愿意),那么最好的策略就是结合自己离食物最近的位置和鸟群中其他鸟距离食物最近的位置这2个因素综合考虑找到最好的搜索位置。
粒子群算法与《遗传算法》等进化算法有很多相似之处。
也需要初始化种群,计算适应度值,通过进化进行迭代等。
但是与遗传算法不同,它没有交叉,变异等进化操作。
与遗传算法比较,PSO的优势在于很容易编码,需要调整的参数也很少。
一、基本概念与遗传算法类似,PSO也有几个核心概念。
粒子(particle):一只鸟。
类似于遗传算法中的个体。
1.种群(population):一群鸟。
类似于遗传算法中的种群。
2.位置(position):一个粒子(鸟)当前所在的位置。
3.经验(best):一个粒子(鸟)自身曾经离食物最近的位置。
4.速度(velocity ):一个粒子(鸟)飞行的速度。
5.适应度(fitness):一个粒子(鸟)距离食物的远近。
与遗传算法中的适应度类似。
二、粒子群算法的过程可以看出,粒子群算法的过程比遗传算法还要简单。
1)根据问题需要,随机生成粒子,粒子的数量可自行控制。
2)将粒子组成一个种群。
这前2个过程一般合并在一起。
3)计算粒子适应度值。
4)更新种群中每个粒子的位置和速度。
粒子群算法详解粒子群算法(Particle Swarm Optimization,PSO)是一种模拟鸟群觅食行为的优化算法,通过模拟个体之间的协作和信息共享来寻找最优解。
它是一种全局优化算法,可以应用于各种问题的求解。
粒子群算法的基本思想是通过模拟鸟群的行为来寻找最优解。
在算法中,将待优化问题看作一个多维空间中的搜索问题,将问题的解看作空间中的一个点。
每个解被称为一个粒子,粒子的位置代表当前解的状态,速度代表解的更新方向和速度。
粒子之间通过互相交流信息,以共同寻找最优解。
在粒子群算法中,每个粒子都有自己的位置和速度。
每个粒子根据自身的经验和邻域中最优解的经验来更新自己的速度和位置。
速度的更新由三个因素决定:当前速度、个体最优解和全局最优解。
粒子根据这些因素调整速度和位置,以期望找到更优的解。
通过不断迭代更新,粒子群逐渐收敛于最优解。
粒子群算法的核心是更新速度和位置。
速度的更新公式如下:v(t+1) = w * v(t) + c1 * rand() * (pbest - x(t)) + c2 * rand() * (gbest - x(t))其中,v(t+1)为下一时刻的速度,v(t)为当前速度,w为惯性权重,c1和c2为学习因子,rand()为[0,1]之间的随机数,pbest为个体最优解,gbest为全局最优解,x(t)为当前位置。
位置的更新公式如下:x(t+1) = x(t) + v(t+1)通过调整学习因子和惯性权重,可以影响粒子的搜索能力和收敛速度。
较大的学习因子和较小的惯性权重可以增强粒子的探索能力,但可能导致算法陷入局部最优解;较小的学习因子和较大的惯性权重可以加快算法的收敛速度,但可能导致算法过早收敛。
粒子群算法的优点是简单易实现,收敛速度较快,对于大多数问题都能得到较好的结果。
然而,粒子群算法也存在一些缺点。
首先,算法对于问题的初始解和参数设置较为敏感,不同的初始解和参数可能导致不同的结果。
1.介绍:粒子群算法(Particle Swarm Optimization, PSO)最早是由Eberhart 和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。
设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。
那么找到食物的最优策略是什么呢?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。
经过实践证明:全局版本的粒子群算法收敛速度快,但是容易陷入局部最优。
局部版本的粒子群算法收敛速度慢,但是很难陷入局部最优。
现在的粒子群算法大都在收敛速度与摆脱局部最优这两个方面下功夫。
其实这两个方面是矛盾的。
看如何更好的折中了。
粒子群算法主要分为4个大的分支:(1)标准粒子群算法的变形在这个分支中,主要是对标准粒子群算法的惯性因子、收敛因子(约束因子)、“认知”部分的c1,“社会”部分的c2进行变化与调节,希望获得好的效果。
惯性因子的原始版本是保持不变的,后来有人提出随着算法迭代的进行,惯性因子需要逐渐减小的思想。
算法开始阶段,大的惯性因子可以是算法不容易陷入局部最优,到算法的后期,小的惯性因子可以使收敛速度加快,使收敛更加平稳,不至于出现振荡现象。
经过本人测试,动态的减小惯性因子w,的确可以使算法更加稳定,效果比较好。
但是递减惯性因子采用什么样的方法呢?人们首先想到的是线型递减,这种策略的确很好,但是是不是最优的呢?于是有人对递减的策略作了研究,研究结果指出:线型函数的递减优于凸函数的递减策略,但是凹函数的递减策略又优于线型的递减,经过本人测试,实验结果基本符合这个结论,但是效果不是很明显。
对于收敛因子,经过证明如果收敛因子取0.729,可以确保算法的收敛,但是不能保证算法收敛到全局最优,经过本人测试,取收敛因子为0.729效果较好。
对于社会与认知的系数c2,c1也有人提出:c1先大后小,而c2先小后大的思想,因为在算法运行初期,每个鸟要有大的自己的认知部分而又比较小的社会部分,这个与我们自己一群人找东西的情形比较接近,因为在我们找东西的初期,我们基本依靠自己的知识取寻找,而后来,我们积累的经验越来越丰富,于是大家开始逐渐达成共识(社会知识),这样我们就开始依靠社会知识来寻找东西了。
粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,用于解决优化问题。
下面是粒子群算法的一般步骤:1. 初始化参数:- 定义问题的适应度函数。
- 设置群体规模(粒子数量)和迭代次数。
- 随机初始化每个粒子的位置和速度。
- 设置每个粒子的个体最佳位置和整个群体的全局最佳位置。
2. 迭代优化:- 对于每个粒子:- 根据当前位置和速度更新粒子的新速度。
- 根据新速度更新粒子的新位置。
- 根据新位置计算适应度函数值。
- 更新粒子的个体最佳位置和整个群体的全局最佳位置。
- 结束条件判断:达到预设的迭代次数或满足特定的停止条件。
3. 输出结果:- 输出全局最佳位置对应的解作为优化问题的最优解。
在更新粒子的速度和位置时,通常使用以下公式:速度更新:v(t+1) = w * v(t) + c1 * r1 * (pbest - x(t)) + c2 * r2 * (gbest - x(t))位置更新:x(t+1) = x(t) + v(t+1)其中:- v(t) 是粒子在时间t 的速度。
- x(t) 是粒子在时间t 的位置。
- w 是惯性权重,用于平衡粒子的历史速度和当前速度的影响。
- c1 和c2 是加速因子,控制个体和全局最佳位置对粒子速度的影响。
- r1 和r2 是随机数,用于引入随机性。
- pbest 是粒子的个体最佳位置。
- gbest 是整个群体的全局最佳位置。
以上是粒子群算法的基本步骤,您可以根据具体的优化问题进行调整和扩展。
粒子群算法(1)----粒子群算法简介二、粒子群算法的具体表述上面罗嗦了半天,那些都是科研工作者写论文的语气,不过,PSO的历史就像上面说的那样。
下面通俗的解释PSO算法。
PSO算法就是模拟一群鸟寻找食物的过程,每个鸟就是PSO中的粒子,也就是我们需要求解问题的可能解,这些鸟在寻找食物的过程中,不停改变自己在空中飞行的位置与速度。
大家也可以观察一下,鸟群在寻找食物的过程中,开始鸟群比较分散,逐渐这些鸟就会聚成一群,这个群忽高忽低、忽左忽右,直到最后找到食物。
这个过程我们转化为一个数学问题。
寻找函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。
该函数的图形如下:当x=0.9350-0.9450,达到最大值y=1.3706。
为了得到该函数的最大值,我们在[0,4]之间随机的洒一些点,为了演示,我们放置两个点,并且计算这两个点的函数值,同时给这两个点设置在[0,4]之间的一个速度。
下面这些点就会按照一定的公式更改自己的位置,到达新位置后,再计算这两个点的值,然后再按照一定的公式更新自己的位置。
直到最后在y=1.3706这个点停止自己的更新。
这个过程与粒子群算法作为对照如下:这两个点就是粒子群算法中的粒子。
该函数的最大值就是鸟群中的食物计算两个点函数值就是粒子群算法中的适应值,计算用的函数就是粒子群算法中的适应度函数。
更新自己位置的一定公式就是粒子群算法中的位置速度更新公式。
下面演示一下这个算法运行一次的大概过程:第一次初始化第一次更新位置第二次更新位置第21次更新最后的结果(30次迭代)最后所有的点都集中在最大值的地方。
粒子群算法(2)----标准的粒子群算法在上一节的叙述中,唯一没有给大家介绍的就是函数的这些随机的点(粒子)是如何运动的,只是说按照一定的公式更新。
这个公式就是粒子群算法中的位置速度更新公式。
下面就介绍这个公式是什么。
在上一节中我们求取函数y=1-cos(3*x)*exp(-x)的在[0,4]最大值。
粒子群算法基本流程粒子群算法(Particle Swarm Optimization, PSO)是一种基于自然界群体智能现象的优化算法,常用于解决各种优化问题,如函数优化、组合优化、机器学习等。
本文将详细介绍粒子群算法的基本流程,包括初始化、适应度评价、移动、更新等环节,希望能对读者理解该算法提供一定的帮助。
一、算法介绍粒子群算法最初由Kennedy和Eberhart于1995年提出 [1],其基本思想来源于鸟群觅食行为。
在野外觅食时,鸟群中的鸟会根据所找到的食物数量来确定自己下一步的移动方向。
PSO算法中的“粒子”类似于鸟群中的鸟,它们以个体和群体为导向,通过速度和位置的调整来进行优化搜索。
PSO算法的目标是寻找最优解,通常是最小化或最大化一个函数的值,可表示为:f(x)=\sum_{i=1}^n{f_i(x)}x 是 n 维实数向量,f_i(x) 表示第 i 个函数。
寻找最优解的目标就是在 x 的搜索空间中寻找函数 f(x) 的全局最优解或局部最优解。
二、基本流程粒子群算法的基本流程如下:1. 初始化:随机生成一群粒子,每个粒子的位置和速度都是随机的。
2. 适应度评价:计算每个粒子的适应度值,也就是函数 f(x) 所对应的值,用来表示该粒子所处的位置的优劣程度。
3. 移动:根据当前位置和速度,移动粒子到新的位置。
4. 更新:根据历史上最好的粒子位置和当前最好的粒子位置,更新每个粒子的历史最好位置和当前最好位置,并更新全局最优位置。
5. 终止:当满足一定的终止条件时,停止迭代,并输出最终的粒子位置和最优解。
下文将分别对各环节进行详细介绍。
三、初始化在PSO算法中,粒子的位置和速度都是随机的。
对于每个粒子,需要随机生成一个 n 维实数向量表示其位置,一个同维度的实数向量表示其速度。
可以采用如下方法进行初始化:1. 对于每一个维度,随机生成一个实数范围内的数值,表示该维度上的位置和速度。
2. 在满足约束条件的前提下,生成一个可行解,作为初始化的位置。
粒子群算法原理粒子群算法原理是一种基于优化的算法,它利用一组无序的粒子来搜索整个可能的解决方案空间,以找出最佳的解决方案。
粒子群算法(PSO)是一种迭代优化算法,它采用群体行为思想,相当于一群鸟类在搜寻食物,以及其他任何生活必需品,它们通过互相之间的协作来实现,而不是通过教师或者其他外部干预。
粒子群算法由三个基本要素组成:粒子、适应度函数和社会因素。
粒子代表算法中的搜索空间,每个粒子都有一个位置和一个速度,它们根据适应度函数和社会因素来移动,最终形成群体行为模式。
粒子群算法的运行有两个步骤:第一步是更新粒子的位置,第二步是更新粒子的速度。
在更新粒子的位置时,粒子的位置由其当前位置,当前速度,以及社会因素和个体因素(如最优位置)的影响共同决定。
更新粒子的速度时,粒子的速度由其当前位置,当前速度,最优位置,个体因素和社会因素的影响共同决定。
粒子群算法还有一个自适应模块,可以根据算法的运行状态和工作情况,动态调整粒子的速度和位置,以达到更好的优化效果。
最后,算法将根据粒子群当前的位置,最优位置,以及其他因素,来搜索出最优解。
粒子群算法能够有效解决多维非线性优化问题,并且能够找到更加优化的解决方案。
它的优势在于可以解决复杂的最优化问题,而且可以快速逼近最优解,运行时间比较短。
粒子群算法也有一些缺点,其中最大的缺点就是可能会陷入局部最优解,而不能找到全局最优解。
此外,粒子群算法还存在参数设置的难度,它需要调整大量的参数以获得最佳的性能,而且可能会出现运行时间过长的情况。
总之,粒子群算法是一种有效的优化算法,它可以有效地解决多维非线性优化问题,并且可以快速找到更优的解决方案。
但是在使用这种算法时,需要注意参数设置和潜在的陷入局部最优解的风险。
粒子群算法粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能优化算法,它模拟了鸟群觅食行为中个体在信息交流、合作与竞争中寻找最优解的过程。
粒子群算法在解决优化问题中具有较好的效果,尤其适用于连续优化问题。
粒子群算法的基本思想是模拟粒子在解空间中的移动过程,每个粒子代表一个候选解,粒子的位置表示解的一组参数。
每个粒子都有一个速度向量,表示粒子在解空间中的移动方向和速率。
算法的核心是通过更新粒子的位置和速度来搜索目标函数的最优解。
具体来说,粒子的位置和速度更新通过以下公式计算:$$v_i^{t+1} = w\cdot v_i^{t} + c_1 \cdot rand() \cdot (p_i^{best}-x_i^{t}) + c_2 \cdot rand() \cdot (p_g^{best}-x_i^{t})$$$$x_i^{t+1} = x_i^{t} + v_i^{t+1}$$其中,$v_i^{t}$是粒子$i$在时间$t$的速度,$x_i^{t}$是粒子$i$在时间$t$的位置,$p_i^{best}$是粒子$i$自身经历过的最好位置,$p_g^{best}$是整个种群中经历过的最好位置,$w$是惯性权重,$c_1$和$c_2$是加速度因子,$rand()$是一个0到1的随机数。
粒子群算法的优点在于简单、易于理解和实现,同时具有较好的全局搜索能力。
其收敛速度较快,可以处理多维、非线性和非光滑的优化问题。
另外,粒子群算法有较少的参数需要调节,因此适用于许多实际应用中的优化问题。
粒子群算法的应用领域非常广泛,包括机器学习、数据挖掘、图像处理、模式识别、人工智能等。
例如,在机器学习中,粒子群算法可以应用于神经网络的训练和参数优化;在数据挖掘中,粒子群算法可以用于聚类、分类和关联规则挖掘等任务;在图像处理中,粒子群算法可以用于图像分割、边缘检测和特征提取等;在模式识别中,粒子群算法可以用于目标检测和模式匹配等。
粒子群算法公式
粒子群算法(ParticleSwarmOptimization,PSO)是一种基于社会化行为的优化算法,它被广泛应用于解决复杂问题。
本文将介绍粒子群算法的公式。
PSO的核心公式如下:
$$
v_{i,j} = w * v_{i,j} + c_1 * rand() * (pbest_{i,j} - x_{i,j}) + c_2 * rand() * (gbest_j - x_{i,j})
$$
其中,$v_{i,j}$表示粒子$i$在第$j$维上的速度,$x_{i,j}$表示粒子$i$在第$j$维上的位置,$pbest_{i,j}$表示粒子$i$历史最好的位置,$gbest_j$表示整个群体历史最好的位置,$w$表示惯性权重,$c_1$和$c_2$分别表示粒子自身和群体的学习因子,$rand()$表示在$[0,1]$范围内随机生成的数。
在PSO算法中,每个粒子都代表一个解,它的位置和速度随着迭代的进行而不断更新。
粒子通过与$pbest$和$gbest$进行比较来确定自己的运动方向和速度,不断搜索最优解。
除了核心公式外,PSO算法还有其他重要的公式,如惯性权重更新公式、学习因子更新公式等。
这些公式的具体形式根据不同的PSO 变体有所不同,但都基于核心公式。
总之,粒子群算法是一种优秀的全局优化算法,它通过模拟粒子群的行为来搜索最优解。
熟悉PSO的公式是深入理解和应用这种算法
的重要基础。
粒子群算法组合优化引言:组合优化问题是指在给定一组元素的情况下,通过选择其中的若干个元素,使得满足一定条件的目标函数取得最优值的问题。
在实际应用中,组合优化问题非常普遍,例如旅行商问题、背包问题等。
粒子群算法(Particle Swarm Optimization,简称PSO)是一种用于求解组合优化问题的优化算法,它模拟了鸟群觅食的过程,并通过群体合作来寻找全局最优解。
本文将详细介绍粒子群算法的原理、优缺点以及应用实例等内容。
一、粒子群算法的原理1.初始化粒子群:随机生成一组粒子,并为每个粒子分配一个随机的位置和速度。
2.计算适应度:根据问题的目标函数,计算每个粒子的适应度值。
3.更新粒子速度和位置:根据粒子自身的历史最优位置和全局最优位置,通过以下公式更新粒子的速度和位置:v(t+1) = ω * v(t) + c1 * rand( * (pbest - x(t)) + c2 *rand( * (gbest - x(t))x(t+1)=x(t)+v(t+1)其中,v(t)表示粒子在时刻t的速度,x(t)表示粒子在时刻t的位置,pbest表示粒子的历史最优位置,gbest表示全局最优位置,ω、c1、c2为控制速度更新的参数,rand(为随机函数。
4.更新粒子的历史最优位置和全局最优位置:如果当前位置的适应度值优于粒子的历史最优位置,则更新历史最优位置;如果当前位置的适应度值优于全局最优位置,则更新全局最优位置。
5.判断停止条件:如果满足停止条件(例如达到最大迭代次数或达到目标适应度值),则结束算法,否则返回步骤3二、粒子群算法的优缺点1.基于群体智能:粒子群算法模拟了鸟群觅食的过程,通过粒子之间的合作和信息交流来最优解,具有较强的全局能力。
2.全局收敛性:粒子群算法通过不断更新全局最优位置,可以快速收敛到全局最优解。
3.直观简单:粒子群算法的原理简单,易于理解和实现。
4.并行计算:粒子群算法中的每个粒子都可以进行并行计算,可加速求解过程。
粒子群算法的各种变体算法
粒子群算法(PSO)是一种启发式优化算法,最初由Kennedy和Eberhart在1995年提出。
它模拟了鸟群或鱼群中个体之间的协作
和竞争关系,在解决优化问题时具有较好的收敛性和全局寻优能力。
随着研究的深入,人们提出了许多粒子群算法的变体,以应对不同
类型的优化问题和改善算法性能。
以下是一些常见的粒子群算法的
变体:
1. 改进的粒子群算法(IPSO),IPSO通过改变粒子的速度更
新公式、邻域拓扑结构或者引入新的搜索策略来增强PSO的全局搜
索能力和局部搜索能力。
2. 多种群粒子群算法(MPSO),MPSO将种群划分为多个子种群,每个子种群独立进行搜索,并通过信息共享来提高全局搜索能力。
3. 自适应粒子群算法(APSO),APSO通过自适应地调整算法
参数或者搜索策略来适应不同的优化问题,提高算法的鲁棒性和适
用性。
4. 混沌粒子群算法(CPSO),CPSO引入了混沌序列来增加算
法的随机性,提高搜索的多样性和全局寻优能力。
5. 多目标粒子群算法(MOPSO),MOPSO针对多目标优化问题
进行了改进,通过引入帕累托最优解集和多目标优化策略来寻找最
优的解集。
6. 基于改进策略的粒子群算法(SPSO),SPSO通过引入新的
搜索策略,如局部搜索、动态权重、自适应参数等,来提高算法的
收敛速度和全局搜索能力。
这些粒子群算法的变体在不同的优化问题中都有其独特的优势,研究人员可以根据具体的问题特点选择合适的算法来进行求解。
同时,随着对粒子群算法的研究不断深入,相信会有更多新的变体算
法被提出来,以满足不断变化的优化问题需求。
粒子群简介从20 世纪90 年代初, 就产生了模拟自然生物群体(swarm) 行为的优化技术。
Dorigo 等从生物进化的机理中受到启发, 通过模拟蚂蚁的寻径行为, 提出了蚁群优化方法,Eberhart 和 Kennedy 于1995 年提出的粒子群优化算法是基于对鸟群、鱼群的模拟。
这些研究可以称为群体智能( swarm intelligence) 。
通常单个自然生物并不是智能的,但是整个生物群体却表现出处理复杂问题的能力,群体智能就是这些团体行为在人工智能问题中的应用。
粒子群优化(PSO) 最初是处理连续优化问题的, 目前其应用已扩展到组合优化问题。
由于其简单、有效的特点, PSO 已经得到了众多学者的重视和研究。
一、PSO 基本原理基本PSO 原理粒子群优化算法是基于群体的演化算法, 其思想来源于人工生命和演化计算理论。
Reynolds 对鸟群飞行的研究发现, 鸟仅仅是追踪它有限数量的邻居, 但最终的整体结果是整个鸟群好像在一个中心的控制之下, 即复杂的全局行为是由简单规则的相互作用引起的。
PSO 即源于对鸟群捕食行为的研究, 一群鸟在随机搜寻食物, 如果这个区域里只有一块食物, 那么找到食物的最简单有效的策略就是搜寻目前离食物最近的鸟的周围区域。
PSO 算法就是从这种模型中得到启示而产生的, 并用于解决优化问题。
另外, 人们通常是以他们自己及他人的经验来作为决策的依据, 这就构成了PSO 的一个基本概念。
基本粒子群算法PSO源于对鸟群捕食行为的研究,人们从鸟群捕食模型当中得到启示,并用于解决优化问题。
在PSO模型中,优化问题的每个解对应搜索空间中的一只鸟,称为粒子。
每个粒子还有一个速度决定它飞翔的方向和距离。
PSO初始化为一群随机粒子,然后粒子开始追随当前的最优粒子运动,直到在整个解空间中搜索找到最优解为止。
在每次迭代中,粒子通过追踪两个极值来更新自己。
一个是粒子自己找到的最优解,称为个体极值P.;另一个是整个粒子群目前找到的最优解,称为全局极值p 。
PSO 求解优化问题时, 问题的解对应于搜索空间中一只鸟的位置, 称这些鸟为“粒子”(particle) 或“主体” (agent) 。
每个粒子都有自己的位置和速度(决定飞行的方向和距离) , 还有一个由被优化函数决定的适应值。
各个粒子记忆、追随当前的最优粒子, 在解空间中搜索。
每次迭代的过程不是完全随机的, 如果找到较好解, 将会以此为依据来寻找下一个解。
令PSO 初始化为一群随机粒子(随机解) , 在每一次迭代中, 粒子通过跟踪两个“极值”来更新自己: 第一个就是粒子本身所找到的最好解, 叫做个体极值点(用pbest 表示其位置) , 全局版PSO中的另一个极值点是整个种群目前找到的最好解,称为全局极值点(用gbest 表示其位置) , 而局部版PSO中的另一个极值点不用整个种群而是用其中一部分作为粒子的邻居, 所有邻居中的最好解就是局部极值点(用lbest 表示其位置)。
在找到这两个最好解后, 粒子根据如下的式(1) 和式(2) 来更新自己的速度和位置。
粒子i的信息可以用D维向量表示, 位置表示为Xi= (xi1,xi2…xiD) 速度为Vi=( vi1,vi2,...,viD)其他向量类似。
则速度和位置更新方程为(1)(2)是粒子i在第k次迭代中第d维的速度;c1 ,c2是加速系数(或称学习因子) ,分别调节向全局最好粒子和个体最好粒子方向飞行的最大步长, 若太小, 则粒子可能远离目标区域, 若太大则会导致突然向目标区域飞去, 或飞过目标区域。
合适的c1 ,c2 可以加快收敛且不易陷入局部最优,通常令c1 = c2 = 2 ;rand1,2 是[0 ,1] 之间的随机数;是粒子i在第k次迭代中第d维的当前位置;是粒子i在第d维的个体极值点的位置(即坐标);是整个群在第d 维的全局极值点的位置。
为防止粒子远离搜索空间, 粒子的每一维速度都在[ - ,+] 之间,太大, 粒子将飞离最好解, 太小将会陷入局部最优。
假设将搜索空间的第d维定义为区间[ -, +] , 则通常 = k ,0.1≤k ≤1.0 ,每一维都用相同的设置方法。
基本PSO 的流程可以描述为:Step1 初始化初始搜索点的位置及其速度通常是在允许的范围内随机产生的,每个粒子的pbest 坐标设置为其当前位置, 且计算出其相应的个体极值(即个体极值点的适应度值),而全局极值(即全局极值点的适应度值) 就是个体极值中最好的,记录该最好的粒子序号,并将gbest设置为该最好粒子的当前位置。
Step2 评价每一个粒子计算粒子的适应度值, 如果好于该粒子当前的个体极值, 则将pbest设置为该粒子的位置, 且更新个体极值。
如果所有粒子的个体极值中最好的好于当前的全局极值, 则将gbest 设置为该粒子的位置, 记录该粒子的序号, 且更新全局极值。
Step3 粒子的更新用式(1)和式(2)对每一个粒子的速度和位置进行更新。
Step4 检验是否符合结束条件如果当前的迭代次数达到了预先设定的最大次数(或达到最小差值要求),则停止迭代, 输出最优解, 否则转到Step2。
PSO 的一些特点:1) 基本PSO 算法最初是处理连续优化问题的。
2) 类似于遗传算法( GA) PSO 也是多点搜索。
3 ) 式(1) 的第一项对应多样化的特点, 第二项、第三项对应于搜索过程的集中化特点, 因此这个方法在多样化和集中化之间建立均衡。
PSO 有全局版和局部版两种, 全局版收敛快,但有时会陷入局部最优。
局部版PSO 通过保持多个吸引子来避免早熟,假设每一个粒子在大小l的邻域内定义为一个集合Ni = { ……} (3)从Ni 中选出最好的,将其位置作为lbest 代替公式中的gbest , 其他与全局版PSO 相同。
实验表明,局部版比全局版收敛慢, 但不容易陷入局部最优。
在实际应用中, 可以先用全局PSO 找到大致的结果, 再用局部PSO 进行搜索。
二进制PSO最初的PSO 是从解决连续优化问题发展起来的, Eberhart 等又提出了PSO 的离散二进制版,用来解决工程实际中的组合优化问题。
他们在提出的模型中将每一维和限制为1或者0,而速度不作这种限制。
用速度来更新位置时,如果高一些, 粒子的位置更有可能选1 ,低一点则选0,阈值在[0, 1] 之间,而有这种特点的函数就是Sigmoid 函数:sig ()= 1/ (1 + exp ( - ) ) (4)二进制版本PSO 的公式为if < sig() then = 1 else = 0 (5)向量的各个分量是[0,1] 之间的随机数。
为了防止Sigmoid 函数饱和,可以将控制在[-4.0,+4.0] 之间。
二进制PSO 其他部分与基本连续PSO 类似。
实验结果显示, 在大多数测试函数中, 二进制PSO 都比遗传算法速度快,尤其在问题的维数增加时。
PSO 的变化和改进PSO 与GA 有很多共同之处, 两者都随机初始化种群, 使用适应值来评价系统和进行一定的随机搜索。
但PSO 是根据自己的速度来决定搜索, 没有GA 的明显的交叉和变异。
如果将pbest 也看作是种群的成员, 那么PSO 也有一种很弱形式的选择。
速度更新方程中如果没有项, 可以解释为一种代数交叉, 而对更好的理解是把每次迭代看成是一种不断适应的过程。
GA 中染色体共享信息, 故整个种群较均匀地向最优区域移动。
在PSO 中gbest (或者lbest ) 将信息传给其他粒子,是单向的信息流动, 多数情况下, 所有的粒子可能更快地收敛于最优解。
由于每个粒子在算法结束时仍然保持着其个体极值, 因此, 如将PSO 用于调度和决策问题时, 可以给出多种有意义的选择方案。
而基本遗传算法在结束时, 只能得到最后一代个体的信息, 前面迭代的信息没有保留。
另外,PSO 算法对种群大小不十分敏感, 即种群数目下降时性能下降不是很大。
PSO 收敛快, 特别是在算法的早期, 但也存在着精度较低, 易发散等缺点。
若加速系数、最大速度等参数太大, 粒子群可能错过最优解, 算法不收敛; 而在收敛的情况下, 由于所有的粒子都向最优解的方向飞去, 所以粒子趋向同一化(失去了多样性) , 使得后期收敛速度明显变慢, 同时算法收敛到一定精度时, 无法继续优化, 所能达到的精度也比GA 低, 因此很多学者都致力于提高PSO算法的性能。
主要从收敛速度和增加多样性方面改进惯性权重(inertia weight) 法(收敛速度的改进)惯性权重w 是与前一次速度有关的一个比例因子, 而速度更新方程为用惯性权重来控制前面的速度对当前速度的影响, 较大的w 可以加强PSO 的全局搜索能力, 而较小的w 能加强局部搜索能力。
基本的PSO 可以看作w = 1 , 因此在迭代后期缺少局部搜索能力。
实验结果表明, w 在[ 0.8 , 1.2] 之间PSO 有更快的收敛速度。
文献中试验了将w 设置为从019 到014 的线性下降, 使得PSO 在开始时探索较大的区域, 较快地定位最优解的大致位置, 随着w 逐渐减小, 粒子速度减慢, 开始精细的局部搜索(这里w 类似于模拟退火中的温度参数) 。
该方法加快了收敛速度, 提高了PSO 算法的性能。
当待解问题很复杂时, 该法使得PSO 在迭代后期全局搜索能力不足, 导致不能找到要求的最优解, 这可以用自适应改变惯性权重来克服。
还有很多,如压缩因子法、选择法、繁殖法等。
增加多样性方面的改进有空间邻域法、邻域拓扑法等。
PSO 的应用PSO 的优势在于算法的简洁性, 易于实现,没有很多参数需要调整。
PSO是非线性连续优化问题、组合优化问题和混合整数非线性优化问题的有效优化工具。
目前已经广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
PSO 最初应用到神经网络训练上, 在随后的应用中, PSO 又可以用来确定神经网络的结构。
Parsopoulos 等将PSO 用于解决多目标优化问题、最小最大化问题、整数规划问题和定位所有全局极值等问题。
一般说来, PSO 比较有潜力的应用包括系统设计、多目标优化、分类、模式识别、调度、信号处理、决策、机器人应用等。
其中具体应用实例有: 模糊控制器设计、车间作业调度、机器人实时路径规划、自动目标检测、时频分析等。
添加工具箱单独下载的工具箱,需要把新的工具箱添加到 toolbox目录下,然后用addpath或者pathtool把该工具箱的路径添加到matlab的搜索路径中,最后用which new toolbox_command.m来检验是否可以造访。
如果能够显示新设置的路径,则表明该工具箱可以应用了。