粒子群算法是在1995年由Eberhart博士和Kennedy博士一起提出的,它源于对鸟群捕食行为的研究。设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道自己当前的位置离食物还有多远。那么找到食物的最佳策略就是搜寻目前距离食物地区最近的鸟群的周围区域。
在这个场景中,每一个粒子就相当于一只鸟,鸟的飞行过程相当于搜索过程, 粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子单独搜寻的最优解叫做个体极值,粒子群中最优的个体极值作为当前全局最优解。不断迭代,更新速度和位置。在每次的迭代中,种群中的粒子除了根据自身的经验(历史位置)进行学习以外,还可以根据种群中最优粒子的"经验"来学习,从而确定下一次迭代时需要如何调整和改变飞行的方向和速度,最终得到满足终止条件的最优解。
步骤大致如下:
1、初始化:可以随机初始化位置和速度,然后定义出适应值函数,算出个体的适应值,目的就是选出个体的局部最优解和种群的全局最优解,
2、迭代设置:设置迭代次数,并设置当前的次数为1
3、粒子的速度与位置更新:更新每个个体的速度向量与位置向量
v[ ] 是粒子的速度,present[ ] 是当前粒子的位置。pbest[ ] 为个体极值, gbest[ ] 为全局极值。rand() 是介于(0,1)之间的随机数。c1,c2是学习因子。通常c1=c2=2。
4、终止条件判断:判断迭代次数是否到达设定的最大迭代次数,如果满足就输出全局最优解,如果不满足就继续迭代,更新速度和位置。