%% 生物地理学优化算法
clc;
clear;
close all;
%% 问题定义
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参数设置
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);
%% 初始化
% 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主循环
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
%% 结果输出
figure;
semilogy(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
legend('BBO')
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
生物地理学优化算法 (Biogeography-Based Optimization, BBO) 是一种基于生物地理学原理的元启发式优化算法,由Dan Simon于2008年提出。BBO通过模拟物种在不同栖息地之间的迁移过程来搜索最优解,适用于解决复杂的优化问题。 BBO的工作机制主要包括: 初始化:随机生成一组初始解,每个解代表一个“栖息地”。 适应度评估:根据目标函数计算每个栖息地的适应度值。 迁移操作:高适应度栖息地向低适应度栖移居,模拟物种迁移过程,更新解。 突变操作:引入随机突变以增加种群多样性,防止早熟收敛。 优点包括: 全局搜索能力:BBO能够有效地探索解空间的不同区域。 鲁棒性强:适用于多种优化问题,包括连续和离散优化。 易于实现:算法设计直观,易于编程实现。
资源推荐
资源详情
资源评论
收起资源包目录
BBO.rar (3个子文件)
BBO
Sphere.m 52B
RouletteWheelSelection.m 100B
main.m 3KB
共 3 条
- 1
资源评论
十七算法实验室
- 粉丝: 581
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功