NSGA-II算法特点:快速非支配排序算法、精英保留策略、拥挤度分配策略。
相比于NSGA的优势:
排序算法的时间复杂度 O ( M N 2 ) O(MN^2) O(MN2)
精英保留策略
无需要共享的参数
Pareto解又称非支配解或不受支配解(nondominated solutions):在有多个目标时,由于存在目标之间的冲突和无法比较的现象,一个解在某个目标上是最好的,在其他的目标上可能是最差的。这些在改进任何目标函数的同时,必然会削弱至少一个其他目标函数的解称为非支配解或Pareto解。一组目标函数最优解的集合称为Pareto最优集。最优集在空间上形成的曲面称为Pareto前沿面。一组目标函数最优解的集合称为Pareto最优集。
整个种群的大小为P,首先需要计算出种群中的每个个体的 p p p和被支配个数 n p n_p np和该个体支配解的集合 S p S_p Sp。
for each p ∈ P p\in P p∈P (遍历种群中的每个个体)
S p = ∅ S_p=\emptyset Sp=∅
n p = 0 n_p = 0 np=0
for each q ∈ P q\in P q∈P
if( p < q p < q p<q )then (如果p能支配q)
S p S_p Sp = S p S_p Sp ⋃ \bigcup ⋃ { p } \{p\} {p}(将q加入到被p支配的解集中)
else if( q < p q < p q<p) then
n p = n p + 1 n_p = n_p +1 np=np+1 (增加p的支配数)
if n p = 0 n_p = 0 np=0 then
p r a n k = 1 p_{rank}= 1 prank=1
F 1 = F 1 ⋃ { p } F_1=F_1 \bigcup \{p\} F1=F1⋃{p}
i = 1 i = 1 i=1
while F i ≠ ∅ F_i \neq \emptyset Fi̸=∅
Q = ∅ Q = \emptyset Q=∅ (用来存储下一个的集合)
for each p ∈ F i p \in F_i p∈Fi
for each q ∈ S p q \in S_p q∈Sp (遍历支配解)
n q = n q − 1 n_q = n_q -1 nq=nq−1
if n q = 0 n_q = 0 nq=0 then (q属于下一个集合)
q r a n k = i + 1 q_{rank}= i + 1 qrank=i+1
Q = Q ⋃ { q } Q = Q \bigcup \{q\} Q=Q⋃{q}
i = i + 1 i = i +1 i=i+1
F i = Q F_i = Q Fi=Q
我们引入了拥挤距离KaTeX parse error: Expected '}', got 'EOF' at end of input: I[i]_{distance}$来代替用户定义的共享参数,为了使解在目标空间更加均匀,并且提高了计算复杂度。算法步骤如下:
crowding-distance-assignment( I I I)
n u m = ∣ I ∣ . n num = |I|.n num=∣I∣.n,记录 I I I的数量
for each i i i, 设 I [ i ] d i s t a n c e = 0 I[i]_{distance}= 0 I[i]distance=0
for each objective m m m(对每个目标函数 f m f_m fm):
该拥挤距离度,就是使目标能生成最大的矩阵,且不干扰到其他点。
![屏幕快照 2018-12-22 下午4.54.20](/Users/IngeTeng/Desktop/屏幕快照 2018-12-22 下午4.54.20.png)
算法步骤如下:
将父代种群 P i P_i Pi和子代种群 C i C_i Ci合并成 R i R_i Ri,此时种群数量为 2 N 2N 2N
R i R_i Ri根据Pareto进行排序,根据Pareto的等级,将等级最低的优先放入新的父代种群 P i P_i Pi,直到此代放满既定种群数量N
在第二步放入排序中,按照拥挤距离从大到小放入到 P i P_i Pi
算法步骤如下:
确定每次选择的个体数量 k k k,种群总数为 N N N, k < N k < N k<N
从种群中随机选择 k k k个个体(每个个体被选中的概率相同),根据每个个体的适应度,选择适应度值最好的个体进入下一代种群
重复步骤(2),直到新的种群规模达到原来的总数 N N N为止
主体循环部分:
1.随机初始化一个种群 P 0 P_0 P0,对 P 0 P_0 P0进行非支配排序,初始化每个个体的rank值, i = 0 i=0 i=0。
2.通过锦标赛法从 P i P_i Pi选择个体,进行交叉和变异,产生新一代种群 Q i Q_i Qi。
3.将 P i P_i Pi和 Q i Q_i Qi合并,产生一个结合后的种群 R i R_i Ri。
4.对 R i R_i Ri进行非支配排序,并使用拥挤距离和精英保留策略选出每代的N个个体,组成新一代种群 P i + 1 P_{i+1} Pi+1。
5.跳转至2,直至达到预期代数。
以下是对ZDT1,ZDT2,ZDT3,ZDT4,ZDT6测试问题的仿真
f 1 ( X ) = x 1 f_1(X) = x_1 f1(X)=x1
f 2 ( X ) = g ( X ) [ 1 − x 1 / g ( X ) ] f_2(X) = g(X)[1-\sqrt{x_1/g(X)}] f2(X)=g(X)[1−x1/g(X)]
g ( X ) = 1 + 9 ( ∑ i = 2 n x i ) / ( n − 1 ) g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1) g(X)=1+9(i=2∑nxi)/(n−1)
n = 30 , n=30, n=30,
x 1 ∈ [ 0 , 1 ] , x i = 0 x_1\in[0,1],x_i = 0 x1∈[0,1],xi=0
设置初始种群大小为500,迭代次数为500代, p c = 0.9 , p m = 1 / 30 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20 pc=0.9,pm=1/30,ηc=20,ηm=20。结果如图(1)所示。
f 1 ( X ) = x 1 f_1(X) = x_1 f1(X)=x1
f 2 ( X ) = g ( X ) [ 1 − ( x 1 / g ( X ) ) 2 ] f_2(X) = g(X)[1-(x_1/g(X))^2] f2(X)=g(X)[1−(x1/g(X))2]
g ( X ) = 1 + 9 ( ∑ i = 2 n x i ) / ( n − 1 ) g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1) g(X)=1+9(i=2∑nxi)/(n−1)
n = 30 , n=30, n=30,
x 1 ∈ [ 0 , 1 ] , x i = 0 x_1\in[0,1],x_i = 0 x1∈[0,1],xi=0
设置初始种群大小为500,迭代次数为500代, p c = 0.9 , p m = 1 / 30 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20 pc=0.9,pm=1/30,ηc=20,ηm=20。结果如图(3)所示。
f 1 ( X ) = x 1 f_1(X) = x_1 f1(X)=x1
f 2 ( X ) = g ( X ) [ 1 − x 1 / g ( X ) − x 1 g ( X ) sin ( 10 π x 1 ) ] f_2(X) = g(X)[1-\sqrt{x_1/g(X)}-{\frac{x_1}{g(X)}}\sin(10\pi x_1)] f2(X)=g(X)[1−x1/g(X)−g(X)x1sin(10πx1)]
g ( X ) = 1 + 9 ( ∑ i = 2 n x i ) / ( n − 1 ) g(X) = 1+9(\sum_{i=2}^nx_i)/(n-1) g(X)=1+9(i=2∑nxi)/(n−1)
n = 30 , n=30, n=30,
x 1 ∈ [ 0 , 1 ] , x i = 0 x_1\in[0,1],x_i = 0 x1∈[0,1],xi=0
设置初始种群大小为250,迭代次数为500代, p c = 0.9 , p m = 1 / 30 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20 pc=0.9,pm=1/30,ηc=20,ηm=20。结果如图(5)所示。
f 1 ( X ) = x 1 f_1(X) = x_1 f1(X)=x1
f 2 ( X ) = g ( X ) [ 1 − x 1 / g ( X ) ] f_2(X) = g(X)[1-\sqrt{x_1/g(X)}] f2(X)=g(X)[1−x1/g(X)]
g ( X ) = 1 + 10 ( n − 1 ) + ∑ n i = 2 [ x i 2 − 10 cos ( 4 π x i ) ] g(X) = 1+10(n-1)+\sum_n^i=2[x_i^2-10\cos(4\pi x_i)] g(X)=1+10(n−1)+n∑i=2[xi2−10cos(4πxi)]
n = 10 , n=10, n=10,
x 1 ∈ [ 0 , 1 ] , x i = 0 x_1\in[0,1],x_i = 0 x1∈[0,1],xi=0
设置初始种群大小为250,迭代次数为500代, p c = 0.9 , p m = 1 / 10 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20 pc=0.9,pm=1/10,ηc=20,ηm=20。结果如图(7)所示。
f 1 ( X ) = 1 − e x p ( − 4 π x 1 ) sin 6 ( 6 π x i ) f_1(X)= 1-exp(-4\pi x_1)\sin^6(6\pi x_i) f1(X)=1−exp(−4πx1)sin6(6πxi)
f 2 ( X ) = g ( X ) [ 1 − ( f 1 ( X ) / g ( X ) ) 2 ] f_2(X)= g(X)[1-(f_1(X)/g(X))^2] f2(X)=g(X)[1−(f1(X)/g(X))2]
g ( X ) = 1 + 9 [ ( ∑ n i = 2 x i ) / ( n − 1 ) ] 0.25 g(X) = 1+9[(\sum_n^{i=2}x_i)/(n-1)]^{0.25} g(X)=1+9[(n∑i=2xi)/(n−1)]0.25
n = 10 , n=10, n=10,
x 1 ∈ [ 0 , 1 ] , x i = 0 x_1\in[0,1],x_i = 0 x1∈[0,1],xi=0
设置初始种群大小为100,迭代次数为500代, p c = 0.9 , p m = 1 / 10 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20 pc=0.9,pm=1/10,ηc=20,ηm=20。结果如图(9)所示。
设置初始种群大小为100,迭代次数为500代, p c = 0.9 , p m = 1 / 10 , η c = 20 , η m = 20 p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20 pc=0.9,pm=1/10,ηc=20,ηm=20。结果如图(10)所示。
从仿真结果可以得到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个问题的传播多样性较好。