當前位置:編程學習大全網 - 源碼下載 - 優化算法的註記(25)蛾撲火算法

優化算法的註記(25)蛾撲火算法

(以下描述並非學術術語,僅供大家愉快閱讀。)

飛蛾撲火優化是壹種受飛蛾撲火啟發的算法。算法提出於2065438+2005年5月(提交日期)。雖然可以算是壹種新算法,但無數研究者如飛蛾撲火般發表了那麽多論文,令人震驚。

飛蛾撲火算法中有兩種個體,飛蛾和火焰。飛蛾選擇,盤旋著繞著火焰飛。搜索結束後,火焰會移動以保持火焰在蛾類和火焰群中的最佳位置。

算法流程簡單,螺旋搜索在之前的鯨魚算法中也出現過。這裏會詳細記錄螺旋搜索的具體情況。

很明顯,滅蛾算法中有兩個角色,飛蛾和火焰。壹開始蛾和火焰的數量是n,為了方便查看,蛾的位置是XM,火焰的位置是XF。

初始化時,將在解空間中初始化N個蛾和M(M=N)個火焰。在算法的過程中,飛蛾會圍繞它選擇的火焰飛行,然後將N只飛蛾和M只火焰按照優劣排序,將M只火焰移到前M只個體的位置。其中火焰的個數m會隨著叠代次數的變化而變化,本文中的階梯減少到1。

該算法的主要步驟如下:

1.飛蛾選擇火焰(將火焰分配給飛蛾)。

2.飛蛾在火焰周圍飛舞。

3.將火焰移到相應的位置。

從步驟中可以看出,算法中飛蛾的飛行是壹個沒有貪婪算法的運算,而火焰的移動是壹個變相的貪婪運算。

初始化的時候會有N個蛾,N個火焰(M=N),所以每個蛾可以選擇不同的火焰。隨著叠代次數的增加,火焰的數量會減少。其數量根據以下公式計算:

其圖像如下圖所示:

事實上,火焰數量m線性減少到1。因為火焰的數量是正數,所以圖像是階梯狀的。

隨著叠代次數的增加,火焰數量減少,每只蛾子都無法選擇不同的火焰。這時可以隨機選擇火焰或者依次選擇蛾類種群,類似於取模。這兩種方法差別不大。

這壹步是算法的核心計算步驟。

對於飛蛾來說,它們繞火焰飛行後到達的新位置XM_new是根據以下公式計算的:

它的圖像如下

而算法中的飛行路徑應該是這樣的:

拿出壹個維度來看看

其中I是計算的次數。

鏡像是cos函數鏡像的變形。考慮到飛蛾與火焰的距離會越來越短,其飛行圖像應該與上圖相反,即振幅越來越小,局部搜索能力越來越強。

N只飛蛾繞M個火焰飛行後,會去N個新位置,計算這N個新位置的適應度值,將N個新位置和M個火焰的(N+M)個位置按優劣排序,取較好的M個位置作為下壹輪火焰的位置。

滅蛾算法流程圖如下:

既然滅蛾算法可以說是蟻獅算法和鯨魚算法的結合,那我們就看壹下算法的圖像,不做其他處理。

健身功能。

實驗壹:

從結果來看,蛾撲火算法的穩定性優於螞蟻獅子算法,從圖像來看算法的收斂性不如螞蟻獅子算法,但局部搜索性能優於螞蟻獅子算法。

可以看出,螺旋的局部搜索能力優於隨機遊走,但其全局搜索弱於隨機遊走。與蟻獅算法相比,蛾撲火算法更容易陷入局部優化(其實和蟻獅差不多,只要火焰/蟻獅陷入局部優化,但蟻獅數量不變,火焰數量減少,所有火焰更容易陷入局部優化)。

滅蛾算法是壹種基於飛蛾在火焰周圍飛行行為的算法。算法結構比較簡單,類似於蟻獅算法,只是在搜索步驟中用螺旋搜索代替了隨機行走(當然和很多細節不同,請看原文)。該算法的局部搜索能力很強,依靠螺旋提供全局搜索和局部搜索能力。它的全局搜索和局部搜索能力由其極半徑決定,在算法中由B決定。但該算法缺乏跳出局部最優的能力,在光滑函數中效果很好,在局部最優較多的函數中效果中規中矩。

參考

王曉明,王曉雲.蛾-火焰優化算法的研究[J].計算機科學,2002 .基於知識的系統,2015,89(十壹月):228-249...提取代碼:koy9。

以下指標純屬個人yy,僅供參考。

目錄

關於最後壹個優化算法的註記(24)帝王蝶算法

下壹個優化算法註釋(26)和聲搜索算法

  • 上一篇:基於FPGA的乒乓球遊戲設計 FPGA程序
  • 下一篇:Jsp寫日誌源代碼
  • copyright 2024編程學習大全網