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个粒子:
*
*
* 粒子i个体经历过的最好位置:
* 种群所经历过的最好位置:
通常,在第
最早版本的粒子群优化算法的迭代算子形式如下:
速度向量迭代公式:
位置向量迭代公式:
其中在公式(1)中,
但是,在后续的研究中表明,上述原始的公式中存在一个问题:公式(1)中
3.2 惯性权重
其中参数
3.3 算法流程
整个粒子群优化算法的算法框架如下:
Step 1 种群初始化:可以进行随机初始化或者根据被优化的问题设计特定的初始化方法
Step 2 计算个体的适应度(Fitness),适应度指的是目标函数的值
Step 3 选择出个体的局部最优位置向量
Step 4 迭代设置:设置迭代次数
Step 5 速度更新:根据公式
Step 6 位置更新:根据公式
Step 7 局部位置向量和全局位置向量更新:更新每个个体的
Step 8 终止条件判断:判断迭代次数时都达到
对于粒子群优化算法的运用,主要是对速度和位置向量迭代算子的设计。迭代算子是否有效将决定整个
4. 对粒子群优化算法中惯性权重的认识
参数
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个城市分布图: