改进的鲸鱼算法(EWOA)优化BP神经网络原理及Matlab代码复现

目录

0 引言

1 数学模型

2 模型性能提升可视化

3 Matlab代码

3.1 伪代码

3.2 EWOA主函数代码

3.3 EWOA-BP

0 引言

为了提高鲸鱼算法全局搜索性能和局部开发性能,Mohammad H. Nadimi-Shahraki等人于2022年提出了一种增强的鲸鱼优化算法E-WOA,利用池化机制和三种有效的搜索策略:迁移、优先选择和丰富的包围猎物来提升WOA的局部和全局性能。

1 数学模型

EWOA是在WOA基础上引入池化机制来更新WOA种群增强随机性,同时采用迁移和优先选择搜索策略提高WOA全局性,丰富的包围猎物策略来提高局部开发能力,具体数学模型如下:

1)池化机制:池化机制是一种交叉算子,它将最坏的种群个体与最佳的种群个体混合,并增加多样性。具体数学模型如下:

式中B_{i}^{t}为二进制随机向量,\bar{B_{i}^{t}}是其的反向向量。

2)迁移策略:它的搜索策略是随机选择一只座头鲸进行对无人区搜索猎物。增加整个种群的多样性,从而减少局部最优捕获。

式中X^{_{rnd}^{ t}}是搜索空间范围内的一个随机位置,其中rand是0到1之间均匀分布的随机数,δmin和δmax是问题的下界和上界。X_{brnd}^{t}是在最佳座头鲸附近的一个随机位置,其中δbest min和δbest max为最佳座头鲸的的上界和上界。

3)优先选择策略:优先选择策略基础池化机制随机个体选择,提高了典型WOA中寻找猎物方法的探索能力,具体模型如下:

式中P_{rnd1}^{t},P_{rnd2}^{t}为迭代t中随机选择种群个体,Ct i使用等式定义(6),A_{i}^{t}采用柯西分布进行抽样。

4)丰富环绕猎物搜索策略:利用池化机制内随机个体丰富鲸鱼环绕猎物策略提高全局性,具体模型如下:

式中P_{rnd3}^{t}为迭代t中随机选择种群个体

2 模型性能提升可视化

EWOA-BP和WOA-BP的回归预测可视化:采用UCI回归数据。

精度指标:

寻优指标:

3 Matlab代码

3.1 伪代码

3.2 EWOA主函数代码

% 主循环
while t<Max_iteration %white(t<最大迭代次数)
    a2 = -1+t*((-1)/Max_iteration);

    % 随机选择一头鲸鱼
    P_Portion = randperm(SearchAgents_no,p_rate);

    Pop_Pool = Pool.position;
    [P_rnd1, p_rnd2] = RandIndex(size(Pop_Pool,1),SearchAgents_no);

    % 概率
    p = rand(SearchAgents_no, 1);

    %A(i)采用柯西分布取样 文献table1显示
    A = 0.5 +0.1*tan(pi *(rand(SearchAgents_no,1)-0.5));
    idx = find(A<=0);
    while ~ isempty(idx)
        A(idx) = 0.5 +0.1*tan(pi* (rand(length(idx),1)-0.5));
        idx = find(A<=0);
    end
   
    A = min(A,1);

    for i=1:size(Positions,1)  %智能体个数
        if(i ~=P_Portion)
            C = 2*rand; %Eq(6)
            b = 1;
            for j = 1:size(Positions,2)
                l = (a2-1)*rand+1;
                if p(i)< 0.5
                    %增高方式:富集包围策略
                    if A(i) < 0.5 
                        rand_leader_index = floor(size(Pop_Pool,1)* rand()+ 1);%pool内随机选择
                        P_rnd3 = Pop_Pool(rand_leader_index, j);
                        
                        D_prim = abs(C*Leader_pos(j) -P_rnd3);%Eq(17)
                        X(i,j) = Leader_pos(j) - A(i)*D_prim;%Eq(16)

                        % 增高方式:优先选择策略
                    elseif A(i)>=0.5 
                        X(i,j) = Positions(i,j) +A(i)*(C* Pop_Pool(P_rnd1(i),j)-Pop_Pool(p_rnd2(i),j));%Eq(15)
                    end
                elseif p(i)>=0.5 % 螺旋泡泡攻击
                    D_prim = abs(Leader_pos(j) -Positions(i,j));%Eq(10)
                    X(i,j) = D_prim * exp(b.*l).*cos(2*pi*l)+Leader_pos(j);%Eq(9)
                end
            end
        end
    end
    
    %增高方式:迁移搜索策略(增加种群多样性)
    best_max = max(Leader_pos);
    best_min = min(Leader_pos);
    P_Portion = P_Portion';
    X_rnd = rand(size(P_Portion,1),dim).*(ub-lb)+ lb;%Eq(13)
    X_brnd = rand(size(P_Portion,1),dim).*(best_max - best_min) +best_min ;%Eq(14)增加种群多样性
    X(P_Portion,:) = X_rnd - X_brnd;%Eq(12)
    
    % 鲸鱼维度检查及适应度
    for i = 1: size(Positions,1)
        X(i,:) = boundConstraint(X(i,:),Positions(i,:),lb,ub);
        Fit(i,1) = SYD(X(i,:),net);
        net.trainParam.showWindow = 0;       % 关闭训练窗口
        % 重新选择领导者
        if Fit(i,1) < Leader_score
            Leader_score = Fit(i,1);
            Leader_pos = X(i,:);
        end
    end
    I = (Fitness > Fit);
    Ind = find(I == 1);
    x_worst = Positions(Ind, :);
    
    % 增高方式:池化机制
    Pool = Pooling_Mechanism(Pool, dim,x_worst,Leader_pos);

    % 更新鲸鱼的位置
    Fitness(Ind) = Fit(Ind);
    Positions(Ind, :) = X(Ind,:);

3.3 EWOA-BP

单输出回归预测模型、多输出回归预测模型、分类模型和时间序列模型代码复现:

改进的鲸鱼算法优化BP神经网络代码(EWOA-BP)-CSDN博客

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、付费专栏及课程。

余额充值