NSGA-II 非支配排序遗传算法
1、算法简介
在实际问题中大都具有多个目标且需要同时满足,即在同一问题模型中同时存在几个非线性目标,而这些目标函数需要同时进行优化处理,并且这些目标又往往是互相冲突的,称这类问题称为多目标规划问题。
NSGA-Ⅱ算法,即带有精英保留策略的快速非支配多目标优化算法,是一种基于Pareto最优解的多目标优化算法。
1.1、相关知识点
推荐入门视频:https://www.bilibili.com/video/BV1DA4y197JQ?share_source=copy_web
支配(Dominance ) :在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p的所有目标都不比q差那么称个体p支配个体q
序值(Rank):如果p支配q,那么p的序值比q低;如果p和q互不支配,那么p和q有相同的序值
拥挤距离(Crowding Distance):表示个体之间的拥挤程度,测量相同序值个体之间的距离。
2、算法描述
2.1、GA 对比 NSGA-II
*
![请添加图片描述](https://img-blog.csdnimg.cn/d30279e9adb140789d383bb90826f548.jpeg)
![请添加图片描述](https://img-blog.csdnimg.cn/65270335ba0e4d9f96ea4826a4b279b1.png)
如上图所示,可以看出:GA中的 “计算适应度” 对应于NSGA-II中的“快速非支配排序 + 拥挤度计算”
2.2、快速非支配排序
支配(Dominance ) :在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p的所有目标都不比q差那么称个体p支配个体q
序值(Rank):如果p支配q,那么p的序值比q低;如果p和q互不支配,那么p和q有相同的序值(rank)
如上图,一般假设坐标轴负方向为好的方向:
- 那么A支配C,并且C的rank比A低;
- AB互不支配,所以AB有相同的rank;
在这里AB的rank为1,可以理解为AB是第一梯队的解。
所谓的快速非支配排序,就是按照rank的值进行升序排列,那么问题来了,rank值相同的个体又该怎么排序呢?
答案是:拥挤距离
2.3、拥挤距离
我们先来思考一个问题:生成新一代种群的过程中,我们是否需要对每个个体都计算拥挤距离?
-
我们排序的目的是:排出来一个序列,取序列的前N个优秀的个体成为新一代种群
-
假如如上图所示,F1为 rank = 1 的个体的集合,F2 为rank = 2 的个体的集合,N为F3中某个位置的虚线
-
我们可以得出一个结论:F1和F2一定是新一代种群的一部分,而F3需要淘汰一部分
那么这个问题的答案就是:我们只需要对F3进行拥挤距离排序就好了
先来看看什么是拥挤距离:
拥挤距离(Crowding Distance):表示个体之间的拥挤程度,测量相同序值个体之间的距离。
一种计算方式为该个体在目标空间所能生成的最大的矩形(该矩形不能触碰目标空间其他的点)的边长之和,如下图
注:还有很多其他计算方式
2.4、算法核心–生成下一代策略
1.首先将父代种群 P t P_t Pt和子代种群 Q t Q_t Qt合成种群 R t R_t Rt
2.根据以下规则从种群
R
t
R_t
Rt 生成新的父代种群
P
t
+
1
P_{t+1}
Pt+1
①根据Pareto等级从低到高的顺序,将整层种群放入父代种群
P
t
+
1
P_{t+1}
Pt+1 ,直到某一层该层个体不能全部放入父代种群
P
t
+
1
P_{t+1}
Pt+1
②将该层个体根据拥挤度从大到小排列,依次放入父代种群 P t + 1 P_{t+1} Pt+1中,直至父代种群 P t + 1 P_{t+1} Pt+1填满。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J3cIhWnC-1658384723697)(.img/domain-sort.png)]
3、代码实操
有点复杂,先放个链接链接(含测试函数以及ZDT真实数据)
https://download.csdn.net/download/qq_45555061/86247361
4、算法结果
eg, ZDT3:
50轮:
150轮:
250轮: