NSGA-II
本文最后更新于:2024年8月27日 上午
NSGA
支配与非支配
对于多个目标函数的问题,我们一般不能找到都很满足条件的解,比如手机价格低,肯定性能就差,一部性价比高的手机就能支配绝大多数手机。
一个解S1,对于任何一个目标函数,适应度都比另一个S2的要大,那么就说这个解S1严格支配
S2。当然也有可能某一目标函数的适应度相等,那样就是非严格的支配
。对于解S1,目标函数F1适应度优于解S2的目标函数F1适应度,但是在目标函数F2上,解S2优于解S1,这样,我们就称这两个解是互相非支配
的。就像七个葫芦兄弟,各有本事,谁也不服谁,他们就是互相非支配的😁。
如何进行非支配排序?
- 设
- 对于所有的
等,且 不等于 ,按照以上定义比较个体 和 之间的支配关系 - 如果不存在任何一个个体
支配 ,则 标记为非支配个体 - 令
,转到步骤2,直到找到所有的非支配个体
种群分层
通过一次上述步骤,可以得到种群的第一级非支配层,然后忽略这些被标记的个体,再次遵循步骤1到4,就会得到第二支配层。以此类推,直到整个种群被分层。
思考一下时间复杂度是多少?
NSGA是不带任何方法的直接非支配排序。设目标数
虚拟适应度值
种群分层结束后,需要给每级指定一个虚拟适应度值
,级别越小,说明其中的个体越优,赋予越高的虚拟适应值,反之级别越大,赋予越低的虚拟适应值。这样可以保证在复制操作中级别越小的非支配个体有更多的机会被选择进入下一代,使得算法以最快的速度收敛于最优区域。
NSGA-Ⅱ
对于NSGA的三大改进,使得算法效率大大提升。
快速非支配排序
如何体现一个快字?
对于每个个体
数量
number。
集合
set。
步骤
- 第一轮初始化个体,
为0, 为空集。第一轮与NSGA相同,时间复杂度为 。此时将 的个体加入第一级非支配集 。 - 对上一轮集合
中,取一个个体 ,在 的 集合中,依次将个体 的 减去一,若此时 ,则将其加入下一轮排序的非支配解集 。这里可以将每一个个体看成一个结构体,里面包含一个变量和一个存放结构体的数组,三层集合嵌套。 - 重复步骤2。时间复杂度在最坏情况下,每一次只能取一个到下一层非支配解集,每一轮需要花费
,一共需要 轮,所以总的时间复杂度为 。
拥挤度排序
为了保持解群体的分布性和多样性,NSGA-II提出使用计算聚集距离。分布距离的使用只是为了在后面建立偏序集所使用,优先权还是在非支配排序上。
计算方法就是利用前后个体的目标函数差值计算,可以理解为画一个矩形,顶点是前后个体,计算的就是在矩形中间的个体的拥挤度。在这之间要将同一层非支配的个体按照某一目标函数排序。
如果某个方向上的距离很大,就会很大程度上影响总的距离的大小。为了使每个方向上的目标函数对拥挤距离有等效的影响力,需要每个目标函数上的距离要规则化normalized
。所以要在最后除以如下变量:
在二维目标函数中:
构造偏序集
经过了排序和拥挤度计算,群体中的每一个个体都有两个属性:非支配序
精英策略
NSGA-II 算法采用精英策略防止优秀个体的流失,通过将父代和子代所有个体混合后进行非支配排序的方法。
总结
流程
首先,随机产生规模为
然后,进行快速非支配排序,同时对每个非支配层中的个体进行拥挤度计算,根据非支配关系以及个体的拥挤度选取合适的个体组成新的父代种群
最后,通过遗传算法的基本操作产生新的子代种群
时间复杂度
NSGA-II的时间花费有三部分构成:
- 快速非支配排序(non-dominated sort):
- 计算聚集距离(crowding distance assignment):
- 构造偏序集(sorting on set):
所以总时间复杂度为
参考文献:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!