NSGA-II入门

NSGA-II入门NSGA-II入门C1觉得有用的话,欢迎一起讨论相互学习~FollowMe参考文献1参考文献2白话多目标多目标中的目标是个瓦特?多目标即是优化问题中的优化目标在3个及以上,一般这些优化的目标都存在着矛盾,例如:我要买一个又便宜又漂亮又性能好的车的时候,价格,外观,性能这就是一个典型的多目标问题,我们必须在商品的价格,外观和性能上做出取舍,毕竟外观漂亮性能强劲的车型往往意味着…

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

NSGA-II入门

觉得有用的话,欢迎一起讨论相互学习~

NSGA-II入门我的微博我的github我的B站

参考文献1
参考文献2

白话多目标

多目标中的目标是个瓦特?

  • 多目标即是优化问题中的优化目标在2个及以上,一般这些优化的目标都存在着矛盾,例如:我要买一个又便宜又漂亮又性能好的车的时候,价格,外观, 性能 这就是一个典型的多目标问题,我们必须在商品的价格,外观和性能上做出取舍,毕竟外观漂亮性能强劲的车型往往意味着高的价格。

多目标中的支配是个瓦特?

  • 我们经常听说 支配与非支配解集 ,那么什么叫做支配,什么叫做非支配呢?还是上面汽车的例子,如果汽车A价格30万,外观A等,性能A等;汽车B价格40万,外观A-等,性能A-等,就说汽车A支配了汽车B。如果有一辆汽车C价格20万,外观B等,性能B等,相较于汽车A,虽然C的外观和性能都比汽车A要差,但是其价格上比汽车A要低,从价格这个评价标准上来看,汽车C是要优于汽车A的,所以说汽车C和汽车A是属于一个非支配的关系。即 当A所有目标都优于B时,就说A支配了B,否则A和B就是一个非支配的关系 ,而在NSGA-II中,种群中所有不被任何其他解支配的解构成了非支配前沿(Pareto最优解)
    NSGA-II入门

多目标遗传算法与遗传算法的区别-选择的方法不同

多目标遗传算法与遗传算法的联系-交叉变异的方法相同

  • 遗传算法中和多目标遗传算法中最大的不同在于 选择 的过程,遗传算法中通过适应度函数进行种群中个体的选择,而多目标遗传算法中根据 非支配的Rank值和拥挤度进行排序 选择保留的个体。
    • 对于Rank值,首先我们将解集中的 所有不能被任何其他的解支配的解集 (即最厉害最牛的解)挑出来设为Rank0,然后将这些解从解集中排除,考虑剩下所有解中 所有不能被任何其他的解支配的解集 挑出来设为Rank1,…通过支配关系将解集中所有的解进行排序,得到所有解的等级。我们认为 Rank值越小的解越好。
    • 在选择的过程中我们设定 每次迭代种群中个体的数量N是定值 ,而每次挑选时,先挑选表现最好的解–即Rank0的解,接着是Rank1,Rank2,Rank3…,但是我们总会出现 ∑ i = 0 n − 1 R a n k i < N \sum^{n-1}_{i=0}Rank_i<N i=0n1Ranki<N ∑ i = 0 n R a n k i > N \sum^{n}_{i=0}Rank_i>N i=0nRanki>N 的情况,为了判定同一个Rank层的解的好坏,设置 拥挤度 作为同Rank非支配解集中解的评价标准。
    • 遗传算法有自动收敛的性质,所以为了保证解的多样性,我们往往希望同一Rank层中的解能够相互分开,所以设置了 拥挤度 这个概念,认为 解之间距离开的解比解之间距离小的解更好 拥挤距离排序用于保持解的多样性。 每个个体的拥挤距离是通过计算与其相邻的两个个体在每个子目标函数上的距离差之和来求取,即下图中虚线四边形的长和宽之和
      NSGA-II入门
  • 每个父代 P t P_t Pt都会通过 交叉和变异 (其中多目标遗传算法中的交叉和变异与传统遗传算法中的交叉和变异没有区别) 生成子代 Q t Q_t Qt ,父代和子代的所有个体集合称为 R t R_t Rt ,先通过 非支配排序 选出 R t R_t Rt中的合适个体,再通过 拥挤度排序 选出同一Rank层中的个体,使新的种群集合 P t + 1 P_{t+1} Pt+1 的个体数目为N。 这一过程常常会使用以下两种图进行表示:
    NSGA-II入门
    NSGA-II入门

学术多目标

NSGA-II算法的今生前世

在遗传算法在解决多目标优化遇到瓶颈时,许多学者花费了不少时间和精力在多目标优化的遗传算法上,Goldberg首先将Pareto最优解的概念与适应度值概念相关联,即将Pareto非支配排序分层的概念与适应度联系,排序的层次低,则其分层中个体的适应度值较高,使算法能够朝着Pareto最优前沿进化,最终输出Pareto最优解集。在提出此概念后,学者们陆续提出了一系列多目标遗传算法,如SPGA、NPGA、FFGA、NSGA等等。但是最能代表Goldberg思想的算法是基于非支配排序的遗传算法,即NSGA(Non—dominated Sorting Genetic Algorithm)。

