进化算法每一代都要构造非支配解集,因此构造非支配解集的效率直接影响算法的运行效率。构造非支配解集方法是一项重要的演技内容。
下面为几种常见的构造pareto解集的方法。
Deb非支配排序方法
进化群体:P 构造集: P’。初始,将P中的第一个个体放入P’。
依次取出P中的个体p放入P’中, 同时当前取出的p与P’中的所有个体进行比较,删除P’中被p支配的个体,若p被P’中个体支配,则将p从P’中删除。
伪代码:
P'=find_nondom_front(P)
P'={1}
for each p in P and p not in P'
P'=P' U {p}
for each q in P' and q!=p
if p dom q: P'=P'-{q}
elif q dom p: P'=P'-p
时 间 复 杂 度 : O ( r N 2 ) 时间复杂度:O(rN^2) 时间复杂度:O(rN2)
排除法
进化群体: Pop 非支配解集: NDSet
将Pop中的每个群体X与NDSet中的个体Y比较(初始为空),若X支配Y, 将Y从NDSet中删除。若X不被NDSet中得个体支配,将X并入NDSet。
当NDSet为空,直接将X放入NDSet中。
伪代码
NDSet=null
for each Y in Pop:
X.dom=T
if NDSet==null:
NDSet=NDSet U {X}
elif X dom Y:
NDSet=NDSet-Y
else if Y dom X:
X.dom=F
if X.dom:
NDSet=NDSet U {X}
时
间
复
杂
度
:
O
(
r
N
2
)
其
中
r
表
示
目
标
个
数
时间复杂度:O(rN^2) 其中r表示目标个数
时间复杂度:O(rN2)其中r表示目标个数
策略2:
将构造集与非支配集合分开,
初始构造NDSet1=Pop, 非支配解集NDSet为空。将构造集NDSet中的每个个体X与其他个体Y比较(包括非支配解集),若X支配Y, 则将Y从NDSet1中删除。在一轮比后,若X不被任何其他个体支配,则X为非支配解,将其并入非支配解集NDSet中。【此种方法,不管何时,NDSet中的解均为非支配解集】
伪代码
NDSet1=Pop, NDSet=null
while Q!=null
sign=T
X=first(NDSet1) ##NDSet中的第一个个体X
for each Y in NDSet1 U NDSet
if X dom Y:
NDSet1=NDSet1-{Y}
elif Y dom X:
sign=F
if sign:
NDSet=NDSet U {X}
NDSet=NDSet+NDSet1
庄家法
特点:每次构造的非支配解集不需要与原来的非支配解集进行比较。
构造集Q中选择一个个体为庄家X(一般为第一个)庄家与构造集中的每个个体y进行比较,并将庄家所支配的个体淘汰出局;一轮后,如果庄家未被其他个体支配,则庄家为非支配个体,否则,庄家也被淘汰出局。依次类推进行下一轮比较。直到构造集为空。
Q=Pop
while Q!=null
X=first(Q) ##选择Q中的第一个个体为庄家X
Q=Q-{X}
X.dom=T
for each Y in Q and X!=Y:
if X dom Y:
Q=Q-{Y}
elif Y dom X:
X.dom=F
if X.dom:
NDSet=NDSet U {X}
时间复杂度分析:
比较过程中存在极端的三种情况:
设种群Pop个体数为N, 其中非支配解个数为m, Q为构造集 初始 Q=Pop
(1)前m-1次比较均为非支配解集, 第m次,清除Q中所有支配个体(N-m)。
时
间
复
杂
度
:
(
N
−
1
)
+
(
N
−
2
)
+
.
.
.
+
(
N
−
m
)
=
(
2
N
−
m
−
1
)
m
/
2
<
N
m
时间复杂度: (N-1)+(N-2)+...+(N-m)=(2N-m-1)m/2<Nm
时间复杂度:(N−1)+(N−2)+...+(N−m)=(2N−m−1)m/2<Nm
(2)前N-m次的个体均为支配个体,未从Q中删除个体,后m次比较每次产生一个非支配解。
时
间
复
杂
度
:
(
N
−
1
)
+
(
N
−
2
)
+
.
.
.
+
(
N
−
m
)
+
(
N
−
m
−
1
)
+
1
=
N
(
N
−
1
)
/
2
时间复杂度: (N-1)+(N-2)+...+(N-m)+(N-m-1)+1=N(N-1)/2
时间复杂度:(N−1)+(N−2)+...+(N−m)+(N−m−1)+1=N(N−1)/2
(3)第一次产生非支配个体,且从Q中 删除N-m个支配集合,在剩下的m-1个个体中,每次产生一个非支配个体。
时
间
复
杂
度
:
(
N
−
1
)
+
(
m
−
2
)
+
(
m
−
3
)
+
.
.
.
+
2
+
1
=
(
N
−
1
)
+
(
m
−
1
)
(
m
−
2
)
/
2
时间复杂度: (N-1)+(m-2)+(m-3)+...+2+1=(N-1)+(m-1)(m-2)/2
时间复杂度:(N−1)+(m−2)+(m−3)+...+2+1=(N−1)+(m−1)(m−2)/2
一般情况下,设进行了k次比较,
m
≤
k
≤
N
m\le k \le N
m≤k≤N 每次比较淘汰一个个体,共淘汰k个个体,其中有m个非支配个体,(k-m)个支配个体,k次比较构造集中清除了k个个体(庄家),其中有k-m个支配个体,m个非支配个体。假设 每次清除(N-k)个支配个体的概率相同,即为(N-k)/k,则k次比较的复杂度为:
(
N
−
1
)
+
(
N
−
2
−
(
N
−
k
)
/
k
)
+
(
N
−
3
−
2
(
N
−
k
)
/
2
)
+
.
.
.
+
(
N
−
k
−
(
k
−
1
)
(
N
−
k
)
/
k
)
=
k
(
N
−
1
)
/
2
+
(
N
−
k
)
/
2
<
N
2
(N-1)+(N-2-(N-k)/k)+(N-3-2(N-k)/2)+...+(N-k-(k-1)(N-k)/k)= k(N-1)/2+(N-k)/2<N^2
(N−1)+(N−2−(N−k)/k)+(N−3−2(N−k)/2)+...+(N−k−(k−1)(N−k)/k)=k(N−1)/2+(N−k)/2<N2
综上平均复杂度为:
(
N
+
m
)
(
N
−
1
)
/
4
+
(
N
−
(
N
−
m
)
/
2
)
/
2
(N+m)(N-1)/4+(N-(N-m)/2)/2
(N+m)(N−1)/4+(N−(N−m)/2)/2
一般,
m
≤
N
/
2
且
(
N
+
m
)
/
2
≤
N
m\le N/2且(N+m)/2\le N
m≤N/2且(N+m)/2≤N,因此,比
O
(
r
N
3
)
和
O
(
r
N
2
)
O(rN^3)和O(rN^2)
O(rN3)和O(rN2)效率高。