多目标进化算法(二)——非支配排序/NSGA-II
上一节阐述了多目标优化问题及相关的基础知识。并且举例说明了什么是Pareto最优解,也叫非支配解或非劣解。如何比较哪个解优秀是上一节抛出的话题,本节致力于解决这一问题。
目录
基础知识
一个多目标优化问题(MOP)可以被描述如下:
m
i
n
F
(
x
)
=
(
f
1
(
x
)
,
…
,
f
m
(
x
)
)
T
Ω
=
x
ϵ
R
n
∣
h
j
(
x
)
≤
0
,
j
=
1
,
…
,
k
设
x
=
(
x
1
,
…
,
x
n
)
是
决
策
变
量
,
Ω
=
Π
[
l
i
,
u
i
]
⊆
R
n
,
i
=
0
,
.
.
.
,
n
为
决
策
空
间
;
n
为
决
策
变
量
的
个
数
,
l
i
和
u
i
分
别
为
第
i
个
决
策
变
量
的
下
限
和
上
限
。
式
中
有
m
个
目
标
等
待
优
化
,
表
示
为
f
(
x
)
=
(
f
1
(
x
)
,
…
,
f
m
(
x
)
)
;
f
(
x
)
将
决
策
空
间
Ω
映
射
到
目
标
空
间
Π
。
min~~F(x) = (f_1 (x),…,f_m (x))^T\\Ω = {xϵR^n |h_j (x)≤0,j=1,…,k} \\设x=(x_1,…,x_n)是决策变量,Ω=Π[l_i,u_i ]⊆R^n,i=0,...,n为决策空间;\\n为决策变量的个数,l_i和u_i分别为第i个决策变量的下限和上限。\\式中有m个目标等待优化,表示为f(x)=(f_1 (x),…,f_m (x));f(x)将决策空间Ω映射到目标空间Π。
min F(x)=(f1(x),…,fm(x))TΩ=xϵRn∣hj(x)≤0,j=1,…,k设x=(x1,…,xn)是决策变量,Ω=Π[li,ui]⊆Rn,i=0,...,n为决策空间;n为决策变量的个数,li和ui分别为第i个决策变量的下限和上限。式中有m个目标等待优化,表示为f(x)=(f1(x),…,fm(x));f(x)将决策空间Ω映射到目标空间Π。
pareto最优边界(PF)
回顾一下上一节提到的Pareto最优解与Pareto最优解集。若决策空间中没有解能够支配xa,则称xa是一个Pareto最优解。所有的Pareto最优解构成Pareto最优解集(Pareto-optimal set, PS)。
而Pareto最优边界又是什么?实际上就是上节提到的Pareto最优前沿PF。提到这个概念是因为很多定理都和其有关。多目标优化是从决策空间到目标空间的一个映射。PS是决策向量空间的一个子集(也就是可行域中最优的那部分),PF是目标向量空间的一个子集。
定理:在目标空间中,最优解是目标函数的切点,它总是落在搜索区域的边界上。
举例说明:非支配关系和支配区域
简单说明,我们的目标就是找到图中的A,B,C,D,E,F这几个最优解,一般利用非支配排序。需要引入几个概念辅助讲解。
(1)支配区域:对于解C,它的的目标空间向量与目标空间的坐标轴的所围成的区域即为它的支配区域,此区域中的任意解都支配C,如上图A1区域所示。同理,A2区域的所有解都被C所支配。
(2)强非支配和弱非支配:当然还存在一些强非支配(比如解B和C)和弱非支配(比如和解C在图中同横或竖红线的解,图中没有哈)的概念区别,一般用得比较少。
如何构造Pareto最优解集:非支配排序
构造Pareto解集的方法有很多:庄家法,擂台赛法,递归方法以及用快速排序的方法。前面三种方法都比较好理解,而快速排序的方法是目前普遍使用的算法,本节主要对其进行分析。
快速排序构造Pareto最优解集
定义:个体中非支配关系用符号≺表示,X支配Y,表示为Y≺X。如果互不支配,则两个个体是不相关的,用符号≺d表示,X≺dY。
如果不太清楚快速排序可以参考这个blog:十大排序算法及优化 ( C++简洁实现)
提示
特别说明“比x小”的含义:个人喜欢这样来理解,在目标空间中其适应度比x小(在进化算法尤其是遗传算法中,会按照适应度优选),当然也可以理解成它们在目标空间中比x差。简单来说,就是个体处在x的支配区域中。
判断是否存在支配关系需要从每一维目标向量空间进行比较。例如,在上述最小化问题中,J点的f1和f2都大于x点,因此它被x所支配。B点的f1x点,但是f2小于x点,因此两者之前不存在支配关系,值得注意的是这并不代表它们两个都是非支配解,是否是非支配解需要和所有的解进行比较。
简单做个总结
(1) 第一轮比较:随机选择一个个体X作为基准数,使用快排根据支配关系(相关性,X≺dY)进行比较后,即可将种群分成支配(D集合)和非支配(non-dominant,ND集合)的两个子种群。
**(2) 第二轮比较:在第一轮比较的基础上,只用选择非支配的子种群进行排序。**如果X于所有个体都不相关那X必然是非支配解,而其他个体不一定是非支配解。为什么?
因为:从快排排序原理来看,我们仅知道经过第一轮排序后,D集合中的个体一定是被X或者ND集合中的某些个体所支配(从上图和支配区域也可理解)。注意:并不是ND中的所有解都支配D中的解,后面会举例说明。而ND集合中的元素互相之间的关系并不清楚,因此还需要进行比较,如上图解A就支配E和F。
(3) 如上图经过一整轮快速排序后即可知道解之间的支配关系。
举例阐述排序流程
我们假设初始种群为:{X,A,E,F,B,G,H,C,I,J,K,D}。每次以集合第一个元素为基准数进行排序。基准数左边表示“小”的个体。集合中的个体并没有顺序(支配关系)。
第一轮排序:D1集合:{K,J,D} X ND1集合:{A,E,F,B,G,H,C,I}。我们仅知道{K,J,D} 这些个体被其他所支配。X {A,E,F,B,G,H,C,I}之间的支配关系并不清楚。
第二轮排序:首先可知ND1集合中的任何一个个体不被X支配,但是并不代表ND1中不存在支配X的个体(比如以I为基准数,只能得到J为支配解,并且可以发现B,C,G这些个体都是支配I的)。通过X和所有集合ND1中的个体比较后,发现X就是非支配解。然后,我们选取ND1集合中的第一个元素为基准数排序:D2集合:{E,F} A ND2集合:{B,G,H,C,I}。
第三轮排序:和第二轮排序操作类似,先将A和所有ND2中的个体比较。然后,选取ND2集合中的第一个元素为基准数排序:D3集合:{G,H,I} B ND3集合:{C},集合中只有一个元素即可停止。
经过三轮排序实际上Pareto最优解集就找到了,即{A,B,C,X},它们为第一层次非支配个体,从图中也可以看出。在排序的同时实际上D集合也在同时进行排序(操作和上述流程相同),因为最终我们想要得到的种群个体的非支配层次关系。
D集合排序
D1集合:{K,J,D}排序后:{J},K,{D} ;
D2集合:{E,F}排序后:E,{F} ;
D3集合:{G,H,I}排序后:{H,I},G。由于一个集合中存在两个个体且并不知道支配关系,因此需要继续排序:H,{I}。
对于D集合的排序是否正确?
看起来似乎没有什么问题,但是注意相关性并不存在数学的“传递性”的特征(具体可以参照《多目标进化优化》一书),不能这样简单进行排序。
比如J是第几层的非支配解?通过上述比较并不知道。究其原因就是因为上述排序的基准数不同。因此,需要按照上面找非支配解的流程将集合进行整合,重新排序。
注:放在基准数的左边集合为支配解,被基准数所支配,但是不一定被右边集合中的个体所支配(比如在第一轮排序中,左边集合的K并不被右边集合的A支配),不存在传递性。
非支配层次关系
由于我们选择个体是按照非支配层次关系进行优选的,因此,需要按层次进行分类。显而易见,同一层中的个体互不支配。
通过上述比较可知,第一层非支配解集:P1= {A,B,C,X};
继续比较D集合:{K,J,D,E,F,G,H,I},寻找第二层非支配解,请读者自行推导。
第二层非支配解集:P2= {E,F,G,K,D};可以知道排除第一层次个体,它们就是非支配解;
第三层非支配解集:P3= {H,I};
第四层非支配解集:P4= {J};
拓展
下节进行代码实现。有算法基础的同学可能会思考时间复杂度或者说是否存在冗余比较。确实可以优化,田野老师团队提出了改进算法,有兴趣可以阅读相关文献。
注:本文图片摘自《多目标进化优化》一书,其他的排序方法可以查阅此书。