【多目標優化演算法】非支配的精英策略遺傳演算法:NSGA-II

IngeTeng發表於2018-12-24

多目標優化演算法,非支配的精英策略遺傳演算法:NSGA-II

1.演算法簡介
  • NSGA-II演算法特點:快速非支配排序演算法、精英保留策略、擁擠度分配策略。

  • 相比於NSGA的優勢:

  1. 排序演算法的時間複雜度 O(MN2)O(MN^2)

  2. 精英保留策略

  3. 無需要共享的引數

2.演算法相關概念
2.1 Pareto optimum

Pareto解又稱非支配解或不受支配解(nondominated solutions):在有多個目標時,由於存在目標之間的衝突和無法比較的現象,一個解在某個目標上是最好的,在其他的目標上可能是最差的。這些在改進任何目標函式的同時,必然會削弱至少一個其他目標函式的解稱為非支配解或Pareto解。一組目標函式最優解的集合稱為Pareto最優集。最優集在空間上形成的曲面稱為Pareto前沿面。一組目標函式最優解的集合稱為Pareto最優集。

2.2 非支配的快速排序

整個種群的大小為P,首先需要計算出種群中的每個個體的pp和被支配個數npn_p和該個體支配解的集合SpS_p

  • 生成npn_pSpS_p​的演算法過程

for each pPp\in P (遍歷種群中的每個個體)

Sp=S_p=\emptyset​

np=0n_p = 0

 for each qPq\in P

  if( p<qp < q )then (如果p能支配q)

   SpS_p =SpS_p \bigcup {p}\{p\}(將q加入到被p支配的解集中)

  else if(​q<pq < p​) then

   np=np+1n_p = n_p +1 (增加p的支配數)

 if ​np=0n_p = 0​ then

  prank=1p_{rank}= 1

  F1=F1{p}F_1=F_1 \bigcup \{p\}

  • 排序演算法過程

i=1i = 1

while FiF_i \neq \emptyset

Q=Q = \emptyset (用來儲存下一個的集合)

 for each pFip \in F_i

  for each qSpq \in S_p (遍歷支配解)

   nq=nq1n_q = n_q -1

   if nq=0n_q = 0 then (q屬於下一個集合)

    qrank=i+1q_{rank}= i + 1

    Q=Q{q}Q = Q \bigcup \{q\}

  i=i+1i = i +1

  Fi=QF_i = Q

2.3 擁擠度分配

我們引入了擁擠距離KaTeX parse error: Expected '}', got 'EOF' at end of input: I[i]_{distance}$來代替使用者定義的共享引數,為了使解在目標空間更加均勻,並且提高了計算複雜度。演算法步驟如下:

crowding-distance-assignment(II)

  1. num=I.nnum = |I|.n,記錄II的數量

  2. for each ii, 設I[i]distance=0I[i]_{distance}= 0

  3. for each objective mm​(對每個目標函式fmf_m​):

  • 根據目標函式對該種群進行個體排序,其中fmmaxf_m^{max}為目標函式fmf_m的最大值,fmminf_m^{min}為最小值
  • 排序後的前邊界I[1]distanceI[1]_{distance}和後便捷I[num]distanceI[num]_{distance}擁擠距離設為\infty
  • for i=2i = 2 to (num1)(num - 1),計算除邊界外所有點 I[i]distance=I[i]distance+(fm(i+1)fm(i1))/(fmmaxfmmin)I[i]_{distance} = I[i]_{distance}+(f_m(i+1)-f_m(i-1))/(f_m^{max}-f_m^{min})

該擁擠距離度,就是使目標能生成最大的矩陣,且不干擾到其他點。

![螢幕快照 2018-12-22 下午4.54.20](/Users/IngeTeng/Desktop/螢幕快照 2018-12-22 下午4.54.20.png)

2.4 精英保留策略

演算法步驟如下:

  1. 將父代種群PiP_i和子代種群CiC_i合併成RiR_i,此時種群數量為2N2N

  2. RiR_i根據Pareto進行排序,根據Pareto的等級,將等級最低的優先放入新的父代種群PiP_i,直到此代放滿既定種群數量N

  3. 在第二步放入排序中,按照擁擠距離從大到小放入到PiP_i

2.5 錦標賽選擇

演算法步驟如下:

  1. 確定每次選擇的個體數量kk,種群總數為NNk<Nk < N

  2. 從種群中隨機選擇kk個個體(每個個體被選中的概率相同),根據每個個體的適應度,選擇適應度值最好的個體進入下一代種群

  3. 重複步驟(2),直到新的種群規模達到原來的總數NN為止

3.演算法實現流程圖
YES
NO
開始
初始化種群
非支配快速排序
選擇,交叉,變異生成子代
進化代數 gen+1
選擇,交叉,變異
父子代整合
非支配快速排序演算法
擁擠距離計算
選擇新的種群父代
gen < maxGen
結束

主體迴圈部分:

1.隨機初始化一個種群P0P_0,對P0P_0進行非支配排序,初始化每個個體的rank值,i=0i=0

2.通過錦標賽法從PiP_i選擇個體,進行交叉和變異,產生新一代種群QiQ_i

3.將PiP_iQiQ_i合併,產生一個結合後的種群RiR_i

4.對RiR_i進行非支配排序,並使用擁擠距離和精英保留策略選出每代的N個個體,組成新一代種群Pi+1P_{i+1}

5.跳轉至2,直至達到預期代數。

4.模擬結果及說明

以下是對ZDT1,ZDT2,ZDT3,ZDT4,ZDT6測試問題的模擬

  • ZDT1

