差分进化算法的变体之一——JADE算法

对于DE算法而言,随着迭代次数的增加,个体间的差异会逐渐降低,收敛速度也会随之下降,这会使得DE算法容易陷入局部最优和早熟收敛。所以很多研究者在原始经典的DE算法上寻求各种改进来提高DE算法的寻优能力、收敛速度、克服早熟收敛等。

DE算法主要涉及种群规模NP、缩放因子F、交叉概率CR这三个控制参数。原始的经典DE算法通常都是根据经验来选取一组固定的参数大小:NP∈[5D,10D];F通常取0.5;CR∈[0,1],通常取0.3,一般可以保证较高的寻优成功率和较快的收敛速度。而现在有很多基于控制参数改进的DE变体算法,大体可以分为适应性DE(如:jDE,JADE,SHADE等)和自适应DE(如:SPDE,DESAP,SELSDE等)。两者的共同点是,控制参数在迭代过程都会变化;不同点是,自适应DE的控制参数与种群中的个体有关且在迭代过程中会经过类似突变、交叉等操作来达到自适应的目的。

之前看了一篇关于JADE算法的文献——《JADE: Adaptive Differential Evolution with Optional External Archive》,其中讲了JADE算法的实现过程,这里相较于DE的改进主要有三点:a.用到的变异策略是Current-to-pbest;b.归档种群与不归档;c.适应性参数调整CR和F。

下面给出我自己实现的JADE的matlab代码,其中柯西分布的相关函数文件夹(CauchyFunction)是网上下载,代码分为三部分,JADE_demo.m是JADE算法的函数文件,TestFunction.m是benchmark中的13类标准测试函数组成的函数文件,JADE_RunTest.m是为了方便最后统计JADE算法run不同测试函数时的均值和方差。

JADE_demo.m:

function optValue=JADE_demo(ma,mi,gen,type)

    addpath('../CauchyFunction');

    %%初始化
    Pmax=ma;%搜索上界
    Pmin=mi;%搜索下界
    NP=100;%种群规模
    Dim=30;%个体维数
    G=0;%设置迭代器(当前迭代代数)
    uCR=0.5;%初始化交叉概率
    uF=0.5;%初始化缩放因子
    p0=0.05;
    top=p0*NP;%每代中最优的top个
    A=[];%初始归档种群为空集
    t=1;%记录归档种群A中的个体个数
    Gmax=gen;%最大迭代次数
    index=type;%测试函数类型
    
%     index=input('Input the index of TestFunction:');

    P=(Pmax-Pmin)*rand(NP,Dim)+Pmin;%随机产生初始种群个体

    %%总体大循环
    while G

你可能感兴趣的:(智能优化算法)