PSO
算法 粒子群优化算法 PSO
1. 常见的群体智能优化算法分类
常见的群体智能优化算法主要有如下几类:
(1)蚁群算法(Ant Colony Optimization,简称ACO)[1992年提出];
(2)粒子群优化算法(Particle Swarm Optimization,简称PSO)[1995年提出](简单易于实现,也是目前应用最为广泛的群体智能优化算法);
(3)菌群优化算法(Bacterial Foraging Optimization,简称BFO)[2002年提出];
(4)蛙跳算法(Shuffled Frog Leading Algorithm,简称SFLA)[2003年提出];
(5)人工蜂群算法(Artificial Bee Colony Algorithm,简称ABC)[2005年提出];
除了上述几种常见的群体智能算法以外,还有一些并不是广泛应用的群体智能算法,比如萤火虫算法、布谷鸟算法、蝙蝠算法以及磷虾群算法等等。
2. 粒子群优化算法思想
粒子群优化算法是在1995年由Eberhart博士和Kennedy博士一起提出的,它源于对鸟群捕食行为的研究。它的基本核心是利用群体中的个体对信息的共享从而使得整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得问题的最优解。我们可以利用一个有关PSO的经典描述来对PSO算法进行一个直观的描述。设想这么一个场景:一群鸟进行觅食,而远处有一片玉米地,所有的鸟都不知道玉米地到底在哪里,但是它们知道自己当前的位置距离玉米地有多远。那么找到玉米地的最佳策略,也是最简单有效的策略就是是搜寻目前距离玉米地最近的鸟群的周围区域。PSO就是从这种群体觅食的行为中得到了启示,从而构建的一种优化模型。
在PSO中,每个优化问题的解都是搜索空间中的一只鸟,称之为“粒子”,而问题的最优解就对应为鸟群要寻找的“玉米地”。所有的粒子都具有一个位置向量(粒子在解空间的位置)和速度向量(决定下次飞行的方向和速度),并可以根据目标函数来计算当前的所在位置的适应值(fitness value),可以将其理解为距离“玉米地”的距离。在每次的迭代中,种群中的粒子除了根据自身的“经验”(历史位置)进行学习以外,还可以根据种群中最优粒子的“经验”来学习,从而确定下一次迭代时需要如何调整和改变飞行的方向和速度。就这样逐步迭代,最终整个种群的粒子就会逐步趋于最优解。
2.1 PSO的缺点
对于有多个局部极值点的函数,容易陷入到局部极值中,得不到正确的结果。此外,由于缺乏精密搜索方法的配合,PSO往往得不到精确的结果。再则,PSO的方法提供了全局搜索的可能,但并不能严格证明它在全局最优点上的收敛性。因此,PSO一般适用于一类高维的、存在多个局部极值点而并不需要得到很高精度的优化问题。
2.2 PSO的优点
- 易于描述,易于理解
- 对优化问题定义的连续性无特殊要求
- 只有非常少的参数需要调整
- 算法实现简单,速度快
- 相对其他的演化算法,只需要很少的的演化群体
- 算法易于收敛,相比其他演化算法,只需要较少的评价函数计算次数就可以达到收敛
- 无集中控制约束,不会因为个体的故障影响整个问题的求解,确保了系统具备很强的鲁棒性
3. 粒子群优化算法的基本框架
3.1 公式
在介绍PSO的算法流程之前,我们写给出PSO中常用的迭代算子的形式。
在D维空间中,有N个粒子:
* Xi=(xi1,xi2,...,xin) 代表粒子 i 的位置向量
* Vi=(vi1,vi2,...,vin)代表粒子 i 的速度向量(其中n为优化问题的维度大小)
* 粒子i个体经历过的最好位置:pbesti=(pi1,pi2,...,piD)
* 种群所经历过的最好位置: gbest=(g1,g2,...,g)
通常,在第 d(1<=d<=D) 的位置变化范围限定在 [Xmin,d,Xmax,d] 内。若在迭代中若 Vid , Xid 超出了边界值,则该维的速度或位置被限制为该维最大速度或边界位置。
最早版本的粒子群优化算法的迭代算子形式如下:
速度向量迭代公式:
Vk+1i=Vki+C1∗r1∗(Pkbesti−Xki)+C2∗r2∗(Pkgbest−Xki)
位置向量迭代公式:
Xk+1i=Xki+r∗Vk+1i
其中在公式(1)中, Pbesti 和 Gbest 分别代表粒子 i 的历史最佳位置向量和种群历史最佳位置向量。根据公式(1)可以看出,种群中的粒子通过不断地向自身和种群的历史信息进行学习,从而可以找出问题的最优解。
但是,在后续的研究中表明,上述原始的公式中存在一个问题:公式(1)中Vi的更新太具有随机性,从而使得整个PSO算法的全局优化能力很强,但是局部搜索能力较差。而实际上,我们需要在算法迭代初期PSO有着较强的全局优化能力,而在算法的后期,整个种群应该具有更强的局部搜索能力。所以根据上述的弊端, Shi 和 Eberhart 通过引入惯性权重修改了公式(1),从而提出了PSO的惯性权重模型:
Vk+1id=Wk+1id∗Vkid+C1∗r1∗(Pkbestid−Xkid)+C2∗r2∗(Pkgbestd−Xkid)
Vk+1id - 第k+1次迭代粒子i飞行速度矢量的第d维分量
Xk+1id - 第k+1次迭代粒子i位置矢量的第d维分量
c1,c2 - 加速度常数,调节学习最大步长
r1,r2 - 两个随机函数,取值范围[0, 1],以增加搜索随机性
w - 惯性权重,非负数,调节对解空间的搜索范围
3.2 惯性权重
其中参数 w 称为是PSO的惯性权重(inertia weight),它的取值介于[0,1]区间,一般应用中均采取自适应的取值方法,即一开始令w=0.9,使得 PSO 全局优化能力较强,随着迭代的深入,参数 w 进行递减,从而使得PSO具有较强的局部优化能力,当迭代结束时, w=0.1 。参数 c1 和 c2 称为是学习因子(learn factor),一般设置为1.4961;而 r1 和 r2 为介于[0,1]之间的随机概率值。
3.3 算法流程
整个粒子群优化算法的算法框架如下:
Step 1 种群初始化:可以进行随机初始化或者根据被优化的问题设计特定的初始化方法
Step 2 计算个体的适应度(Fitness),适应度指的是目标函数的值
Step 3 选择出个体的局部最优位置向量 Pbesti 和种群的全局最优位置向量 Gbest 。
Step 4 迭代设置:设置迭代次数 gmax ,并令当前迭代次数 g=1 ;
Step 5 速度更新:根据公式 (3) 更新每个个体的速度向量;
Step 6 位置更新:根据公式 (2) 更新每个个体的位置向量;
Step 7 局部位置向量和全局位置向量更新:更新每个个体的 Pbesti 和种群的 Gbest ;
Step 8 终止条件判断:判断迭代次数时都达到 gmax ,如果满足,输出 Gbest ;否则继续进行迭代,跳转至 Step3 。
对于粒子群优化算法的运用,主要是对速度和位置向量迭代算子的设计。迭代算子是否有效将决定整个 PSO 算法性能的优劣,所以如何设计 PSO 的迭代算子是 PSO 算法应用的研究重点和难点。
4. 对粒子群优化算法中惯性权重的认识
参数 w 被称之为是惯性权重,顾名思义w实际反映了粒子过去的运动状态对当前行为的影响,就像是我们物理中提到的惯性。如果 w<<1 ,从前的运动状态很少能影响当前的行为,粒子的速度会很快的改变;相反, w 较大,虽然会有很大的搜索空间,但是粒子很难改变其运动方向,很难向较优位置收敛,由于算法速度的因素,在实际运用中很少这样设置。也就是说,较高的w设置促进全局搜索,较低的 w <script type="math/tex" id="MathJax-Element-216">w</script>设置促进快速的局部搜索。
5. 粒子群优化算法举例——求解旅行商问题
旅行商问题(Traveling Salesman Problem,TSP)又译为旅行推销员问题、货郎担问题,简称为TSP问题,是最基本的路线问题和最典型的NP难问题,该问题是在寻求单一旅行者由起点出发,通过所有给定的需求点之后,最后再回到原点的最小路径成本。最早的旅行商问题的数学规划是由Dantzig等人于1959年提出的。
下面为一个TSP问题的数据集,城市个数为51:
1 37 52
2 49 49
3 52 64
4 20 26
5 40 30
6 21 47
7 17 63
8 31 62
9 52 33
10 51 21
11 42 41
12 31 32
13 5 25
14 12 42
15 36 16
16 52 41
17 27 23
18 17 33
19 13 13
20 57 58
21 62 42
22 42 57
23 16 57
24 8 52
25 7 38
26 27 68
27 30 48
28 43 67
29 58 48
30 58 27
31 37 69
32 38 46
33 46 10
34 61 33
35 62 63
36 63 69
37 32 22
38 45 35
39 59 15
40 5 6
41 10 17
42 21 10
43 5 64
44 30 15
45 39 10
46 32 39
47 25 32
48 25 55
49 48 28
50 56 37
51 30 40
51个城市分布图: