基于参考点的非支配遗传算法-NSGA-III

Posted 流浪若相惜

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于参考点的非支配遗传算法-NSGA-III相关的知识,希望对你有一定的参考价值。

上一篇我们讲了有关非支配遗传算法NSGA-III的非约束过程,接下来这一篇我们讲一下NSGA-III约束实现以及扩展自适应方法。同理,我们先列一下我们参考的博客、代码以及论文。

文章目录

参考博客

platEMO
基于参考点的非支配遗传算法-NSGA-III(一)

参考论文

因参考论文较多,此直接给予所有论文,请点击下载。论文中重要的部分已做了注解和标注。

  1. Y. Tian, R. Cheng, X.Y. Zhang, and Y.C. Jin, “PlatEMO: A MATLAB platform for evolutionary multi‐objective optimization [educational forum],” IEEE Computational Intelligence Magazine, 2017, 12(4): 73‐87.
  2. K. Deb, H. Jain . An Evolutionary Many-Objective Optimization Algorithm Using Reference Point-Based Nondominated Sorting Approach, Part I: Solving Problems With Box Constraints[J]. IEEE Transactions on Evolutionary Computation, 2014, 18(4):577-601.
  3. Y. Tian , X. Xiang , X. Zhang , et al. Sampling Reference Points on the Pareto Fronts of Benchmark Multi-Objective Optimization Problems[C]. 2018 IEEE Congress on Evolutionary Computation (CEC). IEEE, 2018.
  4. X. Zhang, Y. Tian, R. Cheng, and Y. Jin, “An efficient approach to nondominated sorting for evolutionary multiobjective optimization,” IEEE Trans. Evol. Comput., vol. 19, no. 2, pp. 201–213, Apr. 2015.
  5. I. Das and J. Dennis, “Normal-boundary intersection: A new method
    for generating the Pareto surface in nonlinear multicriteria optimization
    problems,” SIAM J. Optimization, vol. 8, no. 3, pp. 631–657, 1998.
  6. K. Deb, R.B. Agrawal, Simulated binary crossover for continuous search space, Complex Systems. 9 (1995) 115–148.
    在原有参考论文的基础上,本博客主要参考论文
  7. H. Jain,K. Deb, A. Pratap, S. An Evolutionary Many-Objective Optimization Algorithm Using Reference-point Based Non-dominated Sorting Approach, Part II: Handling Constraints and Extending to an Adaptive Approach, IEEE Trans. Evol. Comput.,18(4):602-622, 2014.

参考代码

platEMO

NSGA-III约束实现

在NSGA-II中我们提到,我们是在划分等级的时候实现了考虑约束的多目标优化 (详细请参考:多目标非支配排序遗传算法-NSGA-II(一)),主要包括以下几种情况:

主要实现代码如下:

function domMat = calcDominationMatrix(nViol, violSum, obj)
% Function: domMat = calcDominationMatrix(nViol, violSum, obj)
% Description: Calculate the domination maxtrix which specified the domination
%   releation between two individual using constrained-domination.
%
% Return: 
%   domMat(N,N) : domination matrix
%       domMat(p,q)=1  : p dominates q
%       domMat(p,q)=-1 : q dominates p
%       domMat(p,q)=0  : non dominate
%
%    Copyright 2011 by LSSSSWC
%    Revision: 1.0  Data: 2011-07-13
%*************************************************************************

N       = size(obj, 1); %行个数(种群)
numObj  = size(obj, 2);% 列个数(目标函数)

domMat  = zeros(N, N); 

