粒子群优化算法(PSO)及Matlab实现

粒子群优化算法(Particle Swarm Optimization,PSO),于1995年由美国社会心理学家James Kennedy和电气工程师Russell Eberhart受对鸟类群体行为进行建模和仿真研究结果的启发共同提出,通过对Frank Hepper的模型进行修正,使粒子飞向解空间并在最优解处降落。本文主要从算法描述、建模、种类、流程、特点以及MATLAB实现六个部分来介绍该算法。

目录

Ⅰ PSO算法描述

Ⅱ PSO算法建模

Ⅲ PSO算法种类

Ⅳ PSO算法流程

Ⅴ PSO算法的特点

Ⅵ MATLAB实现


Ⅰ PSO算法描述

粒子群优化算法,本质是一种随机搜索算法,是一种新兴的智能优化技术,它源于鸟类群体活动的规律性,进而利用群体智能建立一个简化的模型。它模拟鸟类的觅食行为,将优化问题的搜索比作鸟类的飞行空间,将每只鸟抽象为一个无质量、无体积的粒子,用以表征问题的一个可行解,将寻找问题最优解的过程看成鸟类寻找食物的过程,进而求解复杂的优化问题。与鸟类捕食行为类似,在算法中,每个粒子都在不停地搜索,其搜索行为一方面受到自身经验的引导,还在不同程度上受到群体中其他个体的影响,也就实现了该算法的信息共享机制。基于独特的搜索机制,算法首先生成初始种群,即在可行解空间和速度空间随机初始化粒子的速度和位置,其中粒子的位置用以表征问题的可行解,然后通过种群间粒子个体的合作与竞争来求解优化问题

Ⅱ PSO算法建模

建模之前我们还是先讨论一下鸟群的捕食行为,鸟群在某区域中随机搜索食物,所有的鸟知道自己当前位置离食物多远,那么搜索最简单有效的策略就是搜索目前离食物最近的鸟的周围区域。在PSO算法中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适应度值,还有一个决定它们飞翔的方向和距离的速度,然后粒子们就追随当前的最优粒子在解空间搜索。

算法首先在给定的解空间中随机初始化粒子群,待优化问题的变量数决定了解空间的维数,此时,每个粒子都有了初始位置和初始速度,然后通过迭代寻优;在每一次迭代中,每个粒子通过跟踪“个体极值(单个粒子本身在迭代过程中找到的最优解粒子)”和“全局极值(种群所有粒子在迭代过程中所找到的最优解粒子)”来更新自己在解空间中的位置和飞行速度。

Ⅲ PSO算法种类

1. 基本粒子群算法(惯性+认知+社会)

假设在一个D维的目标搜索空间中,有N个粒子组成一个群落,其中第 i 个粒子表示为一个D维的向量:\tiny X_{i}=(x_{i1},x_{i2},\cdots ,x_{iD})\tiny i=1,2,\cdots ,N;第 i 个粒子的飞行速度也是一个D维的向量:\tiny V_{i}=(v_{i1},v_{i2},\cdots ,v_{iD})\tiny i=1,2,\cdots ,N;第 i 个粒子迄今为止搜索到的最优位置称为个体极值,记为:\tiny p_{best}=(p_{i1},p_{i2},\cdots ,p_{iD})\tiny i=1,2,\cdots ,N;整个粒子群迄今为止搜索到的最优位置为全局极值,记为:\tiny g_{best}=(g_{1},g_{2},\cdots ,g_{D});在找到两个最优值时,粒子根据如下的两个式子来更新自己的速度和位置

                                         \tiny v_{ij}(t+1)=v_{ij}(t)+c_{1}r_{1}(t)[p_{ij}(t)-x_{ij}(t)]+c_{2}r_{2}(t)[p_{gj}(t)-x_{ij}(t)](速度)

                                                             \tiny x_{ij}(t+1)=x_{ij}(t)+v_{ij}(t+1)(位置)

其中,\tiny c_{1}\tiny c_{2}是学习因子,也称加速常数;\tiny r_{1}\tiny r_{2}为[0,1]范围内的均匀随机数,增加粒子飞行的随机性;\tiny v_{ij}是粒子的速度,\tiny v_{ij}\in [-v_{max},v_{max}]\tiny v_{max}是常数,由用户设定来限制粒子的速度。粒子的速度更新公式右边包括三部分:第一部分为“惯性”或者“动量”部分,反映了粒子的运动习惯,代表粒子有维持自己先前速度的趋势;第二部分为“认知”部分,反映了粒子对自身经验的记忆或者回忆,代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会”部分,反映了粒子间协同合作与知识共享的群体历史经验,代表粒子有向群体历史最佳位置逼近的趋势。

