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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

作业调度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…

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

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

【LeetCode】链表精选12题

目录 快慢指针: 1. 相交链表(简单) 2. 环形链表(简单) 3. 快乐数(简单) 4. 环形链表 II(中等) 5. 删除链表的倒数第 N 个节点(中等) 递归迭…

python去重保留唯一一个值_Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)...

摘要 在进行数据分析时,我们经常需要对DataFrame去重,但有时候也会需要只保留重复值。 这里就简单的介绍一下对于DataFrame去重和取重复值的操作。 创建DataFrame 这里首先创建一个包含一行重复值的DataFrame。2.DataFrame去重,可以选择是否保…

自定义日历控android,Android 一个日历控件的实现小记

先看几张动态的效果图吧!这里主要记录一下在编写日历控件过程中一些主要的点:一、主要功能1、支持农历、节气、常用节假日2、日期范围设置,默认支持的最大日期范围[1900.1~2049.12]3、禁用日期范围设置4、初始化选中单个或多个日期5、单选、多…

android文件读取工具类,Android 下读取Assets Properties操作封装工具类

Android 下读取Assets Properties操作封装工具类发布时间:2018-06-03作者:laosun阅读(2081)为了方便使用,首先创建BaseApplication类,如下所示:import android.app.Application;import android.content.Context;/*** C…

python解压到指定文件夹_在Python中压缩和解压文件

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。 如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件。它们是可以保存许多其他文件,文件夹和子文件夹的压缩内容的特殊文件。这种类型的文件在使用互联网…

android bar布局,Android学习路线(十)如何将Action Bar叠放在你的布局上

默认状况下,action bar出如今activity窗口的顶部,略微减小了activity布局的总空间。若是你想隐藏或者显示action bar,在这堂用户体验的课程中,你能够经过调用htmlFigure 1. Gallerys action bar in overlay mode.android为了不在a…

geant4运行例子_Geant4--一次编译,运行多个Run,极大提升模拟效率

文|梁佐佐应唐光毅博士/后之约,对于Geant4模拟,我们看是否能解决这么一个问题:我现在想模拟探测器不同角度下的响应,每次模拟需要/run/beamOn 100, 可是我真的不想一遍一遍的去http://DetectorConstruction.cc中修改几…

echart实现3d地图_3D飞线效果——让线“飞”起来的秘密

在城市规划、统计、交通等行业,地图可视化已成为最直接也最吸引眼球的一种表达方式。例如人群迁徙、人口流动、OD出行、职住分析、客流来源等众多场景都需要用到飞线效果呈现。2D飞线效果图随着可视化技术的进一步发展,传统的2D飞线效果略显单调&#xf…

ad域管理与维护_在NAS SMB卷上使用VisualSVN Server维护代码库

VisualSVN Server[1] 是 Windows 平台上流行的 SVN 形式的代码管理工具。以下我们将介绍把 NAS SMB 卷作为 VisualSVN 代码库存储中心时会遇到的几个问题以及相应的解决方法。1. 安装错误的解决方法我们以 VisualSVN Server 3.3.1 版本为例,在安装 VisualSVN Server…

电脑文件夹可以分屏的软件_电脑上什么便签软件可以添加音频?

提及便签,很多人都会很自然地想到手机便签。这是因为随着智能手机和移动互联网的发展,现在很多手机上都有了系统自带的便签app。其实,除了手机便签外,还有电脑便签呢!这不,Win7及其以上版本的电脑上还有系统…

jsp form提交到后台中文乱码_JSP与servlet之间的数据传递

【51】Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp;使用request、response对象完成传值,具体实现如下:Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet&#xff0c…

android jni 中jnienv,android JNI中JNIEnv類型和jobject類型的解釋

JNIEXPORT void JNICALL Java_com_jni_demo_JNIDemo_sayHello (JNIEnv *env, jobject obj){cout<}對於這個方法參數中的JNIEnv* env參數的解釋:JNIEnv類型實際上代表了Java環境&#xff0c;通過這個JNIEnv* 指針&#xff0c;就可以對Java端的代碼進行操作。例如&#xff0c;…

yang模型中rpc_领域驱动模型(DDD)设计讲解

一. 什么是领域驱动模型(DDD)&#xff1f;领域驱动模型一种设计思想&#xff0c;我们又称为DDD设计思想。是一种为了解决传统设计思想带来的维护困难&#xff0c;沟通困难和交互困难而产生的一种新的思想。也解决了在部分公司中&#xff0c;一个项目组就是一套服务&#xff0c;…