PSO算法
粒子群算法(Particle,Swarm Optimization,PSO)由Kennedy和Eberhart于1995年提出,算法模仿鸟群觅食行为对优化问题进行求解。
粒子群算法中每个粒子包含位置和速度两个属性,其中,位置代表了待求问题的一个候选解,速度决定了粒子飞行的方向和距离。
- 位置向量
X i t = ( x i 1 t , x i 2 t , ⋯ x i , D t ) (1) X_i^t = (x_{i1}^t,x_{i2}^t,\cdots x_{i,D}^t) \tag{1} Xit=(xi1t,xi2t,⋯xi,Dt)(1) - 速度向量
V i t = ( v i 1 t , v i 2 t , ⋯ v i , D t ) (2) V_i^t = (v_{i1}^t,v_{i2}^t,\cdots v_{i,D}^t) \tag{2} Vit=(vi1t,vi2t,⋯vi,Dt)(2)
算法超参数
- w w w:惯性权重,表示粒子在下一次迭代中应在多大程度上保持先前的运动方向和速度;
- c 1 c_1 c1:个体学习因子,表示粒子在下一次迭代中飞向自己到过的最优位置的意愿;
- c 2 c_2 c2:社会学习因子,表示粒子在下一次迭代中飞向群体到过的最优位置的意愿;
- NP:种群大小;
- Gmax:最大迭代数。
寻优公式
PSO通过粒子追随自己当前找到的个体最优解(pbest)和群体最优解(gbest)来完成优化。
- 速度更新:
V i t + 1 = w V i t + c 1 r 1 ( p b e s t i t − x i t ) + c 2 r 2 ( g b e s t t − x i t ) (3) V_i^{t+1}=wV_i^t+c_1 r_1(pbest_i^t-x_i^t) + c_2 r_2(gbest^t-x_i^t) \tag{3} Vit+1=wVit+c1r1(pbestit−xit)+c2r2(gbestt−xit)(3)
其中, p b e s t i t pbest_i^t pbestit表示前 t t t轮迭代中第 i i i个粒子的最好位置, g b e s t t gbest^t gbestt表示前 t t t轮迭代中所有粒子的最好位置。 r 1 , r 2 r_1,r_2 r1,r2是D维向量,每一维元素是在[0,1]区间上均匀分布的随机数。 - 位置更新
X i t + 1 = X i t + V i t + 1 (4) X_i^{t+1}=X_i^t+V_i^{t+1} \tag{4} Xit+1=Xit+Vit+1(4)
初始化
初始解应当覆盖整个搜索空间,一般采用均匀分布随机生成初始解。
x i j 0 = x i , j m i n + r a n d ( 0 , 1 ) ⋅ ( x i , j m a x − x i , j m i n ) (5) x_{ij}^0=x_{i,j}^{min}+rand(0,1) \cdot (x_{i,j}^{max} - x_{i,j}^{min}) \tag{5} xij0=xi,jmin+rand(0,1)⋅(xi,jmax−xi,jmin)(5)
其中,rand(0,1)表示0-1之间的随机数, x i j m a x x_{ij}^{max} xijmax和 x i j m i n x_{ij}^{min} xijmin分别表示该问题第j个维度变量的上下界。
伪代码
输入:超参数 ( w , c 1 , c 2 , N P , G m a x ) (w,c_1,c_2,NP,Gmax) (w,c1,c2,NP,Gmax)和搜索边界 X m i n X_{min} Xmin, X m a x X_{max} Xmax
输出:最优解
1:初始化
2:根据式(5)初始化位置种群X和速度种群V
3:记录个体最优pbest和群体最优gbest
4:优化搜索
5:For G = 1:Gmax
6: \qquad For i = 1:NP
7: \qquad \qquad 根据式(3)更新速度向量 V i G V_i^G ViG
8: \qquad \qquad 根据式(4)更新位置向量 X i G X_i^G XiG
9: \qquad \qquad If f ( X i G ) < p b e s t i f(X_i^G) < pbest_i f(XiG)<pbesti
10: \qquad \qquad \qquad p b e s t i = f ( X i G ) pbest_i = f(X_i^G) pbesti=f(XiG)
11: \qquad \qquad End
12: \qquad End
13: \qquad 更新群体最优 g b e s t gbest gbest
14:End
注:优化算法并不保证能够得到问题的最优解,因此,算法输出的最优解并非问题的整体最优解,而是搜索过程中最好的一个解。
实验
实验选取二维的平方和函数,函数的最小值在点(a,b)取得,最小值为0。
f ( x 1 , x 2 ) = ( x 1 − a ) 2 + ( x 2 − b ) 2 (6) f(x_1,x_2) = (x_1 - a)^2 + (x_2-b)^2 \tag{6} f(x1,x2)=(x1−a)2+(x2−b)2(6)
实验参数如下:
参数 | 值 |
---|---|
问题维度D | 2 |
种群数NP | 30 |
最大进化次数Gmax | 50 |
惯性系数 w w w | 0.5 |
个体学习因子 c 1 c_1 c1 | 1 |
社会学习因子 c 2 c_2 c2 | 1 |
取值范围 | (-100,100) |
最优值 | 最差值 | 平均值 | 标准差 |
---|---|---|---|
6.663e-14 | 4.767e-12 | 6.490e-13 | 9.266e-13 |
代码获取
关注微信公众号数学模型与算法回复 粒子群算法
获取python代码
参考文献
[1] Storn R , Price K .Differential Evolution – A Simple and Efficient Heuristic for global Optimization over Continuous Spaces[J].Journal of Global Optimization, 1997, 11:341-359.DOI:10.1023/A:1008202821328.
[2] Das S , Abraham A , Chakraborty U K ,et al.Differential Evolution Using a Neighborhood-Based Mutation Operator[J].IEEE Transactions on Evolutionary Computation, 2009, 13(3):526-553.DOI:10.1109/TEVC.2008.2009457.