一、多目标优化问题的解

在单目标优化问题中,通常最优解只有一个,而且能用比较简单和常用的数学方法求出其最优解。然而在多目标优化问题中,各个目标之间相互制约,可能使得一个目标性能的改善是以其他目标性能为代价,不可能存在一个使所有目标性能都达到最优的解,所以对于多目标优化问题,其解通常是一个非劣解的集合——Pareto解集

注:非劣解也称为有效解、非支配解、Pareto最优解或Pareto解。

二、Pareto解集

学习NSGA-II,首先要明白什么是Pareto解集。举个例子,想象一下我们想要设计一款电动汽车,它有两个主要目标:

  • 一个很短的百公里加速时间。
  • 最大可能的行驶里程。

汽车公司已经制造了汽车的一些部件,我们作为设计团队,可以改变三个参数:

  • 车轮尺寸。
  • 电机功率。
  • 电池容量。

很明显,这个问题并不是只有一个完美的解决方案,以扩大汽车的续航能力而言,需要更大的电池,这就增加了额外的重量,因此,百公里加速时间就增加了。

假设,下图表示不同汽车可能输出的结果:

每一个点代表一辆带有上述设计参数的参数化汽车,有车轮尺寸、电机功率、电池容量。

所以对于这辆车,第一个点的行驶里程约为600公里,百公里加速需要2.5秒。

而第二个点,有更大的行驶里程,约为650公里,但百公里加速时间也更长,约为4.7秒。

我们的目标是针对定义的目标参数优化系统,在这个系统中,指行驶里程和加速时间,所以,我们希望最小化加速时间,并最大化汽车的行驶里程。

首先,先理解支配的概念,数学解释如下:

对于最小化多目标问题,n个目标分量fi(x),i=1,2...n{f_i}\left( x \right),i = 1,2...nfi​(x),i=1,2...n,任意给定两个决策变量Xa{X_a}Xa​,Xb{X_b}Xb​,如果有以下两个条件同时成立,则称Xa{X_a}Xa​支配Xb{X_b}Xb​。

  1. 任意i∈1,2...ni \in 1,2...ni∈1,2...n,都有fi(Xa)≤fi(Xb){f_i}\left( {{X_a}} \right) \le {f_i}\left( {{X_b}} \right)fi​(Xa​)≤fi​(Xb​)成立。
  2. 存在i∈1,2...ni \in 1,2...ni∈1,2...n,使得fi(Xa)<fi(Xb){f_i}\left( {{X_a}} \right) < {f_i}\left( {{X_b}} \right)fi​(Xa​)<fi​(Xb​)成立。

如果对于一个决策变量,不存在其他决策变量能够支配它,那么就称该决策变量为非支配解。

通俗点讲,假设存在两个目标函数,解A的两个目标值均优于解B,则称解A支配解B。

如图所示,红线相连的点共同组成Pareto前沿,或者说Pareto最优解集,这些解没有被其他解所支配,可以认为这些解就是这个汽车的最优解。

在存在多个Pareto最优解的情况下,如果没有关于问题的更多的信息,那么很难选择哪个解更可取,因此所有的Pareto最优解都可以被认为是同等重要的。由此可知,对于多目标优化问题,最重要的任务是找到尽可能多的关于该优化问题的Pareto最优解。因而,在多目标优化中主要完成以下两个任务:

  • 找到一组尽可能接近Pareto最优域的解。
  • 找到一组尽可能不同的解。

第一个要求算法要保证可靠的收敛性,第二个要求算法保证充足的多样性。即要求能够得到尽可能均匀分布的pareto最优解集,然后根据不同的设计要求和意愿,从中选择最满意的设计结果。

三、介绍

NSGA-II是带精英策略的非支配排序的遗传算法,属于遗传算法的一种改进算法,所以,最好先弄懂遗传算法是什么,不然理解NSGA-II会比较吃力。

NSGA-II是NSGA算法的改进,主要改进了以下三个问题:

  1. 提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了最为优秀的所有个体;
  2. 引进精英策略,保证某些优良的种群个体在进化过程中不会被丢弃,从而提高了优化结果的精度;
  3. 采用拥挤度和拥挤度比较算子,不但克服了NSGA中需要人为指定共享参数的缺陷,而且将其作为种群中个体间的比较标准,使得准Pareto域中的个体能均匀地扩展到整个Pareto域,保证了种群的多样性。

论文:《A fast and elitist multiobjective genetic algorithm: NSGA-II》

四、关键步骤

1、快速非支配排序

多目标优化问题的设计关键在于求取Pareto最优解集。NSGA-II算法中的快速非支配排序是依据个体的非劣解水平对种群分层,其作用是指引搜索向Pareto最优解集方向进行。