for p = 1:N-1
    for q = p+1:N
        %*************************************************************************
        % 1. p and q are both feasible
        %*************************************************************************
        %两个个体约束均为0的情况
        if(nViol(p) == 0 && nViol(q)==0) 
            pdomq = false;
            qdomp = false;
            for i = 1:numObj
                if( obj(p, i) < obj(q, i) )         % objective function is minimization!
                    pdomq = true; % p支配q
                elseif(obj(p, i) > obj(q, i))
                    qdomp = true;
                end
            end
    %只有两个对比个体所有目标函数都为1或0是才会产生支配,若存在不同目标函数个体支配相反情况,则两个个体不存在支配与被支配关系
            if( pdomq && ~qdomp )
                domMat(p, q) = 1; %表示p支配q
            elseif(~pdomq && qdomp )
                domMat(p, q) = -1; %表示q支配p
            end
        %*************************************************************************
        % 2. p is feasible, and q is infeasible
        %*************************************************************************
        elseif(nViol(p) == 0 && nViol(q)~=0)
            domMat(p, q) = 1;
        %*************************************************************************
        % 3. q is feasible, and p is infeasible
        %*************************************************************************
        elseif(nViol(p) ~= 0 && nViol(q)==0)
            domMat(p, q) = -1;
        %*************************************************************************
        % 4. p and q are both infeasible
        %*************************************************************************
        else
            if(violSum(p) < violSum(q))
                domMat(p, q) = 1;
            elseif(violSum(p) > violSum(q))
                domMat(p, q) = -1;
            end
        end
    end
end

在NSGA-II中实现此过程是在选择之前实现的,在NSGA-III约束实现时,其原理上是一样的只是在两个地方进行了修改,我这里直接截图原文,然后再每一部分具体解释一下。

Modifications in the Elitist Selection Operator

其实,我们在NSGA-II中也是采用了此思想,不同的是我们在NSGA-II中令违背约束的条件个数=0,而此采用的是
C V ( x ) = ∑ j = 1 J < g ‾ j ( x ) > + ∑ k = 1 K ∣ h ‾ k ( x ) ∣ (1) CV(\\bf x)=\\sum_j=1^J<\\overline g_j(\\bf x)>+\\sum_k=1^K|\\overline h_k(\\bf x)| \\tag 1 CV(x)j=1J<gj(x)>+k=1Khk(x)(1)其中,运算符的作用其实就是让 C V ≥ 0 CV \\geq 0 CV0, 且让 g ‾ j \\overline g_j gj变为 − g ‾ j -\\overline g_j gj 。我们在往下思考一下, C V ≥ 0 CV \\geq 0 CV0意味着什么?我们不妨列举一个test problem来说明此问题。例如C1_DTLZ1的约束为:
c ( x ) = 1 − f M ( x ) 0.6 − ∑ i = 1 M − 1 f i ( x ) 0.5 ≥ 0 (2) c(\\bf x)=1-\\fracf_M(\\bf x)0.6-\\sum_i=1^M-1\\fracf_i(\\bf x)0.5 \\geq 0 \\tag 2 c(x)=10.6fM(x)i=1M10.5fi(x)0(2)按照文中所说,也就是让 c ( x ) ≤ 0 c(\\bf x) \\leq 0 c(x)0 ,那么(2)式转为:
− c ( x ) = f M ( x ) 0.6 + ∑ i = 1 M − 1 f i ( x ) 0.5 − 1 ≤ 0 (3) -c(\\bf x)=\\fracf_M(\\bf x)0.6+\\sum_i=1^M-1\\fracf_i(\\bf x)0.5-1 \\leq 0 \\tag 3 c(x)=0.6fM(x)+i=1M10.5fi(x)10(3)
(2)式跟(3)式所要表示的含义是一致的,但运算符 < > <> <>操作后,会使得 C V ≥ 0 CV \\geq 0 CV0,这与原有的constraints相反,也就说所谓的constraint violation含义。也就说在选择等操作所用的约束条件是违背的,也就是所谓的infeasible solution

需要注意的是,文中的α已经是<>之后的了,运算符之后,feasible solution constraints 已经变为了<0, 也就是说将<0的约束(feasible 约束)的违背约束设置为0。

Modification in Creation of Offspring Population

其实,我们仅需要理解下边这段话就可以了:

意思就是说,我们之前仅在NSGA-II选择的划分等级时考虑了,但是并没有在父代生成子代中考虑这种支配关系,这样我们的整个过程如下伪代码:

代码实现:

 MatingPool = TournamentSelection(2,N,sum(max(0,PopCon),2));
 
function index = TournamentSelection(K,N,varargin)
    varargin = cellfun(@(S) reshape(S,[],1),varargin,'UniformOutput',false);% return by the form of cell type
    % For example
    %   A = cellfun(@(x) x(1:3),C,'UniformOutput',false)
    %   A = 1x5 cell
    %   'Mon'    'Tue'    'Wed'    'Thu'    'Fri'
    % reshape restruct array 
    [~,rank] = sortrows([varargin:]);%默认第一列排序,rank种群排列的索引位置
    [~,rank] = sort(rank);%升序排列,rank种群原要素的排序位置
    Parents  = randi(length(varargin1),K,N);%随机产生二元锦标赛个体
    [~,best] = min(rank(Parents),[],1);%按列排序
    index    = Parents(best+(0:N-1)*K);%种群个体索引位置
