① 怎麼知道鯨魚演算法是否適用該問題
運行程序觀察其結果可知是否適用。
鯨魚優化演算法是2016年由澳大利亞格里菲斯大學的Mirjalili 等提出的一種新的群體智能優化演算法,其優點在於操作簡單,調整的參數少以及跳出局部最優的能力強。
鯨魚演算法設計的既精妙又富有特色,它源於對自然界中座頭鯨群體狩獵行為的模擬, 通過鯨魚群體搜索、包圍、追捕和攻擊獵物等過程實現優時化搜索的目的。在原始的WOA中,提供了包圍獵物,螺旋氣泡、尋找獵物的數學模型。
② 鯨魚優化演算法為什麼每次都不一樣
排查一下數據是否有失誤。
正常情況下 數據一樣的,演算法的結果也是一樣的。鯨魚演算法提出時間並不長,也是一個新興的優化演算法,只能多琢磨琢磨。
③ 優化演算法筆記(十四)水波演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
水波演算法(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實現