进化算法每一代都要构造非支配解集,因此构造非支配解集的效率直接影响算法的运行效率。构造非支配解集方法是一项重要的演技内容。
下面为几种常见的构造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(rN2)时间复杂度: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(rN2)其中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进行比较,并将庄家所支配的个体淘汰出局;一轮后,如果庄家未被其

本文探讨了进化算法中非支配解集的构造方法,包括Deb非支配排序、排除法和庄家法。这些方法对算法运行效率有显著影响,其中庄家法在平均复杂度上优于其他两种。详细介绍了每种方法的伪代码及时间复杂度分析。
最低0.47元/天 解锁文章
6937

被折叠的 条评论
为什么被折叠?



