基于参考点的非支配遗传算法-NSGA-III
Posted 流浪若相惜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于参考点的非支配遗传算法-NSGA-III相关的知识,希望对你有一定的参考价值。
序:漫漫长路,不知归期,但至少还是把小计划实现了!尽管小计划开展一路坎坷,中途也差点放弃,但是最终还是咬牙坚持,并实现了NSGA-III算法。说实话,NSGA-III算法相较NSGA-II难度增加了数倍,理解起来也相对困难,且参考的资料及代码相对较少,建议现阶段非计算机人士在无别人指引的情况下, 短期放弃此算法的研究(😂😂),“敢问路在何方?路在脚下…”。然后再定接下来的小计划,约束条件下的NSGA-III算法以及串联迭代多目标算法的代码复现,实现”伪双层交互“思想的迭代方法(😔这个实现起来🚹)。
服了!写完后全部消失了!我能怎么说?我还保存了,客服说有保存记录但没法回滚,我想问这技术有啥用呢?继续。。。
文章目录
废话不多说了,直接上干货。按照常规操作,先上参考的博客、论文及代码。
参考资料
参考博客
- 遗传算法之NSGA-III原理分析和代码解读
- NSGA3算法及其MATLAB版本实现
- NSGA3理解(NSGA3算法及其MATLAB版本实现)
- 多目标优化算法(四)NSGA3(NSGAIII)论文复现以及matlab和python的代码 (该博客与2基本上一致,应该是一个作者所写,1在解读均一化的时候估计也参考了此作者的思路)
- 余弦距离介绍
- platEMO
- 一起来学演化计算-SBX(Simulated binary crossover)模拟二进制交叉算子详解
参考论文
因参考论文较多,此直接给予所有论文,请点击下载。论文中重要的部分已做了注解和标注。
- Y. Tian, R. Cheng, X.Y. Zhang, and Y.C. Jin, “PlatEMO: A MATLAB platform for evolutionary multi‐objective optimization [educational forum],” IEEE Computational Intelligence Magazine, 2017, 12(4): 73‐87.
2.K. Deb, H. Jain . An Evolutionary Many-Objective Optimization Algorithm Using Reference Point-Based Nondominated Sorting Approach, Part I: Solving Problems With Box Constraints[J]. IEEE Transactions on Evolutionary Computation, 2014, 18(4):577-601. - Y. Tian , X. Xiang , X. Zhang , et al. Sampling Reference Points on the Pareto Fronts of Benchmark Multi-Objective Optimization Problems[C]// 2018 IEEE Congress on Evolutionary Computation (CEC). IEEE, 2018.
- X. Zhang, Y. Tian, R. Cheng, and Y. Jin, “An efficient approach to nondominated sorting for evolutionary multiobjective optimization,” IEEE Trans. Evol. Comput., vol. 19, no. 2, pp. 201–213, Apr. 2015.
- I. Das and J. Dennis, “Normal-boundary intersection: A new method
for generating the Pareto surface in nonlinear multicriteria optimization
problems,” SIAM J. Optimization, vol. 8, no. 3, pp. 631–657, 1998. - K. Deb, R.B. Agrawal, Simulated binary crossover for continuous search space, Complex Systems. 9 (1995) 115–148.
参考代码
注:这里我们仅介绍matlab版本,需要说明的是,K. Deb大神团队并没有给予NSGA-III算法实现的代码,因此,现NSGA-III版本存在较少且不符原文版本,请慎重选择!
主要参考的代码:platEMO以及MOEA-dev两个版本。
EMO现存共性问题及NSGA-III提出
NSGA-II算法面临着EMO共性的问题:
- 在随机选择的目标向量集合中,非支配解的比例随着目标数量的增加而呈指数级增大。
- 在实现种群多样性的时候,采用如NSGA-II拥挤度或者聚类算子等方法存在着较大的计算开销和更高的存储开销(时间和空间复杂度),如在NSGA-II中存储空间增加了 O ( N 2 ) O(N^2) O(N2)
- 难以实现多维度前沿的可视化
- 重组操作的效率
- 权衡面的表示以及决策者的选择
- 高维难以收敛及前沿解集均匀分布问题
前两个问题中的非支配解数量以及种群的多样性问题,可以通过设置大ε-dominated的方法来实现。第四个问题,可以使用交配限制方案或强调近亲本解决方案的特殊重组方案来解决(如SBX交叉方法)。而第三和第五个问题相对来说实现难度比较大。有些代码给予了多个目标函数下Pareto解集的可视化,我个人认为这种展示方式不乏是一种有效方式,但是这种表示方式不能体现多目标之间的权衡关系。如下图所示 (4个目标函数)。
针对第六个问题,已经有研究从提供预设搜索方向和参考点两个方面展开,NSGA-III算法也是从提供预设的参考点的方式,用于解决高维目标以及前沿解集均匀分布问题,避免所获得解集局部最优。
何为参考点?
既然NSGA-III算法是给予预设参考点的方式来处理上述问题的,那么什么是参考点,它又用来做什么呢?
其实这个问题当前我无法很好的回答,问题的答案应该在Das and Dennis那篇文章里,那么,它用来做什么呢?按照NSGA-III文章内容中所述,参考点的目的就是为了获取种群个体与响应参考点之间的映射关系(即垂直距离),进而使得种群超更接近参考点的方向进化,进而事参考点的分布更加均匀。
NSGA-III算法介绍
接下来,步入我们最为核心的部分,NSGA-III算法的介绍。首先,我们需要对比说明一下NSGA-III算法与NSGA-II算法之间的不同。实际上,NSGA-III算法仅在选择Pareto解集的时候采用了基于参考点的方式,而NSGA-II则采用了拥挤度距离的方式来进行筛选(进化理论中也叫环境选择),且拥挤度距离的方式已经不能很好的处理多个目标的问题。
NSGA-III总体实现过程
NSGA-III实现过程,我这里不再单独做图介绍,具体的步骤我们采用论文中的伪代码,然后我对伪代码所要进行的操作转换为比较直白的语言讲解,伪代码如下:
Input:
Z
s
,
Z
a
,
P
t
Z^s,Z^a ,P_t
Zs,Za,Pt, 即有
Z
s
Z^s
Zs个参考点或者提供的期望点
Z
a
Z^a
Za(这里我称之为“偏好”)以及父代
P
t
P_t
Pt;
Output: 新的一代或者子代(进化后的)
P
t
+
1
P_t+1
Pt+1;
- 创建归档存储集合 S t S_t St, i = 1 i=1 i=1表示等级;
- 交叉与变异产生新的群体 Q t Q_t Qt;
- 获取父代与子代集合(即Niching) R t R_t Rt;
- 非支配等级划分 ( F 1 , F 2 , . . . ) (F_1,F_2,...) (F1,F2,...)
- (5-7) 不断将等级划分后的个体,按照等级的高低排序,将低等级(Rank小的)的等级集合依次存入 S t S_t St中,直到 S t S_t St的个数 ∣ S t ∣ |S_t| ∣St∣大于等于种群个数 N N N;
- (8-10) 最后一个前沿假设为 F l F_l Fl, 若 ∣ S t ∣ = N |S_t|=N ∣St∣=N, 则下一迭代初始种群 P t + 1 = S t P_t+1=S_t Pt+1=St; 否则进行基于参考点的选择操作;
- (11-13)令 P t + 1 = ⋃ j = 1 l − 1 F j P_t+1=\\bigcup_j=1^l-1F_j Pt+1=⋃j=1l−1Fj(注:截至到l-1前沿),那么 F l = N − ∣ P t + 1 F_l=N-|P_t+1 Fl=N−∣Pt+1,即l层前沿的个数;
- (14)标准化目标函数并创建参考集(详见 标准化 及 参考点创建 过程);
- (15)创建种群个体与参考点之间的 “映射关系”,其中 π ( s ) \\pi(s) π(s)是距离种群个体最近的参考点, d ( s ) d(\\bf s) d(s)是参考点与种群个体之间的距离;
- 计算小生境参考点的出现次数(这个小生境是针对前l-1前沿的,即 s ∈ S t / F l \\bf s \\in S_t / F_l s∈St/Fl);
- 选择小生境中被选择较少的参考点,并从 F l F_l Fl前沿中寻找 K K K个种群个体(详见: 最后前沿种群个体选择)
注:以下 S t S_t St均是 ≥ N ≥N ≥N
参考点创建
接下来,让我开始正是的了解NSGA-III算法的整个过程。首先,我们说了NSGA-III是基于参考点的进化算法,因此,我们首先应该知道参考点是如何进行创建的。关于参考点的创建我们这里仅给出创建过程,不给予证明过程,具体详见Das and Denni’s文章。
关于创建方法,Y. Tian 大神在《Sampling Reference Points on the Pareto Fronts of
Multi-Objective Optimization Problems》一文中给予了具体的操作步骤,如下:
- 定义一个 M M M维unit simplex(中文不清楚怎么翻译)的参考点集合 s = ( s 1 , s 2 , . . . , s M ) \\bf s=(s_1,s_2,...,s_M) s=(s1,s2,...,sM), 则任一参考点坐标值 s j ∈ 0 H , 1 H , . . . , H H , ∑ j = 1 M s j = 1 (1) s_j \\in \\begin Bmatrix \\frac 0 H,\\frac 1 H,...,\\frac H H\\end Bmatrix,\\sum_j=1^M s_j=1 \\tag 1 sj∈H0,H1,...,HH,j=1∑Msj=1(1)其中, H H H是每个目标上的divisions(分段个数);
- 那么怎么求得参考点的坐标值呢?文章中给出了求解步骤如下
如何理解呢?我们举一个H=5,M=3的例子,解释一下从x-s的创建过程,图解参考下图。 - 首先,构建 M − 1 M-1 M−1维 x \\bf x x的组合,其中 x ∈ 0 H , 1 H , . . . , H + M − 2 H , x \\in \\beginBmatrix\\frac0H, \\frac1H,...,\\fracH+M-2H,\\end Bmatrix x∈H0,基于参考点的非支配遗传算法-NSGA-III