① 優化演算法筆記(十四)水波演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
水波演算法(Water wave optimization)是根據水波理論提出的優化演算法。什麼是水波理論?簡單來說就是水波的寬度越小,其頻率越高,頻率與水波寬度的平方根成反比(具體細節我也不懂,物理方面的)。水波演算法也算是一種受物理現象(理論)啟發而提出的演算法,提出時間並不長,還有大量的研究和應用可以深入進行。
在水波演算法中,水波有三種形式來對空間進行搜索。1.傳播,2.折射,3.碎浪。傳播即水波向周圍擴散開來,折射是水波的高度趨近與0時改變了傳播的方向(我是真的理解不能,光可以折射,水也能折射的咯?),碎浪即水波的高度較高時,水波破碎形成浪花。可以看出水波的傳播是貫穿整個演算法流程的,而折射只會發生在水波高度減少至0時,碎浪則發生在水波過高時。
(強行解釋最為致命,作者開心就好)。
將每一個水波想像成一個獨立的個體,那麼每個水波將擁有3個屬性:位置X,波長 以及波高h。
在每一次迭代過程中,每個水波都會通過傳播的形式來對空間進行搜索同時水波的高度h會減少1。其位置更新公式如下:
其中 為該水波的波長, 為當前搜索空間的上下界。 的值會隨著迭代的進行而改變:
其中 為波長的衰減系數, 為一個較小的數以保證分母不為0。
每次傳播後,如果當前的水波優於傳播前的水波,則傳播到該位置,否則波浪的高度h會減少1,即:
上式中適應度函數值越大,表明位置越優。
在一個水波進行傳播之後,該水波有可能進行折射。每次傳播,水波的高度h會減少1,當h減少到0時,該水波將發生折射,同時其高度和波長也會改變,折射及高度波長改變公式如下:
折射後的位置正態分布在以當前水波和最優水波中點為均值,當前水波與最優水波距離為方差的位置。
在折射後水波的高度將會重新初始化為最大高度:
折射後, 會重新計算該水波的波長 :
在水波進行傳播之後,到達了一個優於當前最優水波的位置,則該水波將會進行碎浪,並將當前最優水波傳播到碎浪產生的位置。
碎浪位置的產生公式如下:
k為一個隨機數,每次碎浪將會隨機選擇k個維度來進行改變。 為一個常數。如果碎浪得到的結果優於當前最優水波,則改變當前最優水波到碎浪的位置。
是不是感覺流程圖有點復雜,其實演算法沒有那麼復雜,整個過程一共只有三個操作,一個水波在一代中最多隻會執行兩種方式。每個水波可能的搜索方式有三種:1.傳播,2.先傳播後碎浪,3.先傳播後折射。
適應度函數
由於水波演算法收斂較慢,所以最大迭代次數使用100。
實驗一 :
從圖像中可以看出,個體在向著中心不斷的收斂,其收斂速度不算很快。其結果也相對穩定。
從圖像可以推測出,水波演算法的核心參數其實是水波的最大高度,水波的最大高度決定了演算法的收斂速度和精度,就像人工蜂群演算法中的蜜源最大開采次數一樣。若一個個體連續多代沒有找到優於當前的位置,它將改變自己的策略。
從演算法的具體實現可以看出,傳播是一個在自身周圍的全局搜索的過程,折射則屬於一個大概率局部搜索,小概率跳出局部最優的操作,而碎浪則是進一步的局部搜索。那麼水波的最大高度越高,則水波演算法的全局搜索能力越強,但收斂速度越慢,反正,演算法的收斂速度越快。
實驗二 :減少演算法的水波最大高度至5
從圖像可以看出演算法的收斂速度明顯比實驗一要快,在第30代時已經快收斂於一個點了。從結果來看,實驗二的結果也優於實驗一,由於水波的最大高度較小,演算法進行碎浪和折射的次數增加了,即演算法的局部搜索能力增強了。
同樣之前的演算法中也提到過多次,收斂速度越快,群體越容易聚集到同一個區域,演算法也越容易陷入局部最優,而適應度函數對優化演算法來說是一個黑盒函數,無法得知其復雜程度。所以對於實驗所使用的較為簡單的測試函數,水波的最大高度越小,結果的精度越高,而面對未知的問題時,應該選取較大的水波高度以避免陷入局部最優。同樣物極必反,水波的最大高度過大可能會使演算法的局部搜索較弱,我們可以選取一個動態的水波最大高度。
實驗三 :水波最大高度隨迭代次數增加由12遞減至2
看圖像和結果感覺和實驗一差別不大,唯一的區別就是最優值要好於實驗一。在這個簡單的測試函數中無法表現出其應有的特點,由於演算法後期群體已經較為集中,也無法明顯的看出演算法的收斂速度是否隨著迭代次數增加而加快。
水波演算法也是一個新興演算法,演算法的流程較為復雜且可修改參數較多。演算法的流程和思想與蜂群演算法有點類似,但水波演算法更為復雜。水波演算法的三個搜索策略,傳播是一個全局搜索行為,也有一定的跳出局部最優能力;折射則是一個局部搜索過程,由於正態分布的原因,有較小的概率產生跳出局部最優的操作;碎浪則是一個更進一步的局部搜索,只在最優位置附近搜索。
其搜索策略使演算法在整個流程中都擁有全局搜索和局部搜索能力,全局搜索與局部搜索之間的平衡由水波的最大高度決定,最大高度約大,全局搜索能力越強,收斂速度越慢,反之,局部搜索能力越強,收斂速度越快。
以下指標純屬個人yy,僅供參考
參考文獻
Zheng, Yu-Jun. Water wave optimization: A new nature-inspired metaheuristic[J]. Computers & Operations Research, 2015, 55:1-11. 提取碼:fo70
目錄
上一篇 優化演算法筆記(十三)鯨魚演算法
下一篇 優化演算法筆記(十五)蝙蝠演算法
優化演算法matlab實現(十四)水波演算法matlab實現
② 優化演算法筆記(十八)灰狼演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
灰狼演算法(Grey Wolf Algorithm)是受灰狼群體捕獵行為啟發而提出的演算法。演算法提出於2013年,仍是一個較新的演算法。目前為止(2020)與之相關的論文也比較多,但多為演算法的應用,應該仍有研究和改進的餘地。
灰狼演算法中,每隻灰狼的位置代表了解空間中的一個可行解。群體中,占據最好位置的三隻灰狼為狼王及其左右護法(衛)。在捕獵過程中這三隻狼將帶領著狼群蛇皮走位,抓捕獵物,直至找到獵物(最優解)。當然狼王不會一直是狼王,左右護法也是一樣,每一輪走位後,會根據位置的優劣重新選出新的狼王和左右護法。狼群中的每一隻灰狼會向著(也可能背向)這三隻位置最優的灰狼移動一定的距離,來決定這一步自己將如何走位。簡單來說, 灰狼個體會向則群體中最優的三個個體移動 。
很明顯該演算法的主角就是灰狼了。
設定目標灰狼為
,當前灰狼的為 ,則該灰狼向著目標灰狼移動後的位置 可以由一下公式計算得出:
灰狼群體中位置最好的三隻灰狼編號為1,2,3,那麼當前的灰狼i通過觀察灰狼1、灰狼2和灰狼3,根據公式(1)得出的三個位置為Xi1,Xi2,Xi3。那麼灰狼i將要移動到的位置可以根據以下供述計算得出:
可以看出該灰狼的目標位置是通過觀察三隻頭狼得到的三個目標位置的所圍成的區域的質心。(質心超出邊界時,取值為邊界值)。
灰狼演算法的論文描述很多,但是其公式和流程都非常簡單,主要對其參數A和C的作用效果進行了詳細描述。
C主要決定了新位置相對於目標灰狼的方位,而A則決定新位置向目標靠近還是遠離目標灰狼。當|A|>=1時,為遠離目標,表現出更強的全局搜索能力,|A|<1時靠近目標,表現出更強的局部搜索能力。
適應度函數 。
實驗一:
看看這圖像和結果,效果好極了。每當我這么認為時,總會出現意想不到的轉折。
修改一下最優解位置試一試, 。
實驗二 : 。
其結果比上面的實驗差了不少,但我覺得這才是一個優化演算法應有的搜索圖像。其結果看上去較差只是因為迭代次數較少,收斂不夠迅速,這既是優點也是缺點,收斂慢但是搜索更細致。
仔細分析灰狼演算法的流程,它並沒有向原點靠近的趨勢,那隻能理解為演算法群體總體上向著群體的中心移動。 猜想 :當初始化群體的中心恰好是正解時,演算法的結果將會非常的好。
下面使用 ,並將灰狼的初始位置限定在(50,100)的范圍內,看看實驗圖像是否和實驗二的圖像一致。
實驗三 . ,初始種群取值范圍為(50,100)
這圖像和結果跟實驗一的不是一樣的嗎?這說明從實驗二中得出的猜想是錯誤的。
從圖像和結果上看,都和實驗二非常相似,當解在解空間的中心時但不在原點時,演算法的結果將差一些。
為什麼會這樣呢?從演算法的流程上看,灰狼演算法的各個行為都是關於頭狼對稱的,當最優解在原點且頭狼在附近時,公式(1)將變為如下:
實驗五 . ,三隻頭狼添加貪心演算法。
從圖像可以看出中心的三個點移動的頻率要比其他點的移動頻率低。從結果上可以看出其結果相對穩定了不少,不過差距非常的小,幾乎可以認為是運氣好所導致。如果所有的個體都添加貪心演算法呢?顯然,演算法的全局搜索能力將進一步減弱,並且更容易向群體中心收斂,這並不是一個好的操作。
實驗六 . ,
在實驗五的基礎上為狼群添加一個統一的步長,即每隻狼每次向著目標狼移動的距離不能大於其步長,將其最大步長設為1,看看效果。
從圖像可以看出,受到步長的約束每隻狼的移動距離較小,在結束時還沒有收斂,其搜索能力較強但收斂速度過慢且極易陷入局部最優。現在將最大步長設置為10(1/10解空間范圍)使其搜索能力和收斂速度相對平衡,在看看效果。
從圖像可以看出,演算法的收斂速度快了不少,但從結果可知,相較於實驗五,演算法的提升並不太大。
不過這個圖像有一種似曾相識的感覺,與螢火蟲演算法(FireFly Algorithm)差不多,仔細對比這兩個演算法可以發現, 灰狼演算法相當於螢火蟲演算法的一個簡化 。實驗六種對灰狼演算法添加步長的修改,讓其離螢火蟲演算法更近了一步。
實驗七 . ,
在實驗六的基礎上讓最大步長隨著迭代次數增加遞減。
從實驗七的圖像可以看出,種群的收斂速度好像快了那麼一點,結果也變好了不少。但是和改進後的螢火蟲演算法相比仍然有一定的差距。
灰狼演算法在全局搜索和局部搜索上的平衡已經比較好了,嘗試過對其進行改進,但是修改使搜索能力更強時,對於局部最優的函數求解效果很差,反之結果的精度較低,總體而言修改後的演算法與原演算法相差無幾。
灰狼演算法是根據灰狼群體的捕獵行動而提出的優化演算法,其演算法流程和步驟非常簡單,數學模型也非常的優美。灰狼演算法由於沒有貪心演算法,使得其有著較強的全局搜索能力同時參數A也控制了演算法的局部搜索范圍,演算法的全局搜索能力和局部搜索能力比較平衡。
從演算法的優化圖像可以看出,灰狼演算法和螢火蟲演算法非常的相似。可以認為,灰狼演算法是對螢火蟲演算法的一種改進。螢火蟲演算法向著由於自己的個體飛行,而灰狼演算法則的條件更為苛刻,向著群體前三強前進,螢火蟲演算法通過步長控制搜索范圍,而灰狼演算法則直接定義搜索范圍參數A,並令A線性遞減。
灰狼演算法的結構簡單,但也不容易改進,數次改進後只是改變了全局搜索能力和局部搜索能力的比例,綜合能力並沒有太大變化。
由於原點對於灰狼演算法有著隱隱的吸引力,當測試函數目標值在原點時,其結果會異常的好。因此,灰狼演算法的實際效果沒有論文中的那麼好,但也不差,算是一個中規中矩的優化演算法。
參考文獻
Mirjalili S , Mirjalili S M , Lewis A . Grey Wolf Optimizer[J]. Advances in Engineering Software, 2014, 69:46-61. 提取碼:wpff
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(十七)萬有引力演算法
下一篇 優化演算法筆記(十九)頭腦風暴演算法
優化演算法matlab實現(十八)灰狼演算法matlab實現