• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: Matlab
  • 标签: BBO  matlab  

资源简介

生物地理学优化算法(BBO)是一种进化算法和元启发式方法,其灵感来自生物地理概念:物种形成(新物种的进化),岛屿之间的物种迁移以及物种的灭绝。该算法最初由Dan Simon在2008年提出。在本文中,我们将与您分享MATLAB中基于生物地理的优化(BBO)的结构开源实现。

资源截图

代码片段和文件信息

clc;
clear;
close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function

nVar=5;             % Number of Decision Variables

VarSize=[1 nVar];   % Decision Variables Matrix Size

VarMin=-10;         % Decision Variables Lower Bound
VarMax= 10;         % Decision Variables Upper Bound

%% BBO Parameters

MaxIt=1000;          % Maximum Number of Iterations

nPop=50;            % Number of Habitats (Population Size)

KeepRate=0.2;                   % Keep Rate
nKeep=round(KeepRate*nPop);     % Number of Kept Habitats

nNew=nPop-nKeep;                % Number of New Habitats

% Migration Rates
mu=linspace(10nPop);          % Emmigration Rates
lambda=1-mu;                    % Immigration Rates

alpha=0.9;

pMutation=0.1;

sigma=0.02*(VarMax-VarMin);

%% Initialization

% Empty Habitat
habitat.Position=[];
habitat.Cost=[];

% Create Habitats Array
pop=repmat(habitatnPop1);

% Initialize Habitats
for i=1:nPop
    pop(i).Position=unifrnd(VarMinVarMaxVarSize);
    pop(i).Cost=CostFunction(pop(i).Position);
end

% Sort Population
[~ SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);

% Best Solution Ever Found
BestSol=pop(1);

% Array to Hold Best Costs
BestCost=zeros(MaxIt1);

%% BBO Main Loop

for it=1:MaxIt
    
    newpop=pop;
    for i=1:nPop
        for k=1:nVar
            % Migration
            if rand<=lambda(i)
                % Emmigration Probabilities
                EP=mu;
                EP(i)=0;
                EP=EP/sum(EP);
                
                % Select Source Habitat
                j=RouletteWheelSelection(EP);
                
                % Migration
                newpop(i).Position(k)=pop(i).Position(k) ...
                    +alpha*(pop(j).Position(k)-pop(i).Position(k));
                
            end
            
            % Mutation
            if rand<=pMutation
                newpop(i).Position(k)=newpop(i).Position(k)+sigma*randn;
            end
        end
        
        % Apply Lower and Upper Bound Limits
        newpop(i).Position = max(newpop(i).Position VarMin);
        newpop(i).Position = min(newpop(i).Position VarMax);
        
        % Evaluation
        newpop(i).Cost=CostFunction(newpop(i).Position);
    end
    
    % Sort New Population
    [~ SortOrder]=sort([newpop.Cost]);
    newpop=newpop(SortOrder);
    
    % Select Next Iteration Population
    pop=[pop(1:nKeep)
         newpop(1:nNew)];
     
    % Sort Population
    [~ SortOrder]=sort([pop.Cost]);
    pop=pop(SortOrder);
    
    % Update Best Solution Ever Found
    BestSol=pop(1);
    
    % Store Best Cost Ever Found
    BestCost(it)=BestSol.Cost;
    
    % Show Iteration Information
    disp([‘Iteration ‘ num2str(it) ‘: Best Cost = ‘ num2str(BestCost(it))]);
    
end

%% Results

figure;
%plot(BestCost‘LineWidth‘2);
semilogy(BestCost‘LineWidth‘2);
xlabel(‘

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3050  2019-12-24 19:52  生物地理学优化BBO\bbo.m

     文件         10  2019-12-24 19:52  生物地理学优化BBO\main.m

     文件        109  2019-12-24 19:52  生物地理学优化BBO\RouletteWheelSelection.m

     文件         51  2019-12-24 19:53  生物地理学优化BBO\Sphere.m

     目录          0  2019-12-24 19:51  生物地理学优化BBO

----------- ---------  ---------- -----  ----

                 3220                    5


评论

共有 条评论