優化算法筆記(十五)蝙蝠算法

1. 蝙蝠算法簡介

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
  蝙蝠算法(Bat Algorithm)是受蝙蝠回聲定位的特性啟發而提出的新興算法,提出時間是2010年,雖然距今(2020)有近10年,但與其它的經典算法相比仍算一個新算法。算法也已有一定規模的研究和應用,但仍有改進點、創新點及應用點。
  蝙蝠算法主要模擬了蝙蝠通過回聲定位系統來尋找小型昆蟲進行覓食的行為。蝙蝠算法對解空間的搜索方式與粒子群算法(PSO)有一定的類似,與粒子群相比,蝙蝠算法的每只蝙蝠多了頻率屬性和響度,頻率與相對距離決定蝙蝠的速度,而速度與當前位置決定了蝙蝠下一刻的位置。可以看出,算法很符合我們想象中的蝙蝠的回聲定位覓食行為:當蝙蝠發出的超聲波返回的頻率和自己與目標之間的相對距離均較為合適時(目標個頭不太大,自己離得也不太遠),蝙蝠會加速(或減速)向目標飛去。
  當然發送超聲波的動物還有海豚什么的,大家可以發揮想象力,創造一個什么海豚算法。

2. 算法流程

這次我們的主角顯而易見,就是蝙蝠了。


  每一個蝙蝠有四個屬性,當前位置X,當前速度V,回聲頻率f,回聲響度A。蝙蝠算法每只蝙蝠的有兩種行為(1)更新頻率,更新位置,(2)隨機飛行

2.1更新速度,更新位置

每只蝙蝠在更新速度之前會先隨機自己的超聲波頻率f:
f^{t+1}=rand(f_{min},f_{min})(1)
  其中 f_{min}f_{max}表示其頻率的最大值和最小值。
  然后每只蝙蝠會根據自身當前速度和當前位置與最優位置間的距離來更新其速度:
v^{t+1}=v^{t}+f^{t+1}(x^{t}-x_{best}^{t})(2)
  可以看出,本次飛行的隨度是上次的速度與自身位置到最優位置的反方向的合速度。(想不通為什么是(x^{t}-x_{best}^{t}) 而不是 (x_{best}^{t}-x^{t}) ,為什么不向著最優個體飛行,不過做了實驗,好像區別不大)
  更新位置的公式也很簡單,和粒子群一樣
x^{t+1}=x^{t}+v^{t+1}(3)

2.2隨機飛行

蝙蝠隨機取一個數,如果該數大于蝙蝠的脈沖頻率時進行隨機飛行。文章中對隨機飛行的描述過于抽象,我完全無法明確理解其實現方式。
  進行隨機飛行的公式如下:
x_{new}=x_{old}+\varepsilon A^t(4)
  其中,\varepsilon 是[-1,1]內的均勻隨機數,A為該代的所有蝙蝠的響度的平均值。
  每只蝙蝠每一代會產生一個(0,1)內的隨機數rand,如果rand>r^t 則進行隨機飛行。
  理解的難處在于 x_{old}的選取。
  文章中的偽代碼描述見下圖:

偽代碼

  根據上述描述,我大致有3種理解:
  (1) 如果蝙蝠的隨機數大于自己的脈沖頻率,則 選取最優蝙蝠,即該蝙蝠在最優蝙蝠附近進行隨機飛行,否則 選取自己當前位置。
  (2) 如果蝙蝠的隨機數大于自己的脈沖頻率,則 在當前較優的數個蝙蝠中隨機選取一個蝙蝠。
  (3) 如果蝙蝠的隨機數大于自己的脈沖頻率,則 選取最優蝙蝠,但是隨機飛行時只隨機選擇最優蝙蝠的一維,其他維保持不變。

反正我不知道是哪一種,亦或是以上都不是。后面我們實驗說話。
  位置更新完后,蝙蝠會比較新位置與之前的位置中哪個更好,如果新位置更好,則飛行到新的位置,否則留在原處。飛到新位置的同時,蝙蝠會更新自己的響度A和自己的脈沖頻率r:
A^t=\alpha^t A^0(5)
r^{t+1}=r^{t}(1-e^{-\gamma t})(6)
其中 \alpha,\gamma為常數。

理解1流程圖
理解2流程圖
理解3流程圖

  我的三個理解的流程圖如上,看上去三個都差不太多,但是實現方式和效果的差別還挺大的。

3. 實驗

適應度函數f(x_1,x_2)=(x_1-a)^2+(x_2-b)^2
實驗一: 按照理解(1)實現

參數
問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
最小頻率-最大頻率 0-1
最小響度-最大響度 1-2
\alpha 0.85
\gamma 0.9
初始脈沖頻率r 0.7
取值范圍 (-100,100)
實驗次數 10
實驗一圖像
最優值 9.200577911544411E-5
最差值 98.94310340856839
平均值 9.894879535644769

可以看出按照理解(1)實現的算法有點不穩定,我選取了得到最差值的那次實驗的圖像,可以看出,算法在一開始收斂很快,在第二代就聚集于一個較小的范圍,之后在不停的蠕動著。這說明按照這種方式理解,算法的收斂速度極快,且局部搜索能力較強,但是其全局搜索能力不足,且易陷入局部最優,并且在算法后期,其收斂速度隨著蝙蝠越來越集中,變得越來越慢。