在NSGA-II算法中,对于每个解,需要计算两个实体:

  1. 支配计数Np{N_p}Np​。即支配该解的所有解的数量。
  2. 支配解集合Sp{S_p}Sp​。即该解支配的解的集合。

显然,第一层非支配前沿中的所有解的支配计数Np{N_p}Np​都为零。对于每一个Np=0{N_p} = 0Np​=0的解,访问该解集合中的每个成员解,并将成员解的支配计数减一。如果任何成员的支配计数Np{N_p}Np​变为零,将其放在一个单独的列表中。这些单独列表中的成员解属于第二层非支配前沿。重复该过程并确定第三层、第四层非支配前沿,直到所有前沿都确定下来。

对于第二层或者更高层的非支配前沿的每一个解ppp,其支配计数Np{N_p}Np​在减为0之前,最大值可以为N−1N - 1N−1。对于这样的解,会被分配到一个无支配的集合并且不会再被访问到,可以理解为这个解没有支配其他解,属于“最底层”。因为最多有N−1N - 1N−1个这样的解,总的时间复杂度为,因此,O(MN2)O\left( {M{N^2}} \right)O(MN2)整个过程的时间复杂度是有限的。注意,虽然时间复杂度降到了O(MN2)O\left( {M{N^2}} \right)O(MN2),但空间复杂度提升到了O(N2)O\left( {{N^2}} \right)O(N2)。

例如

如图所示,假设工资Salary和身高Height越大越好,那么,很显然,

AAA的支配计数NA=0{N_A} = 0NA​=0,支配解集合SA={C,D}{S_A} = \{ C,D\}SA​={C,D};

BBB的支配计数NB=0{N_B} = 0NB​=0,支配解集合SB={C,D}{S_B} = \{ C,D\}SB​={C,D};

CCC的支配计数NC=2{N_C} = 2NC​=2,支配解集合SC={D}{S_C} = \{ D\}SC​={D};

DDD的支配计数ND=3{N_D} = 3ND​=3,支配解集合SD={}{S_D} = \{ \}SD​={}。

根据排序过程,AAA,BBB会被分配在第一层非支配前沿,CCC是第二层非支配前沿,而DDD是第三层非支配前沿,属于“最底层”。

排序过程伪代码

