参考文献:《Yao-Nan Wang, Liang-Hong Wu, Xiao-Fang Yuan: Multi-objective self-adaptive differential evolution with elitist archive and crowding entropy-based diversity measure》

MOSADE要点:

  • 采用结合帕累托最优的自适应差分进化算法解决多目标优化问题;
  • 采用外部精英存档来保存进化过程中的非支配解;
  • 采用拥挤熵多样性度量策略来保持帕累托最优的多样性。

一、MOP的基本概念

1、多目标优化问题的数学定义为:

拥挤度计算python 拥挤度如何测量_自适应


式(1)为要优化的目标向量,式(2)为不等式约束,式(3)为等式约束,式(4)表示可行域。2、以下是几个重要概念的定义:

拥挤度计算python 拥挤度如何测量_拥挤度计算python_02


拥挤度计算python 拥挤度如何测量_解决方案_03


拥挤度计算python 拥挤度如何测量_解决方案_04


拥挤度计算python 拥挤度如何测量_自适应_05


拥挤度计算python 拥挤度如何测量_拥挤度计算python_06


拥挤度计算python 拥挤度如何测量_优化问题_07

二、自适应差分进化算法

1、基本差分进化算法

本文采用DE/rand/1/bin变异策略:

拥挤度计算python 拥挤度如何测量_自适应_08


交叉算子:

拥挤度计算python 拥挤度如何测量_优化问题_09


选择算子(本文未采用):

拥挤度计算python 拥挤度如何测量_拥挤度计算python_10


2、参数自适应策略选择合适的参数是一项取决于问题的任务,并且需要一定的经验。如果一个个体连续α代(本文α=5)没有产生更好的试验向量,那么当前的控制参数是不适合的,应该自适应的变化;在连续的α代中,如果一个个体产生一个或多个更好的试验向量,则该个体的控制参数值是合适的,并且应该存活到后代。

本文用到的控制参数更新方法如下,其中F∈[0.1,0.9],CR∈[0,0.5]。

拥挤度计算python 拥挤度如何测量_拥挤度计算python_11


三、精英档案与多样性保护

1、外部精英档案

存储所有非支配解决方案。外部档案用于存储整个进化过程中迄今为止发现的帕累托最优。最初,这个档案是空的。随着进化的进行,每一代获得的不受相应目标向量支配的试验向量与当前存档逐一比较,好的解决方案进入存档。

有三种情况下,非支配的试验向量与当前档案进行比较。

  • 如果试验向量被所有外部档案的成员支配,则试验向量被拒绝;
  • 如果试验向量支配档案的某些成员,则支配的成员从档案中删除,并且试验向量进入档案;
  • 试验向量不支配任何档案成员,并且没有档案成员支配试验向量,这意味着试验向量属于帕累托前沿并且它进入档案。

当外部档案达到最大容量时,拥挤距离测量被用来维持档案的最大容量。

2、基于拥挤熵的多样性度量

为了在固定大小的外部精英档案中产生的非支配解之间具有良好的多样性,需要一个好的度量来评估每个非支配解周围的拥挤度。

拥挤度计算python 拥挤度如何测量_拥挤度计算python_12


从上图中我们可以看到,在目标函数空间中,解B比解A具有更好的分布。在本文中,熵的概念被用来描述一个解决方案在目标函数空间中沿着每个目标的分布。第i个解沿着第j个目标函数的分布熵定义如下。

拥挤度计算python 拥挤度如何测量_拥挤度计算python_13


分布熵可以正确地描述目标函数空间中解的分布。但是,分布熵不能准确反映解决方案的拥挤程度。比如,图中可以直观地看出,解决方案C的分布熵比解决方案A更好,但是解决方案C比解决方案A更拥挤,因为解决方案C两侧的两个点的平均距离都比解决方案A小得多。因此,为了估计目标函数空间中一个解的密度,必须同时考虑拥挤距离和分布熵。根据以上分析,结合拥挤距离和分布熵,提出了一种新的拥挤度评估方法即拥挤熵,以准确地测量拥挤度。拥挤熵定义如下。

拥挤度计算python 拥挤度如何测量_解决方案_14


拥挤熵计算需要根据每个目标函数值按升序对精英档案中的个体进行排序。对于每个目标函数,为边界解(具有最小和最大函数值的解)分配一个无限的拥挤熵值,以便始终选择该值。根据等式,为所有其他中间解分配一个拥挤熵值。其他目标函数继续进行此计算。将总体拥挤熵值计算为与每个目标相对应的各个拥挤熵值的总和。

四、具有存档和拥挤熵的MOSADE

1、支配选择算子

为了将DE扩展到多目标优化问题,最重要的工作是修改选择机制。本文选择操作基于帕累托最优。

拥挤度计算python 拥挤度如何测量_解决方案_15


注:LC表示取拥挤程度较小的。

2、约束处理

对于具有约束的优化问题,通常使用惩罚函数方法来处理约束。在使用约束支配(一种无惩罚参数的约束处理方法(Deb等,2002))来处理约束的情况下。如果满足以下任一条件,则称解决方案i约束解决方案j。

  • 解决方案i是可行的,而解决方案j不是;
  • 解决方案i和j都不可行,但是解决方案i的总体约束冲突较小;
  • 解决方案i和j是可行的,并且解决方案i支配解决方案j。

使用这种约束支配原理的效果是,任何可行的解决方案都比任何不可行的解决方案具有更好的非支配等级。根据目标函数值,根据其非支配等级对所有可行解进行排序。但是,在两个不可行的解决方案中,约束违反程度较小的解决方案排名更高。

3、伪代码(仅供参考)

拥挤度计算python 拥挤度如何测量_拥挤度计算python_16


拥挤度计算python 拥挤度如何测量_优化问题_17


拥挤度计算python 拥挤度如何测量_拥挤度计算python_18