1. NSGA-Ⅱ解决的问题类型
多目标优化是涉及多个目标函数同时优化的数学问题。需要在两个或多个相互冲突的目标之间进行权衡的情况下作出最优决策。 通俗易懂的解释是,假如现在有两个指标(a, b)去衡量事物的优越性,那么此时有
实例 | 指标 |
---|---|
实例1 | a 1 , b 1 a_1,b_1 a1,b1 |
实例2 | a 2 , b 2 a_2,b_2 a2,b2 |
实例3 | a 3 , b 3 a_3,b_3 a3,b3 |
当指标
a
1
好于
a
2
好于
a
3
,
b
2
好于
b
1
好于
b
3
a_1 好于 a_2 好于 a_3, b_2 好于 b_1好于 b_3
a1好于a2好于a3,b2好于b1好于b3
我们很清楚可以知道,实例3是最差的,但实例1和实例2分别有一个指标优于对方。NSGA-Ⅱ的解即是实例1和实例2,最终的解是一个集合,里面的所有解的关系就像实例1和实例2一样,无法确定哪个比哪个更优,即无法互相支配,称为帕累托前沿(Pareto Front)。
2. NSGA-Ⅱ的基本原理
2.1 基本流程
- 初始化N个解(个体)
- 计算函数值(或者适应度)质
- 利用旧解产生新解期,各种策略:GA,PSO,灰狼优化等(本质一样)
- 选择得到新一轮的解
- 单目标: 谁的y值小,谁就好(最小化问题),旧的解50个,新的解50个,直接整体排序,保留50个即可
- 多目标: 旧的解50个,新的解50怎么排序?如何比较大小?谁更好? 使用非支配排序解决
2.2 非支配排序
2.2.1 支配
根据前面的解释,下图中点P可以支配圈内所有的解,经过对所有解筛选支配关系,最后我们得到的会是帕累托前沿上的所有解。
2.2.2 拥挤距离
在求得帕累托前沿时,我们总是希望解是均匀分布在帕累托前沿的线/面上的,因为均匀分布的才方便我们去直观感受解的空间,如果分布不均匀,可能很难去了解真实的情况,比如下图,我们很难看出中间部分解的情况,到底哪一条虚线才是真实的情况
拥挤距离的计算如下图所示,对每个点来说,是离它最近的两个点的距离,推理到三维或多维空间也相同
可以看到,
P
2
的拥挤距离相对于
P
1
的拥挤距离是更大的,我们就认为
P
2
是更优的解
可以看到,P_2的拥挤距离相对于P_1的拥挤距离是更大的,我们就认为P_2是更优的解
可以看到,P2的拥挤距离相对于P1的拥挤距离是更大的,我们就认为P2是更优的解
选择在保留解的时候,更倾向于保留拥挤距离较大的解。
而拥挤距离越大就代表着这里解比较空旷,选择拥挤距离大的解,有利于种群多样性(可能),因此,非支配解之间,也能进行比较大小。 经过比较拥挤距离,我们还可以删除一些次优的解。
此时比较大小的问题,得到了解决。 再经过拥挤距离的筛选,我们就得到了最终的帕累托最优集。