【优化算法】斑点鬣狗优化算法(SHO)【含Matlab源码 1463期】

1,072 阅读5分钟

一、获取代码方式

获取代码方式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)