//快速非支配排序伪代码
for each p in P{Sp = {}np = 0for each q in P{if (p < q){           //如果p支配q    Sp = Sp U {q}  //将q添加到p的支配解集合中}else if (q < p){ //否则如果q支配pnp = np + 1     //p的支配计数加一}}//forif np == 0{              //p属于第一层非支配前沿P_rank = 1F1 = F1 U {p}}//if
}//fori=1                          //初始化前沿计数器
while (Fi != {}){Q = {}                   //用来存储下一个前沿的成员for each p in Fi{for each q in Sp{nq = nq - 1if (nq == 0){ //q属于下一层前沿q_rank = i+1Q = Q U {q}}}}i++Fi = Q
}

2、个体拥挤距离

NSGA算法使用了共享函数方法,通过适当设置相关参数,该方法可以维持种群的多样性。这个参数与选择计算两个个体之间的接近度的距离指标有关。但存在两个难题:

  1. 共享函数法在保持解分布方面的性能在很大程度上取决于所选的值。
  2. 由于每个解决方案必须与群体中的所有其他解决方案进行比较,共享函数方法的整体复杂性是O(N2)O\left( {{N^2}} \right)O(N2)。

而NSGA-II将共享函数方法替换为拥挤比较方法,在一定程度上消除了上述两个困难。新方法不需要任何用户定义的参数来维持群体成员之间的多样性。此外,该方法具有更好的计算复杂度。为了描述这种方法,NSGA-II定义了拥挤度,然后给出了拥挤比较算子。

2.1、拥挤距离

为了估计个体中某个特定解周围的解密度,我们计算该点两侧沿每个目标的两个点的平均距离。这个数量作为使用最近邻点作为顶点形成的长方体周长的估计值,称为拥挤距离。

拥挤距离计算需要根据每个目标函数值按数值大小对种群中个体进行排序。对于每个目标函数,边界解(具有最小和最大函数值的解)被分配一个无限距离值。所有其他中间解都指定了一个距离值,该距离值等于两个相邻解的函数值的绝对归一化差。这种计算在其他目标函数中继续进行,总的拥挤距离为对应于每个目标的拥挤距离的之和。

具体算法如下:

  • 初始时,令idistance=0{i_{distance}} = 0idistance​=0,n∈{1,2....,N}n \in \{ 1,2....,N\}n∈{1,2....,N}。

  • for 每个目标函数fm{f_m}fm​ :

    • 根据该目标函数对该等级的个体进行排序,记fmmax⁡f_m^{\max }fmmax​为个体目标函数值的最大值,fmmin⁡f_m^{\min }fmmin​为个体目标函数值的最小值;
    • 设置排序后两个边界的拥挤距离1distance=∞{1_{distance}} = \infty1distance​=∞和Ndistance=∞{N_{distance}} = \inftyNdistance​=∞;
    • 计算idistance=idistance+∣fm(i+1)−fm(i−1)∣fmmax⁡−fmmin⁡{i_{distance}} = {i_{distance}} + \frac{{\left| {{f_m}\left( {i + 1} \right) - {f_m}\left( {i - 1} \right)} \right|}}{{f_m^{\max } - f_m^{\min }}}idistance​=idistance​+fmmax​−fmmin​∣fm​(i+1)−fm​(i−1)∣​,fm(i){f_m}\left( i \right)fm​(i)表示第iii个体第mmm个目标函数值。(这一步是将每个目标函数下的拥挤距离相加)

对于二目标优化问题,这个拥挤距离就类似于是该个体在目标空间能生成的最大矩形的两个边长之和,如下图所示、

2.2、拥挤比较算子

拥挤比较算子引导算法的选择过程向均匀分布的帕累托最优前沿前进。根据之前的计算,种群中的每个个体都会有两个属性:

  1. 非支配排序决定的非支配序irank{i_{rank}}irank​ ,即第rankrankrank层非支配前沿。
  2. 拥挤距离idistance{i_{distance}}idistance​

根据这两个属性定义出拥挤比较算子,将“≺\prec≺”定义为:

i≺j,ifirank<jrankOR(irank==jrankANDidistan⁡ce>jdistan⁡ce)i \prec j,\quad if \quad {i_{rank}} < {j_{rank}} \quad OR\quad ({i_{rank}} = = {j_{rank}}\quad AND\quad {i_{dis\tan ce}} > {j_{dis\tan ce}})i≺j,ifirank​<jrank​OR(irank​==jrank​ANDidistance​>jdistance​)

注:≺\prec≺ 可以理解为优于,i≺ji \prec ji≺j表示iii优于jjj。

3、精英策略选择

精英策略即保留父代中的优良个体直接进入子代,以防止获得的Pareto最优解丢失。精英策略选择算子首先先将父代Ci{C_i}Ci​和子代Di{D_i}Di​合并为种群Ri{R_i}Ri​(显然,Ri{R_i}Ri​的种群大小是2N2N2N),然后对Ri{R_i}Ri​进行非支配排序,再进行优选,以组成新父代种群Ci+1{C_{i + 1}}Ci+1​。

具体算法如下:

  1. 根据Pareto等级从低到高的顺序(即先第一层,然后第二层…),将整层种群放入新的种群Ci+1{C_{i + 1}}Ci+1​,直到某一层出现该层个体不能全部放入种群Ci+1{C_{i + 1}}Ci+1​的情况;
  2. 将该层个体根据拥挤距离从大到小排列,依次放入种群Ci+1{C_{i + 1}}Ci+1​中,直到种群Ci+1{C_{i + 1}}Ci+1​中填满NNN个个体。

如下图所示。

五、参考

  1. Deb K , Pratap A , Agarwal S , et al. A fast and elitist multiobjective genetic algorithm: NSGA-II[J]. IEEE Transactions on Evolutionary Computation, 2002, 6(2):182-197.
  2. NSGA-II解决多目标优化问题
  3. 多目标优化算法(一)NSGA-Ⅱ(NSGA2)

非支配排序遗传算法NSGA-II学习笔记相关推荐

  1. 非支配排序遗传算法c语言,非支配排序遗传算法(NSGA)的研究与应用

    摘要: 多目标优化问题一直是科学和工程研究领域的难题和热点问题.传统的解决方法在处理大维数,多模态等复杂问题上存在许多不足.为了解决这一问题,国内外研究学者在简单遗传算法的基础上,发展出了多种多目标优 ...

  2. 【多目标优化】2. 非支配排序遗传算法 —(NSGA、NSGA-II)

    [多目标优化]1. 多目标优化的相关基本概念 [多目标优化]2. 非支配排序遗传算法 -(NSGA.NSGA-II) [多目标优化]3. 基于分解的多目标进化算法 -(MOEAD) 1. 非支配排序遗 ...

  3. 非支配排序遗传算法(NSGA,NSGA-II )

    非支配排序遗传算法(NSGA,NSGA-II ) 一.非支配排序遗传算法(NSGA) 1995年,Srinivas和Deb提出了非支配排序遗传算法(Non-dominated Sorting Gene ...

  4. [多目标优化算法]1.NSGA-II——非支配排序遗传算法

    笔者最近在学习有关多目标优化的内容,并对内容进行一些整理.这篇文章算是笔者的一篇个人学习笔记,也希望能对他人提供一定的帮助,若有不足之处,也欢迎指正和建议. 注:本文中所举例子均为最小化问题. 一.多 ...

  5. 【优化调度】基于matlab非支配排序遗传算法求解车辆充电调度优化问题【含Matlab源码 2000期】

    ⛄一.遗传算法简介 由于国内外人民的生活方式和电动汽车主要购买人群的不同,国内外关于车辆充电调度问题研究的侧重点也不尽相同. 我国地大物博,人口众多,交通复杂.主要从以下方面研究: 1.通过经济手段或 ...

  6. MATLAB程序采用非支配排序遗传算法(NSGA2)求解分布式电源选址定容问题

    MATLAB程序采用非支配排序遗传算法(NSGA2)求解分布式电源选址定容问题,可作为一个有用的参考,程序注释明确,算法原理可以自己搜. 现有:6920651507678049浪迹天涯

  7. MATLAB程序采用非支配排序遗传算法(NSGA2)求解分布式电源选址定容问题,可作为一个有用的参考,程序注释明确,算法原理可以自己搜。

    MATLAB程序采用非支配排序遗传算法(NSGA2)求解分布式电源选址定容问题,可作为一个有用的参考,程序注释明确,算法原理可以自己搜. :8620651507678049浪迹天涯

  8. 非支配排序遗传算法c语言,第三代非支配排序遗传算法(NSGA-III)

    第三代非支配遗传算法是针对高维多目标优化计算代价大,难以挑选Pareto解的情况而开发的,基本流程与NSGA-II相似,但选择个体的方法加入了基于参考点的方法,能够有效降低计算代价. NSGA-III ...

  9. 多目标非支配排序遗传算法-NSGA-II(二)

    序 在(一)中我介绍了GA.NSGA以及NSGA-II算法以及他们之间的关系,据完成(一)已经差不多10个月了,当初的愿望实现了吗,事到如今只好祭奠吗?任岁月风干了-,心中不由一首老男孩送给自己.面临 ...

最新文章

  1. MATLAB_图形学_形态学课程_有川字的车牌牌扣出‘川’字以及车牌号码
  2. 模拟实现请求分页虚存页面替换算法_模拟卷二解答
  3. [Cocoa, 医疗]Dicom Image Viewer for iPad
  4. Mercurial和Git有什么区别?
  5. Jquery validate验证表单只验证第一个input元素
  6. 修改 class_带你探索JVM的Class文件结构
  7. Flutter 15: 图解 ListView 不同样式 item 及 Widget 显隐性
  8. ordereddict有序字典
  9. 常用的HTML标签(超文本标记语言)
  10. jpa 动态sql拼接_MyBatis还是JPA?终于有答案了!
  11. 三十五岁后,就不能做软件测试了?
  12. AD9371+ZYNQ结构中JESD204B IP核的AXI_STREAM接口数据结构
  13. c lua mysql 扩展_lua安装及luarocks安装mysql扩展
  14. 初中英语语法(017)-关系代词
  15. 我觉得拍照这丫头狠有天赋
  16. 如何降低研究生硕士论文的查重率
  17. 关于触摸屏的一些硬件知识
  18. 把握节奏,你能做得更好
  19. 梅雪争春未肯降,词客骚人费评章。不是一番寒彻骨,哪得梅花扑鼻香。
  20. 淘金网络Voip网络电话的概述

热门文章

  1. 如何安装WIN10和Ubuntu16.04双系统
  2. 机械迷城MAC下载及攻略
  3. U-boot 顶层Makefile 学习(1)
  4. 安卓手机玩游戏卡顿怎么解决_告别卡顿 打造Android手机的“游戏模式”
  5. 计算机联锁室内设备原理图,项目一 概述-课题1.ppt
  6. (一)ROS系统入门 Getting Started with ROS 以Kinetic为主更新 附课件PPT
  7. Android全球定位系统GPS实时获取位置-刘宇
  8. Python爬虫入门教程【15】:煎蛋网XXOO图片抓取
  9. python机器学习入门
  10. 重来之大学版|社交生活篇——为什么毕业季是分手季?怎么和平分手?分手了还要不要做朋友?分手了怎么挽回?