智能優化算法:蝗蟲優化算法-附代碼
@[toc]
摘要:蝗蟲算法( Grasshopper Optimization Algorithm,GOA ) 是 由 Saremi 等[1]于2017 年提出的一種元啟發式仿生優化算法,具有較高的搜索效率和較快的收斂速度,且算法本身特殊的自適應機制能夠很好地平衡全局和局部搜索過程,具有較好的尋優精度。
1.算法原理
根據蝗蟲算法模擬蝗蟲在自然界中的種群遷移和覓食行為將搜索分為: 探索和開發。對該過程進行數學建模,蝗蟲算法的數學公式如下:
式中: 為第
個蝗蟲的位置;
為個體間相互影響力;
為第
個蝗蟲受到的重力;
為第
個蝗蟲受到的風力。蝗蟲的社會作用對蝗蟲位置的影響最大。
計算如下:
式中: 為第 i 個蝗蟲與第 j 個蝗蟲之間的距離;
為第 i 個蝗蟲指向第 j 個蝗蟲的單位向量; s 為社會力量,其為負數時表示相互排斥,為正數時表示相互吸引,計算方法如下:
式中: 為吸引強度;
為吸引長度尺度。當
時,函數
的曲線顯示了蝗蟲之間的相互作用力( 吸引和排斥)。
<center> 圖1.s函數
<center> 圖2.改變參數f,l時的s
由圖 1 可知,在區間( 1. 000,2. 079) 內,存在排斥力; 當距離等于 2. 079 時,即沒有吸引力也沒有排斥力,稱這一區域為舒適區; 當距離從 2. 079 增加到4.000 的過程中,存在吸引 力,且開始 是 逐 漸 增加的,然后吸引力逐漸減少。改變式中的 和
參數時,蝗蟲之間的相互力會改變,如圖 2 所示。根據圖 2 中的函數曲線,選擇參數
<center> 圖3.蝗蟲個體之間的相互作用
可以直觀地顯示蝗蟲之間相對于舒適區域的相互作用的概念性示意圖如圖 3 所示。函數 存在一個不足,即當蝗蟲之間的距離過大時作用力將不存在,因此要將蝗蟲之間的距離做標準化處理。
可計算如下:
式中: 為重力常數;
為指向地球中心的單位向量。
可計算如下:
式中: 為風力常量;
為指向風向的單位向量。于是
可表示為:
通常當蝗蟲群到達舒適區時,蟲群仍舊沒有收斂,為了適應優化問題的求解,協調全局和局部優化過程,通過引入參數以區分不同階段的尋優。改進后的數學模型如下:
式中: 為遞減系數,決定著舒適區、斥力區和吸引區的大小;
為蝗蟲數量;
和
分別為函數
在
維空間上的上下界;
為目前為止蝗蟲位置在
維空間上的最佳解。式中不考慮重力影響,且假定風向總指向最優解。內部的
有助于減少蝗蟲之間的斥力或吸引力,且與迭代次數成正比,外部的
隨著迭代次數
的增加會減少對目標周圍的搜索區域。利用下式(更新參數,隨著迭代次數的增加,減少全局搜索,并增加局部精度搜索。
式中: 為最大值;
為最小值;
為當前迭代次數;
為 最 大 迭 代 次 數; 本 文 取
。
2.算法流程
算法步驟如下:
( 1) 初始化。首先初始化蝗蟲種群 和算法中各參數。
( 2) 計算每個蝗蟲的適應度;
( 3) 計算當前最佳適應度;
( 4) 判斷是否達到迭代次數,若達到,則程序結束,當前的全局最優解的位置即為最優解
( 5) 更新參數 c;
( 6) 標準化蝗蟲之間的距離,歸一化區間為[1,4];
( 7) 更新蝗蟲的位置,并計算更新后的蝗蟲適應度,與歷史最佳進行比較,若適應度優于歷史最佳,則更新,否則不更新;
( 8) 更新迭代次數,并返回到( 4)
3.算法結果
4.參考文獻:
[1]Shahrzad Saremi,Seyedali Mirjalili,Andrew Lewis. Grasshopper Optimisation Algorithm: Theory and application[J]. Advances in Engineering Software,2017,105.
[2]程澤新,李東生,高楊.基于蝗蟲算法的無人機三維航跡規劃[J].飛行力學,2019,37(02):46-50+55.
5.matlab代碼:
https://mianbaoduo.com/o/bread/mbd-Z5ealZ0=
文獻復現代碼
[1]趙然,郭志川,朱小勇.一種基于Levy飛行的改進蝗蟲優化算法[J].計算機與現代化,2020(01):104-110.
https://mianbaoduo.com/o/bread/mbd-YZaUlZZy
[1]李洋州,顧磊.基于曲線自適應和模擬退火的蝗蟲優化算法[J].計算機應用研究,2019,36(12):3637-3643.
https://mianbaoduo.com/o/bread/mbd-YZaUlZ1w
[1]何慶,林杰,徐航.混合柯西變異和均勻分布的蝗蟲優化算法[J/OL].控制與決策:1-10[2021-01-08].https://doi.org/10.13195/j.kzyjc.2019.1609.
https://mianbaoduo.com/o/bread/YZaUlpZp