变色龙算法(CSA)优化BP神经网络原理及Matlab代码

目录

0 引言

1 数学模型

2 优化方式

3 Maltab代码

3.1 伪代码

3.2 CSA主函数代码

3.3 CSA-BP

4 视频讲解

0 引言

变色龙算法(Chameleon Swarm Algorithm,CSA)是由Malik Shehadeh Braik于2021年提出一种新型智能优化算法,该算法模拟了变色龙在树木、沙漠和沼泽附近寻找食物时的动态行为,该过程包括了变色龙将眼睛旋转到近360◦的视觉范围来定位猎物,并利用它们粘稠的舌头高速发射来抓住猎物。从而在解决问题能全局搜索和精确定位问题解。

1 数学模型

CSA算法对变色龙寻找食物动态行为进行建模,包括了其眼睛旋转到近360◦的视觉范围来定位猎物,并利用它们粘稠的舌头高速发射来抓住猎物的行为建模构建。

1)初始化种群:变色龙基于种群算法,故在初始设定种群上采用随机方式来布置变色龙位置。

式中t为种群数,d为问题维度,l,u为问题维度的上下界限,r为0到1的随机数。

2)寻找猎物:变色龙在觅食过程中的运动行为可以使用位置更新策略进行数学建模.

式中p1和p2为控制探索能力的俩个正数,P为全局变色龙最佳位置,G为个体最佳变色龙位置,r1,r2,r3为0到1的随机数,Pp为变色龙的感知猎物的概率,sgn(rand-0.5)为-1和1,主要影响探索和开发方向,u为迭代函数参数,其公式见Eq(6),γ,α,β是控制勘探和开发能力的三个常数值,分别为2,4,3,t为当前迭代次数,T为最大迭代次数。

3)变色龙的眼睛旋转:变色龙有能力通过眼睛的旋转特征来识别猎物的位置,从而靠近猎物来更新自身位置:

变色龙眼睛选自定位识别猎物位置:y(-)为变色龙各维度平均位置,yr旋转中心,见下式:

旋转中心模型构建:m为变色龙旋转的旋转矩阵,见式(14),yc为中心坐标,见下式:

中心坐标:

旋转矩阵:R为定义各轴的旋转矩阵,见式(16)和(17);Vz1,z2为坐标空间俩个正交向量,θ变色龙眼睛旋转角度,见式(15),

各轴的旋转矩阵:ϕ表示绕x轴,y轴的旋转角度

变色龙眼睛旋转角度:

4)捕食猎物:变色龙定位并接近猎物时,变色龙被认为是最好的变色龙会用舌头攻击猎物更新自身位置

变色龙攻击猎物后位置更新:V为变色龙舌头伸向猎物的速度,a为舌头伸向猎物的加速度,其速度模型均见下式

变色龙舌头伸向猎物的速度:ω为惯性权重,见式(19),p为控制开发能力的参数,c1和c2为控制全局和局部最佳位置变色龙对舌头速度的影响

舌头伸向猎物的加速度:

2 优化方式

前篇对BP神经网络原理讲解(BP神经网络原理及matlab代码-CSDN博客),从BP神经网络原理讲解中可以发现预测值主要受权值和阈值调整修正完成。因此结合上述CSA原理介绍,可以将BP神经网络权值和阈值作为变色龙的种群,每一个种群对应BP神经网络的预测值,将这个预测值作为适应度更新变色龙的定位猎物和捕食猎物的活动,更新更佳的位置。

3 Maltab代码

3.1 伪代码

3.2 CSA主函数代码

%%参数
% searchAgents 种群
% dim 问题维度
% ub,lb 问题维度边界
% SYD 适应度函数
% iteMax 最大迭代次数
% rotation 变色龙眼睛旋转函数
% initialization 种群初始化函数


% 初始化种群
chameleonPositions=initialization(searchAgents,dim,ub,lb);

% 评估初始种群的适合度
fit=zeros(searchAgents,1);

for i=1:searchAgents
     fit(i,1)=SYD(chameleonPositions(i,:),net);
     net.trainParam.showWindow = 0;
end

% CSA 参数
fitness=fit; % 随机位置的初始适应度
[fmin0,index]=min(fit);

