多目标pareto最优解集构造方法

进化算法每一代都要构造非支配解集,因此构造非支配解集的效率直接影响算法的运行效率。构造非支配解集方法是一项重要的演技内容。
下面为几种常见的构造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 N1+(N2)+...+(Nm)=(2Nm1)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 N1+(N2)+...+(Nm)+Nm1+1=N(N1)/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 N1+(m2)+(m3)+...+2+1=(N1)+(m1)(m2)/2
一般情况下,设进行了k次比较, m ≤ k ≤ N m\le k \le N mkN 每次比较淘汰一个个体,共淘汰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 (N1)+(N2(Nk)/k)+(N32(Nk)/2)+...+(Nk(k1)(Nk)/k)=k(N1)/2+(Nk)/2<N2
综上平均复杂度为:
( N + m ) ( N − 1 ) / 4 + ( N − ( N − m ) / 2 ) / 2 (N+m)(N-1)/4+(N-(N-m)/2)/2 (N+m)(N1)/4+(N(Nm)/2)/2
一般, m ≤ N / 2 且 ( N + m ) / 2 ≤ N m\le N/2且(N+m)/2\le N mN/2N+m/2N,因此,比 O ( r N 3 ) 和 O ( r N 2 ) O(rN^3)和O(rN^2) O(rN3)O(rN2)效率高。

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个 MATLAB 代码示例,用于绘制 Pareto 最优解的散点图: ```matlab % 假设我们有一个包含两个目标的多目标优化问题,解集为 pop costs = [pop.cost]; % 从 pop 中提取成本数据 obj1 = costs(1,:); % 目标1 obj2 = costs(2,:); % 目标2 % 对 obj1 和 -obj2 进行排序 z1 = sort(obj1); z2 = sort(-obj2); % 绘制 Pareto 最优解的散点图 figure; plot(z1, z2, 'r--', z1, z2, 'mp', 'MarkerSize', 6); xlabel('minZ1'); ylabel('maxZ2'); title('Pareto 最优解'); ``` 这个示例假设我们有一个包含两个目标的多目标优化问题,解集为 `pop`。首先,代码从 `pop` 中提取成本数据,并将其分别存储在 `obj1` 和 `obj2` 两个向量中。然后,使用 `sort` 函数对 `obj1` 和 `-obj2` 进行排序,其中 `-obj2` 表示将 `obj2` 向量中的所有元素取相反数再排序,这是因为该 Pareto 图要求 `obj2` 是最大化目标,而 `sort` 函数默认按升序排序。 接着,代码使用 `figure` 函数创建一个新的图形窗口,然后使用 `plot` 函数绘制 Pareto 最优解的散点图。`'r--'` 表示使用红色虚线连接所有的数据点,`'mp'` 表示使用洋红色的菱形标记每一个数据点。`'MarkerSize', 6` 表示数据点的大小为 6 个像素。 最后,使用 `xlabel` 和 `ylabel` 函数添加 X 轴和 Y 轴的标签,使用 `title` 函数添加图表标题。 总之,这段代码可以帮助你绘制 Pareto 最优解的散点图,以便更好地展示多目标优化问题的解集

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值