多目标进化优化-MaOEA-IGD

参考文献
IGD Indicator-Based Evolutionary Algorithm for Many-Objective Optimization Problems
Yanan Sun, Member, IEEE, Gary G. Yen , Fellow, IEEE, and Zhang Yi, Fellow, IEEE

1. 创新点

  1. 一种基于分解的nadir point评估方法
  2. 一种新的非支配比较策略:个体和参考点之间比较
  3. 3种近似距离分配方案
  4. 基于新的非支配比较策略和3种新的近似距离分配方案改进了环境选择和交叉选择机制。

2. DNPE

  1. 公式:在这里插入图片描述

  2. 好处:不用每次都进行非支配排序,挑选出PF的边界点,可以让算法更节约计算成本。

  3. 目的:找到乌托邦PF,使之能够准确的用于计算IGD指标

3. 算法框架

3.1 产生均匀的参考点
  1. 先根据DNPE找到每个维度的nadir point和ideal point

  2. 再使用MOEA/D中的分参考方向的方式产生一系列参考点集,其中这些参考点的每个维度的和都为1

  3. 最后,根据由DNPE得出的nadir point和ideal point将参考点集转换为乌托邦PF,记为p*,这个乌托邦PF将用于IGD的计算

  4. 伪代码:

    在这里插入图片描述

    在这里插入图片描述

3.2 分配rank值
  1. 大多数文章中的支配比较都是在个体和个体之间的,而本文中提出的一个新的支配关系比较策略是:个体和参考点之间进行支配比较

  2. 共有3种rank值:

    1. r1:如果某个个体a至少支配一个p*中的参考点,则个体a的rank值为1

    2. r2:如果某个个体a和p*中所有的个体都互不支配,则个体a的rank值为2

    3. r3:若果某个个体a

      1. 被p*中的所有参考点所支配;
      2. 或被p*中一部分参考点支配,与另一部分参考点互不支配

      则,a的ran值为3

  3. 好处:

    1. 在连续的情况下(前提),根据算法结束时得到的PS,我们可以根据PS中的个体的rank值来推断真实PF的形状。如果PS中所有的个体的rank值为r1,则PF的形状为凹的;如果为r2,PF的形状为超平面;如果为r3,则PF的形状为凸的
    2. 根据rank值,我们可以粗略的估计出rank值为1的个体很可能是支配rank值为2和3的个体的,至少可以保证rank值越小的个体,是有较好的收敛性的。因此,可以将rank值作为环境选择和交叉选择中的第一个选择标准。(rank值这样分配的潜在缺点:不能保持传统的Pareto支配关系,因为rank值为1的个体,有可能不支配rank值为2的个体)
    3. 可以根据3种rank值,设计不同的近似距离
3.3 近似距离的分配
  1. rank值为1的个体:个体到参考点的欧式距离的负数(统一标准,都是选择有较小的距离的个体是有较好收敛性的个体)

  2. rank值为2的个体:即图2中的d+。即IGD+指标

    在这里插入图片描述

在这里插入图片描述

  1. rank值为3的个体:正欧式距离
3.4 产生后代
  1. 如何选择父代进入交叉池?
    1. 首先,随机选择两个个体,比较rank值,较小者进入交叉池
    2. 若rank值相同,则比较近似距离,较小者进入交叉池
    3. 如果近似距离还一样,随机选择一个
  2. 在一个大的搜索空间中(高维空间)怎么确保产生一个有希望的后代?
    1. 限制性的交叉方法:在邻居中交叉、变异产生后代
    2. SBX:使用一个大的分布索引值的模拟二进制交叉(本文采用)
3.5 环境选择
  1. 先选r1层,再选r2层,最后选r3层

  2. 如果所选取的最后一层的数量与前几层的数量相加大于N,则需要从最后一层中均匀的选取

  3. 假设需要从最后一层中选A个个体

    1. 均匀的选取参考点A个参考点

       %% Select K points from W
      Distance = pdist2(W,W); % 计算参考点之间的欧式距离
      Distance(logical(eye(length(Distance)))) = inf; % 将自己到自己的距离设置为inf
      Del = false(1,size(W,1)); % 初始化删除的矩阵,此时Del矩阵中全是逻辑false
      while sum(~Del) > K % 如果没有被删除的参考点的数量大于要选择的数量K,进入循环
          Remain   = find(~Del); % 找到剩余的参考点
          Temp     = sort(Distance(Remain,Remain),2); % 按照欧氏距离排序
          [~,Rank] = sortrows(Temp); % 按行排序,
          Del(Remain(Rank(1))) = true; % 将要删除的参考点设置为true
      end
      Dis = Dis(:,~Del); % 取反
      
    2. 然后选取距离每个参考点最近的个体(这些个体是最后一层中的个体),共A个,以准确的填满下一代种群

      %% Greedy algorithm based selection (more efficient)
      Choose = false(1,size(Dis,1)); % 初始化 size(Dis,1) ===> 个体数量
      for i = 1 : size(Dis,2) % (Dis,2) ===> 参考点数量
          remain   = find(~Choose); % 找到剩余的参考点的索引值
          [~,best] = min(Dis(remain,i)); % 找到到第i个参考点的距离最小的个体的索引值
          Choose(remain(best)) = true; % 将这个被选中的个体移除
      end
      
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值