多目标优化算法,非支配的精英策略遗传算法:NSGA-II

时间:2024-04-05 07:04:55

多目标优化算法,非支配的精英策略遗传算法: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)所示。
多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(1)
设置初始种群大小为100,迭代次数为2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。结果如图(2)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(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)所示。
多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(3)
设置初始种群大小为100,迭代次数为2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。结果如图(4)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(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)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(5)
设置初始种群大小为250,迭代次数为2000代,$p_c = 0.9,p_m=1/30,\eta_c =20,\eta_m=20$。结果如图(6)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(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)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(7)
设置初始种群大小为250,迭代次数为2000代,$p_c = 0.9,p_m=1/10,\eta_c =20,\eta_m=20​$。结果如图(8)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(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)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II
设置初始种群大小为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)所示。

多目标优化算法,非支配的精英策略遗传算法:NSGA-II

图(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个问题的传播多样性较好。