a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)

57c426da061b7bacb9acfde356d0d324.png

小编今天为大家讲解NSGA-II多目标优化算法,提到多目标优化,大家可能第一个就想到NSGA-II算法,今天小编就带领大家解开NSGA-II的神秘面纱。


NSGA-II全称是快速非支配排序遗传算法,这个算法的精髓体现在“快速非支配排序”这7个字上,那么究竟什么是“快速非支配排序”,NSGA-II是如何实现“快速非支配排序”的呢?各位先别急,且听小编慢慢道来,在基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)中,已经讲到,多目标优化问题没有一个所谓的最优解,而是存在一个最优解集。

为了让大家更深入了解NSGA-II算法,小编查阅网上各种大神讲解的资料,终于在知乎上发现一位大神讲解地特别到位,这位大神在知乎上回答的链接如下:

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

小编觉得这位大神在讲解NSGA-II时,真的讲得太nice了,因此小编决定做一次大自然的搬运工,把这位大神的回答搬运过来。小编建议各位边看代码边体会下面的步骤,效果会更好。

NSGA-II在常规遗传算法上的改进,关键步骤就3步。

1)快速非支配排序算子的设计

多目标优化问题的设计关键在于求取Pareto最优解集。NSGA-II算法中的快速非支配排序是根据个体的非劣解水平对种群分层,其作用是指引搜索向Pareto最优解集方向进行。它是一个循环的适应值分级过程:首先找出群体中非支配解集,记为第一非支配层F,将其所有个体赋予非支配序值irank=1(其中irank是个体i的非支配排序值),并从整个种群中除去;然后继续找出余下群体中非支配解集,记为第二非支配排序层F2,个体被赋予非支配序值irank=2;照此进行下去,直到整个种群被分层,同一分层内的个体具有相同的非支配序值irank。

2)个体拥挤距离算子设计

为了能够在具有相同irank的个体内进行选择性排序,NSGA-II提出了个体拥挤距离的概念。个体i的拥挤距离是目标空间上与i相邻的2个个体i+1和i-1之间的距离,其计算步骤为:

a)对同层的个体初始化距离。令L[i]d=0(其中L[i]d表示任意个体i的拥挤距离);

b)对同层的个体按第m个目标函数值升序排列;

c)使得排序边缘上的个体具有选择优势。给定一个大数M,令L[1]d=L[end]d=M;

d)对排序中间的个体,求拥挤距离:

934c12aa381ab5c994dbeeea162f979a.png

(其中:L[i+1]m为第i+1个个体的第m目标函数值,a11eae51f3c2975db9cf8ab95e2cccc2.png85e32c841ff5c2340d9355b868d27eb9.png分别为集合中第m目标函数值的最大值和最小值)

e)对不同的目标函数,重复步骤a)~步骤d)操作,得到个体i的拥挤距离L[i]d,通过优先选择拥挤距离较大的个体,可使计算结果在目标空间比较均匀分布,以维持种群的多样性。

3)精英策略选择算子

精英策略即保留父代中的优良个体直接进入子代,以防止获得的Pareto最优解丢失。精英策略选择算子按3个指标对由父代Ci和子代Di合成的种群Ri进行优选,以组成新的父代种群Ci+1。首先淘汰父代中方案校验标志为不可行的方案按照非支配序值irank从低到高排序,将整层种群依次放入Ci+1,直到放入某一层Fj时出现Ci+1大小超过种群规模限制N的情况;最后,依据Fj中的个体拥挤距离由大到小的顺序继续填充Ci+1直到种群数量达到N时终止

下面这个图片能很好的说明NSGA-II的实现过程

f137db0a14ac53a06c55592bce62b0b5.png


最后附上用NSGA-II求解ZDT1函数的MATLAB代码,ZDT1函数如下:

2eeee19b7797fd4d5e7f34bff87bc512.png

代码来源:http://www.omegaxyz.com/2017/05/04/nsga2matlabzdt1/

代码链接(后台回复“NSGA”提取代码):https://pan.baidu.com/s/1EBUxjF8J262jTScKzIbD2w 

提取码:fk4j 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529141.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux中tags文件能删除吗,Git 详细介绍查看、删除、重命名远程分支和tag

Git 详细介绍查看、删除、重命名远程分支和tag1. 查看远程分支加上-a参数可以查看远程分支,远程分支会用红色表示出来:xiaosiQunar:~/code/qtown-score$ git branch -aFRESH-1606_qscore-20160503* devmasterremotes/origin/20151225-qtown-score-FRESH-1236remotes…

octobercms 执行php代码_PHP7语言执行原理

常用的高级语言有很多种,根据运行的方式不同,大体分为两种:编译型语言和解释型语言。编译是指在应用源程序执行之前,就将程序源代码“翻译”成汇编语言,然后进一步根据软硬件环境编译成目标文件。一般称完成编译工作的…

一般程序句柄多少linux,一个进程能够打开最大文件句柄数设到多大才合适(Linux)...

命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面)。系统默认值1024。对于一般的应用来说(象Apache、系统进程)1024完全足够使用。但是如何象squid、mysql、java等单进程处理大量请求的应用来说就有点捉襟见肘了。如果单个进程打开的文件句柄数量超过了系…

convert.todatetime指定日期格式_JDK1.8新增日期时间类型

如果我们可以跟别人说:“我们在1502643933071见面,别晚了!”那么就再简单不过了。但是我们希望时间与昼夜和四季有关,于是事情就变复杂了。Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类…

linux shell运行脚本命令行参数,shell脚本命令行参数简介

