萤火虫算法优化BP神经网络原理及MATLAB代码复现

目录

0 引言

1 数学模型

2 优化方式

3 MATLAB代码

3.1 伪代码

3.2 FA主函数代码

3.3 FA-BP

0 引言

萤火虫算法(Firefy Algorithm,FA)是由学者Yang于2008年提出一种元启发式算法,该算法模仿自然界中萤火虫成虫发光特性的随机优化算发,通过萤火虫彼此吸引并赋予问题解答作为目标值,从而来得到最佳的目标值。

1 数学模型

FA的数学模型主要对萤火虫相互吸引过程进行数学模型构建,萤火虫相互吸引取决自身亮度和吸引度。其中,萤火虫发出荧光的亮度取决于自身所在位置的目标值,亮度越高表示所处的位置越好,即目标值越佳。吸引度与亮度有关,愈亮的萤火虫拥有愈高的吸引力,可吸引视线范围内亮度比其弱的萤虫往这个方向移动 。如果发光亮度相同,则萤火虫各自随机移动;具体模型如下:

1)定义亮度和吸引度:萤火虫相互吸引取决自身亮度和吸引度,其模型如下:

式中I0为初始亮度,γ为亮度损失因素,r为两个萤火虫之间的距离;β0为初始吸引度。

2)萤火虫的距离:采用欧几里得距离计算,具体如下:

式中问题的维度由“n”表示。si为第i个频率的萤火虫

3)萤火虫的移动:萤火虫i被吸引向萤火虫j移动的位置更新,具体模型构建如下:

式中rij为萤火虫i,j之间的距离。α为步长因子,∈i为高斯分布的随机数向量;

2 优化方式

前篇对BP神经网络原理讲解(BP神经网络原理及Matlab代码复现-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述FA原理介绍,可以将BP神经网络权值和阈值作为萤火虫个体位置,每一个种群位置对应BP神经网络的预测值,将这个预测值作为适应度进行萤火虫的亮度进行相互吸引,模拟萤火虫的移动策略,更新下一代萤火虫个体。

3 MATLAB代码

3.1 伪代码

3.2 FA主函数代码

%%FA的主函数
% 基础参数
beta0 = 2;
gama = 1;
alpha = 0.2;

damx = norm(ub - lb); %二范数

% 初始化
x = initialization(fa_pop, ub, lb, dim);
Fitness = zeros (1,fa_pop);

for i = 1: fa_pop
    Fitness (i) = fun(x,net);
end
[~,index] = min(Fitness);
global_Best_pos = x(index,:);
global_Best_score = Fitness(index);

x_nex = x;

% 主函数,确定萤火虫亮度和位置
for t = 1: fa_maxter
    for i = 1: fa_pop
        for j = 1: fa_pop
            if Fitness(j)< Fitness(i)
                r_ij = norm(x(i,:)- x(j,:))./damx;
                beta = beta0* exp(-gama*r_ij^2);
                pos_new = x(i,:)+ beta* (x(j,:)-x(i,:))+alpha.*rand(1,dim);
                pos_new = boundary(pos_new,ub,lb,dim);
                Fitness_new = fun(pos_new,net);
                if Fitness_new <Fitness(i)
                    x_nex(i,:) = pos_new;
                    Fitness(i) = Fitness_new;
                    if Fitness_new < global_Best_score
                        global_Best_score = Fitness_new;
                        global_Best_pos = pos_new;
                    end
                end
            end
        end
    end
    x_double= [x;x_nex];
    for i = 1: 2 * fa_pop
        Fitness_double(i) = fun(x_double(i,:),net);
    end
    [~,Sortindex] = sort(Fitness_double);
    for k =1: fa_pop
        x(k,:) = x_double(Sortindex(k),:);
    end

    Intercure(t) = global_Best_score;
end
Best_pos = global_Best_pos;
Best_score = global_Best_score;

end

3.3 FA-BP

萤火虫算法优化BP神经网络的单输出和多输出回归预测模型、分类模型及时间序列模型的MATLAB代码:(萤火虫算法(FA)优化BP神经网络的MATLAB代码复现-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值