600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 智能优化算法:引力搜索算法-附代码

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

时间:2019-08-15 16:56:42

相关推荐

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

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

文章目录

智能优化算法:引力搜索算法-附代码1.算法原理2.算法结果3.参考文献4.Matlab代码

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

1.算法原理

引力搜索算法利用物体间的万有引力定律搜索最优解,全局优化能力突出。设 nnn 维空间引力系统中有 NNN个粒子,定义第 iii 个粒子位置为 Xi=xi1,...,xid,...,xin,(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)。其中:xidx^d_ixid​为第iii 个粒子在第 ddd 维中位置。GSA 算法流程见图 1。

图1 算法流程图

粒子 iii 在 ttt 时刻质量 Mi(t)M_i (t)Mi​(t)为:

mi(t)=fiti(t)−worst(t)best(t)−worst(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)

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

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

如求解适应度函数极小值,则

best(t)=minfitj(t)(3)best(t) = min\,fit_j(t)\tag{3} best(t)=minfitj​(t)(3)

worst(t)=maxfitj(t)(4)worst(t) = max\,fit_j(t)\tag{4} worst(t)=maxfitj​(t)(4)

在第 ddd 维空间上,第 iii 个粒子受第 jjj 个粒子作用力为:

Fijd(t)=G(t)Mi(t)Mj(t)∣∣Xi(t),Xj(t)∣∣2+ε[xjd(t)−xid(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)为 ttt 时刻引力常数。

G(t)=G0e−at/T(8)G(t) = G_0e^{-at/T}\tag{8} G(t)=G0​e−at/T(8)

式中:G0=100;a=20G_0 =100;a =20G0​=100;a=20;TTT 为迭代次数。

在第 ddd 维空间上,第iii个粒子受其它粒子引力合力作用,用各粒子引力的随机加权和表示,即:

Fid(t)=∑j=1,j≠iNrandFijd(t)(9)F_i^d(t)=\sum_{j=1,j\neq i}^N randF_{ij}^d(t)\tag{9} Fid​(t)=j=1,j​=i∑N​randFijd​(t)(9)

式中:randrandrand 为范围在[0,1]间任意数。

基于牛顿第二定理,在第 ddd 维空间上粒子 iii 在引力合力作用下加速度为:

aid(t)=Fid(t)/Mi(t)(10)a_i^d(t) = F_i^d(t)/M_i(t)\tag{10} aid​(t)=Fid​(t)/Mi​(t)(10)

在GSAGSAGSA 中,粒子iii 更新在第ddd维空间位置 xid(t)x^d_i (t)xid​(t)及速度 vid(t)v^d_i (t)vid​(t)以实现迭代过程,速度及位置更新式为:

vid(t+1)=randvid(t)+aid(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)

xid(t+1)=xid(t)+vid(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,,179(13):2232-2248.

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

4.Matlab代码

引力搜索算法

算法相关应用

个人资料介绍

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。