日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NSGA-II 算法详解

發布時間:2023/12/10 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NSGA-II 算法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

3 NSGA-II

3.1 算法流程

確定種群大小 n,交叉概率 t,迭代次數 g 隨機產生 n 個個體,它們整體視為種群 P for i = 1 to gP = ? for j = 1 to n產生一個 [0,1] 的隨機數 aif (a<t)從 P 中隨機選出兩個個體作為父母,交叉產生一個新的個體并放入 P’ 中else從 P 中隨機選出一個個體,變異產生一個新的個體并放入 P’ 中endend利用非支配排序和擁擠距離,從 P∪P’ 中選出 n 個個體, 代替 P # NSGA-II改進的部分 end 輸出最終種群 P 中的非支配個體


3.2 NSGA-II 提出的 NSGA的缺點

  • O(MN3)O(MN^3)O(MN3)計算復雜度(其中M代表目標個數,N代表種群個數)

    NSGA算法每一代進化都要構造非支配集, 在種群規模大的時候會造成巨大的時間開銷

  • 非精英機制方法

    NSGA算法沒有采取保留優秀解的措施, 導致算法性能受損。

  • 需要指定共享參數

    指定共享參數是因為NSGA需要依靠共享參數來維持解群體的分布性, 也即實現解盡可能地均勻分布, 但共享參數的定義往往需要一定的經驗, 這也導致共享參數的確定成為了老大難的問題。



3.3 NSGA-II 較于 NSGA的優點

3.3.1 快速非支配排序

?在NSGA-中,將進化群體按支配時關系分為若干層,第一層為進化群體的非支配個體集合,第二層為在進化群體中去掉第一層個體后所求得的非支配個體集合,第三層為在進化群體中去掉第一層和第二層個體后所求得的非支配個體集合,依此類推。選擇操作首先考慮第一層非支配集,按照某種策略從第一層中選取個體;然后再考慮在第二層非支配個體集合中選擇個體,依此類推,直至滿足新進化群體的大小要求。

1) 論文算法


2) 支配關系


對于二目標優化問題來講, 支配的含義在于 解A的值在兩個目標函數上都優與解B , 這樣我們就稱 解A支配解B (不理解可以參照 Pareto理論)
假如橫縱坐標為兩個不同的約束函數, 函數值越小越優秀的情況下。 那么 B 顯然能夠支配 C和D , 因為 B的兩個函數值都小于 C與 D, 因此 Sp=C,DS_p = {C,D}Sp?=C,D 。 而 C 顯然受到 A 和 B 的支配, 因此 np=2np = 2np=2


3) 論文解釋

  • 原文

    ? First, for each solution we calculate two entities: 1) domination count npn_pnp?, the number of solutions which dominate the solution p, and 2) SpS_pSp?, a set of solutions that the solution dominates. This requires O(MN2)O(MN^2)O(MN2)comparisons.
    ? All solutions in the first nondominated front will have their domination count as zero. Now, for each solution p with np=0n_p = 0np?=0, we visit each member (q ) of its sets SqS_qSq? and reduce its domination count by one. In doing so, if for any member q the domination count becomes zero, we put it in a separate list Q. These members belong to the second nondominated front. Now, the above procedure is continued with each member of Q and the third front is identified. This process continues until all fronts are identified.


  • 譯文

    ? 首先,對每一個解我門計算兩個實體:1)支配計數npn_pnp? ,即支配著解 p 的解的數量,還有 2)SpS_pSp?,解所支配的解的集合,這需要O(MN2)O(MN^2)O(MN2)次比較。
    ? 所有第一非支配前沿面解的支配計數都為零?,F在,對每一個解 p 都有np=0n_p = 0np?=0,我們訪問每一成員(q)和他的集合SqS_qSq?并且減少逐一減少支配計數。通過這樣,如果任何成員q的支配計數達到0,我們就把它放進一個單獨集合 Q。這些成員屬于第二非支配前沿面?,F在,以上程序應用 Q中的每一成員繼續執行直到第三前沿面被確定。這一過程持續到所有前沿面被確定。


  • 個人理解

    快速非支配排序算法的目的在于將 種群根據相應的支配關系劃分為不同級別的Pareto解 , 根據約束函數劃分為 Pareto1、Pareto2......ParetoNPareto_1、Pareto_2......Pareto_NPareto1?、Pareto2?......ParetoN? 等若干個等級。算法首先完成對所有種群最優解的劃分, 也即 Pareto1Pareto_1Pareto1? 級解(也即種群的最優解, 其余解按照1?N1 - N1?N 優先級依次遞減)。其次完成刨去 Pareto1Pareto_1Pareto1? 級解之后解的劃分, 根據支配次數的結果 nqn_qnq? 的大小, 每執行依次遞減, 當執行同一批次 nqn_qnq? 為零時的解劃分為同一等級 (Pareto front) , 直到集合為空, 完成種群 N 的劃分。


4) 偽代碼

