智能优化算法:引力搜索算法-附代码

智能优化算法:引力搜索算法-附代码


摘要:万 有 引 力 搜 索 算 法 (gravitational searchalgorithm,GSA) 由伊朗的 Esmat Rashedi 教授等人提出,该算法是基于牛顿万有引力定律的一种元启发式智能优化算法,能够用于解决优化问题。

1.算法原理

引力搜索算法利用物体间的万有引力定律搜索最优解,全局优化能力突出。设 n n n 维空间引力系统中有 N N N个粒子,定义第 i i i 个粒子位置为 X i = x i 1 , . . . , x i d , . . . , x i n , ( i = 1 , 2 , . . . , N ) X_i={x_i^1,...,x_i^d,...,x_i^n},(i=1,2,...,N) Xi=xi1,...,xid,...,xin,(i=1,2,...,N)。其中: x i d x^d_i xid为第 i i i 个粒子在第 d d d 维中位置。GSA 算法流程见图 1。

在这里插入图片描述

图1 算法流程图

粒子 i i i t t t 时刻质量 M i ( t ) M_i (t) Mi(t)为:
m i ( t ) = f i t i ( t ) − w o r s t ( t ) b e s t ( t ) − w o r s t ( t ) (1) m_i(t)=\frac{fit_i(t)-worst(t)}{best(t)-worst(t)}\tag{1} mi(t)=best(t)worst(t)fiti(t)worst(t)(1)

M i ( t ) = m i ( t ) ∑ j = 1 N m j ( t ) (2) M_i(t)=\frac{m_i(t)}{\sum_{j=1}^Nm_j(t)}\tag{2} Mi(t)=j=1Nmj(t)mi(t)(2)

式中: f i t i ( t ) fit_i(t) fiti(t)为在 t t t 时刻粒子 i i i的适应度函数值。

如求解适应度函数极小值,则
b e s t ( t ) = m i n   f i t j ( t ) (3) best(t) = min\,fit_j(t)\tag{3} best(t)=minfitj(t)(3)

w o r s t ( t ) = m a x   f i t j ( t ) (4) worst(t) = max\,fit_j(t)\tag{4} worst(t)=maxfitj(t)(4)

在第 d d d 维空间上,第 i i i 个粒子受第 j j j 个粒子作用力为:
F i j d ( t ) = G ( t ) M i ( t ) M j ( t ) ∣ ∣ X i ( t ) , X j ( t ) ∣ ∣ 2 + ε [ x j d ( t ) − x i d ( t ) ] (7) F_{ij}^d(t) = G(t)\frac{M_i(t)M_j(t)}{||X_i(t),X_j(t)||_2+\varepsilon}[x_j^d(t)-x_i^d(t)]\tag{7} Fijd(t)=G(t)Xi(t),Xj(t)2+εMi(t)Mj(t)[xjd(t)xid(t)](7)
式中: ε \varepsilon ε 为接近 0 的常量; G ( t ) G(t) G(t) t t t 时刻引力常数。
G ( t ) = G 0 e − a t / T (8) G(t) = G_0e^{-at/T}\tag{8} G(t)=G0eat/T(8)
式中: G 0 = 100 ; a = 20 G_0 =100;a =20 G0=100;a=20; T T T 为迭代次数。

在第 d d d 维空间上,第 i i i个粒子受其它粒子引力合力作用,用各粒子引力的随机加权和表示,即:
F i d ( t ) = ∑ j = 1 , j ≠ i N r a n d F i j d ( t ) (9) F_i^d(t)=\sum_{j=1,j\neq i}^N randF_{ij}^d(t)\tag{9} Fid(t)=j=1,j=iNrandFijd(t)(9)
式中: r a n d rand rand 为范围在[0,1]间任意数。

基于牛顿第二定理,在第 d d d 维空间上粒子 i i i 在引力合力作用下加速度为:
a i d ( t ) = F i d ( t ) / M i ( t ) (10) a_i^d(t) = F_i^d(t)/M_i(t)\tag{10} aid(t)=Fid(t)/Mi(t)(10)
G S A GSA GSA 中,粒子 i i i 更新在第 d d d维空间位置 x i d ( t ) x^d_i (t) xid(t)及速度 v i d ( t ) v^d_i (t) vid(t)以实现迭代过程,速度及位置更新式为:
v i d ( t + 1 ) = r a n d v i d ( t ) + a i d ( t ) (11) v_i^d(t+1)=randv_i^d(t)+a_i^d(t)\tag{11} vid(t+1)=randvid(t)+aid(t)(11)

x i d ( t + 1 ) = x i d ( t ) + v i d ( t + 1 ) (12) x_i^d(t+1)=x_i^d(t)+v_i^d(t+1)\tag{12} xid(t+1)=xid(t)+vid(t+1)(12)

2.算法结果

在这里插入图片描述

3.参考文献

[1] Esmat R,Hossein N,Saeid S.GSA:A gravitational search algorithm[J].Inform Sci,2009,179(13):2232-2248.

[2] 刘永前, 徐强, Infield D , et al. 基于引力搜索神经网络的风电机组传动链故障识别[J]. 振动与冲击, 2015, 34(2):134-137.

4.Matlab代码

https://mianbaoduo.com/o/bread/aJiYmZc=

猜你喜欢

转载自blog.csdn.net/u011835903/article/details/108518992
今日推荐