一、改进型雪雁算法
雪雁算法(Snow Geese Algorithm,SGA)是2024年提出的一种新型元启发式算法,其灵感来源于雪雁的迁徙行为,特别是它们在迁徙过程中形成的独特"人字形"和"直线"飞行模式。该算法通过模拟雪雁的飞行行为,实现了在解空间中的高效搜索和优化。SGA算法主要分为三个阶段:初始化阶段、探索阶段和开发阶段。

改进型雪雁算法(Improved Snow Geese Algorithm, ISGA) 是2025年提出的一种新型元启发式算法,是对雪雁算法(SGA)的改进,旨在解决复杂工程优化问题和聚类优化问题。ISGA通过引入三种改进策略,显著提升了算法的探索和开发能力,从而提高了算法的收敛速度和精度。
改进策略:
领头雁轮换机制:
模拟雪雁迁徙过程中,当领头雁疲劳时,其他强壮的雪雁会接替领头雁的位置,以维持飞行效率和速度。
通过竞争机制,选择适应值最高的个体作为新的领头雁,从而增强算法的全局探索能力。
鸣叫引导机制:
模拟雪雁通过鸣叫进行沟通,以引导飞行方向。
使用声波传播的衰减模型,根据个体与领头雁的距离调整其位置更新,避免因过度聚集或分散导致的开发能力下降。
异常边界策略:
考虑雪雁作为群居鸟类,个体害怕离群的特性。
通过计算个体的适应值与群体平均适应值的差异,调整个体的位置更新,以提高算法的收敛速度和精度。
算法流程:
算法性能:
探索与开发能力:ISGA在探索阶段通过领头雁轮换机制增强全局搜索能力,在开发阶段通过鸣叫引导机制和异常边界策略提高局部搜索精度。
收敛速度与精度:ISGA在多个测试函数上表现出更快的收敛速度和更高的收敛精度,特别是在高维问题上表现更为突出。
稳定性:通过多次独立运行的实验结果表明,ISGA在不同维度和不同类型的优化问题上均表现出较高的稳定性和鲁棒性。
参考文献:
[1]Bian, H., Li, C., Liu, Y. et al. Improved snow geese algorithm for engineering applications and clustering optimization. Sci Rep 15, 4506 (2025). https://doi.org/10.1038/s41598-025-88080-7
[2][1] Tian A Q , Liu F F , Lv H X .Snow Geese Algorithm: A novel migration-inspired meta-heuristic algorithm for constrained engineering optimization problems[J].Applied Mathematical Modelling, 2024, 126:327-347.DOI:10.1016/j.apm.2023.10.045.
二、23个函数介绍

参考文献:
[1] Yao X, Liu Y, Lin G M. Evolutionary programming made faster[J]. IEEE transactions on evolutionary computation, 1999, 3(2):82-102.
三、部分代码及结果
dart
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]=ISGA(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('ISGA')
display(['The running time is:', num2str(tend)]);
display(['The best fitness is:', num2str(Best_score)]);
display(['The best position is: ', num2str(Best_pos)]);