之所以用到命令行参数,关键在于shell脚本需要与运行脚本的人员进行交互。bash shell提供了命令行参数添加在命令后面的数据值)、命令行选项修改命令行为的单字符值)和直接读取键盘输入。1、命令行参数向shell脚本传递数据的最基本方式是使用命令行参数。1)读取参数读…

eclipse linux远程调试工具,使用本地Eclipse IDE调试器与远程项目源(Linux)

我试图找出以下情况的最佳方法。我有几个Java源文件正在使用JNI与一些C源代码进行通信,这些源代码都驻留在Linux机器上。 Java部分在Linux机器上完美地构建和运行(通过JUnit)。 Java类依赖于几个Linux(.so)库。我想在本地计算机(Mac OS X)上运行Eclipse IDE调试器&a…

python下载文件的第三方库_Python常用第三方库(转载)

wxPython 如果你之前是 windows 程序员,用 MFC 或者 WIN32API 开发界面程序,那进入 Python 国度最好的 GUI 选择应该是 wxPython。它是 wxWidgets 的 Python Bind,与 wxWidgets 的开发完美同步,最为重要的一点是它的消息机制与 MF…

linux sybase 自动备份,Linux平台下Sybase数据库备份方法分析.doc

Linux平台下Sybase数据库备份方法分析Linux平台下Sybase数据库备份方法分析摘 要:对于从事信息系统管理的人员来说,掌握数据库的备份方法在工作中尤为重要。当本地数据出错或者磁盘损坏时,可以利用备份的数据恢复数据库系统,从而保…

facebook对话链接_如何应用防错原则,看看 Facebook 和 Gmail 是怎么做的

欢迎来到有言有料,让思考更有张力本文共 3873 字,预计阅读 10 分钟作者|Siddharth Gulati译者|张聿彤本文翻译已获得作者的正式授权(授权截图如下)在用户界面(UI)设计中,重要的是要注意最细微的细节,以使用…

linux 7 定时任务设置,centos7 配置crontab定时任务

1. 启动cron服务# 查看服务状态systemctl status crond# 启动systemctl start crond# 停止systemctl stop crond# 重启systemctl restart crond# 重新加载systemctl reload crond2. 开机自动启动cron服务systemctl start crond.service3. 通过crontab命令管理定时任务crontab命…

模拟灰度传感器循迹的程序_PLC编程,实例讲解西门子PLC模拟量编程

给大伙分享的是关于西门子S7-300PLC模拟量方面的实例,包含了以下几个方面的要点:1、对变送器进行取值,并进行控制2、对模数功能块 FC105 进行调用3、对 AI 模块进行设置4、对 AI 量程块进行选择这个实例, 调试的是一个流量调节回路…

linux mint 17 输入法,LinuxMint17.1 Rebecca中安装设置输入法

LinuxMint14使用了几年一直未更新,突然想去更新一下去发现源已经不支持了,所以就直接安装了最新版本。安装好以后发现还是跟以前一样的毛病,没有中文输入法,直接sudo aptitude install fcitx* 发现仍然不行。运行im-config设定FCI…

python组成不重复的三位数是多少_Python输出由1,2,3,4组成的互不相同且无重复的三位数...

题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 程序源代码 方法1&…

作业调度C语言编写,【作业调度方案】 (C语言代码)

解题思路:如图所示,对于第一组样例输入,按照总工序提供的顺序,对于每个工件的工序从小到大,每次寻找有空闲机器的“空档”插入,就能让总加工时间最短。注意事项:按照约定,最短方案有且只有一种。参考代码:#…

python判断能否组成三角形_python三角形判定怎么做

python三角形判定怎么做?下面给大家带来具体的例子: 相关推荐:《Python视频教程》 例子:a int(input("The length of the side a ")) b int(input("The length of the side b ")) c int(input("The…

文件的记录c语言程序,c语言程序学生籍贯信息记录簿设计.docx

c 语言程序学生籍贯信息记录簿设计学生籍贯信息记录簿课程设计报告书班 级: 方 0909-1 学 号:姓 名: 苑 小 叶 指导教师 : 康 亚 男 石家庄铁道大学四方学院2010年 07月 14日1课程设计报告内容1. 选择题目题目: 学生籍贯信息记录簿设计 2. 内容摘要摘要:学生籍贯信息管理系统是…

如何修改linux的java路径_修改桌面文件默认存储位置的正确方式及注意事项

之前写了篇关于如何修改桌面文件默认存储位置,许多人在修改后出现各种问题,今天重新来讲解一下关于修改桌面文件默认存储位置的正确方式及注意事项。第一步、在E盘下创建一个文件夹,随便取个名字,或者默认为【新建文件夹】&#x…

secp256r1 c语言程序,rust代码阅读 之 libsecp256k1 (1)

在密码学的运算中, 数字通常是非常大的. 以 ECDSA 椭圆曲线为例, 私钥是 256 位的.所以在 libsecp256k1 这个库里, 定义了计算的元素 Field. 其中 n 为 320 位.pub struct Field {pub(crate) n: [u32; 10],pub(crate) magnitude: u32,pub(crate) normalized: bool,}为其实现加法…

python位运算符_详细介绍Python语言中的按位运算符

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下: 按位与 ( bitwise and of x and y ) & 举例: 5&3 1 解释: 101 11 相同位仅为个位1 ,故结果为 1 按位或 ( bitwise or of x and y ) | 举例&…

c语言代码测试电脑性能,【图片】今天写几个性能测试,为什么C语言跑得这么慢呢??【c语言吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼易言版本……跑100000万成绩不如PHP。。。。.版本 2.程序集 程序集1.子程序 _启动子程序, 整数型, , 本子程序在程序启动后最先执行.局部变量 参数, 文本型, , "0".局部变量 to, 整数型.局部变量 fr, 整数型.局部变量 n,…