MOP_2. 非支配排序遺傳算法 —(NSGA、NSGA-II)

多目標優化系列:

MOP_1. 多目標優化的相關基本概念

MOP_2. 非支配排序遺傳算法 —(NSGA、NSGA-II)

MOP_3. 基於分解的多目標進化算法 —(MOEAD)


1. 非支配排序遺傳算法(NSGA)

1995年,Srinivas和Deb提出了非支配排序遺傳算法(Non-dominated Sorting Genetic Algorithms,NSGA)。這是一種基於Pareto最優概念的遺傳算法。

(1) 基本原理

NSGA與簡單的遺傳算法的主要區別在於:該算法在選擇算子執行之前根據個體之間的支配關係進行了分層。其選擇算子、交叉算子和變異算子與簡單遺傳算法沒有區別。

在選擇操作執行之前,種羣根據個體之間的支配與非支配關係進行排序:

首先,找出該種羣中的所有非支配個體,並賦予他們一個共享的虛擬適應度值。得到第一個非支配最優層;

然後,忽略這組己分層的個體,對種羣中的其它個體繼續按照支配與非支配關係進行分層,並賦予它們一個新的虛擬適應度值,該值要小於上一層的值,對剩下的個體繼續上述操作,贏到種羣中的所有個體都被分層。

算法根據適應度共享對虛擬適應值重新指定:

比如指定第一屢個體的虛擬適應值爲1,第二層個體的虛擬適應值應該相應減少,可取爲0.9,依此類推。這
樣,可使虛擬適應值規範化。保持優良個體適應度的優勢,以獲得更多的複製機會,同時也維持了種羣的多樣性。

(2) 算法流程

NSGA採用的非支配分層方法,可以使好的個體有更大的機會遺傳到下一代;適應度共享策略則使得準Pamto面上的個體均勻分佈,保持了羣體多樣性,克服了超級個體的過度繁殖,防止了早熟收斂。算法流程如圖所示:

(3) 算法缺陷

非支配排序遺傳算法(NSGA)在許多問題上得到了應用。但NSGA仍存在一些問題:

a) 計算複雜度較高,爲O(mN^{3})(m爲目標函數個數,N爲種羣大小),所以當種羣較大時,計算相當耗時。

b) 沒有精英策略;精英策略可以加速算法的執行速度,而且也能在一定程度上確保已經找到的滿意解不被丟失。

c) 需要指定共享半徑\sigma_{share}

2. 帶精英策略的非支配排序的遺傳算法(NSGA-II)

2000年,Deb又提出NSGA的改進算法一帶精英策略的非支配排序遺傳算法(NSGA-II),針對以上的缺陷通過以下三個方面進行了改進:

a) 提出了快速非支配排序法,降低了算法的計算複雜度。由原來的O(mN^{3})降到O(mN^{2}),其中,m爲目標函數個數,N爲種羣大小。

b) 提出了擁擠度和擁擠度比較算子,代替了需要指定共享半徑的適應度共享策略,並在快速排序後的同級比較中作爲勝出標準,使準Pareto域中的個體能擴展到整個Pareto域,並均勻分佈,保持了種羣的多樣性。

c) 引入精英策略,擴大采樣空間。將父代種羣與其產生的子代種羣組合,共同競爭產生下一代種羣,有利於保持父代中的優良個體進入下一代,並通過對種羣中所有個體的分層存放,使得最佳個體不會丟失,迅速提高種羣水平。

(1) 基本原理

快速非支配排序法:

NSGA-II對第一代算法中非支配排序方法進行了改進:對於每個個體 i 都設有以下兩個參數 n(i) 和 S(i),

n(i) 爲在種羣中支配個體 i 的解個體的數量。(別的解支配個體 i 的數量)

S(i) 爲被個體 i 所支配的解個體的集合。(個體 i 支配別的解的集合)

