NSGA-II入门C1

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

参考文献1
参考文献2

白话多目标

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

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

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

  • 我们经常听说 支配与非支配解集 ,那么什么叫做支配,什么叫做非支配呢?还是上面汽车的例子,如果汽车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最优解)

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

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

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


学术多目标

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(mN^3)\),m代表目标数,N表示种群规模大小,当种群数目过多时,其排序过程必将耗费更多时间,降低了搜索效率。再者,NSGA算法没有考虑精英策略,精英策略能提高算法的计算速度,也能将优秀个体保存下来。更为重要的一点是,其共享半径参数是人为设定的,而共享半径设置不合理,将对计算结果产生非常大的影响。

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

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

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

非支配排序

  • 时间复杂度 m 个个体和种群中的其他个体进行支配关系比较,是否支配其他全部个体,复杂度为O(mN);循环进行直到等级1 中的非支配个体全部被搜索到,复杂度为\(O(mN^2)\);最坏的情况下,有N个等 级,每个等级只存在一个解,复杂度为\(O(mN^3)\)
  • 算法流程 NSGA—II排序时需要设定两个参数用\(n_i\)表示种群中所有个体中支配个体i的数目,\(S_i\)表示种群中个体被个体i支配的个体集合。NSGA-II对种群个体进行非支配排序的步骤如下:
    1. 找出种群中非支配解的个体,即\(n_i=0\)的个体,将非支配个体放入集合F1中。
    2. 对于F1中的每个个体,找出集合中每个个体所支配个体集合\(S_i\),对\(S_i\)中的个体l,对\(n_l\)进行减1操作,令\(n_l = n_l-1\) ,若\(n_l\)大小为0,则将此个体存放在集合H中。
    3. 定义集合F1为第一层非支配集合,并为F1中每个个体标记相同的非支配序列\(i_{rank}\)。
    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})\] ,即下图中虚线四边形的长和宽之和。

NSGA-II排序算法

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

NSGA-II算法流程

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

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

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

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

转载于:https://www.cnblogs.com/cloud-ken/p/9741962.html

NSGA-II入门C1相关推荐

  1. 进化计算(六)——NSGA II代码实现(Matlab)

    NSGA II代码实现 代码流程图 Code Main 函数选择 种群初始化 非支配排序 拥挤度计算 二进制锦标赛选择算子 SBX&Poly mutation 精英策略选择 目标函数 参考链接 ...

  2. NSGA II实例讲解

    NSGA II实例讲解 此文章是[1]的文字版,相关视频原链接见参考资料. 假设有一个圆规问题,目标函数为最小的底面积和最小的侧面积. 底面积=πr^2, 侧面积=πrsh 总的目标函数=底面积+侧面 ...

  3. 进化计算(四)——NSGA/NSGA II算法详解

    NSGA/NSGA II算法理论学习  -A fast and elitist multiobjective genetic algorithm NSGA-II阅读笔记 引言 概述 为什么引入NSGA ...

  4. cassandra 入门_Apache Cassandra和Java入门(第一部分)

    cassandra 入门 在此页面上,您将学到足够的知识以开始使用NoSQL Apache Cassandra和Java,包括如何安装,尝试一些基本命令以及下一步要做什么. 要求 要遵循本教程,您应该 ...

  5. Apache Cassandra和Java入门(第一部分)

    在此页面上,您将学到足够的知识来开始使用NoSQL Apache Cassandra和Java,包括如何安装,尝试一些基本命令以及下一步做什么. 要求 要遵循本教程,您应该已经有一个正在运行的Cass ...

  6. iOS小技能:逆向的一般思路及入门工具

    文章目录 前言 I 逆向的一般思路 1.1 iOS逆向工程的作用 1.2 iOS逆向的过程 1.3 工具 1.4 iOS的安全措施 II 入门工具 2.1 自己写按键精灵:Simulate touch ...

  7. MATLAB应用实战系列NSGA-II多目标优化算法原理及应用实例(附MATLAB代码)

    前言 NSGA-Ⅱ是最流行的多目标遗传算法之一,它降低了非劣排序遗传算法的复杂性,具有运行速度快,解集的收敛性好的优点,成为其他多目标优化算法性能的基准. NSGA-Ⅱ算法是 Srinivas 和 D ...

  8. 【规范】万字集大成的HDLFPGA学习和规范

    HDL & FPGA 学习和规范(HDL-&-FPGA- study) p.s 本文 Github 仓库地址,日进步积,本文系小一年时间的不断积累迭代而成,所以是谓集大成者,仍将长期更 ...

  9. 多目标遗传算法及MATLAB代码

    需要求一个比较复杂的矩阵,一般方法解不出来,故尝试用多目标遗传算法(Multiobjective Genetic Algorithm)求解.不是专门做研究遗传算法的,根据自己需求进行了简单学习,并做如 ...

最新文章

  1. 《算法导论》(一)--插入排序与合并排序
  2. 方程组c语言编程,最小二乘解方程组C语言编程.doc
  3. 等于x分之a的平方的导数_清华学霸丨手把手教你导数大题如何骗分(文理通用),家长为孩子收...
  4. 1034 Head of a Gang (30 分) One way that the police finds the head of a gang is to check people‘s pho
  5. WPF中使用流文档灵活地显示内容
  6. C# 读取根目录的json文件中的某个值
  7. vc 通过句柄修改窗口大小_漫画:对象是如何被找到的?句柄 OR 直接指针?
  8. 导览系统定制开发_联联周边游系统源码定制开发平台方案
  9. 对android上下文和窗口的理解
  10. 为何身为程序员的你,不选择开源?
  11. 成功送小米上市的米粉们,反被 P2P 爆雷炸成了灰!
  12. 建立本地rhel5.3的yum源
  13. 用法getline(cin,a)和cin.getline(a,20) 能将空格输出
  14. H264之sps解析分辨率
  15. decimal简单问题
  16. 如何降低IE安全级别
  17. 论软件测试工程师面试套路和暗语灵魂解密
  18. 陈天出席华盛顿大学春季招聘会 | ArcBlock 动态
  19. 常量和常变量(const)
  20. 深度模型框架(持续更新)

热门文章

  1. shell截取小数等
  2. 基于springboot实现高校学生健康档案管理系统
  3. 结合Scikit-learn介绍几种常用的特征选择方法
  4. Windows中几个内存相当的指标
  5. ORACLE-osi分层模型.md
  6. 继承与多态——动手又动脑
  7. unity3d世界坐标系和本地坐标系
  8. getHibernateTemplate()的用法 (转)
  9. JMeter脚本获取变量名、检验字符串值
  10. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 方法