1. 優化演算法筆記(十八)灰狼演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
灰狼演算法(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實現
2. 優化演算法筆記(七)差分進化演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
差分進化演算法(Differential Evolution Algorithm,DE)是一種基於群體的進化演算法,它模擬了群體中的個體的合作與競爭的過程。演算法原理簡單,控制參數少,只有交叉概率和縮放比例因子,魯棒性強,易於實現。
差分進化演算法中,每一個個體的基因表示待求問題的一個候選解。每次迭代將先進行變異操作,選擇一個或多個個體的基因作為基,然後選擇不同的個體的差分來構成差分基因,最後將作為基的基因與差分基因相加來得出新的個體。交叉操作將新的個體將於父代的對應個體交叉,然後進行選擇操作,比較交叉後的個體與父代的對應個體,選擇較優的個體保留至下一代。在迭代完成之後將選擇種群中最優個體的基因作為解。
差分進化演算法可以算是我所使用過的優化演算法中大魔王級別的演算法,雖然它每個方面都沒有強到離譜,但是綜合起來的效果好於大多數演算法。它就像一個每個科目都能考到90分(百分制)的學生,雖然沒門課都不是最優秀的,但是論綜合,論總分,它有極大的概率是第一名。
在我研究優化演算法的小路上,我的目標就是找到一個能打敗大魔王或是能在大多數方面壓制魔王的演算法。
這次的主角就選魔王軍吧(或者蟻王軍,為了與蟻群演算法區別還是叫魔王軍吧),個體則稱之為魔王兵。
魔王兵的能力取決於它們的基因,它們可以根據環境或者需要改變自己的基因使得自己更加強大,更方便的處理問題,問題的維度與基因維度相同。
表示第i個魔王兵在進化了第t次後的基因,該個體有D位基因。
與遺傳演算法同為進化演算法的差分進化演算法,它們的操作(運算元)也都非常相似的,都是交叉,變異和選擇,流程也幾乎一樣(遺傳演算法先交叉後變異,差分進化演算法先變異後交叉)。
說到差分進化演算法中的變異,我就想到一句論語 「三人行,必有我師焉。擇其善者而從之,其不善者而改之。」 ,其實這句論語已經向我們說明了差分進化演算法的整個流程:
「三人行,必有我師焉」——變異,交叉。
「擇其善者而從之,其不善者而改之」——選擇。
差分進化演算法中,當一個魔王兵變異時,它會先找來3個小夥伴,當然是隨機找來3個小夥伴,避免同化。在一個小夥伴的基因上加上另外兩個小夥伴基因之差作為自己的目標基因。其變異公式如下:
表示第i個魔王兵找到了編號為r1、r2和r3的三個魔王兵,當然了i、r1、r2、r3為互不相同的整數,F為縮放比例因子,通常 ,一般取F=0.5。 為第i個魔王兵交叉後的目標基因圖紙,不過這是個半成品,再經過交叉後,目標基因圖紙才算完成。
其實現在我們已經有了5個基因圖紙了 ,接下來將進行交叉操作。由於變異操作,差分進化演算法的種群中個體數至少為4,即魔王軍中至少有4個小兵。
交叉操作中,魔王兵i會將目標基因圖紙 進行加工得到 ,加工過程如下:
其中 。 為交叉概率,其值越大,發生交叉的概率越大,一般取 。 為{1,2,…,D}中的隨機整數,其作用是保證交叉操作中至少有一維基因來自變異操作產生的基因,不能讓交叉操作的努力白費。
從公式上可以看出交叉操作實際上是從變異操作得出的基因圖紙上選擇至少一位基因來替換自己的等位基因,得到最終的基因圖紙。
選擇操作相對簡單,魔王兵i拿到了最終的基因圖紙 ,大喊一聲,進化吧,魔王兵i的基因改變了。它拿出了能力測量器fitness function,如果發現自己變強了,那麼就將基因 保留到下一代,否則它選擇放棄進化,讓自己還原成 。
實驗又來啦,還是那個實驗 ,簡單、易算、好畫圖。
實驗1 :參數如下
圖中可以看出在第20代時,群體已經非常集中了,在來看看最終得出的結果。
這結果真是好到令人發指,惡魔在心中低語「把其他的優化演算法都丟掉吧」。不過別往心裡去,任何演算法都有優缺點,天下沒有免費的午餐,要想獲得某種能力必須付出至少相應的代價。
實驗2:
將交叉率CR設為0,即每次交叉只選擇保留一位變異基因。
看看了看圖,感覺跟實驗1中相比沒有什麼變化,那我們再來看看結果。
結果總體來說比實驗1好了一個數量級。為什麼呢?個人感覺應該是每次只改變一位基因的局部搜索能力比改變多位基因更強。下面我們將交叉率CR設為1來看看是否是這樣。
實驗3:
將交叉率CR設為1,即每次交叉只選擇保留一位原有基因。
實驗3的圖與實驗1和實驗2相比好像也沒什麼差別,只是收斂速度好像快了那麼一點點。再來看看結果。
發現結果比實驗2的結果還要好?那說明了實驗2我得出的結論是可能是錯誤的,交叉率在該問題上對差分進化演算法的影響不大,它們結果的差異可能只是運氣的差異,畢竟是概率演算法。
實驗4:
將變異放縮因子設為0,即變異只與一個個體有關。
收斂速度依然很快,不過怎麼感覺結果不對,而且個體收斂的路徑好像遺傳演算法,當F=0,時,差分進化演算法退化為了沒有變異、選擇操作的遺傳演算法,結果一定不會太好。
果然如此。下面我們再看看F=2時的實驗。
實驗5:
將變異放縮因子設為2。
實驗5的圖可以明顯看出,群體的收斂速度要慢了許多,到第50代時,種群還未完全收斂於一點,那麼在50代時其結果也不會很好,畢竟演算法還未收斂就停止進化了。
結果不算很好但也算相對穩定。
通過上面5個實驗,我們大致了解了差分進化演算法的兩個參數的作用。
交叉率CR,影響基因取自變異基因的比例,由於至少要保留一位自己的基因和變異的基因導致CR在該問題上對演算法性能的影響不大(這個問題比較簡單,維度較低,影響不大)。
變異放縮因子F,影響群體的收斂速度,F越大收斂速度越慢,F絕對值越小收斂速度越快,當F=0是群體之間只會交換基因,不會變異基因。
差分進化演算法大魔王已經如此強大了,那麼還有什麼可以改進的呢?當然有下面一一道來。
方案1 .將3人行修改為5人行,以及推廣到2n+1人行。
實驗6:
將3人行修改為5人行,變異公式如下:
五人行的實驗圖看起來好像與之前並沒有太大的變化,我們再來看看結果。
結果沒有明顯提升,反而感覺比之前的結果差了。反思一下五人行的優缺點,優點,取值范圍更大,缺點,情況太多,減慢搜索速度。
可以看出演算法的收斂速度比之前的變慢了一點,再看看結果。
比之前差。
差分進化演算法的學習在此也告一段落。差分進化演算法很強大,也很簡單、簡潔,演算法的描述都充滿了美感,不愧是大魔王。不過這里並不是結束,這只是個開始,終將找到打敗大魔王的方法,讓新的魔王誕生。
由於差分進化演算法足夠強,而文中實驗的問題較為簡單導致演算法的改進甚至越改越差(其實我也不知道改的如何,需要大量實驗驗證)。在遙遠的將來,也會有更加復雜的問題來檢驗魔王的能力,總之,後會無期。
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(六)遺傳演算法
下一篇 優化演算法筆記(八)人工蜂群演算法
優化演算法matlab實現(七)差分進化演算法matlab實現
3. 智能優化演算法及其應用的目錄
第1章緒論1
1.1最優化問題及其分類1
1.1.1函數優化問題1
1.1.2組合優化問題10
1.2優化演算法及其分類12
1.3鄰域函數與局部搜索13
1.4計算復雜性與NP完全問題14
1.4.1計算復雜性的基本概念14
1.4.2P,NP,NP?C和NP?hard14
第2章模擬退火演算法17
2.1模擬退火演算法17
2.1.1物理退火過程和Metropolis准則17
2.1.2組合優化與物理退火的相似性18
2.1.3模擬退火演算法的基本思想和步驟19
2.2模擬退火演算法的馬氏鏈描述20
2.3模擬退火演算法的收斂性21
2.3.1時齊演算法的收斂性21
2.3.2非時齊演算法的收斂性26
2.3.3SA演算法漸進性能的逼近26
2.4模擬退火演算法關鍵參數和操作的設計27
2.5模擬退火演算法的改進29
2.6並行模擬退火演算法31
2.7演算法實現與應用32
2.7.1組合優化問題的求解32
2.7.2函數優化問題的求解33
第3章遺傳演算法36
3.1遺傳演算法的基本流程36
3.2模式定理和隱含並行性38
3.3遺傳演算法的馬氏鏈描述及其收斂性40
3.3.1預備知識40
3.3.2標准遺傳演算法的馬氏鏈描述41
3.3.3標准遺傳演算法的收斂性42
3.4一般可測狀態空間上遺傳演算法的收斂性44
3.4.1問題描述45
3.4.2演算法及其馬氏鏈描述45
3.4.3收斂性分析和收斂速度估計45
3.5演算法關鍵參數與操作的設計47
3.6遺傳演算法的改進50
3.7免疫遺傳演算法51
3.7.1引言51
3.7.2免疫遺傳演算法及其收斂性52
3.7.3免疫運算元的機理與構造54
3.7.4TSP問題的免疫遺傳演算法56
3.8並行遺傳演算法58
3.9演算法實現與應用59
第4章禁忌搜索演算法62
4?1禁忌搜索62
4?1?1引言62
4?1?2禁忌搜索示例63
4?1?3禁忌搜索演算法流程67
4?2禁忌搜索的收斂性68
4?3禁忌搜索的關鍵參數和操作70
4?4並行禁忌搜索演算法75
4?5禁忌搜索的實現與應用77
4?5?1基於禁忌搜索的組合優化77
4?5?2基於禁忌搜索的函數優化78
第5章神經網路與神經網路優化演算法83
5.1神經網路簡介83
5.1.1神經網路發展回顧83
5.1.2神經網路的模型84
5.2基於Hopfield反饋網路的優化策略89
5.2.1基於Hopfield模型優化的一般流程89
5.2.2基於Hopfield模型優化的缺陷90
5.2.3基於Hopfield模型優化的改進研究90
5.3動態反饋神經網路的穩定性研究94
5.3.1動態反饋網路的穩定性分析94
5.3.1.1離散對稱動態反饋網路的漸近穩定性分析95
5.3.1.2非對稱動態反饋網路的全局漸近穩定性分析99
5.3.1.3時延動態反饋網路的全局漸近穩定性分析101
5.3.2動態反饋神經網路的收斂域估計103
5.4基於混沌動態的優化研究概述105
5.4.1基於混沌神經網路的組合優化概述106
5.4.2基於混沌序列的函數優化研究概述108
5.4.3混沌優化的發展性研究109
5.5一類基於混沌神經網路的優化策略110
5.5.1ACNN模型的描述110
5.5.2ACNN模型的優化機制111
5.5.3計算機模擬研究與分析112
5.5.4模型參數對演算法性能影響的幾點結論116
第6章廣義鄰域搜索演算法及其統一結構118
6.1廣義鄰域搜索演算法118
6.2廣義鄰域搜索演算法的要素119
6.3廣義鄰域搜索演算法的統一結構120
6?4優化演算法的性能評價指標123
6?5廣義鄰域搜索演算法研究進展125
6.5.1理論研究概述125
6.5.2應用研究概述128
6.5.3發展性研究129
第7章混合優化策略130
7.1引言130
7.2基於統一結構設計混合優化策略的關鍵問題131
7.3一類GASA混合優化策略132
7.3.1GASA混合優化策略的構造出發點132
7.3.2GASA混合優化策略的流程和特點133
7.3.3GASA混合優化策略的馬氏鏈描述135
7.3.4GASA混合優化策略的收斂性136
7.3.5GASA混合優化策略的效率定性分析141
第8章混合優化策略的應用143
8.1基於模擬退火?單純形演算法的函數優化143
8.1.1單純形演算法簡介143
8.1.2SMSA混合優化策略144
8.1.3演算法操作與參數設計145
8.1.4數值模擬與分析146
8.2基於混合策略的控制器參數整定和模型參數估計研究149
8.2.1引言149
8.2.2模型參數估計和PID參數整定149
8.2.3混合策略的操作與參數設計150
8.2.4數值模擬與分析151
8.3基於混合策略的TSP優化研究154
8.3.1TSP的混合優化策略設計154
8.3.2基於典型算例的模擬研究156
8.3.3對TSP的進一步討論158
8.4基於混合策略的加工調度研究159
8.4.1基於混合策略的Job?shop優化研究159
8.4.1.1引言159
8.4.1.2JSP的析取圖描述和編碼161
8.4.1.3JSP的混合優化策略設計163
8.4.1.4基於典型算例的模擬研究166
8.4.2基於混合策略的置換Flow?shop優化研究170
8.4.2.1混合優化策略170
8.4.2.2演算法操作與參數設計172
8.4.2.3數值模擬與分析172
8.4.3基於混合策略的一類批量可變流水線調度問題的優化研究174
8.4.3.1問題描述及其性質174
8.4.3.2混合優化策略的設計175
8.4.3.3模擬結果和分析177
8.5基於混合策略的神經網路權值學習研究177
8.5.1BPSA混合學習策略178
8.5.2GASA混合學習策略178
8.5.3GATS混合學習策略179
8.5.4編碼和優化操作設計180
8.5.5模擬結果與分析180
8.6基於混合策略的神經網路結構學習研究184
8.6.1RBF網路簡介184
8.6.2RBF網路結構優化的編碼和操作設計184
8.6.3RBF網路結構的混合優化策略186
8.6.4計算機模擬與分析187
8.7基於混合策略的光學儀器設計研究189
8.7.1引言189
8.7.2模型設計190
8.7.3模擬研究和設計結果191
附錄Benchmark問題193
A:TSP Benchmark問題193
B: 置換Flow?shop Benchmark問題195
C:Job?shop Benchmark問題211
參考文獻217
4. 請推薦幾本多目標優化演算法的書
《基於微粒群演算法的堆石壩壩料參數反演分析》 ·《基於演化演算法的多目標優化方法及其應用研究》 ·《粒子群優化演算法的理論分析與應用研究》 ·《多目標遺傳演算法及其在發動機控制系統設計中的應用》
5. 求推薦Matlab數學建模與實驗的書,要有大量實例的,如級數求和,求積分,微分,泰勒展開,傅立葉級
你選一個吧:都是我看過的好書,直接可以用於數學建模的!(最好的一本是《MATLAB在數學建模中的應用》
)
《MATLAB N個實用技巧—MATLAB 中文論壇精華總結》
《MATLAB GUI設計學習手記》含第二、三版
《MATLAB 與控制系統模擬實踐》(含第二版)
《金融數量分析—基於 MATLAB 編程》含第二、三版
《圖論演算法及其 MATLAB 實現》
《MATLAB 神經網路30個案例分析》
《MATLAB統計分析與應用:40個案例分析》
《MATLAB高效編程技巧與應用:25個案例分析》
《Simulink與信號處理》含第二版
《MATLAB在數學建模中的應用》(含第二版)
《MATLAB神經網路:從零開始》(共上下兩冊)
《高等光學模擬(MATLAB)版》——光波導、激光(含第2版)
《精通MATLAB與C/C++混合程序設計》
《模式識別與智能計算的MATLAB實現》
《實戰MATLAB之並行程序設計》
《MATLAB面向對象編程——從入門到設計模式》
《MATLAB從零到進階》
《MATLAB在語音信號分析和合成中的應用》
《基於MATLAB的高等數學問題求解》
《MATLAB神經網路原理與實例精解》
《MATLAB圖像處理實例詳解》
《MATLAB之父:編程實踐》《Experiment with MATLAB》
《MATLAB圖像處理——程序實現與模塊化模擬》
《MATLAB圖像處理——能力提高與應用案例》
《實戰MATLAB之文件與數據介面技術》
《MATLAB/Simulink機電動態系統模擬及工程應用》
《感測器信息融合——MATLAB程序實現》
《MATLAB及在電子信息課程中的應用(第4版)》
《MATLAB優化演算法案例分析與應用》
《MATLAB車輛工程應用實戰》
《MATLAB數值計算(2013修訂版)》《Numerical Computing with MATLAB(Revised in 2013)》
《機械工程設計分析和MATLAB應用》(第4版)
《MATLAB數學建模經典案例實戰》
6. 優化演算法筆記(二十六)和聲搜索演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
和聲搜索演算法(Harmony Search)是受音樂中的和聲啟發而提出的啟發式演算法,其提出(發表)年份為2001年,算是一個比較老的演算法了。和聲搜索演算法放在現在,其性能非常一般,不過它提出了一種領域搜索的具體實現方式,可以和不同的演算法融合,提高其他演算法的性能。
單獨看一個和聲意義不大,一個和聲的一個維度會根據群體中該維度的所以取值來確定其領域范圍,然後再進行領域搜索。
原演算法受音樂啟發,所以它所解決的目標問題也是離散的問題。
和聲搜索演算法中的一個個體被稱為和聲記憶(Harmony Memory,HM),群體中和聲記憶的數量為N,每個和聲記憶中的音數(維度)為D。每一維的取值范圍為 。
原演算法中每個維度的取值范圍L是一組有序的離散的值,即在指定的變數值中選取一個作為和聲記憶的值。
每個和聲記憶每次迭代只能變為其領域的值。
和聲演算法中有兩種操作:1.移動到領域,2.變異到領域
其概率分別為Harmony Memory Considering Rate(HMCR)和Pitch Adjusting Rate(PAR)。
其中HMCR取值約為0.95,PAR取值約為0.10。
可以看出該演算法的步驟和數值參考了遺傳演算法,而且兩者都是為了處理離散問題。
例子如下:
和聲記憶的數量為3,維度為2,其中第1維的取值范圍為{A,B,C,D,E,F,G},第2維的取值為{3,4,5,6}。
第1代,三個個體的取值如下
在計算第2代時,每個個體的每一維只能去到該維度的鄰域的值。
個體1_2能取到的值為(A,3) (A,4) (B,3) (B,4)
個體2_2能取到的值為(F,4)(F,5)(F,6)(G,4)(G,5)(G,6)
個體3_2能取到的值為(C,3)(C,4)(C,5)(D,3)(D,4)(D,5)(E,3)(E,4)(E,5),
圖中標出了這三個個體能夠到達的鄰域。
變異到鄰域到操作也很簡單,該操作是對標了遺傳演算法中的變異操作。
變異到鄰域操作時,該維度不會變異到當前已有的值。
如個體1_1變異第1維,由於群體中第1維的取值為{A,D,G}故該維度只能取到{B,C,E,F}。
下圖中標有顏色的塊出了變異操作無法到達的位置,空白位置為變異操作能夠到達的位置。(如果沒有空白位置呢?概率非常小,畢竟個體位置遠少於解空間位置,如果出現了,不變異或者隨機一個位置都行)
迭代過後,如果新的位置更好,則保留該和聲記憶,並去除最差的和聲記憶。
最後文章給出了判斷找到的解是否是最優解的判斷函數
其中Hr=HMCR,Hi會在該維度找到更好值時隨著迭代次數遞增。該公式的作用主要是為了判斷何時去結束演算法程序,不過在之前我們都是使用的最大迭代次數來結束演算法程序,所有好像沒多大用處。
演算法的流程也挺簡單的:
和聲搜索的原演算法是根據音樂中和聲概念提出的,音符是離散的,所有演算法也是離散的,對標遺傳演算法用於處理離散解空間問題,那麼如何修改和聲搜索演算法使其能處理連續數值問題呢?
最關鍵的點是如何處理「鄰域」,在連續解空間上,很難定義出一個點的領域,而且每個維度上的取值數量也是無窮的。
為和聲搜索演算法定義鄰域也有幾種思路:
1 . 將所有的個體定義為該個體的鄰域,即每次隨機從群體中選擇一個個體,該維度移動到所選中的個體處。
其中D,E,F分別為AB,AC,BC的中點,A,B,C三個和聲記憶的鄰域將由DEF這三個點及解空間邊界決定,此時的鄰域比思路2中的更小,也不會出現重疊部分。
當某一維度的兩個領域值相等時,上述(二維)的鄰域(面)將會退化成鄰域(線),可能會導致該維度快速收斂到該值,故此時需要忽略重復值,將鄰域重新展開(成為面)。
在連續演算法中,當滿足HCMR條件時,演算法將根據上面的色塊在鄰域中隨機選擇一個值;當滿足PAR條件時,由於無法剔除指定值,簡單起見,直接移動到隨機的和聲記憶的該維度。
後續的實驗由於是求解連續函數最值,故會選擇上述連續演算法中的三種思路來進行。
適應度函數 。
實驗一 : 思路一
從圖像可以看出,思路一的策略與遺傳演算法非常的相似,移動路線類似於十字架,最終也收斂到了正解附近。前期搜索主要靠鄰域移動,後期移動則是靠變異。
從結果也可以看出與遺傳演算法的差距不大,演算法不是很穩定,其策略是飛到相鄰的和聲記憶上,所以跨越度比較大,精度全靠變異。
實驗二 : 思路二
從圖像中可以看出,種群的搜索路徑不在像實驗一中那樣直來直去的十字路徑,收斂的速度也慢了不少,但是仍能在正解附近收斂。
從結果中可以看出,思路二的結果好了不少,同時也更加穩定(誤,運氣好,之前實驗出現過不好的結果,沒能重現)。該思路的鄰域搜索麵積會更大,且個體之間的鄰域存在重疊部分,故會有可能收斂於不好的位置,不過概率也較小。
實驗三 : 思路三
圖像逐漸貪吃蛇化!前期的圖像與思路一相似,後期的圖像有點類似遺傳演算法,可能是鄰域的面積逐漸縮小成了長條狀所致,不過最終「貪吃蛇」還是吃到了食物。
結果可以看出,思路三的穩定性不太行,當全部個體收斂到了一點後會開始進行思路一的替換操作,但無論如何替換都是相同的值,難以找到更優的位置,於是會出現一個較差的結果。這里也可以增加范圍隨機來跳出局部最優。
和聲搜索演算法是根據和聲樂理知識提出的演算法。由於音符是離散的值,演算法也對標了遺傳演算法,故原演算法也是針對離散問題提出的。在解決連續性問題時,需要對其鄰域概念進行擴展和修改,最終的效果與遺傳演算法相差不大。
在現在看來,和聲搜索演算法的效果屬實一般,對於其的針對性研究也不太多,該演算法主要提出了其不同於遺傳演算法的遍歷解空間的方式。所以在很多論文中都能看到用和聲搜索演算法與其他演算法融合來進行改進的例子。
與遺傳演算法相比,和聲搜索演算法的鄰域概念,將遺傳演算法的基因由線擴展到了面上。這一點有點類似於SVM和卷積神經網路的關系,不過,遺傳演算法和和聲搜索演算法的差別並沒有那麼大,只是搜索方式不同罷了。
參考文獻
Geem Z W , Kim J H , Loganathan G V . A New Heuristic Optimization Algorithm: Harmony Search[J]. Simulation, 2001, 2(2):60-68. 提取碼:4udl
Omran M , Mahdavi M . Global-best harmony search[J]. Applied Mathematics and Computation, 2008, 198(2):643-656. 提取碼:pk3s
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(二十五)飛蛾撲火演算法
下一篇 優化演算法筆記(二十七)蜉蝣演算法
7. 優化演算法筆記(一)優化演算法的介紹
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
我們常見常用的演算法有排序演算法,字元串遍歷演算法,尋路演算法等。這些演算法都是為了解決特定的問題而被提出。
演算法本質是一種按照固定步驟執行的過程。
優化演算法也是這樣一種過程,是一種根據概率按照固定步驟尋求問題的最優解的過程。與常見的排序演算法、尋路演算法不同的是,優化演算法不具備等冪性,是一種 概率演算法 。演算法不斷的 迭代 執行同一步驟直到結束,其流程如下圖。
等冪性即 對於同樣的輸入,輸出是相同的 。
比如圖1,對於給定的魚和給定的熊掌,我們在相同的條件下一定可以知道它們誰更重,當然,相同的條件是指魚和熊掌處於相同的重力作用下,且不用考慮水分流失的影響。在這些給定的條件下,我們(無論是誰)都將得出相同的結論,魚更重或者熊掌更重。我們可以認為,秤是一個等冪性的演算法(工具)。
現在把問題變一變,問魚與熊掌你更愛哪個,那麼現在,這個問題,每個人的答案可能不會一樣,魚與熊掌各有所愛。說明喜愛這個演算法不是一個等冪性演算法。當然你可能會問,哪個更重,和更喜歡哪個這兩個問題一個是客觀問題,一個是主觀問題,主觀問題沒有確切的答案的。當我們處理主觀問題時,也會將其轉換成客觀問題,比如給喜歡魚和喜歡熊掌的程度打個分,再去尋求答案,畢竟計算機沒有感情,只認0和1(量子計算機我不認識你)。
說完了等冪性,再來說什麼是概率演算法。簡單來說就是看臉、看人品、看運氣的演算法。
有一場考試,考試的內容全部取自課本,同時老師根據自己的經驗給同學們劃了重點,但是因為試卷並不是該老師所出,也會有考試內容不在重點之內,老師估計試卷中至少80%內容都在重點中。學霸和學渣參加了考試,學霸為了考滿分所以無視重點,學渣為了pass,因此只看了重點。這樣做的結果一定是score(學霸)>=score(學渣)。
當重點跟上圖一樣的時候,所有的內容都是重點的時候,學霸和學渣的學習策略變成了相同的策略,則score(學霸)=score(學渣)。但同時,學渣也要付出跟學霸相同的努力去學習這些內容,學渣心裡苦啊。
當課本如下圖時
學霸?學霸人呢,哪去了快來學習啊,不是說學習一時爽,一直學習一直爽嗎,快來啊,還等什麼。
這時,如果重點內容遠少於書本內容時,學渣的學習策略有了優勢——花費的時間和精力較少。但是同時,學渣的分數也是一個未知數,可能得到80分也可能拿到100分,分數完全取決於重點內容與題目的契合度,契合度越高,分數越高。對學渣來說,自己具體能考多少分無法由自己決定,但是好在能夠知道大概的分數范圍。
學霸的學習策略是一種遍歷性演算法,他會遍歷、通讀全部內容,以保證滿分。
學渣的學習策略則是一種概率演算法,他只會遍歷、學習重點內容,但至於這些重點是不是真重點他也不知道。
與遍歷演算法相比,概率演算法的結果具有不確定性,可能很好,也可能很差,但是會消耗更少的資源,比如時間(人生),空間(記憶)。概率演算法的最大優點就是 花費較少的代價來獲取最高的收益 ,在現實中體現於節省時間,使用很少的時間得到一個不與最優解相差較多的結果。
「莊子:吾生也有涯,而知也無涯;以有涯隨無涯,殆矣。」的意思是:人生是有限的,但知識是無限的(沒有邊界的),用有限的人生追求無限的知識,是必然失敗的。
生活中概率演算法(思想)的應用其實比較廣泛,只是我們很少去注意罷了。關於概率演算法還衍生出了一些有趣的理論,比如墨菲定律和倖存者偏差,此處不再詳述。
上面說到,優化演算法就是不停的執行同樣的策略、步驟直到結束。為什麼要這樣呢?因為優化演算法是一種概率演算法,執行一次操作就得到最優結果幾乎是不可能的,重復多次取得最優的概率也會增大。
栗子又來了,要從1-10這10個數中取出一個大於9的數,只取1次,達到要求的概率為10%,取2次,達到要求的概率為19%。
可以看出取到第10次時,達到要求的概率幾乎65%,取到100次時,達到要求的概率能接近100%。優化演算法就是這樣簡單粗暴的來求解問題的嗎?非也,這並不是一個恰當的例子,因為每次取數的操作之間是相互獨立的,第2次取數的結果不受第1次取數結果的影響,假設前99次都沒達到要求,那麼再取一次達到要求的概率跟取一次達到要求的概率相同。
優化演算法中,後一次的計算會依賴前一次的結果,以保證後一次的結果不會差於前一次的結果。這就不得不談到馬爾可夫鏈了。
由鐵組成的鏈叫做鐵鏈,同理可得,馬爾可夫鏈就是馬爾可夫組成的鏈。
言歸正傳, 馬爾可夫鏈(Markov Chain, MC) ,描述的是 狀態轉移的過程中,當前狀態轉移的概率只取決於上一步的狀態,與其他步的狀態無關 。簡單來說就是當前的結果只受上一步的結果的影響。每當我看到馬爾可夫鏈時,我都會陷入沉思,生活中、或者歷史中有太多太多與馬爾可夫鏈相似的東西。西歐封建等級制度中「附庸的附庸不是我的附庸」與「昨天的努力決定今天的生活,今天的努力決定明天的生活」,你的下一份工作的工資大多由你當前的工資決定,這些都與馬爾可夫鏈有異曲同工之處。
還是從1-10這10個數中取出一個大於9的數的這個例子。基於馬爾可夫鏈的概率演算法在取數時需要使當前取的數不小於上一次取的數。比如上次取到了3,那麼下次只能在3-10這幾個數中取,這樣一來,達到目標的概率應該會顯著提升。還是用數據說話。
取1次達到要求的概率仍然是
取2次內達到要求的概率為
取3次內達到要求的概率為
取4次內……太麻煩了算了不算了
可以看出基於馬爾可夫鏈來取數時,3次內能達到要求的概率與不用馬爾可夫鏈時取6次的概率相當。說明基於馬爾可夫鏈的概率演算法求解效率明顯高於隨機概率演算法。那為什麼不將所有的演算法都基於馬爾可夫鏈呢?原因一,其實現方式不是那麼簡單,例子中我們規定了取數的規則是復合馬爾可夫鏈的,而在其他問題中我們需要建立適當的復合馬爾科夫鏈的模型才能使用。原因二,並不是所有的問題都符合馬爾科夫鏈條件,比如原子內電子出現的位置,女朋友為什麼會生(lou)氣,彩票號碼的規律等,建立模型必須與問題有相似之處才能較好的解決問題。
介紹完了優化演算法,再來討論討論優化演算法的使用場景。
前面說了優化演算法是一種概率演算法,無法保證一定能得到最優解,故如果要求結果必須是確定、穩定的值,則無法使用優化演算法求解。
例1,求城市a與城市b間的最短路線。如果結果用來修建高速、高鐵,那麼其結果必定是唯一確定的值,因為修路寸土寸金,必須選取最優解使花費最少。但如果結果是用來趕路,那麼即使沒有選到最優的路線,我們可能也不會有太大的損失。
例2,求城市a與城市b間的最短路線,即使有兩條路徑,路徑1和路徑2,它們從a到b的距離相同,我們也可以得出這兩條路徑均為滿足條件的解。現在將問題改一下,求城市a到城市b耗時最少的線路。現在我們無法馬上得出確切的答案,因為最短的線路可能並不是最快的路線,還需要考慮到天氣,交通路況等因素,該問題的結果是一個動態的結果,不同的時間不同的天氣我們很可能得出不同的結果。
現實生產、生活中,也有不少的場景使用的優化演算法。例如我們的使用的美圖軟體,停車場車牌識別,人臉識別等,其底層參數可能使用了優化演算法來加速參數計算,其參數的細微差別對結果的影響不太大,需要較快的得出誤差范圍內的參數即可;電商的推薦系統等也使用了優化演算法來加速參數的訓練和收斂,我們會發現每次刷新時,推給我們的商品都有幾個會發生變化,而且隨著我們對商品的瀏覽,系統推給我們的商品也會發生變化,其結果是動態變化的;打車軟體的訂單系統,會根據司機和客人的位置,區域等來派發司機給客人,不同的區域,不同的路況,派發的司機也是動態變化的。
綜上我們可以大致總結一下推薦、不推薦使用優化演算法的場景的特點。
前面說過,優化演算法處理的問題都是客觀的問題,如果遇到主觀的問題,比如「我孰與城北徐公美」,我們需要將這個問題進行量化而轉換成客觀的問題,如身高——「修八尺有餘」,「外貌——形貌昳麗」,自信度——「明日徐公來,孰視之,自以為不如;窺鏡而自視,又弗如遠甚」,轉化成客觀問題後我們可以得到各個解的分數,通過比較分數,我們就能知道如何取捨如何優化。這個轉化過程叫做問題的建模過程,建立的問題模型實際上是一個函數,這個函數對優化演算法來說是一個黑盒函數,即不需要知道其內部實現只需要給出輸入,得到輸出。
在優化演算法中這個黑盒函數叫做 適應度函數 , 優化演算法的求解過程就是尋找適應度函數最優解的過程 ,使用優化演算法時我們最大的挑戰就是如何將抽象的問題建立成具體的模型,一旦合適的模型建立完成,我們就可以愉快的使用優化演算法來求解問題啦。(「合適」二字談何容易)
優化演算法的大致介紹到此結束,後面我們會依次介紹常見、經典的優化演算法,並探究其參數對演算法性能的影響。
——2019.06.20
[目錄]
[下一篇 優化演算法筆記(二)優化演算法的分類]
8. 誰有matlab數學建模經典案例實戰 余勝威 的電子版
你選一個吧:都是我看過的好書,直接可以用於數學建模的!(最好的一本是《MATLAB在數學建模中的應用》
)
《MATLAB N個實用技巧—MATLAB 中文論壇精華總結》
《MATLAB GUI設計學習手記》含第二、三版
《MATLAB 與控制系統模擬實踐》(含第二版)
《金融數量分析—基於 MATLAB 編程》含第二、三版
《圖論演算法及其 MATLAB 實現》
《MATLAB 神經網路30個案例分析》
《MATLAB統計分析與應用:40個案例分析》
《MATLAB高效編程技巧與應用:25個案例分析》
《Simulink與信號處理》含第二版
《MATLAB在數學建模中的應用》(含第二版)
《MATLAB神經網路:從零開始》(共上下兩冊)
《高等光學模擬(MATLAB)版》——光波導、激光(含第2版)
《精通MATLAB與C/C++混合程序設計》
《模式識別與智能計算的MATLAB實現》
《實戰MATLAB之並行程序設計》
《MATLAB面向對象編程——從入門到設計模式》
《MATLAB從零到進階》
《MATLAB在語音信號分析和合成中的應用》
《基於MATLAB的高等數學問題求解》
《MATLAB神經網路原理與實例精解》
《MATLAB圖像處理實例詳解》
《MATLAB之父:編程實踐》《Experiment with MATLAB》
《MATLAB圖像處理——程序實現與模塊化模擬》
《MATLAB圖像處理——能力提高與應用案例》
《實戰MATLAB之文件與數據介面技術》
《MATLAB/Simulink機電動態系統模擬及工程應用》
《感測器信息融合——MATLAB程序實現》
《MATLAB及在電子信息課程中的應用(第4版)》
《MATLAB優化演算法案例分析與應用》
《MATLAB車輛工程應用實戰》
《MATLAB數值計算(2013修訂版)》《Numerical Computing with MATLAB(Revised in 2013)》
《機械工程設計分析和MATLAB應用》(第4版)
《MATLAB數學建模經典案例實戰》
9. 優化演算法筆記(五)粒子群演算法(3)
(已合並本篇內容至粒子群演算法(1))
上一節中,我們看到小鳥們聚集到一個較小的范圍內後,不會再繼續集中。這是怎麼回事呢?
猜測:
1.與最大速度限制有關,權重w只是方便動態修改maxV。
2.與C1和C2有關,這兩個權重限制了鳥兒的搜索行為。
還是上一節的實驗, 。現在我們將maxV的值有5修改為50,即maxV=50,其他參數不變。參數如下
此時得到的最優位值的適應度函數值為0.25571,可以看出與maxV=5相比,結果差了很多而且小鳥們聚集的范圍更大了。
現在我們設置maxV=1,再次重復上面的實驗,實驗結果如下:
這次最終的適應度函數值為,比之前的結果都要好0.00273。從圖中我們可以看出,小鳥們在向一個點集中,但是他們飛行的速度比之前慢多了,如果問題更復雜,可能無法等到它們聚集到一個點,迭代就結束了。
為什麼maxV會影響鳥群的搜索結果呢?
我們依然以maxV=50為例,不過這次為了看的更加清晰,我們的鳥群只有2隻鳥,同時將幀數放慢5倍以便觀察。
思路一:限制鳥的最大飛行速率,由於慣性系數W的存在,使得控制最大速率和控制慣性系數的效果是等價的,取其一即可。
方案1:使慣性系數隨著迭代次數增加而降低,這里使用的是線性下降的方式,即在第1次迭代,慣性系數W=1,最後一次迭代時,慣性系數W=0,當然,也可以根據自己的意願取其他值。
實驗參數如下:
小鳥們的飛行過程如上圖,可以看到效果很好,最後甚至都聚集到了一個點。再看看最終的適應度函數值8.61666413451519E-17,這已經是一個相當精確的值了,說明這是一個可行的方案,但是由於其最後種群過於集中,有陷入局部最優的風險。
方案2:給每隻鳥一個隨機的慣性系數,那麼鳥的飛行軌跡也將不再像之前會出現周期性。每隻鳥的慣性系數W為(0,2)中的隨機數(保持W的期望為1)。
實驗參數如下:
可以看到小鳥們並沒有像上一個實驗一樣聚集於一個點,而是仍在一個較大的范圍內進行搜索。其最終的適應度函數為0.01176,比最初的0.25571稍有提升,但並不顯著。什麼原因造成了這種情況呢?我想可能是由於慣性系數成了期望為1的隨機數,那麼小鳥的飛行軌跡的期望可能仍然是繞著一個四邊形循環,只不過這個四邊形相比之前的平行四邊形更加復雜,所以其結果也稍有提升,當然對於概率演算法,得到這樣的結果可能僅僅是因為運氣不好
我們看到慣性系數W值減小,小鳥們聚攏到一處的速度明顯提升,那麼,如果我們去掉慣性系數這個參數會怎麼樣呢。
方案3:取出慣性系數,即取W=0,小鳥們只向著那兩個最優位置飛行。
可以看見鳥群們迅速聚集到了一個點,再看看得到的結果,最終的適應度函數值為2.9086886073362966E-30,明顯優於之前的所有操作。
那麼問題來了,為什麼粒子群演算法需要一個慣性速度,它的作用是什麼呢?其實很明顯,當鳥群迅速集中到了一個點之後它們就喪失了全局的搜索能力,所有的鳥會迅速向著全局最優點飛去,如果當前的全局最優解是一個局部最優點,那麼鳥群將會陷入局部最優。所以,慣性系數和慣性速度的作用是給鳥群提供跳出局部最優的可能性,獲得這個跳出局部最優能力的代價是它們的收斂速度減慢,且局部的搜索能力較弱(與當前的慣性速度有關)。
為了平衡局部搜索能力和跳出局部最優能力,我們可以人為的干預一下慣性系數W的大小,結合方案1和方案2,我們可以使每隻鳥的慣性系數以一個隨機周期,周期性下降,若小於0,則重置為初始值。
這樣結合了方案1和方案2的慣性系數,也能得到不錯的效果,大家可以自己一試。
思路二:改變小鳥們向群體最優飛行和向歷史最優飛行的權重。
方案4:讓小鳥向全局最優飛行的系數C2線性遞減。
小鳥們的飛行過程與之前好像沒什麼變化,我甚至懷疑我做了假實驗。看看最終結果,0.7267249621552874,這是到目前為止的最差結果。看來這不是一個好方案,讓全局學習因子C2遞減,勢必會降低演算法的收斂效率,而慣性系數還是那麼大,小鳥們依然會圍繞歷史最優位置打轉,畢竟這兩個最優位置是有一定關聯的。所以讓C1線性遞減的實驗也不必做了,其效果應該與方案4相差不大。
看來只要是慣性系數不變怎麼修改C1和C2都不會有太過明顯的效果。為什麼實驗都是參數遞減,卻沒有參數遞增的實驗呢?
1.慣性系數W必須遞減,因為它會影響鳥群的搜索范圍。
2.如果C1和C2遞增,那麼小鳥的慣性速度V勢必會跟著遞增,這與W遞增會產生相同的效果。
上面我們通過一些實驗及理論分析了粒子群演算法的特點及其參數的作用。粒子群作為優化演算法中模型最簡單的演算法,通過修改這幾個簡單的參數也能夠改變演算法的優化性能可以說是一個非常優秀的演算法。
上述實驗中,我們僅分析了單個參數對演算法的影響,實際使用時(創新、發明、寫論文時)也會同時動態改變多個參數,甚至是參數之間產生關聯。
實驗中,為了展現實驗效果,maxV取值較大,一般取值為搜索空間范圍的10%-20%,按上面(-100,100)的范圍maxV應該取值為20-40,在此基礎上,方案1、方案2效果應該會更好。
粒子群演算法是一種概率演算法,所以並不能使用一次實驗結果來判斷演算法的性能,我們需要進行多次實驗,然後看看這些實驗的效果最終來判斷,結果必須使用多次實驗的統計數據來說明,一般我們都會重復實驗30-50次,為了發論文去做實驗的小夥伴們不要偷懶哦。
粒子群演算法的學習目前告一段落,如果有什麼新的發現,後面繼續更新哦!
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(四)粒子群演算法(2)
下一篇 優化演算法筆記(六)遺傳演算法
10. 優化演算法筆記(三十)海洋捕食者演算法
(以下描述,均不是學術用語,僅供大家快樂的閱讀)
海洋捕食者演算法(Marine Predators Algorithm)見名知意,就是根據海洋中掠食者捕獲獵物的行為提出的優化演算法。該演算法發表於2020年,也演算法是一個新演算法了。
該演算法根據迭代次數分均三個階段,每個階段使用不同的隨機策略計算步長並移動獵物位置。如果獵物的位置好於捕食者的位置,那麼捕食者就移動到該獵物的位置。
海洋捕食者演算法就像一個縫合怪,縫合了布朗運動,levy飛行等隨機生成策略,在不同的階段使用不同的策略。雖然是縫合怪,但是也有著不錯的尋優能力,我們也可以學習學習其策略。
(因為是縫合怪,甚至找不到對標的動物,可能作者也沒找到,這次就算是鯊魚吧。)
海洋捕食者演算法中有兩個概念,捕食者和獵物,在每個階段,只有獵物會進行隨機移動,而捕食者則是在獵物完成移動後,移動到優於自己的獵物處。
在蟻獅演算法中也是這樣的模型,不過這里更簡單,我們可以將海洋捕食者演算法中的捕食者對標粒子群演算法中的粒子。捕食者的位置就是粒子的歷史最優位置,獵物的位置就是粒子的當前位置。獵物(粒子)不斷的移動改變位置,如果找到優於捕食者(粒子的歷史最優)的位置,那麼捕食者移動到該獵物處(粒子更新歷史最優位置)。
初始時海洋捕食者數量為N。捕食者的位置表示為 ,獵物的位置為 ,最大迭代次數為 。
迭代次數在 內。
根據如下公式計算獵物的新位置:
公式(1)用於計算步長,其中Rb為標准正態分布隨機數,公式(2)用於計算新位置,其中R為[0,1]內均勻隨機數,公式(3)是我將公式(1)代入公式(2)的到的,由於後面太多隨機數相乘,其結果可以近似為0,即該階段在當前獵物周圍小范圍搜索。
迭代次數在 內。
該階段,種群被均分為二組,第一組的獵物的位置更新公式如下:
迭代次數在 內。
該階段獵物的位置更新公式如下:
:
捕食者對比自己的獵物,如果獵物的位置更好,則更新自己的位置到獵物的位置。
根據魚類的聚集效應(Fish Aggregating Devices (FADs) effects),再次更新獵物的位置,其具體更新公式如下:
其中FADs取值為0.2,R,r為[0,1]內均勻分布的隨機數,U為{0,1}內隨機數,r1,r2為群體中的隨機個體編號。
從公式中可以看出,該步驟第一個公式對獵物位置的部分維度進行了「重置「,不過這樣有較大可能會超出邊界,第二個公式類似於差分進化的變異公式,讓獵物隨機移動。
適應度函數 。
實驗一 :
從圖中可以看出海洋捕食者演算法的初期收斂速度並不是很快,而後期則是會迅速收斂,。通過前面對公式的分析,該演算法在局部搜索方面有著較強的性能,從圖中也可以得到相似的結論。
從結果來看,演算法效果還是很不錯的,雖然是個縫合怪,但該有的步驟和性能都不差。
實驗二 :分別對階段1、2、3,進行測試,即整個演算法中只有階段1、階段2或者階段3中的一個。
階段1圖像如下:
階段二圖像如下:
階段三圖像如下:
圖像看上去好了不少,在最後群體能夠收斂到一起,集中在正解附近,結果應該不差
結果相對於原演算法好了一丟丟。不過這個測試函數十分的簡單,這個修改只能說是在該函數上較好,總體的性能還需要更全面的測試函數來測試。總的來說海洋捕食者演算法的性能不錯,但能夠改進的地方也不少。
海洋捕食者演算法是根據海洋中的捕食者搜捕獵物的行為而提出的優化演算法。該演算法分為三個階段,第一階段,進行全局搜索,第二階段,融合全局搜索和局部搜索,第三階段,進行局部搜索和levy飛行跳出局部最優。該演算法就算一個縫合怪,可以從中看出不少演算法的特點。
參考文獻
Faramarzi A , Heidarinejad M , Mirjalili S , et al. Marine Predators Algorithm: A Nature-inspired Metaheuristic[J]. Expert Systems with Applications, 2020, 152:113377.
提取碼:7wfn
以下指標純屬個人yy,僅供參考
目錄
上一篇 優化演算法筆記(二十九)禿鷹演算法
下一篇 優化演算法筆記(三十一)阿基米德演算法