科学家Srinivas和Deb在前人研究基础上,于1994年首先提出了非支配排序遗传算法的概念。其算法最主要的思想是 将所有的个体进行分层,并且对每个个体都设置个体虚拟适应度值同一层中的每个个体虚拟适应度值相同,层级数越低,其适应度值越高,遗传到下一代的概率也就越大。为了使得到的结果沿Pareto前沿均匀分布,就需要保证非支配层中个体保持多样性,为了保持非支配层中个体多样性,Srinivas等人采用了共享函数法。

采用非支配排序的遗传算法在多目标优化中得到了广泛应用,但是,随着其使用越广泛,其算法也暴露出了一些缺陷。 首先,NSGA算法的时间复杂度高,为 O ( m N 3 ) O(mN^3) O(mN3),m代表目标数,N表示种群规模大小,当种群数目过多时,其排序过程必将耗费更多时间,降低了搜索效率。再者,NSGA算法没有考虑精英策略,精英策略能提高算法的计算速度,也能将优秀个体保存下来。更为重要的一点是,其共享半径参数是人为设定的,而共享半径设置不合理,将对计算结果产生非常大的影响。

为了克服非支配排序遗传算法的以上弊端,Deb等学者于2000年对NSGA算法进行了改进,提出了 基于快速非支配排序的遗传算法NSGA-II,相比NSGA来说,NSGA-II有如下不同点 :

  1. 计算复杂度 在NSGA计算中,其排序的复杂程度为 O ( m N 3 ) O(mN^3) O(mN3)(m代表目标函数个数,N表示种群规模),而采用NSGA—II算法,其计算复杂程度将为 O ( m N 2 ) O(mN^2) O(mN2),计算效率得到了提升。
  2. 算法中加入了精英策略 其实现思想是:父代个体通过遗传操作产生予代个体后,选择操作选择的个体数N需要从父代和子代个体竞争,从中选出最好的,这样做的目的就是能将最优秀的个体保存下来。
  3. 相比NSGA算法提出的共享半径,NSGA—II采用了拥挤度的概念 在同一非支配层中,通过判断个体周围的拥挤程度,改善同一支配层面的种群多样性,不需要设定比较“敏感”的共享半径参数,对提高算法效率和保持种群多样性上优于NSGA算法。

NSGA-II 该算法求得的 Pareto 最优解分布均匀,收敛性和鲁棒性好,具有良好的优化效果,是求解多目标优化问题的一种新思路

非支配排序

  • 时间复杂度 m 个个体和种群中的其他个体进行支配关系比较,是否支配其他全部个体,复杂度为O(mN);循环进行直到等级1 中的非支配个体全部被搜索到,复杂度为 O ( m N 2 ) O(mN^2) O(mN2);最坏的情况下,有N个等 级,每个等级只存在一个解,复杂度为 O ( m N 3 ) O(mN^3) O(mN3)
  • 算法流程 NSGA—II排序时需要设定两个参数用 n i n_i ni表示种群中所有个体中支配个体i的数目, S i S_i Si表示种群中个体被个体i支配的个体集合。NSGA-II对种群个体进行非支配排序的步骤如下:
    1. 找出种群中非支配解的个体,即 n i = 0 n_i=0 ni=0的个体,将非支配个体放入集合F1中。
    2. 对于F1中的每个个体,找出集合中每个个体所支配个体集合 S i S_i Si,对 S i S_i Si中的个体l,对 n l n_l nl进行减1操作,令 n l = n l − 1 n_l = n_l-1 nl=nl1 ,若 n l n_l nl大小为0,则将此个体存放在集合H中。这个步骤的目的是去掉已经挑选出的前沿中个体的影响,方便对剩下的个体进行排序。
    3. 定义集合F1为第一层非支配集合,并为F1中每个个体标记相同的非支配序列 i r a n k i_{rank} irank
    4. 对集合H中的个体,按照以上步骤1、步骤2和步骤3操作,直至将所有个体分层。

在这里插入图片描述

拥挤度排序

  • 目的 同一层非支配个体集合中,为了保证解的个体能均匀分配在Pareto前沿,就需要使同一层中的非支配个体具有多样性,否则,个体都在某一处“扎堆”,将无法得到Pareto最优解集。NSGA—II采用了拥挤度策略,即计算同一非支配层级中某给定个体周围其他个体的密度。
  • 每个个体的拥挤距离是通过计算与其相邻的两个个体在每个子目标函数上的距离差之和来求取。 D i = ( f i + 1 , 1 − f i − 1 , 1 ) + ( f i − 1 , 2 − f i + 1 , 2 ) D_i=(f_{i+1,1}-f_{i-1},1)+(f_{i-1,2}-f_{i+1,2}) Di=(fi+1,1fi1,1)+(fi1,2fi+1,2) ,即下图中虚线四边形的长和宽之和。
    NSGA-II入门

