提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 1 算法原理
- 2 算法步骤
- 2.1 初始化种群
- 2.2 搜索猎物(全局搜索)
- 2.3 包围和围捕猎物(局部搜索)
- 2.4 从全局搜索转向局部搜索
- 3 算法流程图
- 4 matlab代码实现
- 运行F3测试案例
- 与GWO、PSO、SO算法进行比对——F3算法
前言
金豺(GJO)优化算法是2022年由Nitish Chopra 等人提出,GJO 的灵感来自金豺 (Canis aureus) 的协作狩猎行为。算法的三个基本步骤是猎物搜索、包围和突袭 。
1 算法原理
该算法主要是由雄雌豺狼带领各个豺狼对猎物进行搜索、包围和围捕。
A:雄雌豺狼对
B:个体搜索猎物
C:包围猎物
D&E:围捕猎物
2 算法步骤
2.1 初始化种群
对个体进行初始化,和大部分算法一样,Ymax:表示上界,Ymin:表示下界
通过上述公式对种群进行初始化。
2.2 搜索猎物(全局搜索)
Ym(t):所有豺狼个体中最好的个体——雄性豺狼
Yfm(t):所有豺狼个体中次好的个体——雌性豺狼
E的计算公式:
E:回避能量
c1=1.5,E1为从1.5~0线性递减。
rl的计算公式:
miu,v 为0-1的随机数,beta=1.5;
ps:τ对应matlab函数中的gamma函数。
豺狼个体更新位置的公式:
ps:有点类似于灰狼优化算法个体更新位置的公式
算法的探索阶段(全局搜索)使用如下3个公式对豺狼个体进行位置更新。
2.3 包围和围捕猎物(局部搜索)
算法的开发阶段(局部搜索)使用如下3个公式对豺狼个体进行位置更新
2.4 从全局搜索转向局部搜索
主要通过躲避能量的绝对值大小进行改变
当|E|>=1,豺狼对不同部分探索猎物,
当|E|<1,豺狼开始包围和攻击猎物。
3 算法流程图
4 matlab代码实现
main函数:
close all;
clear all;
clc;% N种群大小
% Dim个体维度
% T最大迭代次数
% ub上界
% lb下界
% X_prey最好的个体
% G_best存储每次迭代后的最好个体的适应度值N=300;
Dim=30;
T=500;
ub=100;
lb=-100;
[Y_prey,G_best]=GJO(Dim,ub,lb,N,T);
figure,
plot(G_best,'Color','blue');
best=G_best';%转置用于origin填充数据使用
xlim([1,500]);
my_function函数:
function my_fitness=my_function(X)
%F3测试问题
dim=size(X,2);
o=0;
for i=1:dimo=o+sum(X(1:i))^2;
end
my_fitness=o;
end
GJO主体代码
function [Y_prey,G_best]=GJO(Dim,ub,lb,N,T)%% 初始化参数c1=1.5;beta=1.5;%% 初始化种群Pop=zeros(N,Dim);Pop_size=size(Pop,1);for i=1:Pop_sizefor j=1:DimPop(i,j)=lb+rand*(ub-lb);endend%% 进化for t=1:T%筛选雄雌豺狼个体for i=1:Pop_sizefit_ness(i)=my_function(Pop(i,:));end[~,sort_index]=sort(fit_ness);Y1=Pop(sort_index(1),:);%雄性豺狼Y2=Pop(sort_index(2),:);%雌性豺狼Y1_fitness=fit_ness(sort_index(1));%雄性豺狼适应度值Y2_fitness=fit_ness(sort_index(2));%雌性豺狼适应度值for i=1:Pop_sizefor j=1:Dim%eq(6)~eq(8)E0=2*rand-1;E1=c1*(1-(t/T));E=E1*E0;%eq(9)~eq(10)miu=rand;v=rand;sita=((gamma(1+beta)*sin(pi*beta/2))/(gamma((1+beta)/2)*beta*2.^((beta-1)/2))).^(1/beta);LF=0.01*(miu*sita)/(abs(v.^(1/beta)));rl=0.05*LF;if abs(E)>=1Y1_new=Y1(j)-E.*abs(Y1(j)-rl.*Pop(i,j));Y2_new=Y2(j)-E.*abs(Y2(j)-rl.*Pop(i,j));Y_new(i,j)=(Y1_new+Y2_new)./2;%紧随雄雌豺狼,更新豺狼位置 eq(4)、(5)and(11)elseY1_new=Y1(j)-E.*abs(rl*Y1(j)-Pop(i,j));Y2_new=Y2(j)-E.*abs(rl*Y2(j)-Pop(i,j));Y_new(i,j)=(Y1_new+Y2_new)./2;%紧随雄雌豺狼,更新豺狼位置 eq(12)、(13)and(11)endendend%% 计算所有新更新个体的适应度值for i=1:Pop_sizeFlag4Up=Y_new(i,:)>ub;Flag4Lp=Y_new(i,:)<lb;Y_new(i,:)=(Y_new(i,:).*(~(Flag4Up+Flag4Lp)))+Flag4Up.*ub+Flag4Lp.*lb;%修正y=my_function(Y_new(i,:));if y<my_function(Pop(i,:))fit_ness(i)=y;Pop(i,:)=Y_new(i,:);%替换个体endend%% 更新雄雌豺狼[~,sort_index]=sort(fit_ness);Y1=Pop(sort_index(1),:);%雄性豺狼Y2=Pop(sort_index(2),:);%雌性豺狼Y_prey=Y1;%最好的个体G_best(t)=my_function(Y1);%每次迭代后计算雄性豺狼个体的适应度值end
end
运行F3测试案例
与GWO、PSO、SO算法进行比对——F3算法