【多目标优化】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)的研究与应用

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

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

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

(0)
上一篇 2022年5月19日 下午1:00
下一篇 2022年5月19日 下午1:00


相关推荐

  • React爬坑之路三:Dva

    React爬坑之路三:Dva前两篇写了 react 各种基本操作和主要概念但其实没必要那么复杂直接用框架就好啦这年头前端框架真是一睁眼就多出好几个傻瓜级教程写的不合理的地方请批评指正 React 官网 https reactjs org 菜鸟教程 http www runoob com react react tutorial htmlES6 入门 http es6 ruanyifeng com AntDesign https ant design index cnRedux https www red

    2026年3月18日
    2
  • vfs dcache函数

    vfs dcache函数在 2 6 32 内核中 vfs 的 dcache c 文件中 用 EXPORT SYMBOL 导出了一系列函数 供内核 文件系统程序使用 1 EXPORT SYMBOL d alloc structdentry d alloc structdentry parent conststructq name 根据父目录的 dentry 以及文件本身的 qstr 结构体

    2026年3月26日
    3
  • python之 python 起源、语言特点[通俗易懂]

    python之 python 起源、语言特点[通俗易懂]一、1.1什么是PythonPython是一门优雅而健壮的编程语言,它继承了传统编译语言的强大性和通用性,同时也借鉴了简单脚本和解释语言的易用性。它可以帮你完成工作,而且一段时间以后,你还能看

    2022年7月5日
    24
  • python modbus 实现RTU 通信

    python modbus 实现RTU 通信pythonmodbus tk 实现 RTU 通信下载对应 pip 由于没有硬件设备 采用软件模拟 软件下载地址为安装 vspd exe 用于模拟串口在没有安装前可以看到我们电脑没有对应的串口安装好通过 vspd 添加串口下载安装好开始连接 第一次连接需要激活模拟创建一个 HOLDING REGISTERS 点击左上角 file new 依次创建以下模拟器点击 Display communicatio 开始显示协

    2026年3月18日
    1
  • 免费使用谷歌云服务器一年多少钱_谷歌云服务器永久免费

    免费使用谷歌云服务器一年多少钱_谷歌云服务器永久免费上周自己撸了一年的谷歌云服务器,昨天也帮同事搞了一发。毕竟工作中还是少不了向西方取经。把自己的经验总结一下吧,方便后来之人。说一下前提条件:1.持有外币卡,例有VISA标识、万事达标识、JCB标识的信用卡2.可以上谷歌且有谷歌账号,没有的话自己注册一个。免费申请链接在这:https://cloud.google.com/free/进入申请界面后有一个国家/地区的选项,截止目前没有找到中国的,直接选择了美国即可账户类型选择个人,然后地址直接百度一下美国地址生成器然后找到对应的网站,复制粘贴

    2022年10月5日
    4
  • vmware15最新激活码2021【中文破解版】[通俗易懂]

    (vmware15最新激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月26日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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