NSGA-III:基于参考点的非支配排序方法的进化多目标优化算法


在这里插入图片描述

PS:本文NSGA-III:An evolutionary many-objective optimization algorithm using reference-point-based nondominated sorting approach来自《IEEE Transactions on Evolutionary Computation》,目前Google学术引用5k+~

NSGA-III是NSGA-II(Multi-Objective Optimization)升级版,主要处理四个或更多目标的问题(Many-Objective Optimization)。

1.摘要

本文讨论了使用进化优化方法开发多目标优化算法的重要性,针对涉及四个或更多目标的多目标(Many-Objective)优化问题。本文介绍了一种基于参考点的多目标进化算法(NSGA-III),这种算法建立在NSGA-II框架上,强调非支配解且接近给定参考点的种群成员。

2.回顾NSGA-II

NSGA-II:一种快速精英多目标遗传算法

3.NSGA-III算法

3.1 多目标优化问题(Many-Objective Optimization)

当问题涉及到四个或更多的目标时,主要困难包括:

  • 种群的非支配问题:随着目标数量的增加,种群中非支配解的比例也随之增加,导致难以有效筛选优质解;
  • 重组操作效率低下:在多目标问题中,有效的解可能在高维空间中相距较远,这使得传统的重组操作可能不再有效;
  • 高维目标面的表示困难:表示更高维度的目标面需要更多的点,这就需要一个较大的种群规模,增加了计算的复杂性;
  • 性能指标计算成本高:在高维空间中比较解集需要大量的计算资源;
  • 可视化难度:随着目标的增加,直观地可视化解的分布变得更加困难;

3.2 NSGA-III

NSGA-III的核心改进在于其选择操作,特别是在维护种群成员间多样性方面,通过提供和动态更新参考点来支持。

种群的非支配层次分类

NSGA-III使用通常的支配原则识别非支配前沿的过程,所有从非支配前沿1级到l级的种群成员首先被包含在集 S t S_{t} St。如果 ∣ S t ∣ = N |S_{t}|=N St=N,则不需要进一步操作,下一代可以直接以 S t S_{t} St开始。如果 ∣ S t ∣ > N |S_{t}|>N St>N,则表示从第1前沿到第 ( l − 1 ) (l-1) (l1)前沿的成员已经被选择,即 P t + 1 = ⋃ i = 1 l − 1 F i P_{t+1}=\bigcup_{i=1}^{l-1}F_i Pt+1=i=1l1Fi,并且从最后一个前沿 F l F_{l} Fl中选择剩余的 K = N − ∣ P t + 1 ∣ K=N-|P_{t+1}| K=NPt+1个种群成员。

确定超平面参考点

NSGA-III使用预定义的参考点集来增强解的多样性,这些参考点可以根据一种结构化方法被放置在归一化的超平面上,形成一个与所有目标轴等距的单纯形。通过设定每个目标轴的划分数 p p p,可以确定参考点的总数 H H H,进而帮助算法更好地覆盖目标空间。
H = ( M + p − 1 p ) H=\begin{pmatrix}M+p-1\\p\end{pmatrix} H=(M+p1p)
在这里插入图片描述

NSGA-III除了强调非支配解外,还重视那些与参考点关联的解,以确保参考点被广泛分布在整个目标空间,包括靠近帕累托最优前沿的区域。

在这里插入图片描述

种群个体自适应归一化

NSGA-III通过计算每个目标函数的最小值来确定种群的理想点,并将每个目标值相对于其理想点平移,以便理想点成为零向量。为每个目标轴定义极端点,并利用这些极端点构建一个M维超平面,其中每个目标轴的截距用于标准化目标函数值:
f i n ( x ) = f i ′ ( x ) a i , f o r i = 1 , 2 , … , M f_{i}^{n}(\mathbf{x})=\frac{f_{i}^{\prime}(\mathbf{x})}{a_{i}},\quad\mathrm{for} i=1,2,\ldots,M fin(x)=aifi(x),fori=1,2,,M
在这里插入图片描述

标准化的目的是将所有目标值转换为一个统一尺度,这样构建的超平面保证了所有目标值的和为1,从而确保了不同目标之间的比较是公平的。

在这里插入图片描述

