多目标优化问题NSGAii实例讲解

多目标优化问题NSGAii概念介绍

首次接触多目标优化问题,以NSGA2为例介绍自己的理解,如有不妥之处,欢迎大家批评指正.

NASG II主要由两部分组成,一是非支配排序,二是拥挤距离测算。非支配排序的目的是将群体分级,拥挤距离排序的目的是对同一级别中的个体进行排序。最终选择级别高,拥挤距离大的个体作为下一代。

本文先对概念进行解释,在下一篇中将结合具体实例进行介绍。

.

计算拥挤距离的Python代码 拥挤距离排序_多目标

1.非支配排序

首先介绍非支配排序的概念。

假设有两个函数f1和f2.目标是f1和f2函数值越小越好。如下图所示为一些可行解。

图片:

计算拥挤距离的Python代码 拥挤距离排序_优化问题_02

  1. 计算每个个体的支配数量(np)和被支配集(Sp)
    1>对于节点C,节点D和节点E在F1和F2上都比C要小,所以称为:节点D和E可以支配C,所以npc=2。而被C支配的节点有B,所以Spc=[B]。
    2>对于节点D,没有节点能够支配节点D,所以npD=0。而被D支配的节点有A,B,C,所以SpD=[A,B,C]。
    3>对于节点E,没有节点能够支配节点E,所以npE=0。而被D支配的节点有B,C,所以SpE=[B,C]。
    4>对于节点A,节点D可以支配节点A,所以npA=1。而被A支配的节点没有,所以SpA=[null]。
    5>对于节点B,节点C,D,E可以支配节点B,所以npB=3。而被B支配的节点没有,所以SpB=[null]。
  2. 将所有节点分级
    1>选择群体中计数为0的个体,表示他们不被其他个体所支配,该集合分为第一级别,即F1=[D,E];
    2>为了找到F2,F1中每个个体有一个包括其支配的所有个体的列表。当前
    SpD=[A,B,C],SpE=[B,C]。
    对于列表中的每个个体,每遍历一次,相应的次数减1。当前情况下
    遍历A一次,所以npA-1,此时npA=0
    遍历B两次,所以npB-2,此时npB=1
    遍历C两次,所以npC-2,此时npC=0
    之后,将计数为0的节点归为第二类
    F2 = [A,C].
    3>为了发现F3,只需遍历F2中所有的个体,再次相减,查看哪个个体的数值为0,将他们归为F3。以此类推,可以进行个多个体的分级操作。

具体过程,参考来自[[1]]。

二、拥挤距离测算

1.拥挤距离越大越容易被保留。

拥挤距离的测算公式为

计算拥挤距离的Python代码 拥挤距离排序_优化问题_03


CDim表示在第m个目标函数中第i个个体的拥挤度。fm表示第m个目标函数。

Xmax表示所有个体中在m函数下的最大值,Xmin表示最小值。

计算拥挤距离的Python代码 拥挤距离排序_优化问题_04

总结

非支配排序和拥挤距离是NSGA II中两个非常重要的概念。具体实例讲解会在下一篇中介绍。