1 模型
针对生物地理学优化训练多层感知器存在的早熟收敛以及初始化灵敏等问题,提出一种基于差分进化生物地理学优化的多层感知器训练方法.将生物地理学优化(biogeography-based optimization,BBO)与差分进化(differential evolution,DE)算法相结合,形成改进的混合DE_BBO算法;采用改进的DE_BBO来训练多层感知器(multi-layer perceptron,MLP),,DE_BBO_MLP算法在分类精度和收敛速度等方面优于已有方法.
2 部分代码
%BBO与DE结合算法,当进化代数G为奇数时,采用BBO算法,偶数采用DE算法。
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; % 对于每个栖息地的最大迁出率
F=0.6; % 差分因子
C=0.2; % 变异概率
%确定每个参数的取值范围
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(Size,i);
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 ;
%对误差排序,求出最好误差
end
end
%排序
Population = PopSort(Population);
for k = 1 : Keep
Population(Size-k+1).chrom = chromKeep(k,:);
Population(Size-k+1).cost = costKeep(k);
end
%对超出取值范围的样本进行重新赋值
for i = 1 : Size
for k = 1 : NumVar
Population(i).chrom(k) = max(Population(i).chrom(k), MinX(k));
Population(i).chrom(k) = min(Population(i).chrom(k), MaxX(k));
end
end
%对相同的样本进行重新赋值
for i = 1 : length(Population)
Chrom1 = sort(Population(i).chrom);
for j = i+1 : length(Population)
Chrom2 = sort(Population(j).chrom);
if isequal(Chrom1, Chrom2)
parnum = ceil(length(Population(j).chrom) * rand);
Population(j).chrom(parnum) = min(Chrom1)+(max(Chrom2)-min(Chrom1))*rand;
end
end
end
BestJ(kg) = Population(1).cost;
kg %进化次数
BestJ(kg)
end
figure(1);
plot(time,BestJ);
title('最小误差进化过程')
xlabel('进化次数');
ylabel('最小误差');
3 仿真结果
4 参考文献
[1]王存睿等. "生物地理学优化算法综述." 计算机科学 37.007(2010):34-38.
[2]王娟, 吴宪祥, & 曹艳玲. (2017). 基于差分进化生物地理学优化的多层感知器训练方法. 计算机应用研究, 34(003), 693-696.
部分理论引用网络文献,若有侵权联系博主删除。
5 MATLAB代码与数据下载地址
见博客主页