PS:这里考虑不同目标的尺度,举个例F1取值[0,1],F2取值[0,1000]。

关联操作

在自适应标准化每个目标后,我们需要将种群成员 S t S_{t} St中的每一个与一个参考点关联起来。我们为超平面上的每个参考点定义一条参考线,该线通过将参考点与原点相连来建立,计算 S t S_{t} St中每个种群成员到每条参考线的垂直距离。

在这里插入图片描述
在这里插入图片描述

生态位保持操作

NSGA-III算法中的生态位保持操作,这是一种用来维持种群成员与参考点之间关系的方法。这个过程首先需要确定每个参考点与其最近种群成员之间的垂直距离,并据此计算每个参考点的关联度(聚集度)。如果一个参考点没有任何与之直接相关联的种群成员,算法将根据特定规则选择或排除种群成员与该参考点关联。如果一个参考点已经有一个或多个关联成员,它可能会从前沿选择额外的成员以增加到下一代种群中。这个过程通过重复计算和更新,保证了在种群中不同参考点的代表性,并在算法的每一代中尽可能地保持种群的多样性和平衡。

在这里插入图片描述

遗传算子生成后代种群

NSGA-III算法中通过遗传操作生成后代种群 Q t + 1 Q_{t+1} Qt+1,算法在形成新的种群 P t + 1 P_{t+1} Pt+1后,通过常规的交叉和变异遗传操作来创建后代种群。为了保持解之间的多样性,并尽量使后代靠近各自参考点的帕累托最优前沿。

复杂度分析

NSGA-III的总体最坏情况计算复杂度 m a x ( O ( N 2 log ⁡ M − 2 N ) , O ( N 2 M ) ) max(O(N^2\log^{M-2}N),O(N^2M)) max(O(N2logM2N),O(N2M))

4.结果展示

关键代码

% 将个体与参考点关联
function [pop, d, rho] = AssociateToReferencePoint(pop, params)
    
    % 提取参考点Zr和参考点的数量nZr
    Zr = params.Zr;      
    nZr = params.nZr;    
    
    % 存储与每个参考点相关联的个体数量
    rho = zeros(1,nZr);
    
    % 存储每个个体到各个参考点的距离
    d = zeros(numel(pop), nZr);
    
    for i = 1:numel(pop)
        % 遍历每个参考点
        for j = 1:nZr
            % 计算归一化的参考点向量 w
            w = Zr(:,j) / norm(Zr(:,j));
            
            % 获取当前个体的归一化目标值 z
            z = pop(i).NormalizedCost;
            % 计算个体到参考点的距离
            d(i,j) = norm(z - w' * z * w);
        end
        
        % 找到与个体最近的参考点
        [dmin, jmin] = min(d(i,:));  
        pop(i).AssociatedRef = jmin;
        pop(i).DistanceToAssociatedRef = dmin;
        
        % 增加该参考点的关联个体数量
        rho(jmin) = rho(jmin) + 1;
    end
end

 % 更新参考点和最小标量化值
function params = PerformScalarizing(z, params)
    nObj = size(z,1);   % 目标数
    nPop = size(z,2);   % 种群大小
    
    if ~isempty(params.smin)
        zmax = params.zmax;   
        smin = params.smin;   
    else
        zmax = zeros(nObj, nObj);  
        smin = inf(1,nObj);        
    end
    
    for j = 1:nObj
        % 获取标量化向量 w
        w = GetScalarizingVector(nObj, j);
        % 存储每个个体的标量化值
        s = zeros(1,nPop);
        for i = 1:nPop
            % 计算标量化值 s(i)
            s(i) = max(z(:,i) ./ w);
        end

        [sminj, ind] = min(s);
        
        if sminj < smin(j)
            zmax(:, j) = z(:, ind);  
            smin(j) = sminj;        
        end
        
    end
    
    params.zmax = zmax;
    params.smin = smin;
    
end

function w = GetScalarizingVector(nObj, j)
    % 获取标量化向量 w

    epsilon = 1e-10;  
   
    w = epsilon * ones(nObj, 1);
    
    w(j) = 1;

end

在这里插入图片描述

5.参考文献

[1] Deb K, Jain H. 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, 2013, 18(4): 577-601.

6.代码获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小O的算法实验室

谢谢大佬的肯定!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值