1. 程式人生 > >NSGA-II入門C1

NSGA-II入門C1

NSGA-II入門C1

覺得有用的話,歡迎一起討論相互學習~Follow Me

參考文獻1
參考文獻2

白話多目標

多目標中的目標是個瓦特?

  • 多目標即是優化問題中的優化目標在3個及以上,一般這些優化的目標都存在著矛盾,例如:我要買一個又便宜又漂亮又效能好的車的時候,價格,外觀, 效能 這就是一個典型的多目標問題,我們必須在商品的價格,外觀和效能上做出取捨,畢竟外觀漂亮效能強勁的車型往往意味著高的價格。

多目標中的支配是個瓦特?

  • 我們經常聽說 支配與非支配解集 ,那麼什麼叫做支配,什麼叫做非支配呢?還是上面汽車的例子,如果汽車A價格30萬,外觀A等,效能A等;汽車B價格40萬,外觀A-等,效能A-等,就說汽車A支配了汽車B。如果有一輛汽車C價格20萬,外觀B等,效能B等,相較於汽車A,雖然C的外觀和效能都比汽車A要差,但是其價格上比汽車A要低,從價格這個評價標準上來看,汽車C是要優於汽車A的,所以說汽車C和汽車A是屬於一個非支配的關係。即 當A所有目標都優於B時,就說A支配了B,否則A和B就是一個非支配的關係
    ,而在NSGA-II中,種群中所有不被任何其他解支配的解構成了非支配前沿(Pareto最優解)

多目標遺傳演算法與遺傳演算法的區別-選擇的方法不同

多目標遺傳演算法與遺傳演算法的聯絡-交叉變異的方法相同

  • 遺傳演算法中和多目標遺傳演算法中最大的不同在於 選擇 的過程,遺傳演算法中通過適應度函式進行種群中個體的選擇,而多目標遺傳演算法中根據 非支配的Rank值和擁擠度進行排序 選擇保留的個體。
    • 對於Rank值,首先我們將解集中的 所有不能被任何其他的解支配的解集 (即最厲害最牛的解)挑出來設為Rank0,然後將這些解從解集中排除,考慮剩下所有解中 所有不能被任何其他的解支配的解集
      挑出來設為Rank1,…通過支配關係將解集中所有的解進行排序,得到所有解的等級。我們認為 Rank值越小的解越好。
    • 在選擇的過程中我們設定 每次迭代種群中個體的數量N是定值 ,而每次挑選時,先挑選表現最好的解–即Rank0的解,接著是Rank1,Rank2,Rank3…,但是我們總會出現 i
      = 0 n 1 R a n k i > N \sum^{n-1}_{i=0}Rank_i>N
      i = 0 n R a n k i < N \sum^{n}_{i=0}Rank_i<N 的情況,為了判定同一個Rank層的解的好壞,設定 擁擠度 作為同Rank非支配解集中解的評價標準。
    • 遺傳演算法有自動收斂的性質,所以為了保證解的多樣性,我們往往希望同一Rank層中的解能夠相互分開,所以設定了 擁擠度 這個概念,認為 解之間距離開的解比解之間距離小的解更好 擁擠距離排序用於保持解的多樣性。 每個個體的擁擠距離是通過計算與其相鄰的兩個個體在每個子目標函式上的距離差之和來求取,即下圖中虛線四邊形的長和寬之和
  • 每個父代 P t P_t 都會通過 交叉和變異 (其中多目標遺傳演算法中的交叉和變異與傳統遺傳演算法中的交叉和變異沒有區別) 生成子代 Q t Q_t ,父代和子代的所有個體集合稱為 R t R_t ,先通過 非支配排序 選出 R t R_t 中的合適個體,再通過 擁擠度排序 選出同一Rank層中的個體,使新的種群集合 P t + 1 P_{t+1} 的個體數目為N。 這一過程常常會使用以下兩種圖進行表示:


學術多目標

NSGA-II演算法的今生前世

在遺傳演算法在解決多目標優化遇到瓶頸時,許多學者花費了不少時間和精力在多目標優化的遺傳演算法上,Goldberg首先將Pareto最優解的概念與適應度值概念相關聯,即將Pareto非支配排序分層的概念與適應度聯絡,排序的層次低,則其分層中個體的適應度值較高,使演算法能夠朝著Pareto最優前沿進化,最終輸出Pareto最優解集。在提出此概念後,學者們陸續提出了一系列多目標遺傳演算法,如SPGA、NPGA、FFGA、NSGA等等。但是最能代表Goldberg思想的演算法是基於非支配排序的遺傳演算法,即NSGA(Non—dominated Sorting Genetic Algorithm)。

科學家Srinivas和Deb在前人研究基礎上,於1994年首先提出了非支配排序遺傳演算法的概念。其演算法最主要的思想是 將所有的個體進行分層,並且對每個個體都設定個體虛擬適應度值同一層中的每個個體虛擬適應度值相同,層級數越低,其適應度值越高,遺傳到下一代的概率也就越大。為了使得到的結果沿Pareto前沿均勻分佈,就需要保證非支配層中個體保持多樣性,為了保持非支配層中個體多樣性,Srinivas等人採用了共享函式法。

