導航:首頁 > 源碼編譯 > 迭代局部搜索演算法

迭代局部搜索演算法

發布時間:2023-05-21 11:39:49

㈠ 優化演算法筆記(三十)海洋捕食者演算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
海洋捕食者演算法(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,僅供參考

目錄
上一篇 優化演算法筆記(二十九)禿鷹演算法
下一篇 優化演算法筆記(三十一)阿基米德演算法

㈡ 啟發式演算法

什麼是演算法?從枚舉到貪心再到啟發式(上)
目標 :要優化的東西
決策 :根據目標做出的決策
約束 :進行決策時必須遵循的條件
算例 :問題參數的具體化

枚舉法 :將問題所有的解一一枚舉出來,挨個去評價,選出最好的那個
1.枚舉法能夠找到問題的最優解
2.枚舉法求解時間隨問題規模增長而呈爆炸式增長

貪心法 :利用「構造」的方式生成解,速度相對而言會非常快,同時不會隨著問題規模的增長而大幅度增加,是平緩的線性增長
什麼是演算法?從枚舉到貪心再到啟發式(下)
啟發式演算法 :在一個合理的求解資源范圍內(合理的時間,合理的內存開銷等)求得一個較為滿意的解。目前主要包括鄰域搜索和群體仿生兩大類。
解空間 :所有該問題的解的集合,包括可行解和不可行解
局部搜索 :不完全遍歷解空間,只選擇一部分進行遍歷,進而大大降低搜索需要的資源。為了提高局部搜索的質量,大部分局部搜索演算法都會在搜索的時候不斷地抓取多個區域進行搜索,直到滿足演算法終止條件。
鄰域 :在鄰域結構定義下的解的集合,它是一個相對的概念,即鄰域肯定是基於某個解產生的
鄰居解 :鄰域內某個解的稱呼
鄰域結構 :定義了一個解的鄰域
鄰域結構的設計在啟發式演算法中非常重要,它直接決定了搜索的范圍,對最終的搜索結構有著重要的影響,直接決定了最終結果質量的好壞
搜索過程

不斷重復步驟2-步驟5,直到滿足終止條件,最後輸出全局最優解

所有的啟發式找到的都是滿意解,不能說是最優解(即便真的是),因為它遍歷的是解空間的局部。
一般情況下,啟發式演算法的時間是隨著問題規模增長而呈線性增長的
干貨 | 想學習優化演算法,不知從何學起?
鄰域搜索類
迭代局部搜索演算法
模擬退火演算法
變鄰域搜索演算法
禁忌搜索
自適應大鄰域搜索
群體仿生類
遺傳演算法
蟻群演算法
粒子群演算法
人工魚群演算法
演算法應用
禁忌搜索演算法求解帶時間窗的車輛路徑問題
基於樹表示法的變鄰域搜索演算法求解考慮後進先出的取派貨旅行商問題
變鄰域搜索演算法求解Max-Mean dispersion problem
遺傳演算法求解混合流水車間調度問題

㈢ 蝴蝶演算法口訣圖解

蝴蝶演算法口訣圖解,如下:

蝴蝶演算法(Butterfly Algorithm)是根據蝴蝶受香味吸引飛行的行為而提出的優化演算法。演算法於2015年提出,效果中規中矩,不過相關的論文數量也不少了。演算法的流程和結構非常簡單,不過論文對演算法的細節描述不夠清晰,有些參數意義不明。讓罩

其中,x:表示第i個蝴蝶在第t次迭代中的解向量,這里a*表示目前為止的最優解。第2隻 蝴 蝶的 香 味用 f;來表示,r為0到1的隨機坦御鬧數。局部搜索可表示為x+1 =對 + (r2 *x -x) * f

其中r為0到1的隨機數,x和x:表示從解空間中隨機選擇的第k只和第 j只蝴蝶。在蝴蝶的覓食過程中,全局和局部搜索都會發生,為此,設定一個開關概率p來轉換普通的全局搜索和容集的局部搜索。每次迭代用式(4)隨機產生一個數r,與開關概率p進行比較來決定進行全局搜索還是局部搜索。

㈣ 為什麼說模擬退火演算法優於局部搜索演算法

該演算法是一種新的隨機滑尺搜索方法,它是近年來提出的一信物高種適合於解決大規模組合螞州優化問題的通用而有效的近似演算法。與以往的近似演算法相比,模擬退火演算法具有描述簡單、使用靈活、運用廣泛、運行效率高和較少受到初始條件約束等優點

㈤ 局部搜索到底是什麼

簡單地說,就是根據已有的條件減小搜索范圍的搜索思想,不再全局搜索了。。。比如你想知道你班裡有多少有錢人,但由於你班上人太多了不可能一一調查,所以你可以根據「物以類聚」的假設減小搜索范圍,有錢人和有錢人走得更近些,就從某個有錢人的圈子進行排查。。。

㈥ 優化演算法筆記(十八)灰狼演算法

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
灰狼演算法(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實現

㈦ 什麼是智能優化演算法

群體智能優化演算法是一類基於概率的隨機搜索進化演算法,各個演算法之間存在結構、研究內容、計算方法等具有較大的相似性。因此,群體智能優化演算法可以建立一個基本的理論框架模式:

Step1:設置參數,初始化種群;

Step2:生成一組解,計算其適應值;

Step3:由個體最有適應著,通過比較得到群體最優適應值;

Step4:判斷終止條件示否滿足?如果滿足,結束迭代;否則,轉向Step2;

各個群體智能演算法之間最大不同在於演算法更新規則上,有基於模擬群居生物運動步長更新的(如PSO,AFSA與SFLA),也有根據某種演算法機理設置更新規則(如ACO)。

(7)迭代局部搜索演算法擴展閱讀

優化演算法有很多,經典演算法包括:有線性規劃,動態規劃等;改進型局部搜索演算法包括爬山法,最速下降法等,模擬退火、遺傳演算法以及禁忌搜索稱作指導性搜索法。而神經網路,混沌搜索則屬於系統動態演化方法。

優化思想裡面經常提到鄰域函數,它的作用是指出如何由當前解得到一個(組)新解。其具體實現方式要根據具體問題分析來定。

㈧ 局部搜索與經典搜索有什麼不同

局部搜索與經典搜索的不同分別是:

1、局部搜索:局部搜索不關心路徑代價,但是關註解狀態。比如八皇後問題,不關心是怎麼到目的狀態的,只關心最終布局對不對,許多重要應用都有這樣的性質,如作業空間調度,自動程序設計等。

局部搜索有兩個關鍵優點:1、通常只用常數級的內存;2、通常能在系逗緩首統化演算法不適用的很大或無限的(連續的)狀態山數空間中找到合理的解。

此外,局部搜索演算法對於解決純粹的最優化問題十分有用,其目標是根據目標函數找到最佳狀態。

2、經典搜索:通過形式化的定義搜索問題,則搜索問題的解描述為一組讓初始狀態轉變為目標狀態的行動序列,而搜索問題的最優解描述為使得路徑代價最小的一組讓初始狀態轉變為目標狀態的行動序列。

經典搜索的種類主要是:

1、樹搜索:例如在羅馬尼亞問題中,從父結點In(Arad)出發得到三個子節點:In(Sibiu),In(Timisoara)和In(Zerind),接下來需要繼續從這三種子結點中選擇其一繼續考慮,假設我們選擇In(Sibiu),則檢查它是否是目標狀態。

如果不是目標狀態,則繼續擴展它得到四個狀態:In(Arad),In(Fagaras),In(Oradea),In(Rimnicu Vikea)。繼續按此方式拓展In(Timisoara)和In(Zerind)。如果未找到目標狀態,則繼續對葉子結點作同樣的操作。

2、圖搜索演算法:在圖搜索演算法中,在擴展的時候如果遇到已經在 explored 集合中的結點或已經在 frontier 集合中的結點,則不將該結點哪局拓展進 frontier 集合,這也是其與樹搜索演算法的主要區別。

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

(以下描述,均不是學術用語,僅供大家快樂的閱讀)
蜉蝣演算法(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 &
Instrial Engineering (2020) 提取碼:ogl4
以下指標純屬個人yy,僅供參考

目錄
上一篇 優化演算法筆記(二十六)和聲搜索演算法
下一篇 優化演算法筆記(二十八)蝗蟲演算法

㈩ 什麼是局部搜索演算法

局部搜索演算法是從爬山法改進而來的。
簡單來說,局部搜索演算法是一種簡單的貪心搜索演算法,該演算法每次從當前解的臨近解空間中選擇一個最優解作為當前解,直到達到一個局部最優解。
在計算機科學中,局部搜索是解決最優化問題的一種元啟發式演算法。局部搜索從一個初始解出發,然後搜索解的鄰域,如有更優的解則移動至該解並繼續執行搜索,否則返回當前解。
1、局部搜索演算法的基本思想:
在搜索過程中,始終選擇當前點的鄰居中與離目標最近者的方向搜索。
2、局部搜索的優點:
簡單、靈活及易於實現,缺點是容易陷入局部最優且解的質量與初始解和鄰域的結構密切相關。常見的改進方法有模擬退火、禁忌搜索等。
3、局部搜索廣泛應用:
計算機科學(主要是人工智慧)、數學、運籌學、工程學、生物信息學中各種很難找到全局最優解的計算問題。

閱讀全文

與迭代局部搜索演算法相關的資料

熱點內容
dhcp伺服器新增地址 瀏覽:930
程序員跑三個月外賣 瀏覽:941
linux配置tomcat的jdk路徑 瀏覽:363
液體壓縮公式 瀏覽:777
php開發後台管理系統 瀏覽:360
python二分查找遞歸 瀏覽:447
微信如何發視頻不壓縮 瀏覽:902
河北2021美術高考綜合分演算法 瀏覽:606
如何為電腦文件夾加密 瀏覽:835
電腦自啟動應用命令 瀏覽:690
php判斷一個文件是否存在 瀏覽:829
php導出xml文件 瀏覽:904
7個文件夾解壓 瀏覽:383
python實現機器碼 瀏覽:356
jpeg壓縮器 瀏覽:98
php數組轉化json 瀏覽:33
轉換mp3用什麼app 瀏覽:465
國際服吃雞為什麼沒有提供伺服器 瀏覽:494
單片機中斷定時 瀏覽:395
像搭積木一樣的編程叫什麼編程 瀏覽:804