f1(X)=x1f_1(X) = x_1
f2(X)=g(X)[1x1/g(X)]f_2(X) = g(X)[1-\sqrt{x_1/g(X)}]
g(X)=1+9(i=2nxi)/(n1)g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1)

n=30,n=30,
x1[0,1],xi=0x_1\in[0,1],x_i = 0

設定初始種群大小為500,迭代次數為500代,pc=0.9,pm=1/30,ηc=20,ηm=20p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20。結果如圖(1)所示。
在這裡插入圖片描述

圖(1)
設定初始種群大小為100,迭代次數為2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。結果如圖(2)所示。

在這裡插入圖片描述

圖(2)
其中藍色為Pareto最優解,紅色為NSGA-II的值
  • ZDT2

f1(X)=x1f_1(X) = x_1
f2(X)=g(X)[1(x1/g(X))2]f_2(X) = g(X)[1-(x_1/g(X))^2]
g(X)=1+9(i=2nxi)/(n1)g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1)

n=30,n=30,
x1[0,1],xi=0x_1\in[0,1],x_i = 0

設定初始種群大小為500,迭代次數為500代,pc=0.9,pm=1/30,ηc=20,ηm=20p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20。結果如圖(3)所示。
在這裡插入圖片描述

圖(3)
設定初始種群大小為100,迭代次數為2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。結果如圖(4)所示。

在這裡插入圖片描述

圖(4)
其中藍色為Pareto最優解,紅色為NSGA-II的值
* ZDT3

f1(X)=x1f_1(X) = x_1
f2(X)=g(X)[1x1/g(X)x1g(X)sin(10πx1)]f_2(X) = g(X)[1-\sqrt{x_1/g(X)}-{\frac{x_1}{g(X)}}\sin(10\pi x_1)]
g(X)=1+9(i=2nxi)/(n1)g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1)

n=30,n=30,
x1[0,1],xi=0x_1\in[0,1],x_i = 0
設定初始種群大小為250,迭代次數為500代,pc=0.9,pm=1/30,ηc=20,ηm=20p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20​。結果如圖(5)所示。

在這裡插入圖片描述

圖(5)
設定初始種群大小為250,迭代次數為2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。結果如圖(6)所示。

在這裡插入圖片描述

圖(6)
其中藍色為Pareto最優解,紅色為NSGA-II的值
* ZDT4

f1(X)=x1f_1(X) = x_1
f2(X)=g(X)[1x1/g(X)]f_2(X) = g(X)[1-\sqrt{x_1/g(X)}]
g(X)=1+10(n1)+ni=2[xi210cos(4πxi)]g(X) = 1+10(n-1)+\sum_n^i=2[x_i^2-10\cos(4\pi x_i)]

n=10,n=10,
x1[0,1],xi=0x_1\in[0,1],x_i = 0
設定初始種群大小為250,迭代次數為500代,pc=0.9,pm=1/10,ηc=20,ηm=20p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20。結果如圖(7)所示。

在這裡插入圖片描述

圖(7)
設定初始種群大小為250,迭代次數為2000代,$p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20​$。結果如圖(8)所示。

在這裡插入圖片描述

圖(8)
其中藍色為Pareto最優解,紅色為NSGA-II的值
* ZDT6

f1(X)=1exp(4πx1)sin6(6πxi)f_1(X)= 1-exp(-4\pi x_1)\sin^6(6\pi x_i)
f2(X)=g(X)[1(f1(X)/g(X))2]f_2(X)= g(X)[1-(f_1(X)/g(X))^2]
g(X)=1+9[(ni=2xi)/(n1)]0.25g(X) = 1+9[(\sum_n^{i=2}x_i)/(n-1)]^{0.25}

n=10,n=10,
x1[0,1],xi=0x_1\in[0,1],x_i = 0
設定初始種群大小為100,迭代次數為500代,pc=0.9,pm=1/10,ηc=20,ηm=20p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20。結果如圖(9)所示。

在這裡插入圖片描述
設定初始種群大小為100,迭代次數為500代,pc=0.9,pm=1/10,ηc=20,ηm=20p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20。結果如圖(10)所示。

在這裡插入圖片描述

圖(10)
其中藍色為Pareto最優解,紅色為NSGA-II的值

從模擬結果可以得到NSGA-II在測試問題ZDT1、ZDT2、ZDT3甚至是ZDT6都呈現出了不錯的結果,非常接近Pareto-front值,只有在ZDT4問題上表現較差。

Δ\Delta的Mean和Vairance

Problem ZDT1 ZDT2 ZDT3 ZDT4 ZDT6
Mean(500) 0.4569 0.4583 0.6731 0.4972 0.6956
Vairance(500) 0.0010 0.0317 0.0052 0.0083 0.0041
Mean(2000) 0.4954 0.4890 0.6925 0.4977 0.4544
Vairance(2000) 0.0056 0.0013 0.0013 0.0057 0.0031

γ\gamma的Mean和Vairance

Problem ZDT1 ZDT2 ZDT3 ZDT4 ZDT6
Mean(500) 0.0118 0.1000 0.9240 22.4199 0.5100
Vairance(500) 0.0082 0.0033 0.0042 0.5061 0.0380
Mean(2000) 0.0013 0.0011 0.0900 16.7371 0.4400
Vairance(2000) 0.0001 0.0005 0.0003 0.4937 0.0032

根據圖(1)和圖(2),圖(3)與圖(4),圖(5)與圖(6)的對比可以發現,迭代的代數是對最優解結果有一定的影響的,能得到更好的接近Pareto最優值。由圖(7)與圖(8)可以的看出迭代次數對ZDT6的影響不大。在資料表中γ\gamma資料可以得出,在ZDT4問題上效果較差,從Δ\Delta資料可以看出,以上5個問題的傳播多樣性較好。

相關文章