因为NSGA-II算法是一种遗传算法,所以首先搞清楚遗传算法的流程。
一般遗传算法的流程:
根据是否满足解的精度要求和迭代次数来判断是否进行下一轮的遗传进化。
NSGA-II算法主要由以下三个部分组成
A、快速非支配排序方法
B、拥挤比较算子
C、主程序
算法流程如下:
首先计算每个解的np和Sp,这需要O(MN2)时间复杂度,同时得到了第一前沿面
F
1
\mathcal{F1}
F1。第二部分就是计算其余的前沿面,需要遍历前沿面中的每个解以及这个解的Sp集合,将对应解p的np值减一,如果np值减为0了,就加入下一前沿面集合,这部分需要O(N2)时间复杂度。由于第一部分和第二部分是分开的,所以总的时间复杂度是O(MN2)。
密度估计:对同一前沿面的解按照目标函数值排序,计算每个解在该目标函数下两侧解的目标函数归一化差值,然后将所有目标函数下的分量累加作为拥挤系数。
具体算法流程如下:
如图所示,直观上看,解i的拥挤系数就是虚线矩形周长的一半。