chameleonBestPosition = chameleonPositions; % 最佳位置初始化
gPosition = chameleonPositions(index,:); % 初始位置

v=0.1*chameleonBestPosition;% 初始速度

v0=0.0*v;

% CSA 的主要参数
rho=1;%管理开发的正数
p1=2;  
p2=2;  
c1=2; 
c2=1.80;  
gamma=2; %
alpha = 4;%  
beta=3;%控制勘探和开发能力的三个常量值 
Pp = 0.1;% 变色龙感知猎物的概率

for t=1:iteMax

    a = 2590*(1-exp(-log(t))); %表示变色龙舌头伸出的速度 
    omega=(1-(t/iteMax))^(rho*sqrt(t/iteMax)) ; %Eq(19)惯性权重
    p1 = 2* exp(-2*(t/iteMax)^2); %p1,p2控制探索能力的两个正数 
    p2 = 2/(1+exp((-t+iteMax/2)/100)) ;
    mu= gamma*exp(-(alpha*t/iteMax)^beta) ;%Eq(6)随着迭代次数的增加而减少的参数

    ch=ceil(searchAgents*rand(1,searchAgents));
    
    % 觅食过程的运动       
    for i=1:searchAgents
        if rand>=Pp
            chameleonPositions(i,:)= chameleonPositions(i,:)+ p1*(chameleonBestPosition(ch(i),:)-chameleonPositions(i,:))*rand()+... 
                     + p2*(gPosition -chameleonPositions(i,:))*rand();% Eq(3)
        else
            for j=1:dim
                chameleonPositions(i,j)=gPosition(j)+mu*((ub(j)-lb(j))*rand+lb(j))*sign(rand-0.50) ;% Eq(3)
            end
        end
    end 

    %(开发)

% 双向旋转 180 度或单向旋转180度(rotation函数来源作者,可不考虑此活动加注释)
[chameleonPositions] = rotation(chameleonPositions, searchAgents, dim);
 

% 变色龙速度更新并寻找食物来源
     for i=1:searchAgents
               
        v(i,:)= omega*v(i,:)+ p1*(chameleonBestPosition(i,:)-chameleonPositions(i,:))*rand +.... 
               + p2*(gPosition-chameleonPositions(i,:))*rand; %Eq (18)      

         chameleonPositions(i,:)=chameleonPositions(i,:)+(v(i,:).^2 - v0(i,:).^2)/(2*a);%Eq(20)    
     end
     v0=v;

     % 边界检查
     for i=1:searchAgents
         if chameleonPositions(i,:)<lb
        chameleonPositions(i,:)=lb;
         elseif chameleonPositions(i,:)>ub
            chameleonPositions(i,:)=ub;
         end
     end

     % 变色龙位置迁移(随机化) 
     for i=1:searchAgents

         ub_=sign(chameleonPositions(i,:)-ub)>0;
         lb_=sign(chameleonPositions(i,:)-lb)<0;
         chameleonPositions(i,:)=(chameleonPositions(i,:).*(~xor(lb_,ub_)))+ub.*ub_+lb.*lb_;
         fit(i,1)=SYD(chameleonPositions(i,:),net);
         net.trainParam.showWindow = 0;
         
         if fit(i)<fitness(i)
          chameleonBestPosition(i,:) = chameleonPositions(i,:); 
          fitness(i)=fit(i);
         end
     end

     [fmin,index]=min(fitness); % 寻找最佳位置  


     if fmin < fmin0
         gPosition = chameleonBestPosition(index,:); 
         fmin0 = fmin;
     end

   cg_curve(t)=fmin0; 
end
 
ngPosition=find(fitness== min(fitness)); 
g_best=chameleonBestPosition(ngPosition(1),:); 
fmin0 =SYD(g_best,net);
net.trainParam.showWindow = 0;

end

3.3 CSA-BP

1)单输出回归预测:单输出回归预测:变色龙算法优化BP神经网络模型(CSA-BP)

2)多输出回归预测:多输出回归预测:变色龙算法优化BP神经网络模型(CSA-BP)

3)分类模型:分类模型:变色龙算法优化BP神经网络模型(CSA-BP)

4)时间序列:时间序列:变色龙算法优化BP神经网络模型(CSA-BP)

4 视频讲解

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

  • 26
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值