【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)多目标优化系列:MOP_1.多目标优化的相关基本概念MOP_2.非支配排序遗传算法—(NSGA、NSGA-II)MOP_3.基于分解的多目标进化算法—(MOEAD)1.非支配排序遗传算法(NSGA)1995年,Srinivas和Deb提出了非支配排序遗传算法(Non-dominatedSortingGeneticAlgorithms,NSGA)。这是一种基于P…

大家好,又见面了,我是你们的朋友全栈君。


1. 非支配排序遗传算法(NSGA)

1995年,Srinivas和Deb提出了非支配排序遗传算法(Non-dominated Sorting Genetic Algorithms,NSGA)。这是一种基于Pareto最优概念的遗传算法。

(1) 基本原理

NSGA与简单的遗传算法的主要区别在于:该算法在选择算子执行之前根据个体之间的支配关系进行了分层。其选择算子、交叉算子和变异算子与简单遗传算法没有区别。

在选择操作执行之前,种群根据个体之间的支配与非支配关系进行排序:

首先,找出该种群中的所有非支配个体,并赋予他们一个共享的虚拟适应度值。得到第一个非支配最优层;

然后,忽略这组己分层的个体,对种群中的其它个体继续按照支配与非支配关系进行分层,并赋予它们一个新的虚拟适应度值,该值要小于上一层的值,对剩下的个体继续上述操作,直到种群中的所有个体都被分层。

算法根据适应度共享对虚拟适应值重新指定:

比如指定第一层个体的虚拟适应值为1,第二层个体的虚拟适应值应该相应减少,可取为0.9,依此类推。这样,可使虚拟适应值规范化。保持优良个体适应度的优势,以获得更多的复制机会,同时也维持了种群的多样性。

(2) 算法流程

NSGA采用的非支配分层方法,可以使好的个体有更大的机会遗传到下一代;适应度共享策略则使得准Pamto面上的个体均匀分布,保持了群体多样性,克服了超级个体的过度繁殖,防止了早熟收敛。算法流程如图所示:

【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

(3) 算法缺陷

非支配排序遗传算法(NSGA)在许多问题上得到了应用。但NSGA仍存在一些问题:

a) 计算复杂度较高,为O(mN^{3})(m为目标函数个数,N为种群大小),所以当种群较大时,计算相当耗时。

b) 没有精英策略;精英策略可以加速算法的执行速度,而且也能在一定程度上确保已经找到的满意解不被丢失。

c) 需要指定共享半径\sigma_{share}

2. 带精英策略的非支配排序的遗传算法(NSGA-II)

2000年,Deb又提出NSGA的改进算法一带精英策略的非支配排序遗传算法(NSGA-II),针对以上的缺陷通过以下三个方面进行了改进:

a) 提出了快速非支配排序法,降低了算法的计算复杂度。由原来的O(mN^{3})降到O(mN^{2}),其中,m为目标函数个数,N为种群大小。

b) 提出了拥挤度和拥挤度比较算子,代替了需要指定共享半径的适应度共享策略,并在快速排序后的同级比较中作为胜出标准,使准Pareto域中的个体能扩展到整个Pareto域,并均匀分布,保持了种群的多样性。

c) 引入精英策略,扩大采样空间。将父代种群与其产生的子代种群组合,共同竞争产生下一代种群,有利于保持父代中的优良个体进入下一代,并通过对种群中所有个体的分层存放,使得最佳个体不会丢失,迅速提高种群水平。

(1) 基本原理

快速非支配排序法:

NSGA-II对第一代算法中非支配排序方法进行了改进:对于每个个体 i 都设有以下两个参数 n(i) 和 S(i),

n(i) 为在种群中支配个体 i 的解个体的数量。(别的解支配个体 i 的数量)

S(i) 为被个体 i 所支配的解个体的集合。(个体 i 支配别的解的集合)

1) 首先,找到种群中所有 n(i)=0 的个体(种群中所有不被其他个体至配的个体 i),将它们存入当前集合F(1);(找到种群中所有未被其他解支配的个体)

2) 然后对于当前集合 F(1) 中的每个个体 j,考察它所支配的个体集 S(j),将集合 S(j) 中的每个个体 k 的 n(k) 减去1,即支配个体 k 的解个体数减1(因为支配个体 k 的个体 j 已经存入当前集 F(1) );(对其他解除去被第一层支配的数量,即减一)

3) 如 n(k)-1=0则将个体 k 存入另一个集H。最后,将 F(1) 作为第一级非支配个体集合,并赋予该集合内个体一个相同的非支配序 i(rank),然后继续对 H 作上述分级操作并赋予相应的非支配序,直到所有的个体都被分级。其计算复杂度为O(mN^{2}),m为目标函数个数,N为种群大小。(按照1)、2)的方法完成所有分级)

确定拥挤度:

在原来的NSGA中,我们采用共享函数以确保种群的多样性,但这需要由决策者指定共享半径的值。为了解决这个问题,我们提出了拥挤度概念:在种群中的给定点的周围个体的密度,用 i_{d} 表示,它指出了在个体 i 周围包含个体 i 本身但不包含其他个体的长方形(以同一支配层的最近邻点作为顶点的长方形)

如图所示:

【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

拥挤度比较算子: 

从图中我们可以看出 i_{d} 值较小时表示该个体周围比较拥挤。为了维持种群的多样性,我们需要一个比较拥挤度的算予以确保算法能够收敛到一个均匀分布的Pareto面上。

