資源簡介
生物地理學(xué)優(yōu)化算法(BBO)是一種進(jìn)化算法和元啟發(fā)式方法,其靈感來自生物地理概念:物種形成(新物種的進(jìn)化),島嶼之間的物種遷移以及物種的滅絕。該算法最初由Dan Simon在2008年提出。在本文中,我們將與您分享MATLAB中基于生物地理的優(yōu)化(BBO)的結(jié)構(gòu)開源實現(xiàn)。

代碼片段和文件信息
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??生物地理學(xué)優(yōu)化BBO\bbo.m
?????文件?????????10??2019-12-24?19:52??生物地理學(xué)優(yōu)化BBO\main.m
?????文件????????109??2019-12-24?19:52??生物地理學(xué)優(yōu)化BBO\RouletteWheelSelection.m
?????文件?????????51??2019-12-24?19:53??生物地理學(xué)優(yōu)化BBO\Sphere.m
?????目錄??????????0??2019-12-24?19:51??生物地理學(xué)優(yōu)化BBO
-----------?---------??----------?-----??----
?????????????????3220????????????????????5
評論
共有 條評論