採用非支配排序的遺傳演算法在多目標優化中得到了廣泛應用,但是,隨著其使用越廣泛,其演算法也暴露出了一些缺陷。 首先,NSGA演算法的時間複雜度高,為 O ( m N 3 ) O(mN^3) ,m代表目標數,N表示種群規模大小,當種群數目過多時,其排序過程必將耗費更多時間,降低了搜尋效率。再者,NSGA演算法沒有考慮精英策略,精英策略能提高演算法的計算速度,也能將優秀個體儲存下來。更為重要的一點是,其共享半徑引數是人為設定的,而共享半徑設定不合理,將對計算結果產生非常大的影響。

為了克服非支配排序遺傳演算法的以上弊端,Deb等學者於2000年對NSGA演算法進行了改進,提出了 基於快速非支配排序的遺傳演算法NSGA-II,相比NSGA來說,NSGA-II有如下不同點 :

  1. 計算複雜度 在NSGA計算中,其排序的複雜程度為 O ( m N 3 ) O(mN^3) (m代表目標函式個數,N表示種群規模),而採用NSGA—II演算法,其計算複雜程度將為 O ( m N 2 ) O(mN^2) ,計算效率得到了提升。
  2. 演算法中加入了精英策略 其實現思想是:父代個體通過遺傳操作產生予代個體後,選擇操作選擇的個體數N需要從父代和子代個體競爭,從中選出最好的,這樣做的目的就是能將最優秀的個體儲存下來。
  3. 相比NSGA演算法提出的共享半徑,NSGA—II採用了擁擠度的概念 在同一非支配層中,通過判斷個體周圍的擁擠程度,改善同一支配層面的種群多樣性,不需要設定比較“敏感”的共享半徑引數,對提高演算法效率和保持種群多樣性上優於NSGA演算法。

NSGA-II 該演算法求得的 Pareto 最優解分佈均勻,收斂性和魯棒性好,具有良好的優化效果,是求解多目標優化問題的一種新思路

非支配排序

  • 時間複雜度 m 個個體和種群中的其他個體進行支配關係比較,是否支配其他全部個體,複雜度為O(mN);迴圈進行直到等級1 中的非支配個體全部被搜尋到,複雜度為 O ( m N 2 ) O(mN^2) ;最壞的情況下,有N個等 級,每個等級只存在一個解,複雜度為 O ( m N 3 ) O(mN^3)
  • 演算法流程 NSGA—II排序時需要設定兩個引數用 n i n_i 表示種群中所有個體中支配個體i的數目, S i S_i 表示種群中個體被個體i支配的個體集合。NSGA-II對種群個體進行非支配排序的步驟如下:
    1. 找出種群中非支配解的個體,即 n i = 0 n_i=0 的個體,將非支配個體放入集合F1中。
    2. 對於F1中的每個個體,找出集合中每個個體所支配個體集合 S i S_i ,對 S i S_i 中的個體l,對 n l n_l 進行減1操作,令 n l = n l 1 n_l = n_l-1 ,若 n l n_l 大小為0,則將此個體存放在集合H中。
    3. 定義集合F1為第一層非支配集合,併為F1中每個個體標記相同的非支配序列 i r a n k i_{rank}
    4. 對集合H中的個體,按照以上步驟1、步驟2和步驟3操作,直至將所有個體分層。

擁擠度排序

  • 目的 同一層非支配個體集合中,為了保證解的個體能均勻分配在Pareto前沿,就需要使同一層中的非支配個體具有多樣性,否則,個體都在某一處“扎堆”,將無法得到Pareto最優解集。NSGA—II採用了擁擠度策略,即計算同一非支配層級中某給定個體周圍其他個體的密度。
  • 每個個體的擁擠距離是通過計算與其相鄰的兩個個體在每個子目標函式上的距離差之和來求取。 D i = ( f i + 1 , 1 f i 1 , 1 ) + ( f i 1 , 2 f i + 1 , 2 ) D_i=(f_{i+1,1}-f_{i-1},1)+(f_{i-1,2}-f_{i+1,2}) ,即下圖中虛線四邊形的長和寬之和。

NSGA-II排序演算法

  • 當每個個體擁有這兩個屬性,就可以通過這兩個屬性判定任意兩個個體的支配關係。當兩個體沒有處在同一非支配層級時,通過判斷 i r a n k i_{rank} 大小,確定個體優劣, i r a n k i_{rank} 值小的個體比 i r a n k i_{rank} 大的個體更優;當兩隨機個體處於同一非支配層級時,依據個體擁擠度判定個體孰優孰劣,個體擁擠度大的比個體擁擠度小的個體更優

NSGA-II演算法流程

NSGA-II演算法流程-達到一定進化代數停止

首先種群初始化,通過快速非支配排序、選擇、交叉以及變異操作後得到初始種群,種群中個體數為N;將父代種群和子代種群合併,再通過排序、擁擠度計算得出下一代種群個體;得出新一代種群後根據遺傳操作繼續產生下一代,如此反覆,直到達到進化最大代數停止。

NSGA-II演算法流程-演算法收斂停止

  1. 創造一個初始父代種群 P 0 P_0 使用交叉和變異操作產生子代種群 Q 0 Q_0
  2. P 0 P_0 h和 Q 0 Q_0 組成的整體 R 0 R_0 進行非支配排序,構造所有不同等級的非支配解集 Z 1 , Z 2 , Z 3 . . . Z_1,Z_2,Z_3 ...
  3. 對分好等級的非支配解集進行擁擠距離排序,根據適應度高低得到前 N 個解,構成下一次迭代的父代種群 P 1 P_1
  4. 重複上述 3 個步驟,直到結果收斂