鲸鱼算法(WOA)优化BP神经网络原理及matlab代码

0 引言

1 数学模型

2 优化BP神经网络

2.1 优化的方式

2.2 伪代码

3 matlab代码

3.1 主函数代码

3.2 WOA-BP的matlab代码

4 代码视频讲解

0 引言

鲸鱼优化算法 (Whale Optimization Algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出的一种新的群体智能优化算法。该算法是模拟了座头鲸的狩猎行为,即寻找猎物、环绕猎物和气泡攻击。

1 数学模型

WOA狩猎行为是一种特殊的狩猎方法,这种觅食行为被称为“bubble-net”捕食策略,如图1所示,以下是对其算法原理数学模型构建:

图1 座头鲸的泡泡网捕食行为


(1) 包围猎物:座头鲸在狩猎时需进行包围猎物

式(2.1)为鲸鱼包围猎物的距离,式子(2.2)为对应的位置,A和C为系数向量对应公式为(2.3)和(2.4),a为从2到0的线性下降的向量

(2)狩猎行为:螺旋运动:模拟座头鲸螺旋运动游向猎物时更新位置(开发阶段)

式中D向量为最好座头鲸与猎物之间距离,X*(t)为最好鲸鱼的位置,b为一个定义螺旋形状的常数,I为±1之间随机数。

(3)狩猎行为:收缩包围机制:鲸鱼以螺旋形状游向猎物同时也在不断收缩包围圈更新鲸鱼位置,因此在这俩种狩猎行为中,作者假设一个概率Pi,当Pi时进行收缩包围机制,在1-Pi时进行上述螺旋运动。其数学模型见下(开发阶段)

(4)搜索猎物:为了防止WOA算法陷入局部最优,算法还进行上述活动的过程随机生成一只鲸鱼在其他位置进行上述运动,体现模型全局性(搜索阶段)

式中Xrand为随机鲸鱼的位置向量。

2 优化BP神经网络

2.1 优化的方式

前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述WOA原理介绍,可以将BP神经网络权值和阈值作为鲸鱼种群,每一个种群对应BP神经网络的预测值,将这个预测值作为适应度进行上述狩猎活动,更新最优座头鲸位置。

2.2 伪代码

3 matlab代码

3.1 主函数代码

%% 参数
% Max_iteration 最大迭代次数
% Positions 种群数量
% SYD %适应度函数
% Leader_score %最优座头鲸适应度
% Leader_pos  % 最优座头鲸位置
% dim %问题维度

% WOA主函数
while t<Max_iteration %white(t<最大迭代次数)
    for i=1:size(Positions,1)  %智能体个数
        
       % 超出边界处理
        Flag4ub=Positions(i,:)>ub;
        Flag4lb=Positions(i,:)<lb;
        Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; %返回限制边界               
        
        % 计算鲸鱼群的适应度函数
        X = reshape(Positions(i,:),1,dim);
        fitness = SYD(X,net);
        net.trainParam.showWindow = 0;       % 关闭训练窗口
        
        % 跟新领导者
        if fitness < Leader_score 
           Leader_score = fitness; 
            Leader_pos = Positions(i,:);
        end
    end
    a = 2-t*((2)/Max_iteration);
    a2 = -1 + t*((-1)/Max_iteration);

    for i = 1: size(Positions, 1)
        r1 = rand();
        r2 = rand();

        A = 2 *a *r1 -a;
        C =2*r2;

        b = 1;
        l =(a2 -1)*rand +1;
        p = rand();
        for j = 1: size(Positions, 2)
            if p< 0.5
                if abs(A)>=1
                    rand_leader_index = floor(SearchAgents_no* rand()+ 1);
                    x_rand = Positions(rand_leader_index, :);
                    D_x_rand = abs(C*x_rand(j) -Positions(i,j));%Eq(2.7)
                    Positions(i,j) = x_rand(j) - A*D_x_rand;%Eq(2.8)

                elseif abs(A)<1
                    D_Leader = abs(C * Leader_pos(j) -Positions(i,j));% Eq(2.6)
                    Positions(i,j) = Leader_pos(j) -A* D_Leader;% Eq(2.6)
                end

            elseif p>=0.5

                distance2Leader = abs (Leader_pos(j)- Positions(i,j));
                Positions(i,j) = distance2Leader* exp(b.*l).* cos(l.*2*pi)+Leader_pos(j);% Eq(2.5) 
            end
        end
    end

    t =t+1;
    Convergence_curve(t) = Leader_score;
    [t Leader_score]
end

3.2 WOA-BP的matlab代码

单输出回归预测:单输出回归预测:鲸鱼算法优化BP神经网络模型(WOA-BP)

多输出回归预测:多输出回归预测:鲸鱼算法优化BP神经网络模型(WOA-BP)

分类预测:分类模型:鲸鱼算法优化BP神经网络模型(WOA-BP)

时间序列预测:时间序列:鲸鱼算法优化BP神经网络模型(WOA-BP)

4 代码视频讲解

B站搜索:‘ 不想学习的陈成 ’

  • 19
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WOA-BP鲸鱼算法优化BP神经网络是一种常见的神经网络优化方法。下面是一些基本概念和实现步骤: 1. WOA-BP鲸鱼算法简介 WOA-BP鲸鱼算法是一种基于鲸鱼群智能优化算法BP神经网络优化方法。其基本思想是通过模拟鲸鱼的迁徙和捕食行为来寻找最优解。 2. BP神经网络简介 BP神经网络是一种常见的人工神经网络模型,其基本思想是通过反向传播算法来训练神经网络,从而实现对输入输出之间的映射关系进行学习和建模。 3. WOA-BP鲸鱼算法优化BP神经网络步骤 (1) 初始化BP神经网络参数和WOA算法参数; (2) 根据当前种群位置计算适应度函数值; (3) 利用WOA算法更新种群位置; (4) 根据更新后的位置计算新的适应度函数值,并根据新的适应度函数值对种群进行排序; (5) 判断是否满足停止条件,如果满足,则输出最优解,否则返回步骤2。 4. Matlab代码实现 以下是Matlab代码实现的基本框架: ``` % Step 1: 初始化BP神经网络参数和WOA算法参数 % Step 2: 根据当前种群位置计算适应度函数值 % Step 3: 利用WOA算法更新种群位置 % Step 4: 根据更新后的位置计算新的适应度函数值,并根据新的适应度函数值对种群进行排序 % Step 5: 判断是否满足停止条件,如果满足,则输出最优解,否则返回步骤2 % 以下是一个简单的示例代码: % Step 1: 初始化BP神经网络参数和WOA算法参数 pop_size = 10; % 种群大小 max_iter = 100; % 最大迭代次数 dim = 10; % 每个个体的维度 c1 = 2; % 常数c1 c2 = 2; % 常数c2 c3 = 2; % 常数c3 a = 2; % 常数a x_max = 100; % 变量x的上限 x_min = -100; % 变量x的下限 w_max = 1; % 权重w的上限 w_min = -1; % 权重w的下限 pop_position = rand(pop_size,dim); % 随机初始化种群位置 pop_fitness = zeros(1,pop_size); % 初始化种群适应度函数值 % Step 2: 根据当前种群位置计算适应度函数值 for i=1:pop_size pop_fitness(i) = fitness_func(pop_position(i,:)); % 计算适应度函数值 end % Step 3: 利用WOA算法更新种群位置 for t=1:max_iter % 迭代次数循环 for i=1:pop_size % 种群个体循环 r1 = rand(); r2 = rand(); A = 2*a*r1-a; C = 2*r2; b = 1; l = (a-1)*rand()+1; p = rand(); % 随机生成参数p if p<0.5 % 更新个体位置 for j=1:dim if rand()<0.5 D = abs(C*pop_position(i,j)-pop_position(i,j)); pop_position(i,j) = D*exp(b*l)*cos(2*pi*l)+pop_position(i,j); else D = abs(C*pop_position(i,j)-pop_position(i,j)); pop_position(i,j) = D*exp(b*l)*sin(2*pi*l)+pop_position(i,j); end if pop_position(i,j)>x_max % 边界处理 pop_position(i,j) = x_max; elseif pop_position(i,j)<x_min pop_position(i,j) = x_min; end end else % 更新种群位置 for j=1:dim % 根据WOA-BP算法来更新种群中所有个体的位置,并求出每个个体的适应度函数值 r3 = rand(); D = abs(pop_position(i,j)-pop_position(r3,j)); pop_position(i,j) = D*cos(c1*2*pi)*pop_position(r3,j)+D*cos(c2*2*pi)*pop_position(best_index,j)+D*cos(c3*2*pi)*rand(); if pop_position(i,j)>x_max % 边界处理 pop_position(i,j) = x_max; elseif pop_position(i,j)<x_min pop_position(i,j) = x_min; end end for j=1:dim % 根据新位置计算适应度函数值并更新最优解个体序号best_index fitness_val_new = fitness_func(pop_position(i,:)); if fitness_val_new<pop_fitness(i) pop_fitness(i) = fitness_val_new; best_index=i; end if fitness_val_new<pop_fitness(best_index) best_index=i; end end end end end % Step 4: 根据更新后的位置计算新的适应度函数值,并根据新的适应度函数值对种群进行排序 for i=1:pop_size % 根据新位置计算适应度函数值并更新最优解个体序号best_index fitness_val_new = fitness_func(pop_position(i,:)); if fitness_val_new<pop_fitness(i) pop_fitness(i) = fitness_val_new; best_index=i; end if fitness_val_new<pop_fitness(best_index) best_index=i; end end [sorted_fit, sorted_index] = sort(pop_fitness); % 排序 % Step 5: 判断是否满足停止条件,如果满足,则输出最优解,否则返回步骤2 if sorted_fit(1)<min_fitness_val % 达到最小误差则停止迭代,输出最优解 best_solution = pop_position(sorted_index(1),:); fprintf('The best solution is:\n'); disp(best_solution); else % 没有达到最小误差,则继续迭代下去 continue; end % 定义适应度函数fitness_func,根据当前权重计算误差值并返回fitness_val function fitness_val=fitness_func(weights) ... (根据权重weights计算误差并返回fitness_val) end ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值