一、获取代码方式


获取代码方式2:

完整代码已上传我的资源:​​【优化算法】自私羊群优化(SHO)【含Matlab源码 1569期】​

二、自私羊群优化算法简介

自私羊群优化SHO算法是由Fausto于2017年提出的元启发式算法,它主要基于汉密尔顿提出的自私群理论来模拟猎物与捕食者之间的狩猎关系。当群体中的个体受到捕食者的攻击时,为了增加生存机会,群体中的个体产生聚集行为,个体更有可能移动到相对安全的位置(群体的中心位置),并且群体的边缘个体更容易受到攻击,这也导致群体的边缘个体逃离群体,以增加他们被捕食者攻击时的生存机会。该方法假设整个平原是一个解空间,该算法包含两个不同的搜索因子:被狩猎群和狩猎群。每个搜索因子通过一组不同的进化算子指导算法的计算,以便更好地模拟猎物与捕食者关系之间的关系。

(1)初始化种群个体

假设自私羊群体优化算法的群体集合是S,它包含N个种群个体,本文中个体对应三维网络中的面和点。种群中的每一个体被定义为Si=(si,1,si,2,…,si,n),其代表个体在种群中的位置信息,n代表解决方案的大小(设计面总数)。整个种群组的初始化公式如下:

【优化算法】自私羊群优化算法(SHO)【含Matlab源码 1569期】_开发语言

其中xjlow和xjhigh分别表示解空间的下限和上限。算法参数值的范围:i=1,2,…,N和j=1,2,…,n。rand()表示随机函数,生成值的范围落在区间[0,1]内。

在自私羊群优化算法中,整个种群S被分为两个子群:H和P(S=H∪P),H(H=h1,h2,…,hNh)代表一群猎物,P(P=p1,p2,…,pNp)代表一群捕食者。在自然界中,猎物的数量通常多于捕食者的数量。在SHO中,猎物(Nh)的数量占总个体的70%~90%(N),其余的个体被认为是捕食者(Np)。Nh和Np按以下公式计算:

【优化算法】自私羊群优化算法(SHO)【含Matlab源码 1569期】_开发语言_02

其中,rand()表示一个随机数,其值范围为0.7到0.9,而floor(∙)表示将实数转换为整数的函数。

整个过程都在不断优化点和面,任何形状的图形,捕食者都会遍历所有猎物的信息,因此,三维网格不分模型形状,将随机生成猎物和捕食者。

(2)分配生存价值

在SHO中,为整个种群(S)的每个体(si)分配一个生存值(SVsi),其代表个体的生存能力,有机会在攻击中生存或成功杀死攻击中的猎物。生存价值的数学公式定义如下:

【优化算法】自私羊群优化算法(SHO)【含Matlab源码 1569期】_算法_03

其中,f(⋅)代表目标函数,fbest和fworst分别代表目标函数的最佳值和最差值。对70%~90%的猎物计算生存价值,生存价值最高的为猎物领袖,生存价值越低的为最容易被捕获的猎物。

三、部分源代码

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 300 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

四、运行结果

【优化算法】自私羊群优化算法(SHO)【含Matlab源码 1569期】_初始化_04

五、matlab版本及参考文献

1 matlab版本

2014a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

[3]朱惠娟,王永利,陈琳琳.面向三维模型轻量化的自私羊群优化算法研究[J].计算机工程与应用. 2020,56(03)