由于经过了排序和拥挤度的计算,群体中每个个体 i 都得到两个属性:非支配序 i(rank) 和拥挤度 i_{d},则定义偏序关系\prec _{n}:当满足条件 i(rank) < i_{d},或满足 i(rank) = i_{d} 且 i_{d}j_{d}。时,定义i\prec _{n}j,。也就是说:如果两个个体的非支配排序不同,取排序号较小的个体(分层排序时,先被分离出来的个体);如果两个个体在同一级,取周围较不拥挤的个体。

(2) 算法流程

【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

首先,随机初始化一个父代种群P(0),并将所有个体按非支配关系排序且指定一个适应度值,如:可以指定适应度值等于其非支配序 i(rank),则1是最佳适应度值。然后,采用选择、交叉、变异算子产生下一代种群Q(0),大小为N。

【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

如图,首先将第 t 代产生的新种群Q(t)与父代P(t)合并组成R(t),种群大小为2N。然后R(t)。进行非支配排序,产生一系列非支配集 F(t) 并计算拥挤度。由于子代和父代个体都包含在 R(t) 中,则经过非支配排序以后的非支配集 F(1) 中包含的个体是 R(t) 中最好的,所以先将 F(1) 放入新的父代种群 P(t+1) 中。如果 F(1) 的大小小于N,则继续向 P(t+1) 中填充下一级非支配集 F(2),直到添加 F(3) 时,种群的大小超出N,对 F(3) 中的个体进行拥挤度排序(sort(F(3),\prec _{n})),取前N-\left | P(t+1)) \right |个个体,使 P(t+1) 个体数量达到N。然后通过遗传算子(选择、交叉、变异)产生新的子代种群 Q(t+1)。

算法的整体复杂性为O(mN^{2}),由算法的非支配排序部分决定。


通过介绍非支配排序遗传算法(NSGA)及其改进算法NSGA-II的基本原理和流程,我们了解到NSGA-II解决了NSGA中存在的3个问题:降低了计算复杂度;引入精英策略;采用拥挤度及其比较算子代替了共享半径。使得NSGA-Ⅱ在处理多目标优化问题上有更好的性能。

NSGA-Ⅱ的matlab程序下载:

1. 使用积分下载路径:Matlab编写多目标优化算法NSGA-Ⅱ的详解以及论文详解

2. 单次付费下载路径:Matlab编写NSGA-2多目标优化算法_非支配排序遗传算法-机器学习文档类资源-CSDN下载

(有读者反映,使用积分下载时,对于没有积分的童鞋一次性买积分费用过高,因此提供单次付费下载路径)


参考文献:

非支配排序遗传算法(NSGA)的研究与应用

带精英策略的非支配排序遗传算法的研究与应用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144493.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • matlab中griddata函数,[转载]matlab中griddata函数应用示例「建议收藏」

    matlab中griddata函数,[转载]matlab中griddata函数应用示例「建议收藏」知道一系列点的坐标如下(1.486,3.059,0.1);(2.121,4.041,0.1);(2.570,3.959,0.1);(3.439,4.396,0.1);(4.505,3.012,0.1);(3.402,1.604,0.1);(2.570,2.065,0.1);(2.150,1.970,0.1);(1.794,3.059,0.2);(2.121,3.615,0.2);(2.570,3….

  • APK签名流程介绍[通俗易懂]

    APK签名流程介绍[通俗易懂]实际上,现在Android开发IDE自带签名功能,但是有时我们还是可能遇到自己签名apk的场景的,比如你有一个未签名的apk,但是你要adbinstall到device上,这时我们在adbinstall之前就必须对该apk进行签名处理才能install成功,这篇文章就简单的介绍下apk签名流程吧。1、生成签名证书签名需要签名证书,签名证书类型实际上是有很多的,如jks、keysto…

  • Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件

    Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件Typora+PicGo+Gitee+坚果云实现Win+Linux+手机端完美Markdown云笔记套件写在前面Typora是什么?PicGo是什么?为什么用Gitee?为什么用坚果云?1.安装Typora2.安装PicGo3.安装nodejs4.安装Gitee插件5.注册并配置Gitee6.配置PicGo的Gitee图床设置7.配置Typora的图床8.手机端查看写在前面关于笔记软件,多年…

  • linux 批处理教程,最全的批处理入门教程,菜鸟必看[通俗易懂]

    linux 批处理教程,最全的批处理入门教程,菜鸟必看[通俗易懂]1.这是一篇技术教程,我会用很简单的文字表达清楚自己的意思,你要你识字就能看懂,就能学到知识。写这篇教程的目的,是让每一个看过这些文字的朋友记住一句话:如果爱可以让事情变的更简单,那么就让它简单吧!看这篇教程的方法,就是慢!慢慢的,如同品一个女人、一杯茗茶,你会发现很多以前就在眼前的东西突然变的很遥远,而有些很遥远的东西却又突然回到了眼前。2.先概述一下批处理是个什么东东。批处理的定义,至今我也没…

  • JavaScript之继承

    JavaScript之继承

    2020年11月19日
  • matlab多重比较lsd法,多重比较法-LSD I 附赠统计学最全思维导图~[通俗易懂]

    matlab多重比较lsd法,多重比较法-LSD I 附赠统计学最全思维导图~[通俗易懂]原标题:多重比较法-LSDI附赠统计学最全思维导图~文末附赠统计学最全干货导图~前面我们讲了方差分析,方差分析主要是用于多组均值比较的,方差分析的结果是多组均值之间是否有显著性差异,但是这个显著性差异是整体的显著性差异,可是我们并不知道具体是哪些组之间有显著性差异。所以就有了我们今天的多重比较,目的就是为了获取具体哪些组之间有显著差异。多重比较法方法有很多种,这篇主要介绍一下比较常用的一种LS…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号