2025最新智能优化算法:鹰鱼优化算法(HawkFish Optimization Algorithm,HFOA)求解23个经典函数测试集,MATLAB
一、 鹰鱼优化算法
鹰鱼优化算法(HawkFish Optimization Algorithm,HFOA)是2025年提出的一种新颖的元启发式优化算法,灵感来源于鹰鱼的性别转换行为。该算法通过引入双适应度函数、动态聚类和视觉范围调整等机制,有效平衡了搜索空间的探索和开发,避免了局部最优解的陷入,提高了优化效率和解的质量。算法在解决复杂优化问题时表现出色,优于其他传统优化算法。

数学模型
鹰鱼优化算法的数学模型主要基于鹰鱼的性别转换行为和觅食行为。算法中,每个个体(人工鱼)的位置、适应度值、移动方式等都通过数学公式进行描述。
性别转换模型
设p(t)p(t)p(t)表示在时间ttt时种群中雌性的比例,q(t)q(t)q(t)表示雄性的比例:
p(t)+q(t)=1 p(t) + q(t) = 1 p(t)+q(t)=1
初始时,假设所有鹰鱼都是雌性,因此p(0)=1p(0) = 1p(0)=1且q(0)=0q(0) = 0q(0)=0。
设d(t)d(t)d(t)表示在时间ttt时的食物可用性,其中d(t)>0d(t) > 0d(t)>0表示食物充足,d(t)=0d(t) = 0d(t)=0表示没有食物。
雌性比例的变化率可以表示为:
dpdt=−a×p×(1−d(t)) \frac{dp}{dt} = -a \times p \times (1 - d(t)) dtdp=−a×p×(1−d(t))
其中,aaa是一个表示性别变化率的常数。
雄性比例的变化率可以表示为:
dqdt=a×p×(1−d(t)) \frac{dq}{dt} = a \times p \times (1 - d(t)) dtdq=a×p×(1−d(t))
适应度函数
在优化问题中,适应度函数用于评估个体的优劣。对于最小化问题,适应度函数可以定义为:
fitness(x)=f(x) fitness(x) = f(x) fitness(x)=f(x)
个体移动模型
每个个体的移动由以下公式决定:
x(i,j)=x(i,j)+s(i,j)×d(i,j) x(i,j) = x(i,j) + s(i,j) \times d(i,j) x(i,j)=x(i,j)+s(i,j)×d(i,j)
其中,x(i,j)x(i,j)x(i,j)是第iii条鱼的第jjj个位置元素,s(i,j)s(i,j)s(i,j)是第iii条鱼的步长,d(i,j)d(i,j)d(i,j)是第iii条鱼的方向向量元素。
动态聚类
计算种群中个体之间的距离矩阵DDD,其中D(i,j)D(i,j)D(i,j)表示第iii条鱼和第jjj条鱼之间的距离。然后使用基于欧几里得距离的聚类算法将种群划分为kkk个聚类C1,C2,…,CkC_1, C_2, \ldots, C_kC1,C2,…,Ck。
学习机制
每个个体在子种群内向邻居学习,更新位置的公式为:
x(i,j)=x(i,j)+w×(x(jbest,j)−x(i,j)) x(i,j) = x(i,j) + w \times (x(j_{best},j) - x(i,j)) x(i,j)=x(i,j)+w×(x(jbest,j)−x(i,j))
其中,x(jbest,j)x(j_{best},j)x(jbest,j)是子种群中最佳个体的第jjj个位置元素,www是学习系数。
步长和方向向量更新
步长和方向向量的更新公式为:
s(i,j)=s(i,j)+α×r×(xglobal(j)−x(i,j)) s(i,j) = s(i,j) + \alpha \times r \times (x_{global}(j) - x(i,j)) s(i,j)=s(i,j)+α×r×(xglobal(j)−x(i,j))
d(i,j)=d(i,j)+β×r×(x(i,j)−xlocal(j)) d(i,j) = d(i,j) + \beta \times r \times (x(i,j) - x_{local}(j)) d(i,j)=d(i,j)+β×r×(x(i,j)−xlocal(j))
其中,α\alphaα和β\betaβ是学习系数,rrr是0到1之间的随机数,xglobal(j)x_{global}(j)xglobal(j)是全局最佳个体的第jjj个位置元素,xlocal(j)x_{local}(j)xlocal(j)是局部最佳个体的第jjj个位置元素。
算法流程
- 初始化参数:种群大小NNN、维度nnn、子种群数kkk、全局学习系数α\alphaα、局部学习系数β\betaβ、子种群学习系数www、最大迭代次数max_iterationsmax\_iterationsmax_iterations。
- 在搜索空间中随机初始化人工鱼种群。
- 对于每次迭代:
- 使用两个适应度函数f1(x)f_1(x)f1(x)和f2(x)f_2(x)f2(x)评估每条鱼的适应度。
- 根据适应度更新每条鱼的位置。
- 移动后重新评估每条鱼的适应度。
- 将种群聚类成kkk个子种群以增加多样性。
- 在每个子种群内执行鱼学习。
- 更新每条鱼的步长和方向向量。
- 返回找到的全局最佳解。
算法描述
鹰鱼优化算法是一种受鹰鱼性别转换行为启发的元启发式优化算法。算法通过模拟鹰鱼的觅食行为和性别转换,动态调整种群中的个体角色和搜索策略,以平衡探索和开发,避免局部最优,提高优化效率。
动态性别转换策略
根据食物可用性FFF与预定义阈值FthresholdF_{threshold}Fthreshold的比较,动态改变每条鱼的性别。如果F>FthresholdF > F_{threshold}F>Fthreshold,则改变鱼的性别(例如,雄性变为雌性,反之亦然)。
视觉范围调整
为雄性和雌性子种群分配独特的视觉范围VmaleV_{male}Vmale和VfemaleV_{female}Vfemale。在评估适应度和更新位置时,每条鱼仅考虑其对应视觉范围内的其他鱼。
位置更新
使用以下公式更新每条鱼的位置:
xf(t+1)=xf(t)+step_size×(xcenter−xf(t)) x_f(t+1) = x_f(t) + step\_size \times (x_{center} - x_f(t)) xf(t+1)=xf(t)+step_size×(xcenter−xf(t))
其中,xf(t)x_f(t)xf(t)是鱼fff在迭代ttt时的位置,step_sizestep\_sizestep_size是预定义参数,xcenterx_{center}xcenter是对应子种群的中心位置。
中心位置计算
子种群PmaleP_{male}Pmale或PfemaleP_{female}Pfemale的中心位置计算公式为:
xcenter=1∥Pmale∥或∥Pfemale∥×∑xj x_{center} = \frac{1}{\|P_{male}\| \text{或} \|P_{female}\|} \times \sum x_j xcenter=∥Pmale∥或∥Pfemale∥1×∑xj
其中,xjx_jxj是相应子种群中第jjj条鱼的位置。
邻居搜索
在视觉范围内寻找邻居鱼NfN_fNf,并根据最佳邻居鱼xnbestx_{nbest}xnbest更新鱼fff的位置:
xf(t+1)=xf(t)+step_size×(xnbest−xf(t)) x_f(t+1) = x_f(t) + step\_size \times (x_{nbest} - x_f(t)) xf(t+1)=xf(t)+step_size×(xnbest−xf(t))


