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(1,0,nPop); % 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(habitat,nPop,1);
% Initialize Habitats
for i=1:nPop
pop(i).Position=unifrnd(VarMin,VarMax,VarSize);
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(MaxIt,1);
%% 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('Iteration');
ylabel('Best Cost');
grid on;
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
生物地理学优化BBO.rar (4个子文件)
生物地理学优化BBO
main.m 10B
bbo.m 3KB
RouletteWheelSelection.m 109B
Sphere.m 51B
共 4 条
- 1
资源评论
qq_33369554
- 粉丝: 9
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功