• 多目标优化算法:基于非支配排序的蜣螂优化算法(Non-Dominated Sorting Dung beetle optimizer,NSDBO)


    蜣螂优化算法(Dung beetle optimizer,DBO)由Jiankai Xue和Bo Shen于2022年提出,该算法主要受蜣螂的滚球、跳舞、觅食、偷窃和繁殖行为的启发所得。
    在这里插入图片描述

    一、蜣螂优化算法

    1.1蜣螂滚球

    (1)当蜣螂前行无障碍时,蜣螂在滚粪球过程中会利用太阳进行导航,下图中红色箭头表示滚动方向
    在这里插入图片描述
    本文假设光源的强度会影响蜣螂的位置,蜣螂在滚粪球过程中位置更新如下:

    x i ( t + 1 ) = x i ( t ) + α × k × x i ( t − 1 ) + b × Δ x , Δ x = ∣ x i ( t ) − X w ∣

    xi(t+1)=xi(t)+α×k×xi(t1)+b×Δx,Δx=|xi(t)Xw|" role="presentation" style="position: relative;">xi(t+1)=xi(t)+α×k×xi(t1)+b×Δx,Δx=|xi(t)Xw|
    xi(t+1)Δx=xi(t)+α×k×xi(t1)+b×Δx,=xi(t)Xw
    其中, t t t表示当前迭代次数, x i ( t ) x_{i}(t) xi(t)表示第 i i i次蜣螂在第t次迭代中的位置信息, k ∈ ( 0 , 0.2 ] k∈(0,0.2] k(0,0.2]为扰动系数, b b b ( 0 , 1 ) (0,1) (0,1) 之间的随机数, α \alpha α取 -1 或 1 , X w X^{w} Xw表示全局最差位置, Δ x \Delta x Δx用于模拟光的强度变化。
    其中, α \alpha α的取值采用算法1:
    在这里插入图片描述

    (2)当蜣螂遇到障碍物无法前进时,它需要通过跳舞来重新调整自己,以获得新的路线。本文使用切线函数来模仿跳舞行为,以此获得新的滚动方向,滚动方向仅考虑为 [ 0 , π ] [0,π] [0,π]之间。
    在这里插入图片描述
    蜣螂一旦成功确定新的方向,它应该继续向后滚动球。蜣螂的位置更新如下:
    x i ( t + 1 ) = x i ( t ) + tan ⁡ ( θ ) ∣ x i ( t ) − x i ( t − 1 ) ∣ x_{i}(t+1)=x_{i}(t)+\tan (\theta)\left|x_{i}(t)-x_{i}(t-1)\right| xi(t+1)=xi(t)+tan(θ)xi(t)xi(t1)
    其中, θ \theta θ为偏转角,其取值为 [ 0 , π ] [0,π] [0,π],采用算法2:
    在这里插入图片描述

    1.2蜣螂繁殖

    在这里插入图片描述

    在自然界中,雌性蜣螂将粪球被滚到适合产卵的安全地方并将其隐藏起来,以此为后代提供一个安全的环境。受此启发,因而提出了一种边界选择策略以此模拟雌性蜣螂产卵的区域:
    L b ∗ = max ⁡ ( X ∗ × ( 1 − R ) , L b ) U b ∗ = min ⁡ ( X ∗ × ( 1 + R ) , U b )

    Lb=max(X×(1R),Lb)Ub=min(X×(1+R),Ub)" role="presentation" style="position: relative;">Lb=max(X×(1R),Lb)Ub=min(X×(1+R),Ub)
    Lb=max(X×(1R),Lb)Ub=min(X×(1+R),Ub)
    其中, X ∗ X^{*} X表示当前最优位置, L b ∗ L b^{*} Lb U b ∗ U b^{*} Ub分别表示产卵区的下限和上限, R = 1 − t / T m a x R=1−t/T_{max} R=1t/Tmax T m a x T_{max} Tmax表示最大迭代次数, L b Lb Lb U b Ub Ub分别表示优化问题的下限和上限。
    雌性蜣螂一旦确定了产卵区,就会选择在该区域育雏球产卵。每只雌性蜣螂在每次迭代中只产生一个卵,可以看出,产卵区的边界范围是动态变化的,主要由R值决定。因此,育雏球的位置在迭代过程中也是动态的,其定义如下:
    B i ( t + 1 ) = X ∗ + b 1 × ( B i ( t ) − L b ∗ ) + b 2 × ( B i ( t ) − U b ∗ ) B_{i}(t+1)=X^{*}+b_{1} \times\left(B_{i}(t)-L b^{*}\right)+b_{2} \times\left(B_{i}(t)-U b^{*}\right) Bi(t+1)=X+b1×(Bi(t)Lb)+b2×(Bi(t)Ub)
    其中, B i ( t ) B_{i}(t) Bi(t)表示第t次迭代中第 i个育雏球的位置信息, b 1 b_{1} b1 b 2 b_{2} b2均为1×D的随机向量,D表示优化问题的维度。
    产卵区的选择如算法3所示:
    在这里插入图片描述

    1.3蜣螂觅食

    在这里插入图片描述
    雌性蜣螂所产的卵会逐渐长大,一些已经成熟的小蜣螂会从地下出来寻找食物,小蜣螂的最佳觅食区建模如下:
    L b b = max ⁡ ( X b × ( 1 − R ) , L b ) U b b = min ⁡ ( X b × ( 1 + R ) , U b )

    Lbb=max(Xb×(1R),Lb)Ubb=min(Xb×(1+R),Ub)" role="presentation" style="position: relative;">Lbb=max(Xb×(1R),Lb)Ubb=min(Xb×(1+R),Ub)
    Lbb=max(Xb×(1R),Lb)Ubb=min(Xb×(1+R),Ub)
    其中, X b X^{b} Xb表示全局最优位置, L b b L b^{b} Lbb U b b U b^{b} Ubb分别表示最佳觅食区的下限和上限。
    在这里插入图片描述

    小蜣螂的位置更新如下:
    x i ( t + 1 ) = x i ( t ) + C 1 × ( x i ( t ) − L b b ) + C 2 × ( x i ( t ) − U b b ) x_{i}(t+1)=x_{i}(t)+C_{1} \times\left(x_{i}(t)-L b^{b}\right)+C_{2} \times\left(x_{i}(t)-U b^{b}\right) xi(t+1)=xi(t)+C1×(xi(t)Lbb)+C2×(xi(t)Ubb)
    其中, x i ( t ) x_{i}(t) xi(t)表示第t次迭代中第i只小蜣螂在的位置, C 1 C_{1} C1是服从正态分布的随机数, C 2 C_{2} C2为(0,1)的随机向量。

    1.4蜣螂偷窃

    在这里插入图片描述

    另一方面,一些蜣螂从其他蜣螂那里偷粪球,盗贼蜣螂的位置更新如下:

    x i ( t + 1 ) = X b + S × g × ( ∣ x i ( t ) − X ∗ ∣ + ∣ x i ( t ) − X b ∣ ) x_{i}(t+1)=X^{b}+S \times g \times\left(\left|x_{i}(t)-X^{*}\right|+\left|x_{i}(t)-X^{b}\right|\right) xi(t+1)=Xb+S×g×(xi(t)X+ xi(t)Xb )
    其中, x i ( t ) x_{i}(t) xi(t)表示在第t次迭代中第i个盗贼蜣螂的位置,g为服从正态分布的1×D随机向量,S为常数。

    1.5 DBO算法流程

    滚球蜣螂、繁殖蜣螂、觅食蜣螂和偷窃蜣螂的比例分布如下:
    在这里插入图片描述
    DBO算法描述如下:
    在这里插入图片描述
    参考文献:Xue, J., Shen, B. Dung beetle optimizer: a new meta-heuristic algorithm for global optimization. J Supercomput (2022). https://doi.org/10.1007/s11227-022-04959-6

    二、非支配排序的蜣螂优化算法

    基于非支配排序的蜣螂优化算法(Non-Dominated Sorting Dung beetle optimizer,NSDBO)由蜣螂优化算法与非支配排序策略结合而成。将NSDBO用于求解46个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ7、WFG1-WFG10、UF1-UF10、CF1-CF10、Kursawe、Poloni、Viennet2、Viennet3)以及1个工程应用(盘式制动器设计),并采用IGD、GD、HV、SP进行评价。

    close all;
    clear ; 
    clc;
    %%
    % TestProblem测试问题说明:
    %一共46个多目标测试函数,详情如下:
    %1-5:ZDT1、ZDT2、ZDT3、ZDT4、ZDT6
    %6-12:DZDT1-DZDT7
    %13-22:wfg1-wfg10
    %23-32:uf1-uf10
    %33-42:cf1-cf10
    %43-46:Kursawe、Poloni、Viennet2、Viennet3
    %47 盘式制动器设计 温泽宇,谢珺,谢刚,续欣莹.基于新型拥挤度距离的多目标麻雀搜索算法[J].计算机工程与应用,2021,57(22):102-109.
    %%
    TestProblem=1;%1-47
    MultiObj = GetFunInfo(TestProblem);
    MultiObjFnc=MultiObj.name;%问题名
    % Parameters
    params.Np = 200;        % Population size
    params.Nr = 200;        % Repository size
    params.maxgen =300;    % Maximum number of generations
    numOfObj=MultiObj.numOfObj;%目标函数个数
    D=MultiObj.nVar;%维度
    f = NSDBO(params,MultiObj);
    X=f(:,1:D);%PS
    Obtained_Pareto=f(:,D+1:D+numOfObj);%PF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    部分结果如下:

    ZDT1:

    在这里插入图片描述

    ZDT2:

    在这里插入图片描述

    ZDT3:

    在这里插入图片描述

    ZDT4:

    在这里插入图片描述

    ZDT6:

    在这里插入图片描述

    DTLZ6:

    在这里插入图片描述

    Viennet2:

    在这里插入图片描述

    盘式制动器设计:

    在这里插入图片描述

    三、参考代码

    文件夹内包含NSDBO求解46个多目标测试函数(ZDT1、ZDT2、ZDT3、ZDT4、ZDT6、DTLZ1-DTLZ7、WFG1-WFG10、UF1-UF10、CF1-CF10、Kursawe、Poloni、Viennet2、Viennet3)以及1个工程应用(盘式制动器设计)的全部MATLAB代码,同时提供评价指标IGD、GD、HV和SP的完整程序,点击Main.m即可运行。完整代码获取请添加博客下方博主微信
    在这里插入图片描述

  • 相关阅读:
    【python入门专项练习】-N03.列表
    linux,write:xxx has messages disabled 与 Ubuntu多用户同时登录的问题 ubuntu 20.04
    【FPGA教程案例41】图像案例1——通过verilog读取图片
    java基础之重载与重写
    Spring Cloud zuul扩展能力设计和心得
    云电脑代替图形工作站,为什么广受业内认可?
    地理信息系统概率笔记1
    2023年【四川省安全员A证】考试资料及四川省安全员A证考试试卷
    【Linux】yum及vim
    Spring Boot(七)
  • 原文地址:https://blog.csdn.net/weixin_46204734/article/details/128176809