一、获取代码方式
获取代码方式1: 通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
获取代码方式2: 通过紫极神光博客主页开通CSDN会员,凭支付凭证,私信博主,可获得此代码。
获取代码方式3: 完整代码已上传我的资源:【优化算法】斑点鬣狗优化算法(SHO)【含Matlab源码 1463期】
备注:开通CSDN会员,仅只能免费获得1份代码(有效期为开通日起,三天内有效); 订阅紫极神光博客付费专栏,可免费获得2份代码(有效期为订阅日起,三天内有效);
二、斑点鬣狗优化算法简介
斑点鬣狗依靠它们之间的社会关系和协作行为,能够迅速有效地捕食猎物。用搜索猎物、包围猎物、狩猎行为和攻击猎物 4 个基本步骤来模拟斑点鬣狗优化算法,并建立这 4 个步骤的数学建模。 1 包围猎物 斑点鬣狗可以熟悉猎物的位置并包围它们。为了对斑点鬣狗的社会等级进行数学建模,认为当前最佳包围对象是目标猎物或者接近最优的目标,因为搜索空间不是先验的。其他个体会尝试更新自己的位置,在确定了最佳包围对象后,对最佳包围对象进行猎捕,这种行为的数学模型由下面的方程表示: 2 狩猎行为 斑点鬣狗通常群居狩猎,依靠一群可信赖的朋友和识别猎物位置的能力。为了精确地定义斑点鬣狗的行为,假设最佳的搜索个体,无论哪个是最优的,都知道猎物的位置。其他搜索个体组成一个集群,信任的朋友群,向最好的搜索个体,并保存到目前为止获得的最好的狩猎方案来更新他们的位置。狩猎行为的数学模型为: 3 攻击猎物 攻击猎物可以减少向量 h的值,在仿真模拟过程中,向量 E也随着 h的改变向量而改变。攻击猎物的数学公式描述如下: 4 寻找猎物 斑点鬣狗算法主要是根据斑点鬣狗群的位置来寻找猎物。它们互相远离,寻找和攻击猎物。当收敛因子 E时,斑点鬣狗将分散开,远离当前猎物。 这种机制允许 SHO 算法进行全局搜索。 B包含随机值,提供了猎物的随机权重,有助于 SHO 算法搜索和避免局部最优化,使 SHO 算法满足终止条件。
三、部分源代码
clear all
clc
SearchAgents=30;
Fun_name='F1';
Max_iterations=1000;
[lowerbound,upperbound,dimension,fitness]=fun_info(Fun_name);
[Best_score,Best_pos,SHO_curve]=sho(SearchAgents,Max_iterations,lowerbound,upperbound,dimension,fitness);
figure('Position',[300 300 400 300])
plots=semilogx(SHO_curve,'Color','g');
set(plots,'linewidth',2)
hold on
title('Objective space')
xlabel('Iterations');
ylabel('Best fitness score');
axis tight
grid on
box on
legend('SHO')
display(['The best optimal value of the objective function found by SHO is : ', num2str(Best_score)]);
function func_plot(fun_name)
[lowerbound,upperbound,dimension,fitness]=fun_info(fun_name);
switch fun_name
case 'F1'
x=-100:2:100; y=x; %[-100,100]
case 'F2'
x=-100:2:100; y=x; %[-10,10]
case 'F3'
x=-100:2:100; y=x; %[-100,100]
case 'F4'
x=-100:2:100; y=x; %[-100,100]
case 'F5'
x=-200:2:200; y=x; %[-5,5]
case 'F6'
x=-100:2:100; y=x; %[-100,100]
case 'F7'
x=-1:0.03:1; y=x %[-1,1]
case 'F8'
x=-500:10:500;y=x; %[-500,500]
case 'F9'
x=-5:0.1:5; y=x; %[-5,5]
case 'F10'
x=-20:0.5:20; y=x;%[-500,500]
case 'F11'
x=-500:10:500; y=x;%[-0.5,0.5]
case 'F12'
x=-10:0.1:10; y=x;%[-pi,pi]
case 'F13'
x=-5:0.08:5; y=x;%[-3,1]
case 'F14'
x=-100:2:100; y=x;%[-100,100]
case 'F15'
x=-5:0.1:5; y=x;%[-5,5]
case 'F16'
x=-1:0.01:1; y=x;%[-5,5]
case 'F17'
x=-5:0.1:5; y=x;%[-5,5]
case 'F18'
x=-5:0.06:5; y=x;%[-5,5]
case 'F19'
x=-5:0.1:5; y=x;%[-5,5]
case 'F20'
x=-5:0.1:5; y=x;%[-5,5]
case 'F21'
x=-5:0.1:5; y=x;%[-5,5]
case 'F22'
x=-5:0.1:5; y=x;%[-5,5]
case 'F23'
x=-5:0.1:5; y=x;%[-5,5]
end
L=length(x);
f=[];
for i=1:L
for j=1:L
if strcmp(fun_name,'F15')==0 && strcmp(fun_name,'F19')==0 && strcmp(fun_name,'F20')==0 && strcmp(fun_name,'F21')==0 && strcmp(fun_name,'F22')==0 && strcmp(fun_name,'F23')==0
f(i,j)=fitness([x(i),y(j)]);
end
if strcmp(fun_name,'F15')==1
f(i,j)=fitness([x(i),y(j),0,0]);
end
if strcmp(fun_name,'F19')==1
f(i,j)=fitness([x(i),y(j),0]);
end
if strcmp(fun_name,'F20')==1
f(i,j)=fitness([x(i),y(j),0,0,0,0]);
end
if strcmp(fun_name,'F21')==1 || strcmp(fun_name,'F22')==1 ||strcmp(fun_name,'F23')==1
f(i,j)=fitness([x(i),y(j),0,0]);
end
end
end
surfc(x,y,f,'LineStyle','none');
end
四、运行结果
五、matlab版本及参考文献
1 matlab版本 2014a
2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]施媛波.基于改进的群居蜘蛛优化云计算任务调度算法[J].电脑编程技巧与维护. 2021,(04) [4]李唐兵,胡锦泓,周求宽.基于改进斑点鬣狗优化算法的红外图像分割[J].红外技术. 2021,43(10)