當前位置:編程學習大全網 - 源碼下載 - 優化算法筆記(二十七)蜉蝣算法

優化算法筆記(二十七)蜉蝣算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)

 蜉蝣算法(mayfly optimization algorithm)是根據蜉蝣的飛行和繁衍行為提出的優化算法。該算法提出與2020年(論文接收在2019年),算是壹個新算法。算法的流程和結構其實與蜉蝣的關系不大,可以看作是對粒子群的壹個修改。

 蜉蝣算法中群體分為雄性和雌性,雄性的行為與粒子群相似,通過全局最優和自身歷史最優移動,而雌性則是向優於自己的配偶移動,若配偶弱於自己則自行局部搜索。然後這對雌性和雄性會產生兩個後代,並保留群體中的較優個體。

 算法的流程結構都有些許復雜,不過有粒子群基礎的小夥伴應該能很好的理解。

這次我們的主角就是蜉蝣了(雖然關系不太大)。

 蜉蝣算法中有兩種角色,雄性蜉蝣和雌性蜉蝣,其數量均為N/2,N為群體總數, 其位置為 ,速度 為了方便描述,下面使用XM表示雄性蜉蝣的位置,XF表示雌性蜉蝣的位置。

整個算法的每次叠代流程大致可以分為四步:

 1. 將蜉蝣群體均分為雄性組和雌性組,每組內按優劣順序排列。

 2. 雄性個體移動

 3. 雌性個體移動

 4. 雄性雌性交配產生兩個後代

 5. 在這2N個個體中選出N個作為下壹代

 可以看出每次叠代算法產生了2N個新個體,所以說蜉蝣算法的計算速度會比其他算法更慢,因為蜉蝣算法多計算了N個個體的適應度值。(其他大多數算法每次叠代只計算N個值)。

 由於1.分組和5.選擇比較簡單,不需要再詳細描述,下面只介紹2,3,4這三個步驟。

雄性蜉蝣的移動方式與粒子群中的粒子相似,新位置當前位置和速度決定:

其中 表示第n代群體中的第i個個體的第j維的位置。

 其速度則有以下公式決定:

其中如果該個體使群體中的最優個體則使用公式(3)進行移動,其他個體則使用公式(2)進行移動。 表示第n代群體中的第i個個體的第j維的速度,pbest為該個體所到過的最好位置,gbest為全局最好位置,a1,a2,beta為常數,壹般取值為2,rp為當前位置與pbest的歐式距離,rg為當前位置與gbest的歐式距離,e為自然常數,d為常數,壹般取值為0.1,r為[-1,1]內的隨機數。

 公式2是不是和粒子群的速度更新公式很像?下面是粒子群的速度更新公式

與粒子群相比雄性蜉蝣的速度更新公式將兩個隨機數r1與r2替換成了與距離相關的值,個人認為這不是壹個好的修改,不過後面可以看出,該改動為算法提供了強大的局部搜索能力。

 下面做壹個試驗:現在將蜉蝣算法中所有個體全部劃分為雄性,即沒有雌性的搜索行為和交配產生後代的行為。也可以認為是在粒子群算法中將公式(3)替換為公式(2),我們看看效果。(唯壹不同的是蜉蝣算法中雄性中的全局最優個體使用公式(3)進行移動)。

可以看出,只有最優個體在緩慢的移動,並且在略過最優解附近後仍在移動。問題出在哪呢?

有兩個原因:

  1 .如下公式的值

我們上述的實驗中取值範圍(-100,100),初始化時兩個個體之間的歐式距離r的取值範圍在10以下的都比較少,此時自身的歷史最優就是自己本身,也不會產生速度。

 當r=10時,其分母為e^200,其值約等於0,此時公式(2)如下

即速度不會發生任何變化。

 下面,我們把解空間縮小100倍看看效果。

可以看出僅僅是修改了取值範圍,雄性蜉蝣們的行為就發生了巨大的改變。因為距離參數會受到解空間範圍的影響,當距離足夠小時,公式(2)中的距離參數所算出的速度不在是0,所以雄性蜉蝣們便活躍了起來。

 當然這是壹個不好的現象,算子不應該受解空間範圍改變有如此大的影響。

2 .初始速度

 每個蜉蝣都有初始速度呀,就像粒子群壹樣,所以壹開始應該也會移動。

 蜉蝣確實有初始速度,不過速度的每壹維都是0。為什麽呢?不能是壹個不是0的值嗎?可以但又不完全可以,因為蜉蝣算法沒有給出速度的上下限範圍,沒有範圍就無法初始化到該範圍內的值。作者將速度的上下限作為了壹個改進點放到了文章的後部!

 結合上述1,2兩點,雄性個體中除最優個體外,其他個體的速度幾乎都是0,可以說是以肉眼不可見的方式在緩慢移動。或者也可以理解為該步驟的主要作用是局部搜索,當個體之間距離較遠時則不會移動,將雄性單獨拿出來實驗是沒有意義的。如果必須單獨拿出來用則需要設置速度上下限,並在初始化中為個體設置隨機速度。

其實論文中的速度上下限,以及慣性系數遞減等粒子群中已有的步驟,完全可以直接沿用到原始的蜉蝣算法中,而不應作為改進單獨拎出來說明。此處也可以直接沿用粒子群算的速度更新公式。

