【优化求解-单目标求解】基于差分进化算法结合生物地理算法DE-BBO求解单目标问题matlab源码

154 阅读2分钟

 1 模型

针对生物地理学优化训练多层感知器存在的早熟收敛以及初始化灵敏等问题,提出一种基于差分进化生物地理学优化的多层感知器训练方法.将生物地理学优化(biogeography-based optimization,BBO)与差分进化(differential evolution,DE)算法相结合,形成改进的混合DE_BBO算法;采用改进的DE_BBO来训练多层感知器(multi-layer perceptron,MLP),,DE_BBO_MLP算法在分类精度和收敛速度等方面优于已有方法.

img

img

img

img

img

img

img

img

img

img

img

img

img

2 部分代码

%BBO与DE结合算法,当进化代数G为奇数时,采用BBO算法,偶数采用DE算法。

clear all

close all

G = 200;                         % 进化代数

Size = 50;                       % 种群规模

pmodify = 1;                     % 迁移概率

NumVar = 35;                     % 参数个数

Keep = 3;                        % 精因个数

pmutate = 0.05;                  % 变异概率

lambdaLower = 0.0;               % 对于每个基因的最小迁入率

lambdaUpper = 1;                 % 对于每个基因的最大迁入率

dt = 1;                          % 步长

I = 1;                           % 对于每个栖息地的最大迁入率

e = 1;                           % 对于每个栖息地的最大迁出率

F=0.6;                           % 差分因子

C=0.2;                           % 变异概率

%确定每个参数的取值范围

for i=1:1:NumVar

    MinX(i)=-32;

    MaxX(i)=32;

end

%初始化种群

for i=1:1:NumVar

    E=MinX(i)+(MaxX(i)-MinX(i))*rand(Size,i);

end

%求适应度值

for i=1:1:Size

    Population(i).chrom=E(i,:);

    p=Population(i).chrom;

    Population(i).cost=Ackley(p);

end

%排序

Population = PopSort(Population);

%初始化种群概率

for j = 1 : Size

    Prob(j) = 1 / Size; 

end

%进化开始

for kg = 1:1:G

    time(kg) = kg ;   

    %对误差排序,求出最好误差

        end

    end

    %排序

    Population = PopSort(Population);

    for k = 1 : Keep

        Population(Size-k+1).chrom = chromKeep(k,:);

        Population(Size-k+1).cost = costKeep(k);

    end

    %对超出取值范围的样本进行重新赋值

    for i = 1 : Size

        for k = 1 : NumVar

            Population(i).chrom(k) = max(Population(i).chrom(k), MinX(k));

            Population(i).chrom(k) = min(Population(i).chrom(k), MaxX(k));

        end

    end

    %对相同的样本进行重新赋值

    for i = 1 : length(Population)

        Chrom1 = sort(Population(i).chrom);

        for j = i+1 : length(Population)

            Chrom2 = sort(Population(j).chrom);

            if isequal(Chrom1, Chrom2)

                parnum = ceil(length(Population(j).chrom) * rand);

                Population(j).chrom(parnum) = min(Chrom1)+(max(Chrom2)-min(Chrom1))*rand;

            end

        end

    end

    

    BestJ(kg) = Population(1).cost; 

    kg  %进化次数

    BestJ(kg)

end

figure(1);

plot(time,BestJ);

title('最小误差进化过程')

xlabel('进化次数');

ylabel('最小误差');

3 仿真结果

4 参考文献

[1]王存睿等. "生物地理学优化算法综述." 计算机科学 37.007(2010):34-38.

[2]王娟, 吴宪祥, & 曹艳玲. (2017). 基于差分进化生物地理学优化的多层感知器训练方法. 计算机应用研究, 34(003), 693-696.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页