二、23个函数介绍

参考文献:
[1] Yao X, Liu Y, Lin G M. Evolutionary programming made faster[J]. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.
三、部分代码及结果
clear;
clc;
close all;
warning off all;
SearchAgents_no=50; %Number of search solutions
Max_iteration=500; %Maximum number of iterations
Func_name='F1'; % Name of the test function
% Load details of the selected benchmark function
[lb,ub,dim,fobj]=Get_F(Func_name);
tic;
[Best_score,Best_pos,cg_curve]=(SearchAgents_no,Max_iteration,lb,ub,dim,fobj);
tend=toc;
% figure('Position',[500 500 901 345])
%Draw search space
subplot(1,2,1);
func_plot(Func_name);
title('Parameter space')
xlabel('x_1');
ylabel('x_2');
zlabel([Func_name,'( x_1 , x_2 )'])
%Draw objective space
subplot(1,2,2);
semilogy(cg_curve,'Color','m',LineWidth=2.5)
title(Func_name)
% title('Objective space')
xlabel('Iteration');
ylabel('Best score obtained so far');
axis tight
grid on
box on
legend('')
display(['The running time is:', num2str(tend)]);
display(['The best fitness is:', num2str(Best_score)]);
display(['The best position is: ', num2str(Best_pos)]);



四、完整MATLAB代码见下方名片
更多推荐



所有评论(0)