目录
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 优化方式
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述CSA原理介绍,可以将这些超参数作为变色龙的种群,每一个种群对应支持向量机的预测值,将这个预测值作为适应度更新变色龙的定位猎物和捕食猎物的活动,更新更佳的位置。
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-SVM
1)回归模型:回归模型:变色龙算法优化支持向量机模型(CSA-SVR)
2)分类模型:分类模型:变色龙算法优化支持向量机模型(CSA-SVM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’