资源简介
一种比较新的生物地理学算法(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
- 上一篇:用matlab实现角点检测源代码
- 下一篇:jpeg图像压缩matlab程序
评论
共有 条评论