• 大小: 11KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-01
  • 语言: Matlab
  • 标签: BBO  DE,Matlab  

资源简介

一种比较新的生物地理学算法(BBO)以及BBO算法和差分进化算法相结合的matlab程序,程序优化较好,比较小,运行速度快。

资源截图

代码片段和文件信息

%BBO算法,无改进,整理时间:2011.06.10

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;                           % 对于每个栖息地的最大迁出率

%确定每个参数的取值范围
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(Sizei);
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 ;  
    %保存最优个体
    for j = 1 : Keep
        chromKeep(j:) = Population(j).chrom;
        costKeep(j) = Population(j).cost;
    end

    for i = 1 : length(Population)
        %求种群数量
        if Population(i).cost < inf
            Population(i).SpeciesCount = Size - i;
        else
            Population(i).SpeciesCount = 0;
        end
        %计算每个栖息地的移入移出率
        %余弦模型
        lambda(i) = 0.5 * I * (cos(pi*Population(i).SpeciesCount / Size)+1);
        mu(i) = 0.5 * e * (-cos(pi*Population(i).SpeciesCount / Size)+1);
        %二次模型
    %     lambda(i) =  I * (Population(i).SpeciesCount / Size -1)^2;
    %     mu(i) = e * (Population(i).SpeciesCount / Size )^2;
        %指数模型
    %     lambda(i) = I * exp(-Population(i).SpeciesCount / Size);
    %     mu(i) = e * exp(Population(i).SpeciesCount / Size - 1) ;
        %线性模型
%         lambda(i) = I * (1 - Population(i).SpeciesCount / Size);
%         mu(i) = e * Population(i).SpeciesCount / Size;
    end
    lambdaMin = min(lambda);
    lambdaMax = max(lambda);
    for k = 1:1 : Size
        if rand > pmodify
            continue;
        end
        %标准化移入率
        lambdaScale = lambdaLower + (lambdaUpper - lambdaLower) * (lambda(k) - lambdaMin) / (lambdaMax - lambdaMin);
        %迁移操作,概率的输入新的信息到栖息地i
        for j = 1 : NumVar
            if rand < lambdaScale         
                RandomNum = rand * sum(mu);
                Select = mu(1);
                SelectIndex = 1;
                while (RandomNum > Select) & (SelectIndex < Size)
                    SelectIndex = SelectIndex + 1;
                    Select = Select + mu(SelectIndex);
                end
                Island(kj) = Population(SelectIndex).chrom(j);
            else
                Island(kj) = Population(k).chrom(j);
            end
        end
    end
 for j = 1 : 1 :Size
         %余弦模型
        lambdaMinus = 0.5 * I * (cos(pi*(Population(j).SpeciesCount-1) / Size)+1);
        muPlus = 0.5 * e * (-cos(pi*(Population(j).Species

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-08-21 16:02  BBO\
     文件        5686  2013-08-21 10:49  BBO\BBO.asv
     文件        5796  2013-08-21 16:24  BBO\BBO.m
     文件        5251  2013-08-21 10:49  BBO\BBODE.m
     文件        4299  2013-08-21 10:49  BBO\BBODE_2.m
     文件        5765  2013-08-21 10:49  BBO\BBO_1.asv
     文件        5822  2013-08-21 10:49  BBO\BBO_1.m
     文件         530  2013-08-21 10:49  BBO\PopSort.m

评论

共有 条评论