目录
0 引言
为了提高MGO算法的全局搜索和局部开发能力,有学者提出多策略改进的山瞪羚算法(HMGO),该算法首先采用准反向学习策略,优化种群初始化,确保初始种群的广泛性。其次引入动态自适应因子和缩放因子,调整优化机制中的参数,以提升搜索精度和效率,最后引入AOA算法中MOP和MOA系数向量加快模型局部开发和全局探索能力。
1 数学模型
HMGO是在MGO的基础上引入4大策略,准反向学习、动态因子、缩放因子、AOA性能混合优化来提升算法性能,具体数学模型如下:
1)准方向学习策略:在MGO算法中,采用随机生成的初始位置策 略以确保山地瞪羚均匀分布,但这种做法牺牲了种群的多样性。为优化算法性能,研究者引入了多种反向学习策略,该策略在使得种群分布均匀同时,可以有效提高种群多样性,如下式:
式(10)为方向解种群生成,其中ub,lb为问题维度边界,式(11)为准反向学习解种群生成,r为-1到1之间随机数。
2)动态自适应密度因子:在 MGO 中,收敛因子a1对系数向量cofi有显著影响,不利于全局勘探与局部开发的有效平衡。因此引入非线性收敛因子 aa可以有效平衡勘探和开发能力,具体模型如下:
式中Ilter为当前迭代,MaxIter为最大迭代次数。
3)缩放因子优化 :为解决 MGO 全局搜索性能忽略的问题,引入缩放因子(scaling factor, sf)优化机制。通过调整搜索步长,提高搜索效率,更灵活适应问题空间动态变化。
式中17为引入缩放影子sf后算法四个机制的山瞪羚位置更新
4)策略融合与性能提升 :为提高 MGO 算法的勘探和开发能力,针对后 期易陷入局部最优解问题,特殊处理种群中的 20%个体。引入算术优化算法,通过乘法和除法策略进行全局 搜索,提高解的分散性,增强全局寻优能力。利用加法和减法策略降低解的分散性,增强局部寻优能 力。同时引入正余弦算子使 AOA 产生的解向内或 向外移动,动态地调整算法参数,达到提高全局搜索的效果增加解的多样性。
式中MOP和MOA为系数向量,其中当Ar>MOA进行式18,当Ar<MOA进行式19,有利于全局和局部性能,g(*)为AOA的算法派生。
2 模型性能可视化
HMGO-BP和MGO-BP的模型性能可视化:数据来源UCI回归数据集。
1)精度指标:
2)寻优指标:
3 MATLAB代码
3.1 伪代码
3.2 HMGO主函数
% 主循环
for Iter=1:MaxIter
for i=1:N
RandomSolution=randperm(N,ceil(N/3));
%计算的年轻雄性畜群系数向量
M=X(randi([(ceil(N/3)),N]),:)*floor(rand)+mean(X(RandomSolution,:)).*ceil(rand);%eq (2)
%改进点2: 引入自适应动态密度因子计算随机选择系数向量
cofi = Coefficient_Vector(dim,Iter,MaxIter);%eq (4)
% 位置参数
A =randn(1,dim).*exp(2-Iter*(2/MaxIter));
D =(abs(X(i,:)) + abs(BestX))*(2*rand-1);
% 改进点3:缩放因子优化
% 进行山瞪羚社会活动的位置更新
w = 3*((Iter-0.5*MaxIter)/MaxIter^2);
vta = (-1)/(1+exp(-2*w))+1.2;
sf = vta* cos(3*w);
NewX = Solution_Imp(X,BestX,lb,ub,N,cofi,M,A,D,i,sf);
% 改进点4:引入AOA算法提高模型探索和开发能力
MOP_Max=1; %加速函数最大值
MOP_Min=0.2; %加速函数最小值
Alpha = 0.499;
MOP=1-((Iter)^(1/Alpha)/(MaxIter)^(1/Alpha)); % 数学优化概率eq 4
MOA=MOP_Min+Iter*((MOP_Max-MOP_Min)/MaxIter); % 加速函数 eq 2
for j=1:size(NewX,1)
gNewx(j,:) = sin(rand()).*NewX(j,:)+cos(rand()).*NewX(j,:);
r1 = rand();
if r1>MOA
r2=rand();
if r2>0.5
NewX(j,:)=BestX.*MOP.*gNewx(j,:);
else
NewX(j,:)=(BestX.*gNewx(j,:))./(MOP+eps);
end
else
r3=rand();
if r3>0.5
NewX(j,:)=BestX+MOP.*gNewx(j,:);
else
NewX(j,:)=BestX-MOP.*gNewx(j,:);
end
end
end
% 成本函数计算和边界检查
[NewX , Sol_CostNew] = Boundary_Check(NewX,net,LB,UB);
% 为羚羊群增添新成员
X=[X; NewX];
Sol_Cost=[Sol_Cost; Sol_CostNew];
[~,idbest]=min(Sol_Cost);
BestX=X(idbest,:);
%
end
% 更新种群
[Sol_Cost, SortOrder]=sort(Sol_Cost);
X=X(SortOrder,:);
[BestFitness,idbest]=min(Sol_Cost);
BestX=X(idbest,:);
X=X(1:N,:);
Sol_Cost=Sol_Cost(1:N,:);
cnvg(Iter)=BestFitness;
BestF=BestFitness;
end
end
3.3 HMGO-BP
单输出回归预测模型、多输出回归预测模型、分类模型和时间序列模型的代码复现: