变色龙算法(CSA)优化长短期记忆神经网络原理及MATLAB代码复现

目录

0 引言

1 数学模型

2 优化方式

3 MATLAB代码

3.1 伪代码

3.2 CSA主函数代码

3.3 CSA-LSTM

0 引言

变色龙算法(Chameleon Swarm Algorithm,CSA)是Malik Shehadeh Braik于2021年基于变色龙的觅食机制而提出的群体智能算法。该算法模拟了变色龙寻找食物的行为步骤,包括它们在树木、沼泽和沙漠动态寻找猎新闻,将眼睛旋转到近360◦的视觉范围来定位猎物,并利用它们粘稠的舌头高速发射来抓住猎物。算法具有寻优能力强等特点。

1 数学模型

CSA算法主要对变色龙搜索猎物、定位猎物及捕食等行为进行数学建模,具体模型如下:

1)初始化种群:CSA是一种基于种群的算法,它采用初始种群来启动优化过程。具体模型如下:

式中uj,lj为问题维度的边界,r为0到1的随机数。

2)寻找猎物:变色龙在沙漠和树木上寻找猎物,因此可以使用位置更新策略进行数学建模:

式中p1,p2为控制探索能力两个参数,G为局部最佳变色龙个体位置,P为全局最佳的变色龙个体位置,r1,r2,r3,ri为0到1的随机数,t和T分别表示当前的迭代次数和最大的迭代次数,γ、α和β是用于控制勘探和开发能力的三个常数值,Pp为变色龙感知猎物的概率。

2)定位猎物位置:变色龙有能力通过眼睛的旋转特征来识别猎物的位置,这使它们能够识别360度以上的猎物。故变色龙会根据定位猎物的位置来更新自身位置。其数学模型如下:

式中\bar{y_i}表示变色龙在旋转前的各维度的平均位置,yri表示变色龙在搜索空间中的旋转中心坐标,其数学模型如下:

式中yc为个体位置的中心坐标,m为旋转矩阵;R为各轴中旋转矩阵函数见(16)(17),Vz,Vz为坐标的两个向量,θ为变色龙眼睛旋转角。

3)捕食:接近猎物的变色龙被认为是最好的变色龙,故这只变色龙用舌头攻击猎物。用以下方程来模拟:

式中c1,c2控制G,P对弹舌速度影响的因子;p为控制开发的参数;a为弹舌的加速度

2 优化方式

前篇对长短期记忆神经网络(长短期记忆神经网络原理及Matlab代码复现-CSDN博客)原理讲解,从长短期记忆神经网络matlab代码运算过程中,可以看到LSTM受多个超参数影响(隐藏层节点、学习率、分批量、正则化等等)。因此结合上述GSA原理介绍,可以将长短期记忆神经网络的超参数作为变色龙种群位置,每一个种群位置对应长短期记忆神经网络的预测值,将这个预测值作为适应度更新全局和局部最佳位置,模拟变色龙进行随机搜索猎物,识别定位猎物和捕食猎物的行为,更新下一轮全局和局部最佳位置。

3 MATLAB代码

3.1 伪代码

3.2 CSA主函数代码

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

% 评估初始种群的适合度
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;

3.3 CSA-LSTM

时间序列模型:(变色龙算法优化长短期记忆神经网络-CSDN博客)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值