1 简介
本文提出了一种狮群算法改进的最小二乘支持向量机数据分类模型。
狮群优化算法(Loin Swarm Optimization, LSO),是于2018年提出的一种新型智能优化算法。基于狮群中狮王、母狮及幼狮的自然分工,模拟狮王守护、母狮捕猎、幼狮跟随3种群智能行为,提出群体智能算法——狮群算法.算法中不同种类的狮子位置更新方式不同.遵循自然界生物"适者生存"的竞争法则,狮王守护领土,优先享用食物,母狮合作捕猎,幼狮分为学习捕猎、饥饿进食和成年被驱逐.狮子位置更新方式的多样化保证算法快速收敛,不易陷入局部最优.最后,将算法应用于6个标准测试函数优化问题,并对比粒子群算法、骨干粒子群算法,测试结果表明,文中算法收敛速度较快,精度较高,能较好地获得全局最优解.
2 部分代码
%_____________________________________%
%狮群算法 %
%_____________________________________%
function [Best_pos,Best_score,curve]=LSO(pop,Max_iter,lb,ub,dim,fobj)
beta = 0.5;%成年狮所占比列
Nc = round(pop*beta);%成年狮数量
Np = pop-Nc;%幼师数量
if(max(size(ub)) == 1)
ub = ub.*ones(1,dim);
lb = lb.*ones(1,dim);
end
%种群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
%计算初始适应度值
fitness = zeros(1,pop);
for i = 1:pop
fitness(i) = fobj(X(i,:));
end
[value, index]= min(fitness);%找最小值
GBestF = value;%全局最优适应度值
GBestX = X(index,:);%全局最优位置
curve=zeros(1,Max_iter);
XhisBest = X;
fithisBest = fitness;
indexBest = index;
gbest = GBestX;
for t = 1: Max_iter
%母狮移动范围扰动因子计算
stepf = 0.1*(mean(ub) - mean(lb));
alphaf = stepf*exp(-30*t/Max_iter)^10;
%幼狮移动范围扰动因子计算
alpha = (Max_iter - t)/Max_iter;
%母狮位置更新
for i = 1:Nc
index = i;
while(index == i)
index = randi(Nc);%随机挑选一只母狮
end
X(i,:) = (X(i,:) + X(index,:)).*(1 + alphaf.*randn())./2;
end
%幼师位置更新
for i = Nc+1:pop
q=rand;
if q<=1/3
X(i,:) = (gbest + XhisBest(i,:)).*( 1 + alpha.*randn())/2;
elseif q>1/3&&q<2/3
indexT = i;
while indexT == i
indexT = randi(Nc) + pop - Nc;%随机位置
end
X(i,:) = (X(indexT,:) + XhisBest(i,:)).*( 1 + alpha.*randn())/2;
else
gbestT = ub + lb - gbest;
X(i,:) = (gbestT + XhisBest(i,:)).*( 1 + alpha.*randn())/2;
end
end
%边界控制
for j = 1:pop
for a = 1: dim
if(X(j,a)>ub)
X(j,a) =ub(a);
end
if(X(j,a)<lb)
X(j,a) =lb(a);
end
end
end
%计算适应度值
for j=1:pop
fitness(j) = fobj(X(j,:));
end
for j = 1:pop
if(fitness(j)<fithisBest(j))
XhisBest(j,:) = X(j,:);
fithisBest(j) = fitness(j);
end
if(fitness(j) < GBestF)
GBestF = fitness(j);
GBestX = X(j,:);
indexBest = j;
end
end
%% 狮王更新
Temp = gbest.*(1 + randn().*abs(XhisBest(indexBest,:) - gbest));
Temp(Temp>ub)=ub(Temp>ub);
Temp(Temp<lb) = lb(Temp<lb);
fitTemp = fobj(Temp);
if(fitTemp<GBestF)
GBestF =fitTemp;
GBestX = Temp;
X(indexBest,:)=Temp;
fitness(indexBest) = fitTemp;
end
[value, index]= min(fitness);%找最小值
gbest = X(index,:);%当前代,种群最优值
curve(t) = GBestF;
end
Best_pos = GBestX;
Best_score = curve(end);
end
3 仿真结果
4 参考文献
[1]杨艳, 刘生建, 周永权. 贪心二进制狮群优化算法求解多维背包问题[J]. 计算机应用, 2020, 40(5):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。