欢迎光临散文网 会员登陆 & 注册

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

2022-05-21 00:06 作者:Matlab工程师  | 我要投稿

1 简介

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

2 部分代码

%BBO算法,主要是对消除重复样本的操作进行了改进,整理时间:2011.06.10clear allclose allG = 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)endb=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代码问题可私信交流。

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



【BP预测】基生物地理算法优化BP神经网络实现数据预附matlab代码的评论 (共 条)

分享到微博请遵守国家法律