NSGA-II入门C1
NSGA-II入门C1
觉得有用的话,欢迎一起讨论相互学习~Follow Me
白话多目标
多目标中的目标是个瓦特?
多目标即是优化问题中的优化目标在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有如下不同点 :
- 计算复杂度 在NSGA计算中,其排序的复杂程度为\(O(mN^3)\)(m代表目标函数个数,N表示种群规模),而采用NSGA—II算法,其计算复杂程度将为\(O(mN^2)\),计算效率得到了提升。
- 算法中加入了精英策略 其实现思想是:父代个体通过遗传操作产生予代个体后,选择操作选择的个体数N需要从父代和子代个体竞争,从中选出最好的,这样做的目的就是能将最优秀的个体保存下来。
- 相比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对种群个体进行非支配排序的步骤如下:
- 找出种群中非支配解的个体,即\(n_i=0\)的个体,将非支配个体放入集合F1中。
- 对于F1中的每个个体,找出集合中每个个体所支配个体集合\(S_i\),对\(S_i\)中的个体l,对\(n_l\)进行减1操作,令\(n_l = n_l-1\) ,若\(n_l\)大小为0,则将此个体存放在集合H中。
- 定义集合F1为第一层非支配集合,并为F1中每个个体标记相同的非支配序列\(i_{rank}\)。
- 对集合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算法流程-算法收敛停止
- 创造一个初始父代种群 \(P_0\) 使用交叉和变异操作产生子代种群 \(Q_0\)
- 对 \(P_0\) h和 \(Q_0\) 组成的整体 \(R_0\) 进行非支配排序,构造所有不同等级的非支配解集 \(Z_1,Z_2,Z_3 ...\)
- 对分好等级的非支配解集进行拥挤距离排序,根据适应度高低得到前 N 个解,构成下一次迭代的父代种群 \(P_1\)
- 重复上述 3 个步骤,直到结果收敛
NSGA-II入门C1的更多相关文章
- 遗传算法入门C1
遗传算法入门C1 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 遗传算法历史 遗传算法(GA)是从生物进化的角度考虑提出来的方法,19世纪达尔文在大量观察基础上总结了大自然进化规律 ...
- 从NSGA到 NSGA II
NSGA(非支配排序遗传算法).NSGAII(带精英策略的非支配排序的遗传算法),都是基于遗传算法的多目标优化算法,都是基于pareto最优解讨论的多目标优化,遗传算法已经做过笔记,下面介绍paret ...
- 第3章 Spring Boot 入门指南
Part II. 入门指南 如果你刚刚开始使用Spring Boot,这是你的一部分内容! 在这里我们将会回答一些基本的“what?”, “how?” 和 “why?”的问题. 在这里你会找到一个详细 ...
- 优化算法系列-遗传算法(3)——NSGAII学习网址
JMetal https://www.cnblogs.com/denggaoshan/p/6306640.html https://www.cnblogs.com/denggaoshan/p/6308 ...
- css3复杂选择器+内容生成+Css Hack
1.复杂选择器2.内容生成3.多列4.CSS Hack(浏览器兼容性)=======================================1.复杂选择器 1.兄弟选择器 1.特点: 1.通过 ...
- 状态压缩DP--Mondriaan's Dream
题目网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110044#problem/A Description Squares and ...
- Java反射机制剖析(二)-功能以及举例
从<java反射机制剖析(一)>的API我们看到了许多接口和类,我们能够通过这些接口做些什么呢? 从上篇API中我们能看到它能够完成下面的这些功能: 1) 获得类 A. 运 ...
- FPGA/SOPC学习转载
转自小時不識月http://www.cnblogs.com/yuphone/archive/2010/08/27/docs_plan.html 新网址为:http://andrewz.cn [连载计划 ...
- ECNA-A- Abstract Art
题目描述 Arty has been an abstract artist since childhood, and his works have taken on many forms. His l ...
随机推荐
- BZOJ3196二逼平衡树——线段树套平衡树(treap)
此为平衡树系列最后一道:二逼平衡树您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询 ...
- Python中xlrd模块解析
xlrd 导入模块 import xlrd 2.打开指定的excel文件,返回一个data对象 data = xlrd.open_workbook(file) ...
- python中切片的理解
Python中什么可以切片 l Python中符合序列的有序序列都支持切片(slice) l 如:列表,字符,元祖 Python中切片的格式 l 格式:[start : end : step] ...
- require.js基本用法
1.require.js的加载 使用require.js的第一步,是先去官方网站下载最新版本. 下载后,假定把它放在js子目录下面,就可以加载了. 1 <script src="js/ ...
- Gulp 新手使用
Gulp 注意:gulp依赖于nodejs,在安装前要确保已经安装node环境,如为安装查看<windows系统下nodejs安装及环境配置>安装node环境. 1.全局安装 在命令行执行 ...
- python的生成器与迭代器和可迭代对象
来简单的说下python中的生成器和可迭代对象以及迭代器的问题.只是简单地记录一下并不涉及太深入的内容. 首先来说一下什么是生成器,先看下面的代码: #_*_ coding:utf-8 _*_ res ...
- ALLOT流控设备Qos解读
ALLOT流控设备Qos解读 1. QOS 服务质量引擎 对于基于用户定义,QoS引擎根据用户定义进行决策,每个帧是否要: 传输数据帧到网络: 将数据帧存储在缓冲区: 丢掉数据帧. 新AOS改进了Q ...
- luogu5019 [NOIp2018]铺设道路 (贪心)
和NOIp2013 积木大赛一模一样 我在堆一格的时候,我把它尽量地往右去延伸 于是如果对于一个i,a[i-1]<a[i],那i在之前一定只堆过a[i-1]那么多,所以要再堆a[i]-a[i-1 ...
- luogu2282/bzoj1219 历史年份 (dp+hash+二分+线段树)
luogu1415 拆分数列的加强版 先考虑弱化版怎么做 设f[i]表示某一串数,最后一个数的右端点是i时,它的左端点的最大值(也就是说,这一串数的最后一个数尽量小) 那么有$f[j]=max\{i+ ...
- BZOJ3133[Baltic2013]ballmachine
题目描述 https://www.lydsy.com/JudgeOnline/problem.php?id=3133 题解 还是分两个操作来说吧. 先看第一个操作,放球,可以发现,对于祖先节点和后代节 ...