进化算法每一代都要构造非支配解集,因此构造非支配解集的效率直接影响算法的运行效率。构造非支配解集方法是一项重要的演技内容。
下面为几种常见的构造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!=pif 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=Tif NDSet==null: NDSet=NDSet U {X}elif X dom Y:NDSet=NDSet-Yelse if Y dom X:X.dom=Fif 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!=nullsign=TX=first(NDSet1)  ##NDSet中的第一个个体Xfor each Y in NDSet1 U NDSetif X dom Y:NDSet1=NDSet1-{Y}elif Y dom X:sign=Fif sign:NDSet=NDSet U {X}
NDSet=NDSet+NDSet1

庄家法

特点:每次构造的非支配解集不需要与原来的非支配解集进行比较。
构造集Q中选择一个个体为庄家X(一般为第一个)庄家与构造集中的每个个体y进行比较,并将庄家所支配的个体淘汰出局;一轮后,如果庄家未被其他个体支配,则庄家为非支配个体,否则,庄家也被淘汰出局。依次类推进行下一轮比较。直到构造集为空。

Q=Pop
while Q!=nullX=first(Q)   ##选择Q中的第一个个体为庄家XQ=Q-{X}X.dom=Tfor each Y in Q and X!=Y:if X dom Y:Q=Q-{Y}elif Y dom X:X.dom=Fif 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)=(2N−m−1)m/2<Nm时间复杂度: (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≤Nm\le k \le Nm≤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<N2(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≤Nm\le N/2且(N+m)/2\le Nm≤N/2且(N+m)/2≤N,因此,比O(rN3)和O(rN2)O(rN^3)和O(rN^2)O(rN3)和O(rN2)效率高。

多目标pareto最优解集构造方法相关推荐

  1. pareto最优解程序_求多目标优化问题Pareto最优解集的方法

    求多目标优化问题 Pareto 最优解集的方法 王海军 ; 宋协武 ; 曹德欣 ; 李苏北 [期刊名称] <大学数学> [年 ( 卷 ), 期] 2008(024)005 [摘要] 主要讨 ...

  2. [11.7日学习记录]多目标优化和帕累托最优解集(未完成)

    目录 一.多目标优化问题MOP 1.1MOP定义 1.2支配和帕累托最优定义 二.求帕累托最优解集 2.1多目标进化算法MOEA 2.2 粒子群优化算法PSO Reference 一.多目标优化问题M ...

  3. 【多目标优化】Pareto最优解很少

    一个随机产生的100BCell群体,其中能有多少是Pareto最优解? 我的答案是很少,少到几乎接近0了,偶尔才有一两个,显然我觉得自己在什么地方搞错了. 我们说BCell a优于BCell b当且仅 ...

  4. pareto最优解程序_NIPS 2018 | 作为多目标优化的多任务学习:寻找帕累托最优解

    原标题:NIPS 2018 | 作为多目标优化的多任务学习:寻找帕累托最优解 选自arXiv 作者:Ozan Sener.Vladlen Koltun 参与:李诗萌.王淑婷 多任务学习本质上是一个多目 ...

  5. pareto最优解程序_作为多目标优化的多任务学习:寻找帕累托最优解

    多任务学习本质上是一个多目标问题,因为不同任务之间可能产生冲突,需要对其进行取舍.本文明确将多任务学习视为多目标优化问题,以寻求帕累托最优解.而经过实验证明,本文提出的方法可以在现实假设下得到帕累托最 ...

  6. Pareto最优解排序

    •1879年,经济学家意大利人维弗雷多·帕雷托(Villefredo Pareto) 提出:社会财富的80%是掌握在20%的人手中,而余下的80%的人只占有20%的财富.渐渐地,这种"关键的 ...

  7. 目标检测——val集的作用

    1 使用val集进行模型验证的核心思想--"没有细节" 在南溪看来,使用val集进行模型验证的核心思想就是"没有细节",让模型无法接触到"试题的细节& ...

  8. python最优解集_python求最优解的集中算法

    优化算法通常用来处理问题最优解的求解--这个问题有多个变量共同决定的,举一个例子比如有这样一张 人员关系表,需要绘制一张SOSO华尔兹(一种socialnetwork,http://tag.soso. ...

  9. 金华职称计算机考试中心,郑金华

    (一)专著 1. 郑金华,邹娟.多目标进化优化. 北京:科学出版社,2017. 2. 郑金华.多目标进化算法及其应用.北京:科学出版社,2007. (二)主要论文 1.Yaru Hu,Jinhua Z ...

最新文章

  1. RuntimeError: Expected object of backend CUDA but got backend CPU for argument #4 'mat1'
  2. lucene源码分析(7)Analyzer分析
  3. 鸟哥的Linux私房菜(基础篇)-第一章、Linux是什么(一.3. Linux的特色)
  4. kafka-topics.sh topic主题crud
  5. 【开源项目】Android开发内置App自动升级
  6. java 多线程 保存txt_一个txt文件,里面存在几万条数据,现用多线程实现数据导入,提高效率,java代码如何实现...
  7. android应用上架到各大应用市场总结
  8. Office 2019快速安装
  9. 读《犹太人教子枕边书》
  10. php中exec的用法,php exec用法详解
  11. 当系统中存在多个浏览器,如何设置IE为自己的默认浏览器
  12. 基于文档注释接口文档生成工具(代码0侵入附源码)
  13. STM32内部参考电压的使用
  14. Redis ZADD命令
  15. 《无法打开包括文件:“Eigen\Dense”:No such file or directory》亲测有效的解决方法
  16. TCP和UDP各自的协议和端口号
  17. Scala Try 与错误处理
  18. 希希的多项式(推递推式)
  19. 【codeforces 794A】Bank Robbery
  20. 安川e7变频器接线_西安安川变频器接线图

热门文章

  1. Javascript 中的神器——Promise
  2. ES6 module 简单整理
  3. springMVC源码学习之:springMVC响应请求的几种方法
  4. Asp.net无刷新调用后台实体类数据并以Json格式返回
  5. Ansible03-管理变量、加密、事实
  6. 机器学习03-神经网络
  7. 喜欢把代码写一行的人_我最喜欢的代码行
  8. git 设置有效目录_如何有效使用Git
  9. mysql中日期判断的函数_MySql判断汉字、日期、数字的函数
  10. STARTUP报错:ORA-00205: error in identifying control file, check alert log for more info