目录
0 引言
引力搜索算法(Gravitational Search Algorithm,GSA)是Esmat Rashedi等人在2009年提出随机性启发式搜索算法,该算法灵感主要来源万有引力定律和运动定律,在GSA算法中,将粒子抽象理解为空间分为内一个解,解之间存在相互吸引力,与粒子质量成正比,距离成反比,质量赋予适应度值进行评估,因此在解空间中,每个粒子由其他粒子对其吸引力获取加速度,质量越大(适应度越小)提高加速度越大,从而向更优解移动。
1 数学模型
SSA算法通过粒子进行万有引力和运动定律实现向优势粒子的运动。以下是GSA数学模型:
1)初始化:定义粒子质量位置
其中i为粒子个数,d为粒子问题维度
2)粒子质量:引力和惯性质量综合用适应度进行评估,以下是其质量的数学模型
式(14)为适应度评估,如果适应度都一样则以1作为输出,不一样进行式(15)、(16)进行质量计算;式(17)和(18)为最小化问题的最优和最差适应度选择;式(19)和(20)为最大化问题的最优和最差适应度选择。
3)重力常数:
式中G0和α为常数,分别取100和20,t为当前迭代次数,T为最大迭代次数
4)重力场中的加速度计算:
式中F为重力,M为质量;其中提高算法的随机特征,F重力通过其他重力随机加权,分为两种i形式:
其中Kbest是具有最佳质量和最大质量的第一个K个代理的集合。式中Fij见下式
式中R为俩个粒子之间的欧式距离。
5)粒子移动:由于引力和加速关系,粒子向优势个体移动。
式中V为移动速度。
2 优化支持向量机
前篇对支持向量机(支持向量机原理及matlab代码讲解(分类SVM和回归SVR))原理讲解,从支持向量机模型运算过程中,可以了解到模型高维映射核函数参数g和处罚因子c对模型预测结果影响最为重要。因此结合上述GSA原理介绍,可以将支持向量机参数c和g作为粒子位置,每一个种群对应支持向量机的预测值,将这个预测值作为适应度进行上述粒子万有引力和运动定律,更新最佳粒子位置。
3 matlab代码
3.1 伪代码
3.2 GSA主函数代码
GSA主函数代码:
%% 参数
% max_it 最大迭代次数
% space_bound 边界函数
% SYD 适应度函数
% massCalculation 质量函数
% Gconstant 重力函数
% Gfield 加速度函数
% move 移动函数
%% 主函数
for iteration=1:max_it
%边界检查
X=space_bound(X,up,low);
%适应度.
fitness=SYD(X,net);
net.trainParam.showWindow = 0;
if min_flag==1
[best best_X]=min(fitness); %最小化
else
[best best_X]=max(fitness); %最大化
end
if iteration == 1
Fbest=best;
Lbest=X(best_X,:);
end
if min_flag==1
if best<Fbest %最小化
Fbest=best;
Lbest=X(best_X,:);
end
else
if best>Fbest %最大化
Fbest=best;
Lbest=X(best_X,:);
end
end
BestChart=[BestChart Fbest];
MeanChart=[MeanChart mean(fitness)];
%计算 质量M. 公式 14-20
[M]=massCalculation(fitness,min_flag);
%公式 13 重力常数的计算。
G=Gconstant(iteration,max_it);
%重力场中的加速度计算。
a=Gfield(M,X,G,Rnorm,Rpower,ElitistCheck,iteration,max_it);
%移动. eq.11-12
[X,V]=move(X,a,V);
end
质量函数代码:
%% 创建 "质量计算 "函数
function [M]=massCalculation(fit,min_flag)
Fmax=max(fit);
Fmin=min(fit);
Fmean=mean(fit);
[i N]=size(fit);
if Fmax==Fmin
M=ones(N,1);
else
if min_flag==1 %最小化
best=Fmin;
worst=Fmax; %eq.17-18.
else %最大化
best=Fmax;
worst=Fmin; %eq.19-20.
end
M=(fit-worst)./(best-worst); %eq.15,
end
M=M./sum(M); %eq. 16.
end
重力常数函数代码:
%% 创建 "G "函数
function G=Gconstant(iteration,max_it)
alfa=20;
G0=100;
G=G0*exp(-alfa*iteration/max_it); %eq. 28.
end
加速函数代码:
%% 创建 "加速度a "函数
function a=Gfield(M,X,G,Rnorm,Rpower,ElitistCheck,iteration,max_it)
[N,dim]=size(X);
final_per=2; %在最后一次迭代中,只有 2% 的代理对其他代理施力。
% 总力计算
if ElitistCheck==1
kbest=final_per+(1-iteration/max_it)*(100-final_per); %eq. 21的kbest
kbest=round(N*kbest/100);
else
kbest=N; %eq.9.
end
[Ms ds]=sort(M,'descend');
for i=1:N
E(i,:)=zeros(1,dim);
for ii=1:kbest
j=ds;
if j~=i
R=norm(X(i,:)-X(j,:),Rnorm); %欧几里得距离
for k=1:dim
E(i,k)=E(i,k)+rand*(M(j))*((X(j,k)-X(i,k))/(R^Rpower+eps));%eq(7)
end
end
end
end
移动函数:
function [X,V]=move(X,a,V)
%movement.
[N,dim]=size(X);
V=rand(N,dim).*V+a; %eq. 11.
X=X+V; %eq. 12.
end
3.3 GSA-SVM
1)回归模型:回归模型:引力搜索算法优化支持向量机模型(GSA-SVR)
2)分类模型:分类模型:引力搜索算法优化支持向量机模型(GSA-SVM)
4 视频讲解
B站搜索:‘ 不想学习的陈成 ’