實驗二: 按照理解(2)實現,選取種群中較優的20%個體為最優群體,每次從最有群體中隨機選取一個最為隨機飛行的目標位置

參數
問題維度(維度) 2
總群數量(種群數) 20
搜索次數(最大迭代次數) 100
最小頻率-最大頻率 0-1
最小響度-最大響度 1-2
\alpha 0.85
\gamma 0.9
初始脈沖頻率r 0.7
取值范圍 (-100,100)
實驗次數 10
實驗二圖像
最優值 2.7533362235525127E-5
最差值 372.7498404620516
平均值 139.51154472392443

按照理解(2)實現的結果好像比理解(1)差不少。從圖像中可以看出,雖然在開始沒有像實驗一一樣收斂的那么快,但是在中期聚集的范圍更加集中,導致陷入局部最優難以尋得更優的位置。從理解上看似乎隨機飛行的隨機性增大了,但只是減緩了收斂速度,并沒有增強跳去局部最優的能力。

實驗三:按照理解(3),隨機選擇最優個體的一維進行隨機飛行

實驗三圖像

最優值 1.5094277647207394E-9
最差值 8.377006798211614E-5
平均值 1.9714038461326115E-5

實驗三的結果優于實驗一和實驗二,但是從圖像中可以看出,其實和實驗一并沒有太大的差別,可以認為這次實驗只是運氣比較好,每次都在100代內找到較好的解,而實驗一也只是在十次實驗中有一次沒有在100代以內找到最優的個體。
  綜上,個人認為選擇理解(1)和理解(3)差別不大,這兩種理解方式都行,理解(2)還有待商榷。

為什么蝙蝠群前期收斂的這么快呢?看一看公式(6)的曲線:

公式6曲線

可以看出r的值隨著迭代次數iter的增加上升的非常的快,在第6代時就接近1了。R的大小又決定該蝙蝠是否進行隨機飛行過程。看了隨機飛行的實現方式,可以明確蝙蝠的隨機飛行就是一個向著全局最優位置迅速靠近的過程。進行隨機飛行的條件決定了算法在最初期蝙蝠會大概率飛向全局最優位置,而在約6代后則大概率按照自己的行為飛行(頻率->速度->位置)。因此算法在初期會急速收斂,而后進行局部搜索,這與實驗中的表現一致。

實驗四:在實驗一的基礎上,將隨機飛行的條件由rand(0,1)>r,修改為rand(0,1)>0.9,即每只蝙蝠每代有10%的概率進行隨機飛行,實驗圖像如下:

實驗四圖像
最優值 9.663711890794937E-5
最差值 0.002455606291026529
平均值 0.0014838545478091704

可以看出蝙蝠群的收斂速度減慢了不少,這次的結果相對較為穩定,但仍然容易陷入局部最優,不過由于收斂的速度沒有那么快,陷入局部最優的概率相對較低。
  對于蝙蝠收斂過快導致陷入局部最優的情況,我們也可以學習粒子群算法,對其飛行速度增加上限,保證每只蝙蝠每代的飛行距離存在上限,也能防止其收斂過速。但是這樣一來,蝙蝠算法就成了粒子群算法的一個改進。(弱化版“改進”,蝙蝠算法本就是參照了粒子群算法)。

4. 總結

蝙蝠算法提出距今10年,也算法是一個新算法。算法根據蝙蝠覓食的行為對粒子群算法進行了改造。就結果而言,蝙蝠算法可以看做是一個弱化的粒子群,拋棄了粒子群的部分優點(速度最大限制和向著兩個目標飛行),引入了頻率來控制飛行速度,導致飛行的速度沒有粒子群的隨機性好,更加容易陷入局部最優,但收斂速度更快。
  原始論文的描述不清晰,關鍵的部分描述的模棱兩可,而其他的改進蝙蝠算法的論文中的描述與原始論文如出一轍,感覺并未對算法流程有明確的了解。蝙蝠算法的文章我這幾年間反反復復看了很多遍,也參考了前人大神們的代碼,感覺這個論文就像《哈姆雷特》一樣。


看了數年后還是在此記錄一下,可能我的理解能力確實有待提高,但還是希望發布論文時要將細節描述清楚,不然文中的實驗將無法由其他讀者重現。
參考文獻
Yang X S . A New Metaheuristic Bat-Inspired Algorithm[J]. computer knowledge & technology, 2010, 284:65-74.提取碼:vu7l
以下指標純屬個人yy,僅供參考

指標 星數
復雜度 ★★★★★☆☆☆☆☆
收斂速度 ★★★★★★★★☆☆
全局搜索 ★★☆☆☆☆☆☆☆☆
局部搜索 ★★★★☆☆☆☆☆☆
優化性能 ★★★☆☆☆☆☆☆☆
跳出局部最優 ☆☆☆☆☆☆☆☆☆☆
改進點 ★★★★★★★★☆☆

目錄
上一篇 優化算法筆記(十四)水波算法
下一篇 優化算法筆記(十六)混合蛙跳算法

優化算法matlab實現(十五)蝙蝠算法matlab實現

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯系作者。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374