帶領域變異的多模態優化差分進化算法(DE/NCDE/NSDE/)


文獻《Differential Evolution with Neighborhood Mutation for Multimodal Optimization》核心技術點總結,網上幾乎沒有關於多模DE算法的博文,主要是自己復習總結,也和大家一起學習。文章現在讀不難,依然記得大一的我,要理解一篇這種文章,簡直太難了,看那篇DE文章就不知道看了多久。

DE(Differential Evolution)回顧

DE是一種模擬生物進化的隨機模型,通過反復迭代,使得那些適應環境的個體被保存了下來。DE保留了基於種群的全局搜索策略,采用實數編碼、基於差分的簡單變異操作和一對一的競爭生存策略,降低了遺傳操作的復雜性。同時,DE特有的記憶能力使其可以動態跟蹤當前的搜索情況,以調整其搜索策略,具有較強的全局收斂能力和魯棒性。
DE 算法主要用於求解連續變量的全局優化問題,其主要工作步驟與其他進化算法基本一致,主要包括變異(Mutation)、交叉(Crossover)、選擇(Selection)三種操作。算法的基本思想是從某一隨機產生的初始群體開始,利用從種群中隨機選取的兩個個體(\(r_1,r_2\))的差向量作為第三個個體的隨機變化源(\(r_1-r_2\)),將差向量加權后(權重\(F\))按照一定的規則與第三個個體求和(\(r_3+F(r_1-r_2)\))而產生變異個體,該操作稱為變異。然后,變異個體與某個預先決定的目標個體(種群中第\(i\)個個體)進行參數混合,生成試驗個體\(i'\),這一過程稱之為交叉。如果試驗個體\(i'\)的適應度值優於目標個體\(i\)的適應度值,則在下一代中試驗個體取代目標個體,否則目標個體仍保存下來,該操作稱為選擇(利用\(Fitness函數\))。在每一代的進化過程中,每一個體矢量作為目標個體一次,算法通過不斷地迭代計算,保留優良個體,淘汰劣質個體,引導搜索過程向全局最優解逼近。

C語言偽代碼

在這里插入圖片描述

niching

小生境技術:在一個種群中形成子種群,每個子種群目標是找到一個最優解,整個種群找到多組最優解。CDE和SDE都是使用niching技術的DE。

CDE(Crowding DE )

CDE策略是使用標准DE生成子代,這個子代和當前種群中最相似的個體比較,保留更優的個體。標准DE的是把嘗試的個體與父代比較,選擇保留更優的個體。所以CDE就是一種擁擠策略,少保留相似的。
在這里插入圖片描述

SDE(Species-Based DE)

首先確定幾個名詞:

  • radius parameter \(r_s\):Euclidean distance from the center of a species to its boundary.
  • species seed:The center of a species.

利用種群相似度分組,平均復雜度\(O(N^2)\)

  1. SDE就是把種群利用相似度分組,首先按照適應度排序,把第一個最優個體作為第一個種群的中心,其他個體如果和中心距離小於\(r_s\),則歸納到同一組,否則剩下的按照相同方式分組。
  2. 對每個種群,執行全局DE:
    如果一個種群數量小於\(m\),那么隨機生成新的個體加入其中,需要滿足半徑參數要求。
    如果子代個體fitness和species seed相同,則用隨機個體取代該子代個體。
    在這里插入圖片描述

帶領域的DE(Neighborhood Based Differential Evolution)

在標准DE中,運行任意兩個個體形成差分向量,這種策略對於單個全局最優解表現很好,但是對於多模問題,如果使用全局DE,在最終搜索階段對多峰優化所需的多個局部收斂是無效的。雖然niching技術解決了一部分這種問題,但是例如SDE這種技術太過依賴niching的參數設置。
領域DE的一個最重要的概念就是領域變異(neighborhood mutation)。
在鄰域變異中,差分向量的生成僅限於用歐幾里德距離度量的若干個相似個體。核心思想是:
對於NP個個體,計算每個個體距離最近的\(m\)個個體,形成一個子種群,在子種群中選擇\(r_1,r_2,r_3\)三個不同個體,和第i個個體選擇形成子代\(u_i\)。再使用差分小生境策略選擇NP個最佳個體。
在這里插入圖片描述
下圖展示為什么領域變異更加有效,A和B是當前點,\(O_1和O_2\)是兩個peak,對於A,B點使用領域內的差分變異向量更可能locate到\(O_1和O_2\).
在這里插入圖片描述

核心算法1:NCDE(the neighborhood based crowding DE)

首先生成NP個初始解,對於每個個體,找到\(m\)個最為相似的個體形成子種群\(subpop_i\),在\(subpop_i\)中找到\(r_1,r_2,r_3\),使用DE得到\(u_i\),計算\(u_i\)到整個種群其他個體的距離,比較和\(u_i\)距離最近的個體的適應度,如果\(u_i\)更優,則取代。相比CDE,NCDE只是加入了領域變異,十分簡單。
在這里插入圖片描述

核心算法2:NSDE(the neighborhood based speciation DE)

首先生成NP個初始解,適應度排序,確定未處理的最優個體,找到距離最相近的\(m\)個個體形成新的種群,在當前種群中移除處理了的個體,直到當前種群為空。對於每個種群執行全局DE,如果孩子適應度和父親一樣,用隨機個體取代孩子。最后保留NP個更優的個體組合成下一代種群。相比SDE,也只是加入了一個領域變異,不需要確定參數r了。

在這里插入圖片描述

updata matlab代碼

由於有"學友"在csdn上詢問代碼的事情,代碼我就給出來吧!原始代碼的是實驗室學長們的,后來自己修修改改,可讀性估計蠻差了,但是也有一些自己的注釋。如果對matlab熟悉的話,應該還好,當然首先是對DE和ncsd已經nsde算法流程很熟悉。
現在的學習方向和這已經偏差很多的,但是這類優化算法還是特別有意思的。記得g老師說“優化加學習,必成必殺技”,哈哈!
博客園好像上傳的文件不能共享下載,放到scdn上,關注即可下載!
code link


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM