首页 > 行业资讯 > 【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码

【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码

时间:2022-05-01 来源: 浏览:

【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码

天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #神经网络预测matlab源码 256个

1 简介

BP神经网络算法使用非常广泛,传统的BP神经网络算法虽然具有不错的拟合非线性函数的能力,但是容易陷入局部的极小值,并且传统的算法收敛的速度慢.本篇文章详细地论述了如何使用生物地理算法优化传统的BP神经网络算法中初始的权值和阀值,通过相应的验证和比较提出了该模型的有效性.

2 部分代码

%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(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 ; %保存最优个体 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(k,j) = Population(SelectIndex).chrom(j); else Island(k,j) = 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).SpeciesCount+1) / Size)+1); %二次模型 % lambdaMinus = I * ((Population(j).SpeciesCount-1) / Size -1)^2; % muPlus = e * ((Population(j).SpeciesCount+1) / Size )^2; %指数模型 % lambdaMinus = I * exp(-(Population(j).SpeciesCount-1) / Size); % muPlus = e * exp((Population(j).SpeciesCount+1) / Size - 1) ; %线性模型 % lambdaMinus = I * (1 - (Population(j).SpeciesCount-1) / Size); % muPlus = e * (Population(j).SpeciesCount+1) / Size; if j < Size ProbMinus = Prob(j+1); else ProbMinus = 0; end if j > 1 ProbPlus = Prob(j-1); else ProbPlus = 0; end ProbDot(j) = -(lambda(j) + mu(j)) * Prob(j) + lambdaMinus * ProbMinus + muPlus * ProbPlus; end % 计算每个栖息地的种群数量概率P(si) Prob = Prob + ProbDot * dt; Prob = max(Prob, 0); Prob = Prob / sum(Prob); %变异操作 Pmax = max(Prob); MutationRate = pmutate * (1 - Prob / Pmax); for k = (Size/2): 1: Size for parnum = 1 : NumVar if MutationRate(k) > rand Island(k,parnum) = MinX(parnum)+(MaxX(parnum)-MinX(parnum))*rand; end end end for i=1:1:Size Q(i) = Ackley(Island(i,:)); if Q(i)<Population(i).cost Population(i).cost = Q(i); Population(i).chrom = Island(i,:); 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 b = Population(1).chrom; figure(1); plot(time,BestJ); title(’最小误差进化过程’) xlabel(’进化次数’); ylabel(’最小误差’); save BBO b;

3 仿真结果

4 参考文献

[1]肖雄. PSO优化BP神经网络岩爆预测的Matlab实现[J]. 中国房地产业, 2018(17):1.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