天天看點

【優化算法】飛蛾撲火算法(MFO)【含Matlab源碼 266期】

飛蛾撲火優化(Moth-flame optimization,MFO),由Seyedali Mirjalili在2015年提出,為優化領域提供了一種新的啟發式搜尋範式:螺旋搜尋。

飛蛾在夜間有一種特殊的導航方式:橫向定向。即它會與月亮(光源)保持一定的角度飛行,進而能夠保持直線的飛行路徑,但是,這種方式隻在光源離飛蛾較遠的情況下才有效。當有人造光源存在時,飛蛾會被人工燈光所欺騙,一直保持與人造燈光相同的角度飛行,由于它與光源的距離過近,它飛行的路徑已經不是直線,而是一種螺旋的路徑。

【優化算法】飛蛾撲火算法(MFO)【含Matlab源碼 266期】

受這種自然現象的啟發,Seyedali Mirjalili将飛蛾繞着光源螺旋飛行的過程抽象成為一個尋優的過程,飛蛾飛行的整個空間即是問題的解空間,一隻飛蛾即是問題的一個解,而火焰(光源)即是問題的一個較優解,每一隻飛蛾對應一個光源,避免了算法陷入局部最優;當飛蛾與火焰足夠多的時候,飛蛾的飛行能夠搜尋解空間的絕大部分區域,進而保證了算法的探索能力;而在尋優的過程中,火焰數随着疊代次數的增加而減少,使飛蛾能夠充分搜尋更優解的鄰域空間,保證了算法的利用能力。

正是基于以上特點,MFO在探索與利用之間找到了平衡,進而使算法在優化問題中有一個較好的效果。

總的來說MFO也是一種基于種群的随機啟發式搜尋算法,它與PSO、GSA等算法最大的差別就在于其粒子搜尋路徑是螺旋形的,粒子圍繞着更優解以一種螺旋的方式移動,而不是直線移動。

MFO的過程如下:

1.初始化飛蛾種群

2.對飛蛾種群進行适應度評價

3.重複如下過程直到達到停止标準:

3.1自适應更新火焰個數n,當疊代次數為1時,飛蛾個數即為火焰個數

3.2對飛蛾種群适應度進行排序,取出适應度較好的n個飛蛾作為火焰

3.3更新飛蛾的搜尋參數。

3.4根據每隻飛蛾對應的火焰與飛行參數更新飛蛾的位置

4.輸出所得最優解(火焰)

具體的飛蛾位置更新公式見論文:Moth-flame optimization algorithm: A novel nature-inspired heuristic paradigm

示例:

【優化算法】飛蛾撲火算法(MFO)【含Matlab源碼 266期】
【優化算法】飛蛾撲火算法(MFO)【含Matlab源碼 266期】

1 matlab版本

2014a

2 參考文獻

[1] 包子陽,餘繼周,楊杉.智能優化算法及其MATLAB執行個體(第2版)[M].電子工業出版社,2016.

[2]張岩,吳水根.MATLAB優化算法源代碼[M].清華大學出版社,2017.

繼續閱讀