end

对于TournamentSelection()我们可以这样去理解,这个函数是为了说明在父代生成子代过程时发生的,需要进行条件约束下的支配选择。这个函数的关键点就在于对 s u m ( m a x ( 0 , P o p C o n ) , 2 ) sum(max(0,PopCon),2) sum(max(0,PopCon),2) 的理解,它实则就是实现我们前边所说的运算符 < > <> <>。我们前边也介绍了PopCon是符合约束的,那么对于feasible solution 这个操作的结果肯定是0,而对于infeasible solution来说肯定是sum(PopCon)。那么在进入函数二元锦标赛选择时,我们的排序是根据sum(PopCon)从小到大排序的,那么feasible solution肯定是在最前边的,也就是说feasible solution的 sum(PopCon)(约束违背)要小于infeasible solution的,对于两个feasible solution我们可以任一选择一个,对于两个infeasible solution来说谁的sum(PopCon)小,则优选谁。

function [FrontNo,MaxFNo] = NDSort(varargin)

    PopObj = varargin1;
    [N,M]  = size(PopObj);
    if nargin == 2
        nSort  = varargin2;
    else
        PopCon = varargin2;
        nSort  = varargin3;%reference points count
        Infeasible           = any(PopCon>0,2);%any one PopCon>0 will be a infeasible solution
        PopObj(Infeasible,:) = repmat(max(PopObj,[],1),sum(Infeasible),1) + repmat(sum(max(0,PopCon(Infeasible,:)),2),1,M);
        %不可行解一定obj一定是大于所有解的最大的,这样的就可以得到最小化问题中feasible solution obj一定小于
        %infeasible solution obj,然后对于两个feasible solution仅需对比obj,对于两个infeasible solution 仅需对比PopCon
    end
    if M < 5 || N < 500
        % Use efficient non-dominated sort with sequential search (ENS-SS)
        [FrontNo,MaxFNo] = ENS_SS(PopObj,nSort);

在选择过程中,重点理解

Infeasible           = any(PopCon>0,2);
PopObj(Infeasible,:) = repmat(max(PopObj,[],1),sum(Infeasible),1) + repmat(sum(max(0,PopCon(Infeasible,:)),2),1,M);

这两句的意思就可以实现feasible solution以及infeasible solution的所有组合情况,对于feasible 我们仍然是对于其目标函数的对比,对于infeasible solution我们可以通过sum(PopCon),而对于feasible solution以及infeasible solution来讲,我们 P o p O b j ( I n f e a s i b l e , : ) = r e p m a t ( m a x ( P o p O b j , [ ] , 1 ) , s u m ( I n f e a s i b l e ) , 1 ) + r e p m a t ( s u m ( m a x ( 0 , P o p C o n ( I n f e a s i b l e , : ) ) , 2 ) , 1 , M ) ; PopObj(Infeasible,:) = repmat(max(PopObj,[],1),sum(Infeasible),1) + repmat(sum(max(0,PopCon(Infeasible,:)),2),1,M); PopObj(Infeasible,:)=repmat(max(PopObj,[],1),sum(Infeasible),1)+repmat(sum(max(0,PopCon(Infeasible,:)),2),1,M);就可以看出,infeasible solution即使再小,也是大于feasible solution中目标函数最大的那个(我们这里采用min function),即任一一个infeasible solution的“目标函数值”要大于所有的feasible solution。这样我们就实现了父代生成子代、种群选择过程中的约束优选算法。
为庆祝此役的胜利,附上C2_DTLZ2 test problem的运行结果:

以上是关于基于参考点的非支配遗传算法-NSGA-III的主要内容,如果未能解决你的问题,请参考以下文章

基于参考点的非支配遗传算法-NSGA-III

基于参考点的非支配遗传算法-NSGA-III

VRP问题基于NSGA算法求解多中心VRP问题

遗传算法存在问题?

遗传算法理解

遗传算法 Python Geatpy库