NSGA-II原理及代码实现
介绍
Non dominated sorting genetic algorithm -II
非支配排序遗传算法
①提出了快速非支配排序算法,一方面降低了计算的复杂度,另一方面它将父代种群跟子代种群进行合并,使得下一代的种群从双倍的空间中进行选取,从而保留了最为优秀的所有个体;
②引进精英策略,保证某些优良的种群个体在进化过程中不会被丢弃,从而提高了优化结果的精度;
③采用拥挤度和拥挤度比较算子,不但克服了NSGA中需要人为指定共享参数的缺陷,而且将其作为种群中个体间的比较标准,使得准Pareto域中的个体能均匀地扩展到整个Pareto域,保证了种群的多样性。
算法流程

伪代码如下:

NSGA-II的核心在于循环中:

①父代Pt通过选择、交叉、变异产生子代Qt,合并Pt和Qt为Rt
②对Rt进行非支配快速排序,按照等级排序为F1、F2……,为了保持种群的数量相等,依照等级高的进行选取,但会存在选取某一等级时,数量会超过种群的数量,为了保证种群的多样性,使用拥挤度计算方法来选取,拥挤度越高,选取的概率越大
③这样就产生了下一个父代Pt+1,再进入循环,直到达到迭代次数
选择快速排序得到的高等级和拥挤度大的个体的方法就是精英保留策略

非支配快速排序
首先要了解什么叫做支配
支配的定义如下:
A ( x 1 ∣ y 1 ) 支配 B ( x 2 ∣ y 2 ) 当: A(x1|y1) 支配 B(x2|y2) 当: A(x1∣y1)支配B(x2∣y2)当:
( x 1 < = x 2 a n d y 1 < = y 2 ) a n d ( x 1 < x 2 o r y 1 < y 2 ) (x1 <= x2 \quad and \quad y1 <= y2) and (x1 < x2 \quad or \quad y1 <y2) (x1<=x2andy1<=y2)and(x1<x2ory1<y2)

举一个例子:优化目标是同时最小化 f 1 f1 f1和 f 2 f2 f2,在上图中A和B的 f 2 f2 f2值是一样的,但A的 f 1 f1 f1值是小于B的 f 1 f1 f1值的,所以可以说A是支配B
matlab代码
all(x <= y) && any(x<y)

依据支配的定义,分别列出每个个体的被支配个数,以及支配的集合
对于被支配个数为0的个体(例如i),加入到Q(例如F1,表示等级rank为1)中,删除个体i,并对支配集合中有个体i的个体,将支配集合删除个体i,并支配个数-1。这类似于拓扑排序,以此往复,对每个个体进行等级排序。
拥挤度计算
将个体依据等级排序加入到新的父代Pt+1时,为了保持种群规模一致,需要对不能完全放完的某一等级的个体进行选择,选择的标准则是依据拥挤度,拥挤度越大,选择的概率越高。

个体的拥挤度是每个目标下的拥挤度总和
对于每个目标,先将种群按照目标值进行排序,对于最大和最小的目标值个体拥挤度设置为无穷大,其他的个体则依据相邻个体计算拥挤度
NSGA-II算法流程及Matlab实现

本文介绍了非支配排序遗传算法NSGA-II,其提出快速非支配排序算法、引进精英策略、采用拥挤度和拥挤度比较算子。阐述了算法流程,包括父代与子代合并、非支配快速排序和拥挤度计算等步骤,还提及了platEMO平台,并给出NSGA-II源码主要方法的Matlab实现。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