2. 标准粒子群算法(带有惯性权重的改进粒子群算法)

标准粒子群算法,即为带有惯性权重的改进粒子群算法,于1998年由 Shi Yuhui 等人提出,具有较好的收敛效果,其进化过程为:

                                         \tiny v_{ij}(t+1)=\omega \cdot v_{ij}(t)+c_{1}r_{1}(t)[p_{ij}(t)-x_{ij}(t)]+c_{2}r_{2}(t)[p_{gj}(t)-x_{ij}(t)](速度)

                                                             \tiny x_{ij}(t+1)=x_{ij}(t)+v_{ij}(t+1)(位置)

与基本粒子群算法相同,该算法第一部分表示粒子先前的速度,用于保证算法的全局收敛性能;第二、三部分则保证算法的局部收敛能力。显然,惯性权重 \tiny \omega 表示在多大程度上保留原来的速度:\tiny \omega 较大,则全局收敛能力较强,\tiny \omega较小,则局部收敛能力较强。实验结果表明,\tiny \omega 在0.8-1.2之间时,粒子群算法有更快的收敛速度;而当 \tiny \omega > 1.2时,算法容易陷入局部极值。

另外,在搜索过程中可以对 \tiny \omega 进行动态调整,以权衡全局搜索和局部搜索能力:算法开始时,给 \tiny \omega 赋予较大正值,随着搜索的进行,可以线性地使 \tiny \omega 逐渐减小,以保证算法开始时,各粒子能够以较大的速度步长在全局范围内探测到较好的区域;而在搜索后期,\tiny \omega 值较小,保证粒子能够在极值点周围做精细的搜索,从而使算法有较大的概率向全局最优解位置收敛。目前,采用较多的动态惯性权重值是由Shi提出的线性递减权值策略,其表达式为\tiny \omega =\omega_{max}-\frac{(\omega_{max}-\omega_{min})\cdot t}{T_{max}},其中,\tiny T_{max}表示最大进化代数;\tiny \omega _{max}表示最大惯性权重;\tiny \omega _{min}表示最小惯性权重,t表示当前迭代次数。在多数应用中,\tiny \omega _{max}=0.9\tiny \omega _{min}=0.4

3. 离散粒子群算法(离散二进制版的粒子群算法)

基本的粒子群算法是在连续域中搜索函数极值的有力工具,继基本粒子群算法之后,K和E又提出了一种离散二进制版的粒子群算法。在此离散粒子群算法中,将离散问题空间映射到连续粒子运动空间,并适当修改粒子群算法来求解,在计算上仍保留经典粒子群算法速度-位置更新运算规则。粒子在状态空间的取值仅限于0和1两个值,而速度的每一维 \tiny v_{ij} 代表位置每一位 \tiny x_{ij} 取值为1的可能性。因此,在连续粒子群中的 \tiny v_{ij} 更新公实依然保持不变,但是 \tiny p_{best} 和 \tiny p_{best} 只在[0,1]内取值。其位置更新等式表示如下:

                                                    \tiny s(v_{ij})=1/[1+exp(-v_{ij})]\tiny x_{ij}=\left\{\begin{matrix} 1, & r<s(v_{ij}) \\ 0, & others \end{matrix}\right.

其中,r是从U(0,1)分布中产生的随机数。

Ⅳ PSO算法流程 

粒子群算法基于“种群”和“进化”的概念,通过个体间的协作与竞争,实现复杂空间最优解的搜索,流程如下图所示:

Ⅴ PSO算法的特点

实践证明,PSO算法适合在动态、多目标优化环境中寻优,与传统优化算法相比,具有较快的计算速度和更好的全局搜索能力。现将特点总结如下:

1. 基于群智能理论,通过群体中粒子间的合作与竞争产生的群体智能指导优化搜索,是一种高效的并行搜索算法;

2. 基于种群的全局搜索策略,采用简单的速度-位移模型,操作简单,避免了复杂的遗传操作;

3. 每个粒子在算法结束时仍保持其个体极值,即该算法除了可以找到问题的最优解外,还会得到若干较好的次优解,因此将粒子群算法用于调度和决策问题可以给出多种有意义的方案;

4. 算法特有的记忆使其可以动态地跟踪当前搜索情况并调整其搜索策略;

5. 算法对种群大小不敏感,当种群数目下降时,性能下降不是很大。

Ⅵ MATLAB实现

你可能感兴趣的:(群体智能,matlab,算法,开发语言)