每只雌性個體會有自己對應的雄性個體作為配偶,雌雄兩組順序配對,即最優的雌性配對最優的雄性,次優的雌性配對次優的雄性。

 雌性的移動方式為向由於自己的配偶移動,若配偶弱於自己則自行搜索。

其位置的計算公式與雄性相同均為公式(1),速度的更新公式如下:

其中xm為該雌性個體配對的雄性個體的位置,xf為該雌性個體的位置,rmf為這兩只蜉蝣之間的位置,fl為常量壹般取值為0.1,r為[-1,1]內的隨機數。

 當該雌性個體差於雄性個體時,使用公式(7)中的上式,當雌性個體優於該雄性個體時,使用公式(7)中的下式。

 與雄性的速度更新公式相似的問題,因為距離參數rmf的值可能非常大,會導致公式(7)中的上式做小範圍的局部搜索,速度更新幅度較小。可以試著用隨機數去代替距離參數:

其中r2為[0,1]內的隨機數。

交配行為中壹對雌性和雄性會產生兩個後代,其產生公式如下:

其中L為隨機數,取值範圍應該是(0,1),xm為雄性蜉蝣,xf為雌性蜉蝣,可以看出產生的兩個個體關於這對雌性的中心對稱。該步驟為蜉蝣算法提供了全局搜索能力,並結合選擇操作加快了算法的收斂速度。

整個蜉蝣算法的流程如下:

其流程看上去還是挺簡單的,不過由於分了雌性和雄性兩種,導致所需操作的步驟細節很多,同時由於父輩母輩更新自身位置後還產生了後代,其實每次叠代計算了2N個個體的適應度值,導致其速度慢。

適應度函數 。

實驗壹 : 原算法

從圖像可以看出,蜉蝣算法的收斂速度非常的快,在解附近聚集後群體仍然能夠移動並向著正解運動,並最終收斂在正解附近。和之前的全是雄性蜉蝣的實驗大相徑庭,應該是因為交配產生的後代優於了父輩母輩,父輩母輩被替代了,所以看上去移動了。當距離變小後,雌性雄性蜉蝣的速度更新公式則開始生效了。

不過,結果並不太好,但是在預期內,可以看出,其精度是非常高的,但是算法不太穩定,會出現非常差的結果。

 因為距離較遠時全靠著交配產生的後代更新位置,此時會快速收斂到當前的最優個體附近。當距離變小後,雌性和雄性的速度更新公式開始生效,此時的群體較為集中,其運動軌跡就像貪吃蛇壹樣。

 綜上,可以看出算法的前期收斂很快,算法的局部搜索精度很高,同時全局搜索能力較弱,依靠局部搜索花上跟多時間也能找到最優解。由於全局搜索能力不強,且收斂過快,算法應該比較容易陷入局部最優。

  實驗二 : 去除距離操作,還原成類似粒子群的速度更新方式,使用公式(4)(8)

實驗二的圖像中蜉蝣的收斂速度比實驗壹中慢了壹點,而且也沒有那麽集中,最終也聚集在了正解附近,這個圖像其實和粒子群也有了幾分相似。不過由於選擇操作的作用,蜉蝣算法的總是會收斂的更快,即使設置了速度上限依然如此,因為即使該個體叠代數次可以飛到最優解,但後代可是可以直接降生與最優解附近的,如此壹來該個體會被取代,剩下的個體則集中在了最優解附近。

從結果上看,實驗二損失了不上精度有點不能接受,但是也穩定了不少,局部搜索能力也有所削弱。蜉蝣算法的收斂行為主要由交配繁衍後代和選擇下壹代來提供,如果要調整其搜索速度需要修改交配操作。原論文中也寫出了相關的改進,如,父代母代產生壹雌壹雄兩個子代,子代雄性優於父代則保留,子代雌性優於母代則保留。此處不再贅述,可以閱讀原文。

蜉蝣算法受雌雄蜉蝣的運動和交配產生後代的行為啟發而提出的優化算法,個人感覺該算法與蜉蝣關系不大,而是更像是對粒子群的壹種改進。算法的流程較為復雜,不過有粒子群作為基礎也很好理解。算法的性能比我想象的要好,其中雌性和雄性的移動為算法提供了局部搜索能力,而交配繁衍後代進行選擇提供了全局搜索能力。算法的局部搜索能力很強但是穩定性較差,容易陷入局部最優。由於每次叠代產生了更多的新個體數,為了保證公平,它的叠代次數應為其他算法的1/2。

 其實原文中還有許多的優化和改進步驟,這裏也不壹壹實驗了,還是推薦去看看原論文。

 看到蜉蝣算法,想起了之前壹個寫著玩的算法,也是將種群分為了雌雄兩類。不過沒有蜉蝣算法這麽復雜的操作,只是通過雌雄交配產生後代進行更新叠代,通過母輩生育有幾率死亡以及近親繁殖的後代有幾率死亡來控制跳出局部最優,效果中規中矩,不提了。

參考文獻

Zervoudakis, K., Tsafarakis, S., A mayfly optimization algorithm, Computers &

Industrial Engineering (2020) 提取碼:ogl4

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

目錄

上壹篇 優化算法筆記(二十六)和聲搜索算法

下壹篇 優化算法筆記(二十八)蝗蟲算法

  • 上一篇:JDBC連接ORACLE
  • 下一篇:信用卡余額是貨幣嗎
  • copyright 2024編程學習大全網