对于单目标优化问题,一般的遗传算法可以较为简单的得到较好的结果。但是,当问题扩展到多目标时,原先的遗传算法便不再适用了。因为目标之间通常有着较深的相互关系,一个目标的优化通常会影响到其余的目标,很难能够得到所有目标都达到最优的解。这时候,如何寻找合适的适应度函数便成解决多目标遗传算法的关键。如今,相关的算法已经有很多种了。包括妥协算法(compromise approach),GWASF-GA,SPEA2,NSGA-Ⅱ。其中NSGA-Ⅱ的使用非常广泛。
NSGA-Ⅱ
NSGA-Ⅱ的优点
1.NSGA-Ⅱ提出了快速的非支配(non-dominated)排序,很好的降低了算法的复杂度。一般的多目标算法复杂度为 O ( M N 3 ) O(MN^3) O(MN3),而NSGA-Ⅱ可以做到 O ( M N 2 ) O(MN^2) O(MN2)
2.NSGA-Ⅱ改进了原先NSGA算法为保留解多样性而采用的共享函数。提出了拥挤比较算子(crowded-comparison operator),从而避免了人为输入参数的不确定性。
快速非支配排序
快速非支配排序的核心思想主要是通过计算比较得到种群中每个个体p的被支配度 N p N_p Np,通过支配度的大小得到多层非支配曲面。具体来说过程如下:
对于种群中的每一个个体p,我们计算两个实体。第一个是其被支配度 N p N_p Np,即P个体被其余个体所支配的数量。支配的定义为如果个体p中所有目标均不优于个体q中对应目标,则称个体p被个体q所支配。第二个实体是个体p的支配集合 S p S_p Sp。这一步所需要的计算复杂度为 O ( M N 2 ) O(MN^2) O(MN2),因为最坏的情况下,数目为N的种群中每一个个体都要与其余个体比较,这一步为 N 2 N^2 N2,那么对于 M M M个目标则为 M N 2 MN^2 MN2。
接下来可以开始寻找非支配曲面了。对于最优非支配曲面(Pareto-optimal front),其中的个体 N p N_p Np为0。接着,对于最优非支配曲面中的每一个个体,寻找其相应的 S p S_p Sp,对于其中所有的个体q,将其 N p N_p Np减1。对于此时 N p N_p Np为0的个体,我们将其归入集合Q,Q便是第二非支配曲面。按照相同的步骤,我们可以得到所有的非支配曲面。由于对于所有个体p,其 N p N_p Np最大为N-1,因此,考虑最坏的情况,即最大 N p N_p Np为N-1,其非支配曲面的个数为N,则为了得到N个曲面所需要的最大遍历的次数为 N 2 N^2 N2。这样,对于M个目标,其计算复杂度为 O ( M N 2 ) O(MN^2) O(MN2)。快速非支配排序用算法表达如下:
拥挤比较算子
一般来说,在寻求多目标遗传算法的解时,我们希望解集合能够保存多样性。在NSGA-Ⅱ中,通过运用拥挤比较算子来实现此目的。简单来说,拥挤比较算子的原理如下:
首先定义密度衡量准则(density estimation metric),密度衡量准则定义为一个个体在其每个目标上上下相邻两点的距离。即某个个体与其附近的个体相距越远,密度越小。定义拥挤距离 i d i s t a n c e i_{distance} idistance