多目标Pareto最优解集构造方法(伪代码)
作者:互联网
多目标Pareto最优解集构造方法(伪代码)
- 构造Pareto最优解集的简单方法
- 用庄家法则构造Pareto最优解集
- 用擂台赛法则构造Pareto最优解集
- 用递归方法构造Pareto最优解集
- 用快速排序方法构造Pareto最优解集
- 用改进的快速排序方法构造Pareto最优解集
构造Pareto最优解集的简单方法
算法的时间复杂度为O(N2)
Deb的非支配排序方法
设进化群体为P,同时设置一个构造集P’。算法开始时将第一个个体放入构造集P’中,依次将进化群体P中的个体p取出并放入构造集P‘中,同时将当前取出的p依次与P’中的所有个体进行比较,删除P’中所有被p支配的个体,若个体p被P‘中任意一个个体所支配,则将p中P‘中删除。
- 算法1
P' = find_nondominated_front(P)
P' = {1} //把第一个个体放入P‘中
for each (p in P) and (p not in P')
{
P' = P' + {p}
for each (q in P') and q != p
{
if p dominate q then //如果p支配q
P' = P' - {q}
else if q dominate p then
P' = p' - {p}
}
}
在最坏情况下,即P中所有个体均为非支配个体时,总比较次数:
1+2+3+···+(N-1) = N2/2
每次比较时有r个子目标,时间复杂度为O(rN2)
用排除法构造非支配集
将进化群体Pop中的每个个体X依次与非支配集NDSet(开始时为空)中的个体Y比较,如果X支配Y,说明Y是被支配个体,将Y从NDSet中删除。如果X不被NDSet中任何一个个体所支配,则将X并入NDSet中。当NDSet为空/初始时,直接将X并入NDSet。
- 算法2
NDSet = null; //初始时为空
for each X in Pop
{
dominated_sign = True
if(isEmpty(NDSet)) then //当NDSet为空时
NDSet = NDSet + {X}
else
each Y in NDSet
{
if(X dominate Y) then
NDSet = NDSet - {Y}
else if (Y dominate X) then
dominated_sign = False
}
if (dominated_sign) then
NDSet = NDSet + {X}
}
最坏情况下时间复杂度为O(rN2)。
当非支配集|NDSet|比较小时效率比较高。
算法2的执行效率比算法1高
、若当前比较个体p多次被P’中其他个体支配时,算法1将多次重复执行删除操作
、在执行过程中出现空集的情况,这种情况下,算法2只需要将从进化群体中取出的当前个体放入NDSet中即可
将构造集与非支配集分开,初始时设构造集NDSet1为进化群体Pop,非支配集NDSet为空。将构造集NDSet1中不同个体X依次与其他个体Y比较(包括非支配集中个体),若X支配Y,则将Y从构造集NDSet1中清除;在一轮比较后若X不被任何其他个体支配,则X是非支配的,将X并入非支配集NDSet中。无论在任何时候,NDSet中的个体一定是非支配的。
- 算法3
函数调用:NDSet = find_nondominated_set2(Pop)
NDSet = null
NDSet1 = Pop
while |NDSet1| > 1 do
{
sign = True
X = first(NDSet1) //X为NDSet中第一个个体
NDSet1 = NDSet1 - {X}
for each Y in (NDSet1 or NDSet)
{
if (X dominate Y) then
NDSet1 = NDSet1 - {Y}
else if (Y dominate X) then
sign = False
}
if (sign) then
NDSet = NDSet + {X}
}
NDSet = NDSet + NDSet1
最坏情况下,即当|NDSet|= 1 ,且这个唯一的非支配个体是Pop中最后一个个体,且前面(N-1)个个体不存在支配关系,此时比较次数为N2/2。此外当|NDSet| = N时,比较次数也为N2/2。在最坏情况下的时间复杂度为O(rN2)。
算法3的效率与非支配个体的分布也有很大关系,若非支配个体分布在序列的前面,则算法的效率就高一些。
用庄家法则构造Pareto最优解集
设P为一进化群体,Q为构造集,初始时Q=P,NDSet为非支配集,初始时为空。从Q中任取一个个体,依次与所有其他个体比较,将被该个体所支配的个体从Q中删除,如果该个体没有被其他任何一个个体所支配,则它是非支配的,将它并入非支配集NDSet中,否则也从Q中清除该个体。
- 算法4
函数调用:Function NDs(Pop:population)
Q = Pop
while(isNotEmpty(Q)) do //Q不为空时
{
x in Q, Q = Q - {x} //从Q中取一个个体
x-is-undominated = True
for each y in Q
{
if(x dominate y) then
Q = Q - {y}
else if (y dominate x) then
x-is-undominated = False
}
if(x-is-undominated) then
NDSet = NDSet + {x}
}
个人感觉算法3和算法4差别不大
算法3是从构造集中取出一个个体与构造集和非支配集中所有个体比较
算法4是从构造集中取出一个个体,只与非支配集中个体进行比较
(如果理解不对,烦请指正,我也是刚开始学的小白,谢谢标签:支配,Pareto,dominate,构造方法,sign,解集,个体,算法,NDSet
来源: https://blog.csdn.net/weixin_41458599/article/details/108997250