NSGAII(带精英策略的非支配排序的遗传算法),是基于遗传算法的多目标优化算法,是基于pareto最优解讨论的多目标优化,下面介绍pareto(帕累托)最优解的相关概念。

Paerot支配关系

Pareto最优解定义

多目标优化问题与单目标优化问题有很大差异。当只有一个目标函数时,人们寻找最好的解,这个解优于其他所有解,通常是全局最大或最小,即全局最优解。而当存在多个目标时,由于目标之间存在冲突无法比较,所以很难找到一个解使得所有的目标函数同时最优,也就是说,一个解可能对于某个目标函数是最好的,但对于其他的目标函数却不是最好的,甚至是最差的。因此,对于多目标优化问题,通常存在一个解集,这些解之间就全体目标函数而言是无法比较优劣的,其特点是:无法在改进任何目标函数的同时不削弱至少一个其他目标函数。这种解称作非支配解(nondominated soluitons)或Pareto最优解(Pareto optimal Soluitons),定义如下:

NSGAII算法

NSGA一II算法的基本思想为:首先,随机产生规模为N的初始种群,非支配排序后通过遗传算法的选择、交叉、变异三个基本操作得到第一代子代种群;其次,从第二代开始,将父代种群与子代种群合并,进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群;最后,通过遗传算法的基本操作产生新的子代种群:依此类推,直到满足程序结束的条件。相应的程序流程图如下图所示:

快速非支配排序算法

拥挤度和拥挤度比较算子

拥挤度是指种群中给定个体的周围个体的密度,直观上可表示为个体。周围仅仅包含个体。本身的最大长方形的长、宽之和, 用nd表示。

拥挤度的算法如下:

这里面有些小问题, 拥挤度无穷的设定并不是边界的两端而是一端, 如果是最小问题的话则是最小一端。

其中, 个体的拥挤距离  nd  最终是要除以该层 个体 在该目标函数上的范围(该层个体在该目标函数值上的最大最小值之差)

拥挤度比较算子

非支配排序遗传算法(NSGA)在许多问题上得到了应用,但NSGA仍存在一些问题:
)a计算复杂度较高,为O(mN3)(m为目标函数个数,N为种群大小),所以当种群较大时,计算相当耗时。
b)没有精英策略;精英策略可以加速算法的执行速度,而且也能在一定程度上确保己经找到的满意解不被丢失。
)c需要指定共享半径。

而NSGA一II针对以上的缺陷通过以下三个方面进行了改进:

)a提出了快速非支配排序法,降低了算法的计算复杂度。由原来的O(mN3)降到O(mN2),其中,m为目标函数个数,N为种群大小。
b)提出了拥挤度和拥挤度比较算子,代替了需要指定共享半径的适应度共享策略,并在快速排序后的同级比较中作为胜出标准,使准Paroet域中的个体能扩展到整个Pareto域,并均匀分布,保持了种群的多样性。
)c引入精英策略,扩大采样空间。将父代种群与其产生的子代种群组合,共同竞争产生下一代种群,有利于保持父代中的优良个体进入下一代,并通过对种群中所有个体的分层存放,使得最佳个体不会丢失,迅速提高种群水平。

主体循环部分

(1).随机初始化开始种群P0。并对P0进行非支配排序,初始化每个个体的rank值。

(2). t = 0

(3).通过二进制锦标赛法从Pt选择个体,并进行交叉和变异操作,产生新一代种群Qt

(4).通过合并Pt 和 Qt 产生出组合种群Rt =  PUQt

(5).对Rt进行非支配排序,并通过排挤和精英保留策略选出N个个体,组成新一代种群Pt+1

(6).跳转到步骤3,并循环,直至满足结束条件。

以上内容是结合以下网络上的资料给出的:

http://www.cnblogs.com/bnuvincent/p/5289710.html

https://www.zhihu.com/question/26990498