NSGA-II排序算法

  • 当每个个体拥有这两个属性,就可以通过这两个属性判定任意两个个体的支配关系。当两个体没有处在同一非支配层级时,通过判断 i r a n k i_{rank} irank大小,确定个体优劣, i r a n k i_{rank} irank值小的个体比 i r a n k i_{rank} irank大的个体更优;当两随机个体处于同一非支配层级时,依据个体拥挤度判定个体孰优孰劣,个体拥挤度大的比个体拥挤度小的个体更优

NSGA-II算法流程

NSGA-II算法流程-达到一定进化代数停止

首先种群初始化,通过快速非支配排序、选择、交叉以及变异操作后得到初始种群,种群中个体数为N;将父代种群和子代种群合并,再通过排序、拥挤度计算得出下一代种群个体;得出新一代种群后根据遗传操作继续产生下一代,如此反复,直到达到进化最大代数停止。

NSGA-II入门

NSGA-II算法流程-算法收敛停止

  1. 创造一个初始父代种群 P 0 P_0 P0 使用交叉和变异操作产生子代种群 Q 0 Q_0 Q0
  2. P 0 P_0 P0 h和 Q 0 Q_0 Q0 组成的整体 R 0 R_0 R0 进行非支配排序,构造所有不同等级的非支配解集 Z 1 , Z 2 , Z 3 . . . Z_1,Z_2,Z_3 … Z1,Z2,Z3...
  3. 对分好等级的非支配解集进行拥挤距离排序,根据适应度高低得到前 N 个解,构成下一次迭代的父代种群 P 1 P_1 P1
  4. 重复上述 3 个步骤,直到结果收敛

NSGA-II入门

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一款能自动生成报表的软件,工作秒完成!「建议收藏」

    一款能自动生成报表的软件,工作秒完成!「建议收藏」报表软件是企业管理的基本措施和途径,是企业的基本业务要求和实施 BI战略的基础。报表可以帮助企业访问、格式化数据,并把数据信息以可靠和安全的方式呈现给使用者,深入洞察企业运营状况,是企业发

    2022年8月1日
    3
  • lammps教程:薄膜渗透模拟(3)–不同孔隙率对过滤效果的影响

    lammps教程:薄膜渗透模拟(3)–不同孔隙率对过滤效果的影响本文是薄膜渗透过滤的最后一篇文章:不同孔隙率薄膜建模。孔隙或空位缺陷的建模原理比较简单:删除一定数量的原子就可以。lammps自带delete_atoms可以随机删除一定比例的原子,如果对孔隙或空位的形状、尺寸等有特殊需求,需要用编程的方法删除原子。delete_atomsporosity命令可随时产生设定比例的原子,如删除50%的原子:delete_atomsporositymembrane0.5482793membrane为原子组0.5为删除原子的比例482793为随机数种子

    2022年9月3日
    1
  • chip seq实验原理及步骤_思科真机实验环境搭建

    chip seq实验原理及步骤_思科真机实验环境搭建实验内容通过实验环境学习了解SR-PCE。xrv_7作为PCE,计算PE1到PE2的路径。网络中IP设置,metric值与之前的实验一致。拓扑图配置流程:配置SRGB在IGP(is-is)中使能segmentrouting和NodeID修改IGP和TE的链路metric配置PCE我们这次主要关注配置PCE的过程。前面的配置可以参考:SR-TEPolicy(思科)—-explicitpath实验SR-TEPolicy(思科)—-dynamicpath实验P

    2022年9月7日
    0
  • PXE分发安装CentOS6.5

    PXE分发安装CentOS6.5

    2021年9月1日
    53
  • 机械振动论文带有simulink分析的_matlab振动仿真实例

    机械振动论文带有simulink分析的_matlab振动仿真实例1、内容简介1、汽车传动系统的力学模型的讨论2、SIMULINK介绍3、(激励源分析并建立相应的SIMULINK模块)包括发动机动力源模型,行驶工况等4、分析扭振特性5、提出改进手段并比较改进前后系统扭振响应340-可以交流、咨询、答疑2、内容说明汽车动力传动系统是一个具有多自由度的、连续的、有阻尼系统。传动系统的振动主要有横向振动、扭转振动、纵向振动。并且汽车传动系统的扭转振动是一个非常重要的振动形式。当汽车制动、起步、换档时,这些非稳定工况下汽车传动系由于受到非周期的冲击性干扰力而产生的振动。当汽车正

    2022年10月15日
    0
  • document.documentElement.clientWidth

    document.documentElement.clientWidth关于获取各种浏览器可见窗口大小的一点点研究functiongetInfo(){vars=””;s=”网页可见区域宽:”document.body.clientWidth;s=”网页可见区域高:”document.body.clientHeight;s=”网页可见区域宽:”document.body.offsetWidth”(包括边线和滚动

    2022年7月22日
    11

发表回复

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

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