目录
0 引言
麻雀搜索算法(Sparrow Search Algorithm,SSA)是由Jiankai Xue等人于2020提出群智能算法,该算法主要受麻雀的觅食行为和反捕食行为启发而构建对应数学模型进行寻优分析。通过多个模型对比分析,SSA算法寻优能力和收敛速度较为不错。
1 数学模型
SSA模拟麻雀的觅食行为和反捕食行为。将麻雀分为生产者和拾荒者,主要是生产者寻优食物的和拾荒者抢夺食物的行为构建数学模型。
1)麻雀种群位置和适应度矩阵表示:
式(1)为麻雀种群位置,其中n为麻雀数量,d为问题维度。式(2)为式(1)对应适应度。
2)生产者探索食物:具有适应度小的麻雀作为生产者,取负责寻找食物和指导整个种群的流动,其数学模型见下式:
式中R2为警报值,ST为安全阈值,当R2<ST意味着周围没有捕食者,生产者进入宽搜索模式,R2≥ST,这意味着一些麻雀已经发现了捕食者;Q为符合正态分布的随机值,L为均匀分布的问题维度随机值。
3)拾荒者监视生产者:拾荒者会频繁地监控生产者。一旦他们发现生产者找到了好的食物,他们就会立即离开现在的位置去争夺食物。如果他们赢了,他们可以立即得到生产者的食物,否则他们将继续执行规则下一步活动,其具体数学模型见下式:
式中Xp为生产者最佳位置,A为随机赋值为1或-1的问题维度的随机矩阵,L为随机问题维度矩阵。
4)群体边缘的麻雀在意识到危险时迅速向安全区域移动以获得更好的位置:当麻雀对应适应大于最小适应度fg时,贼其处于危险位置,将会向最优位置靠拢,当fi=fg。处于种群中间的麻雀意识到危险,需要靠近其他麻雀,此时只能寻求更低适应度种群位置,加快收敛速度。
式β步长控制参数,K∈[-1,1]的随机参数
2 优化支持向量机
优化的方式:
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR)-CSDN博客)原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述SSA原理介绍,可以将支持向量机参数c和g作为麻雀种群,每一个种群对应支持向量机的预测值,将这个预测值作为适应度进行上述麻雀觅食和反捕食行为,更新最优位置。
3 matlab代码
3.1 伪代码
3.2 SSA主函数代码
%%参数
% M 最大迭代次数
% pFit 适应度值
% pNum 生产者种群数量
% pop 麻雀种群数量
% fMin 最小适应度
% SYD 适应度函数
% ub、lb 问题维度边界
% dim 问题维度
%SSA主循环
for t = 1 : M
[ans, sortIndex] = sort(pFit);
[fmax,B]=max(pFit);
worse= x(B,:);
r2=rand(1);%警报值
ST = 0.8;%安全阈值
% 生产者负责寻找食物时位置更新
if(r2 < ST)
for i = 1 :pNum
r1=rand(1);
x(sortIndex(i), :)= pX(sortIndex(i),:)*exp(-(i)/(r1*M));% Eq (3)
x(sortIndex(i), :)= Bounds(x(sortIndex(i),:), lb, ub);
fit(sortIndex(i))= SYD(x(sortIndex(i),:),net);
net.trainParam.showWindow = 0;
end
else
for i = 1 :pNum
x(sortIndex(i), :) = pX(sortIndex(i),:)+randn(1)*ones(1,dim); % Eq (3)
x(sortIndex(i), :) = Bounds(x(sortIndex(i),:), lb, ub);
fit(sortIndex(i)) = SYD(x(sortIndex(i),:),net);
net.trainParam.showWindow = 0;
end
end
[fMin,bestII] = min(fit);
bestXX = x(bestII, :);
% 拾荒者频繁地监视生产者
for i = (pNum + 1) : pop
A=floor(rand(1,dim)*2)*2-1;%随机赋值为1或-1的dim随机矩阵
if(i>(pop/2))
x(sortIndex(i),:)=randn(1)*exp((worse-pX(sortIndex(i), :))/(i)^2); %Eq(4)
else
x(sortIndex(i),:)=bestXX+(abs((pX(sortIndex(i),:)-bestXX)))*(A'*(A*A')^(-1))*ones(1,dim); %Eq(4)
end
x(sortIndex(i),:)= Bounds(x(sortIndex(i),:), lb, ub);
fit(sortIndex(i))= SYD(x(sortIndex(i),:),net);
net.trainParam.showWindow = 0;
end
c=randperm(numel(sortIndex));
b=sortIndex(c(1:round(pop* 0.2)));
% 群体边缘的麻雀在意识到危险时迅速向安全区域移动以获得更好的位置
for j = 1 :length(b)
if (pFit(sortIndex(b(j)))>(fMin))
x(sortIndex(b(j)),:)=bestX+(randn(1,dim)).*(abs((pX( sortIndex(b(j)),:)-bestX))); % Eq(5)
else
x(sortIndex(b(j)),:) =pX(sortIndex(b(j)),:)+(2*rand(1)-1)*(abs(pX(sortIndex(b(j)),:)-worse))/(pFit(sortIndex( b(j)))-fmax+1e-50); % Eq(5)
end
x(sortIndex(b(j)),:) =Bounds(x(sortIndex(b(j)),:), lb, ub);
fit(sortIndex(b(j))) =SYD(x(sortIndex(b(j)),:),net);
net.trainParam.showWindow = 0;
end
for i = 1: pop
if (fit(i) < pFit(i))
pFit(i) = fit(i);
pX(i,:) = x(i,:);
end
if(pFit(i) < fMin)
fMin= pFit(i);
bestX = pX(i,:);
end
end
Convergence_curve(t)=fMin;
end
3.3 SSA-SVM
1)回归预测模型:回归预测模型:麻雀搜索算法优化支持向量机模型(SSA-SVR)
2)分类模型:分类模型:麻雀搜索算法优化支持向量机模型(SSA-SVM)
4 视频讲解
B站讲解:‘ 不想学习的陈成 ’