另外,继续学习推荐参考以下内容:

http://blog.csdn.net/lf8289/article/details/2291466

带精英策略的快速非支配排序遗传算法 NSGA-II 算法的更多相关文章

  1. 多目标遗传算法 ------ NSGA-II (部分源码解析) 非支配排序、分层 rank.c

    /* Rank assignment routine */ # include <stdio.h> # include <stdlib.h> # include <mat ...

  2. 一行代码调用实现带字段选取+条件判断+排序+分页功能的增强ORM框架

    问题:3行代码 PDF.NET是一个开源的数据开发框架,它的特点是简单.轻量.快速,易上手,而且是一个注释完善的国产开发框架,受到不少朋友的欢迎,也在我们公司的项目中多次使用.但是,PDF.NET比起 ...

  3. 程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  4. DART: a fast and accurate RNA-seq mapper with a partitioning strategy DART:使用分区策略的快速准确的RNA-seq映射器

    DART: a fast and accurate RNA-seq mapper with a partitioning strategyDART:使用分区策略的快速准确的RNA-seq映射器 Abs ...

  5. PourOver – 快速筛选和排序大的数据集合

    PourOver 是一个用于对大数据集合进行快速过滤的 JavaScript 库.它可以在60fps下运行,允许您构建数据研究应用和档案,即不必等待一个数据库调用来呈现查询结果. PourOver 基 ...

  6. 程序员带你十天快速入门Python,玩转电脑软件开发(三)

    声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...

  7. 程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  8. 程序员带你十天快速入门Python,玩转电脑软件开发(一)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  9. c++(非递归排序)

    在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差 ...

随机推荐

  1. Geekers团队成立日志

    大家好,作为团队的队长,今天在这里非常荣幸能够发表我们团队的第一篇博客,来宣布我们团队的名字:Geekers! Geek,英文中代表“怪人”,随着时代进步Geek被赋予了新的含义——极客!Steve ...

  2. 请求数据传入(SpringMVC)

    1.    请求处理方法签名 Spring MVC 通过分析处理方法的签名,HTTP请求信息绑定到处理方法的相应人参中. Spring MVC 对控制器处理方法签名的限制是很宽松的,几乎可以按喜欢的任 ...

  3. Golang的panic和recover

    panic 关键字panic的作用是制造一次宕机,宕机就代表程序运行终止,但是已经“生效”的延迟函数仍会执行(即已经压入栈的defer延迟函数,panic之前的). 为什么要制造宕机呢?是因为宕机不容 ...

  4. #Leetcode# 977. Squares of a Sorted Array

    https://leetcode.com/problems/squares-of-a-sorted-array/ Given an array of integers A sorted in non- ...

  5. MySQL乐观锁在分布式场景下的实践

    背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...

  6. 使用kindeditor来替换ecshop的fckeditor编辑器,让ecshop可以批量上传图片

    老杨原创 kindeditor此编辑器可以让ecshop批量上传图片,可以插入代码,可以全屏编辑,可以插入地图.视频,进行更多word操作,设置字体. 步骤一:进入kindeditor的官网,http ...

  7. Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用.

    1. 同事反馈登录最新的oracle12.2 的数据库时登录不上报错: 2. 记得当时查过资料, Oracle 在12.2 增加了客户端连接数据库的加密级别 比较早的oracle客户端比如11.2.0 ...

  8. 封装caffe版的deeplab为库供第三方使用

    1.解决deeplab编译问题 http://m.2cto.com/kf/201612/579545.html

  9. codeforces659B

    Qualifying Contest CodeForces - 659B Very soon Berland will hold a School Team Programming Olympiad. ...

  10. ueditor 使用

    之前在微信上用到富文本编辑器,选用了ueditor 之后又在项目中使用到了,因此打算写下来记录一下. 1  首先去下载ueditor 2  我的是 MVC项目,贴一下:粘贴到Content下 3 然后 ...