BP分类优化:鸟群算法结合BP神经网络MATLAB实现

1 简介

BSA 算法优化 BP 神经网络的基本思想是: 利 用 BSA 算法的全局搜索能力, 优化 BP 神经网络初始的权值和阈值, 也就是决策变量, 其中每一组决策变量均包含在鸟群个体所处的空间位置中. 然后, 通过适应度函数来衡量个体所处空间位置的优劣度, 并利用鸟群觅食过程中的觅食行为、警戒行为和飞行行为等策略不断更新个体空间位置, 直至获取最佳的个体空间位置, 即获得待优化问题的最佳决策变量

img


BSA-BP 算法预测 PMV 指标主要包括以下几个部分: 确定训练样本数据、设计 BP 神经网络结构、利用 BSA 算法优化 BP 神经网络初始的权值和阈值、训练优化后的网络. 具体实现步骤如下:

步骤 1. 确定训练样本数据. 确定所需输入变量的取值范围; 然后, 根据 PMV 指标的数学模型, 利用MATLAB 软件编辑 PMV 指标的计算程序, 获取相当数量的样本数据; 最后, 经过预处理, 作为 BP 神经网络的训练样本和测试样本数据.

步骤 2. 设计 BP 神经网络结构. 依据标准 BP 神经网络模型以及 PMV 指标的数学模型, 确定 BP 神经网络的层数、每层的神经元数, 以及其他参数.

步骤 3. 确定 BSA 算法中各参数. 包括初始化种群规模 N、搜索空间维数 D、最大迭代次数 T、飞行间隔 FQ、觅食概率 P、常量 C、S、a1、a2、FL 以及随机初始化鸟群个体空间位置 xti.

步骤 4. 计算 BSA 算法的适应度函数值, 将样本的均方误差作为适应度函数, 找到最小的适应度值, 并保留当前最好个体空间位置. 判断算法终止条件是否满足, 若满足则转至步骤 6, 否则执行步骤

5.步骤 5. BSA 算法优化 BP 神经网络初始的权值和阈值. 依据 BSA 算法的步骤, 不断迭代进行寻优, 直到迭代停止, 输出全局最优值, 也就是最优网络初始的权值和阈值, 并将其赋给 BP 神经网络.

步骤 6. 训练 BSA 算法优化后的 BP 神经网络. 网络经训练结束后, 将得到最佳的 PMV 指标预测模型.上面所述的实现步骤可见图 3

img




2 部分代码

% ------------------------------------------------------------------------% Bird Swarm Algorithm (BSA) (demo)% This is a simple demo version only implemented the basic idea of BSA for% solving the unconstrained problem, namely Sphere function.%% The details about BSA are illustratred in the following paper.% Xian-Bing Meng, et al (2015): A new bio-inspXred optimisation algorithm:% Bird Swarm Algorithm, Journal of Experimental & Theoretical% Artificial Intelligence, DOI: 10.1080/0952813X.2015.1042530%% The parameters in BSA are presented as follows.% FitFunc    % The objective function% M          % Maxmimal generations (iterations)% pop        % Population size% dim        % Dimension% FQ         % The frequency of birds' flight behaviours% c1         % Cognitive accelerated coefficient% c2         % Social accelerated coefficient% a1, a2     % Two paramters which are related to the indirect and direct%              effect on the birds' vigilance bahaviors.%% Using the default value, BSA can be executed using the following code.% [ bestX, fMin ] = BSA% ------------------------------------------------------------------------% Main programsfunction [ bestX, fMin ,yy] = BSA( FitFunc, M, pop, dim, FQ, c1, c2, a1, a2 )% Display helphelp BSA.m%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set the default parameters% set the parameterslb= -100*ones( 1,dim );   % Lower boundsub= 100*ones( 1,dim );    % Upper bounds%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Initializationfor i = 1 : pop    x( i, : ) = lb + (ub - lb) .* rand( 1, dim );    fit( i ) = FitFunc( x( i, : ) );endpFit = fit; % The individual's best fitness valuepX = x;     % The individual's best position corresponding to the pFit[ fMin, bestIndex ] = min( fit );  % fMin denotes the global optimum% bestX denotes the position corresponding to fMinbestX = x( bestIndex, : );%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Start the iteration.for iteration = 1 : M     prob = rand( pop, 1 ) .* 0.2 + 0.8;%The probability of foraging for food     if( mod( iteration, FQ ) ~= 0 )        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        % Birds forage for food or keep vigilance        sumPfit = sum( pFit );        meanP = mean( pX );        for i = 1 : pop            if rand < prob(i)                x( i, : ) = x( i, : ) + c1 * rand.*(bestX - x( i, : ))+ ...                    c2 * rand.*( pX(i,:) - x( i, : ) );            else                person = randiTabu( 1, pop, i, 1 );                 x( i, : ) = x( i, : ) + rand.*(meanP - x( i, : )) * a1 * ...                    exp( -pFit(i)/( sumPfit + realmin) * pop ) + a2 * ...                    ( rand*2 - 1) .* ( pX(person,:) - x( i, : ) ) * exp( ...                    -(pFit(person) - pFit(i))/(abs( pFit(person)-pFit(i) )...                    + realmin) * pFit(person)/(sumPfit + realmin) * pop );            end             x( i, : ) = Bounds( x( i, : ), lb, ub );            fit( i ) = FitFunc( x( i, : ) );        end        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%     else        FL = rand( pop, 1 ) .* 0.4 + 0.5;    %The followed coefficient         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        % Divide the bird swarm into two parts: producers and scroungers.        [ans, minIndex ] = min( pFit );        [ans, maxIndex ] = max( pFit );        choose = 0;        if ( minIndex < 0.5*pop && maxIndex < 0.5*pop )            choose = 1;        end        if ( minIndex > 0.5*pop && maxIndex < 0.5*pop )            choose = 2;        end        if ( minIndex < 0.5*pop && maxIndex > 0.5*pop )            choose = 3;        end        if ( minIndex > 0.5*pop && maxIndex > 0.5*pop )            choose = 4;        end        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%        if choose < 3            for i = (pop/2+1) : pop                x( i, : ) = x( i, : ) * ( 1 + randn );                x( i, : ) = Bounds( x( i, : ), lb, ub );                fit( i ) = FitFunc( x( i, : ) );            end            if choose == 1                x( minIndex,: ) = x( minIndex,: ) * ( 1 + randn );                x( minIndex, : ) = Bounds( x( minIndex, : ), lb, ub );                fit( minIndex ) = FitFunc( x( minIndex, : ) );            end            for i = 1 : 0.5*pop                if choose == 2 || minIndex ~= i                    person = randi( [(0.5*pop+1), pop ], 1 );                    x( i, : ) = x( i, : ) + (pX(person, :) - x( i, : )) * FL( i );                    x( i, : ) = Bounds( x( i, : ), lb, ub ); end% End of the main program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% The following functions are associated with the main program%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% This function is the objective function

3 仿真结果


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空