# 以下是 NSGA-II 的偽代碼 # 參數說明 # np表示被多少解支配,是一個數目 # Sp表示該解所支配的解的集合,是一個集合 # P表示整個種群 # 對于參數而言, 這里的參數都是一些假參數, 實際設計時, 解應該是一個具有屬性地對象def fast_nondominated_sort(P):F = [] # 初始化 F用來存放支配關系的排序結果(分層劃分)for p in P: # 遍歷整個種群Sp = [] # 支配解集合初始化np = 0 # 支配解個數初始化for q in P: # 遍歷整個種群if p > q: # 如果p支配q,將q添加到 Sp 列表(p被p支配)Sp.append(q)elif q > p: # 如果q支配p,則 np + 1np += 1if np == 0: # 如果p沒有被其它解支配, 將它設為Pareto 1級, 也即非支配解p_rank = 1 #p_rank 是解的一個屬性, 代表了當前解的 Pareto等級F1.append(p) # 將非支配解加入p 集合中F.append(F1) # 將Pareto 1級解加入F群體中i = 1# 下述算法復雜度為 O(MN^2)while F[i]: # 當F 非空Q = [] # Q 存放后續的非支配解for p in F[i]: # 遍歷Pareto 1級解集合for q in Sp: # 遍歷Pareto 1級解的支配解 該集合 = 全集 - Pareto1級解nq -= 1 # 消除了 Pareto上層解 對它的支配if nq == 0: # 如果該個體支配計數為0, 代表是非支配解q_rank = i+1 # 設置該解為與 i + 1前沿面 i 初始為 1Q.append(q) # 將解存放到Q集合中F.append(Q) # 把Q得到的劃分好的非支配解排序結果拼接到 F 結果集內部i += 1 # 重復循環 知道F[i]為空, 也即遍歷完所有的Pareto 1級解


3.3.2 擁擠度與擁擠度比較算子

1) 擁擠度計算公式

I[i+1].m和I[i?1].m分別是解i后一個與前一個解在m函數上的的函數值I[i+1].m和I[i-1].m分別是解i后一個與前一個解在m函數上的的函數值I[i+1].mI[i?1].mim

fmmax和fmmin分別是第m個函數的最大和最小值f_m^{max}和f_m^{min}分別是第m個函數的最大和最小值fmmax?fmmin?m
Idistance=(I[i+1].m?I[i?1].m)/(fmmax?fmmin)I_{distance} = (I[i+1].m - I[i-1].m) / (f_m^{max} - f_m^{min}) Idistance?=(I[i+1].m?I[i?1].m)/(fmmax??fmmin?)


2) 擁擠比較算子

經過前面的快速非支配排序和擁擠度計算之后,種群中的每個個體 iii 都擁有兩個屬性:非支配排序決定的非支配序 iranki_{rank}irank?(級數,即第幾級)和擁擠度 idi_did?。依據這兩個屬性,可以定義擁擠度比較算子:個體i與另一個個體 j 進行比較,只要下面任意一個條件成立,則個體 iii 獲勝。

① 如果個體 iii 所處非支配層優于個體 jjj 所處的非支配層,即 irank<jranki_{rank} < j_{rank}irank?<jrank?

?② 如果它們有相同的等級且個體 iii 比個體 jjj 有一個更大的擁擠距離,即 irank=jranki_{rank} = j_{rank}irank?=jrank?id>jdi_d > j_did?>jd?

第一個條件確保被選擇的個體屬于較優的非劣等級。第二個條件根據它們的擁擠距離選擇由于在同一非劣等級而不分勝負的兩個個體中位于較不擁擠區域的個體(有較大的擁擠度 idi_did? )。勝出的個體進入下一個操作。



3.3.3 精英策略

1) 概述


首先將第 t 代產生的新種群 QtQ_tQt? 與父代 PtP_tPt? 合并組成 RtR_tRt? , 種群大小為 2N2N2N 。然后 RtR_tRt? 進行非支配排序產生一系列非支配集 ZiZ_iZi? 并計算擁擠度。由于子代和父代個體都包含在 RtR_tRt? 中, 則經過非支配排序后的非支配集合 Z1Z_1Z1? 是最優的, 所以首先將 Z1Z_1Z1? 加入 Pt+1P_{t+1}Pt+1? 新父代種群中。 如果大小小于 N, 則繼續向 Pt+1P_{t+1}Pt+1? 種群中添加 Z2Z_2Z2? 。直到添加 Z3Z_3Z3? 時, 種群大小超過了 N , 這時就根據擁擠度比較算子進行選擇添加, 使得 Pt+1P_{t+1}Pt+1? 個體數量達到 NNN。然后通過遺傳算子(選擇、交叉、變異)產生新的子代種群 Qt+1Q_{t+1}Qt+1?


2)主體循環


以上代碼的邏輯跟精英策略的邏輯一致。



3.4 選擇算法

3.4.1 錦標賽選擇算法

?遺傳算法中的錦標賽選擇策略每次從種群中取出一定數量個體(放回抽樣),然后選擇其中最好的一個進入子代種群。重復該操作,直到新的種群規模達到原來的種群規模。幾元錦標賽就是一次性在總體中取出幾個個體,然后在這些個體中取出最優的個體放入保留到下一代種群的集合中。具體的操作步驟如下:

?① 確定每次選擇的個體數量N。(二元錦標賽選擇即選擇2個個體)
?② 從種群中隨機選擇N個個體(每個個體被選擇的概率相同) ,根據每個個體的適應度值,選擇其中適應度值最好的個體進入下一代種群。
?③ 重復步驟②多次(重復次數為種群的大小),直到新的種群規模達到原來的種群規模。

總結

以上是生活随笔為你收集整理的NSGA-II 算法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。