一、雪橇犬优化算法
- 算法简介:雪橇犬优化算法(Sled Dog Optimizer,SDO)是2024年10月发表于JCR1区、中科院1区SCI期刊《Advanced Engineering Informatics》的新型仿生元启发式算法。它模拟雪橇犬的拉雪橇、训练和退役行为构建模型,旨在求解工程领域的优化问题。该算法的提出丰富了智能优化算法的种类,为解决现实世界中的复杂优化难题提供了创新方案。
- 算法原理
- 行为模拟基础:基于对雪橇犬实际行为的观察和抽象。例如,雪橇犬拉雪橇时会受前犬、后犬及同伴影响,领头犬能依据经验和主人指令行动;遇到障碍会躲避;特殊情况下会探索新区域;能力不足的犬会接受训练;多次执行任务受伤的犬会退役。这些行为特征为算法设计提供了直观依据。
- 优化策略本质:通过模拟上述行为,算法实现对解空间的有效搜索。利用犬只间的协作、适应和淘汰机制,引导种群向更优解进化,平衡全局搜索和局部开发能力,避免陷入局部最优解。
- 数学模型
- 初始化模型 :采用随机初始化,公式为 D o g = L b + r a n d ⋅ ( U b − L b ) Dog = Lb + rand·(Ub - Lb) Dog=Lb+rand⋅(Ub−Lb)。 L b Lb Lb和 U b Ub Ub是变量取值范围的下限和上限, r a n d rand rand是 [ 0 , 1 ] [0, 1] [0,1]区间的随机数。这使得算法在搜索初期能在整个解空间随机分布初始解,为后续搜索提供多样性。
- 雪橇犬选择模型 :用公式 N 1 = 0.7 ⋅ N + k 1 ⋅ 2 k 2 N_1 = 0.7·N + k_1 ·2k^2 N1=0.7⋅N+k1⋅2k2确定参与拉雪橇的犬只数量 N 1 N_1 N1( N N N为种群数量)。这种选择方式模拟实际任务分配,使算法聚焦于较优解区域的搜索,提高搜索效率。
- 旅行模型 :正常旅行时,雪橇犬速度更新公式根据位置不同而不同。当 i = 1 , 2 i = 1, 2 i=1,2时, V i = ω ⋅ V i + c 1 ⋅ r 1 ⋅ ( D o g G i − D o g i ) + c 2 ⋅ r 2 ⋅ ( D o g Z − D o g i ) V_{i}=\omega \cdot V_{i}+c_{1} \cdot r_{1} \cdot\left(Dog_{G_{i}} - Dog_{i}\right)+c_{2} \cdot r_{2} \cdot\left(Dog_{Z} - Dog_{i}\right) Vi=ω⋅Vi+c1⋅r1⋅(DogGi−Dogi)+c2⋅r2⋅(DogZ−Dogi);当 i ∈ [ 3 , N 1 − 2 ] i \in [3, N_{1}-2] i∈[3,N1−2]时, V i = ω ⋅ V i + c 1 ⋅ r 1 ⋅ ( D o g i − 2 − D o g i ) + c 2 ⋅ r 2 ⋅ ( D o g i + 2 − D o g i ) + 2 ⋅ l ⋅ r 3 ⋅ ( D o g t − D o g i ) V_{i}=\omega \cdot V_{i}+c_{1} \cdot r_{1} \cdot\left(Dog_{i - 2}-Dog_{i}\right)+c_{2} \cdot r_{2} \cdot\left(Dog_{i + 2}-Dog_{i}\right)+2 \cdot l \cdot r_{3} \cdot\left(Dog_{t}-Dog_{i}\right) Vi=ω⋅Vi+c1⋅r1⋅(Dogi−2−Dogi)+c2⋅r2⋅(Dogi+2−Dogi)+2⋅l⋅r3⋅(Dogt−Dogi);当 i = N 1 − 1 , N 1 i = N_{1}-1, N_{1} i=N1−1,N1时, V i = ω ⋅ V i + c 1 ⋅ r 1 ⋅ ( D o g i − 2 − D o g i ) + c 2 ⋅ r 2 ⋅ ( D o g r − D o g i ) + 2 ⋅ l r 3 ⋅ ( D o g t − D o g i ) V_{i}=\omega \cdot V_{i}+c_{1} \cdot r_{1} \cdot\left(Dog_{i - 2}-Dog_{i}\right)+c_{2} \cdot r_{2} \cdot\left(Dog_{r}-Dog_{i}\right)+2 \cdot l_{r_{3}} \cdot\left(Dog_{t}-Dog_{i}\right) Vi=ω⋅Vi+c1⋅r1⋅(Dogi−2−Dogi)+c2⋅r2⋅(Dogr−Dogi)+2⋅lr3⋅(Dogt−Dogi)。其中, ω \omega ω是惯性权重,平衡全局探索和局部开发; c 1 c_1 c1、 c 2 c_2 c2是学习因子,控制向优秀解学习的程度; r 1 r_1 r1、 r 2 r_2 r2、 r 3 r_3 r3是随机数; D o g G i Dog_{G_{i}} DogGi、 D o g Z Dog_{Z} DogZ等是不同参考位置的犬只。位置更新公式为 D o g i = D o g i + V i Dog_i = Dog_i + V_i Dogi=Dogi+Vi。
- 避障模型 :遇到障碍时,雪橇犬位置更新公式为: D o g i = { D o g i + 0.5 ⋅ r 4 ⋅ ( D o g Z − D o g N ) + k ⋅ p 2 ⋅ r 5 ⋅ ( D o g G i − D o g N ) , if r a n d ≥ 0.5 D o g i + 0.5 ⋅ r 4 ⋅ ( D o g Z − D o g N ) + k ⋅ p 1 2 ⋅ r 5 ⋅ ( D o g G i − D o g N ) , otherwise Dog_i = \begin{cases} Dog_{i}+0.5 \cdot r_{4} \cdot\left(Dog_{Z}-Dog_{N}\right)+k \cdot p_{2} \cdot r_{5} \cdot\left(Dog_{G_{i}} - Dog_{N}\right), & \text{if } rand \geq 0.5 \\ Dog_{i}+0.5 \cdot r_{4} \cdot\left(Dog_{Z}-Dog_{N}\right)+k \cdot p_{1}^{2} \cdot r_{5} \cdot\left(Dog_{G_{i}} - Dog_{N}\right), & \text{otherwise} \end{cases} Dogi={Dogi+0.5⋅r4⋅(DogZ−DogN)+k⋅p2⋅r5⋅(DogGi−DogN),Dogi+0.5⋅r4⋅(DogZ−DogN)+k⋅p12⋅r5⋅(DogGi−DogN),if rand≥0.5otherwise, r 4 r_4 r4、 r 5 r_5 r5等是随机数和参数,确保算法在搜索中能避开局部最优。
- 迷失方向模型 :迷失方向时,公式为 D o g i = r 6 ⋅ ( D o g i + D o g z 2 ) + 0.5 ⋅ C ⋅ r 7 ⋅ ζ ⋅ ( D o g r − ζ ⋅ D o g i ) Dog_{i}=r_{6} \cdot\left(\frac{Dog_{i}+Dog_{z}}{2}\right)+0.5 \cdot C \cdot r_{7} \cdot \zeta \cdot\left(Dog_{r}-\zeta \cdot Dog_{i}\right) Dogi=r6⋅(2Dogi+Dogz)+0.5⋅C⋅r7⋅ζ⋅(Dogr−ζ⋅Dogi),使算法在陷入局部最优时有机会跳出,继续寻找更优解。
- 训练模型 :对不符合要求的雪橇犬,训练公式为 D o g i = D o g i + r 8 ⋅ F ⋅ ( r 9 ⋅ D 1 ⋅ X 1 + r 10 ⋅ D 2 ⋅ X 2 + r 11 ⋅ D 3 ⋅ X 3 ) Dog_{i}=Dog_{i}+r_{8} \cdot F \cdot\left(r_{9} \cdot D_{1} \cdot X_{1}+r_{10} \cdot D_{2} \cdot X_{2}+r_{11} \cdot D_{3} \cdot X_{3}\right) Dogi=Dogi+r8⋅F⋅(r9⋅D1⋅X1+r10⋅D2⋅X2+r11⋅D3⋅X3)。其中, D 1 = ∑ j = 1 D i m ( D o g Z j − D o g B e t t e r j ) 2 D_{1}=\sqrt{\sum_{j = 1}^{Dim }\left(Dog_{Z}^{j}-Dog_{Better }^{j}\right)^{2}} D1=∑j=1Dim(DogZj−DogBetterj)2 , D 2 = ∑ j = 1 D i m ( D o g 1 j + D o g 2 j 2 − D o g W o r s e j ) 2 D_{2}=\sqrt{\sum_{j = 1}^{Dim}\left(\frac{Dog_{1}^{j}+Dog_{2}^{j}}{2}-Dog_{Worse }^{j}\right)^{2}} D2=∑j=1Dim(2Dog1j+Dog2j−DogWorsej)2 , D 3 = ∑ j = 1 D i m ( D o g B e t t e r j − D o g W o r s e j ) 2 D_{3}=\sqrt{\sum_{j = 1}^{Dim}\left(Dog_{Better }^{j}-Dog_{Worse }^{j}\right)^{2}} D3=∑j=1Dim(DogBetterj−DogWorsej)2 , X 1 = D o g Z − D o g B e t t e r X_{1}=Dog_{Z}-Dog_{Better} X1=DogZ−DogBetter, X 2 = D o g 1 + D o g 2 2 − D o g W o r s e X_{2}=\frac{Dog_{1}+Dog_{2}}{2}-Dog_{Worse} X2=2Dog1+Dog2−DogWorse, X 3 = D o g B e t t e r − D o g W o r s e X_{3}=Dog_{Better}-Dog_{Worse} X3=DogBetter−DogWorse 。 D o g B e t t e r Dog_{Better} DogBetter是完成任务的随机个体, D o g W o r s e Dog_{Worse} DogWorse是未执行任务的个体,帮助较差个体向优秀个体学习,提升种群质量。
- 退役模型 :通过对适应度值排序实现退役。输入雪橇犬种群 X X X和适应度值 f f f,对 f f f从小到大排序记录索引数组 i n d e x index index,再根据 i n d e x index index重排个体相关信息,输出排序后的种群 X ′ X' X′和适应度值 f ′ f' f′,保证算法保留更优个体。
- 算法流程
- 初始化 :根据问题确定种群大小 N N N、维度 D i m Dim Dim、最大迭代次数 T T T等参数。随机生成初始种群 D o g Dog Dog,初始化速度矩阵 V S t e p VStep VStep为零矩阵。计算每个个体的适应度值 f D o g fDog fDog,确定当前最优个体 z b e s t zbest zbest和全局最优个体 g b e s t gbest gbest。
- 迭代优化 :在 T T T次迭代中,每次迭代更新参数,如 y y y、 c c cc cc、 c 1 c1 c1、 c 2 c2 c2、 w 1 w1 w1、 p 1 p1 p1、 C F CF CF等。计算参与拉雪橇的犬只数量 G o D o g GoDog GoDog,对雪橇犬按退役机制排序。对正常旅行的犬只( j = 1 j = 1 j=1到 G o D o g − 1 GoDog - 1 GoDog−1),根据位置更新速度 V S t e p VStep VStep并限制边界,再更新位置 D o g Dog Dog并处理边界,计算新的适应度值 f D o g ( j ) fDog(j) fDog(j)。对训练阶段的犬只( j = G o D o g + 2 j = GoDog + 2 j=GoDog+2到 D o g N u m DogNum DogNum),按训练公式计算新位置 N e w D O G New_DOG NewDOG,处理边界后比较适应度,若新适应度更优则更新。生成随机数 S D SD SD,根据 S D SD SD值判断雪橇犬状态(避障、无特殊情况、迷失方向),按相应公式更新 G o D o g + 1 GoDog + 1 GoDog+1只犬的位置,处理边界并比较适应度更新。每次迭代结束更新 g b e s t gbest gbest、 z b e s t zbest zbest,记录当前最优适应度值 C u r v e ( i t e r ) Curve(iter) Curve(iter)。
- 结果输出 :迭代结束后,输出最优位置 B e s t P o s BestPos BestPos( z b e s t ( 1 , : ) zbest(1,:) zbest(1,:))、最优适应度值 B e s t F i t BestFit BestFit( f z b e s t ( 1 ) fzbest(1) fzbest(1))、适应度变化曲线 C u r v e Curve Curve。
参考文献
[1] GANG HU . SDO: A novel sled dog-inspired optimizer for solving engineering problems[J]. Advanced Engineering Informatics, 2024, 62: Article 102783. DOI:10.1016/j.aei.2024.102783.
二、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]=SGA(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('SGA')
display(['The running time is:', num2str(tend)]);
display(['The best fitness is:', num2str(Best_score)]);
display(['The best position is: ', num2str(Best_pos)]);