1) 首先,找到種羣中所有 n(i)=0 的個體,將它們存入當前集合F(1);(找到種羣中所有未被其他解支配的個體)

2) 然後對於當前集合 F(1) 中的每個個體 j,考察它所支配的個體集 S(j),將集合 S(j) 中的每個個體 k 的 n(k) 減去1,即支配個體 k 的解個體數減1(因爲支配個體 k 的個體 j 已經存入當前集 F(1) );(對其他解除去被第一層支配的數量,即減一)

3) 如 n(k)-1=0則將個體 k 存入另一個集H。最後,將 F(1) 作爲第一級非支配個體集合,並賦予該集合內個體一個相同的非支配序 i(rank),然後繼續對 H 作上述分級操作並賦予相應的非支配序,直到所有的個體都被分級。其計算複雜度爲O(mN^{2}),m爲目標函數個數,N爲種羣大小。(按照1)、2)的方法完成所有分級)

確定擁擠度:

在原來的NSGA中,我們採用共享函數以確保種羣的多樣性,但這需要由決策者指定共享半徑的值。爲了解決這個問題,我們提出了擁擠度概念:在種羣中的給定點的周圍個體的密度,用 i_{d} 表示,它指出了在個體 i 周圍包含個體 i 本身但不包含其他個體的最小的長方形,如圖所示:

擁擠度比較算子: 

從圖中我們可以看出 i_{d} 值較小時表示該個體周圍比較擁擠。爲了維持種羣的多樣性,我們需要一個比較擁擠度的算予以確保算法能夠收斂到一個均勻分佈的Pareto面上。

由於經過了排序和擁擠度的計算,羣體中每個個體 i 都得到兩個屬性:非支配序 i(rank) 和擁擠度 i_{d},則定義偏序關係\prec _{n}:當滿足條件 i(rank) < i_{d},或滿足 i(rank) = i_{d} 且 i_{d}j_{d}。時,定義i\prec _{n}j,。也就是說:如果兩個個體的非支配排序不同,取排序號較小的個體(分層排序時,先被分離出來的個體);如果兩個個體在同一級,取周圍較不擁擠的個體。

(2) 算法流程

首先,隨機初始化一個父代種羣P(0),並將所有個體按非支配關係排序且指定一個適應度值,如:可以指定適應度值等於其非支配序 i(rank),則1是最佳適應度值。然後,採用選擇、交叉、變異算子產生下一代種羣Q(0),大小爲N。

如圖,首先將第 t 代產生的新種羣Q(t)與父代P(t)合併組成R(t),種羣大小爲2N。然後R(t)。進行非支配排序,產生一系列非支配集 F(t) 並計算擁擠度。由於子代和父代個體都包含在 R(t) 中,則經過非支配排序以後的非支配集 F(1) 中包含的個體是 R(t) 中最好的,所以先將 F(1) 放入新的父代種羣 P(t+1) 中。如果 F(1) 的大小小於N,則繼續向 P(t+1) 中填充下一級非支配集 F(2),直到添加 F(3) 時,種羣的大小超出N,對 F(3) 中的個體進行擁擠度排序(sort(F(3),\prec _{n})),取前N-\left | P(t+1)) \right |個個體,使 P(t+1) 個體數量達到N。然後通過遺傳算子(選擇、交叉、變異)產生新的子代種羣 Q(t+1)。

算法的整體複雜性爲O(mN^{2}),由算法的非支配排序部分決定。


通過介紹非支配排序遺傳算法(NSGA)及其改進算法NSGA-II的基本原理和流程,我們瞭解到NSGA-II解決了NSGA中存在的3個問題:降低了計算複雜度;引入精英策略;採用擁擠度及其比較算子代替了共享半徑。使得NSGA-Ⅱ在處理多目標優化問題上有更好的性能。


參考文獻:

非支配排序遺傳算法(NSGA)的研究與應用

帶精英策略的非支配排序遺傳算法的研究與應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章