智能优化算法:雪橇犬优化算法(Sled Dog Optimizer,SDO)求解23个经典函数测试集,MATLAB

embedded/2025/2/27 8:29:02/

一、雪橇犬优化算法

  1. 算法简介:雪橇犬优化算法(Sled Dog Optimizer,SDO)是2024年10月发表于JCR1区、中科院1区SCI期刊《Advanced Engineering Informatics》的新型仿生元启发式算法。它模拟雪橇犬的拉雪橇、训练和退役行为构建模型,旨在求解工程领域的优化问题。该算法的提出丰富了智能优化算法的种类,为解决现实世界中的复杂优化难题提供了创新方案。
  2. 算法原理
    • 行为模拟基础:基于对雪橇犬实际行为的观察和抽象。例如,雪橇犬拉雪橇时会受前犬、后犬及同伴影响,领头犬能依据经验和主人指令行动;遇到障碍会躲避;特殊情况下会探索新区域;能力不足的犬会接受训练;多次执行任务受伤的犬会退役。这些行为特征为算法设计提供了直观依据。
    • 优化策略本质:通过模拟上述行为,算法实现对解空间的有效搜索。利用犬只间的协作、适应和淘汰机制,引导种群向更优解进化,平衡全局搜索和局部开发能力,避免陷入局部最优解。
  3. 数学模型
    • 初始化模型:采用随机初始化,公式为 D o g = L b + r a n d ⋅ ( U b − L b ) Dog = Lb + rand·(Ub - Lb) Dog=Lb+rand(UbLb) 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.7N+k12k2确定参与拉雪橇的犬只数量 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+c1r1(DogGiDogi)+c2r2(DogZDogi);当 i ∈ [ 3 , N 1 − 2 ] i \in [3, N_{1}-2] i[3,N12]时, 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+c1r1(Dogi2Dogi)+c2r2(Dogi+2Dogi)+2lr3(DogtDogi);当 i = N 1 − 1 , N 1 i = N_{1}-1, N_{1} i=N11,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+c1r1(Dogi2Dogi)+c2r2(DogrDogi)+2lr3(DogtDogi)。其中, ω \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.5r4(DogZDogN)+kp2r5(DogGiDogN),Dogi+0.5r4(DogZDogN)+kp12r5(DogGiDogN),if rand0.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.5Cr7ζ(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+r8F(r9D1X1+r10D2X2+r11D3X3)。其中, 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(DogZjDogBetterj)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+Dog2jDogWorsej)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(DogBetterjDogWorsej)2 X 1 = D o g Z − D o g B e t t e r X_{1}=Dog_{Z}-Dog_{Better} X1=DogZDogBetter 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+Dog2DogWorse 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=DogBetterDogWorse 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,保证算法保留更优个体。
  4. 算法流程
    • 初始化:根据问题确定种群大小 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 GoDog1),根据位置更新速度 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.

三、部分代码及结果

clear;
clc;
close all;
warning off all;SearchAgents_no=50;    %Number of search solutions
Max_iteration=500;    %Maximum number of iterationsFunc_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)]);

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、完整MATLAB代码见下方名片


http://www.ppmy.cn/embedded/167491.html

相关文章

python-leetcode-乘积最大子数组

152. 乘积最大子数组 - 力扣&#xff08;LeetCode&#xff09; class Solution:def maxProduct(self, nums: List[int]) -> int:if not nums:return 0max_prod nums[0]min_prod nums[0]result nums[0]for i in range(1, len(nums)):if nums[i] < 0:max_prod, min_prod…

Imagination DXTP GPU IP:加速游戏AI应用,全天候畅玩无阻

日前&#xff0c;Imagination 推出了最新产品——Imagination DXTP GPU IP&#xff0c;在智能手机和其他功耗受限设备上加速图形和AI工作负载时&#xff0c;保证全天候的电池续航。它是我们最新D系列GPU的最终产品&#xff0c;集成了自2022年发布以来引入的一系列功能&#xff…

PyCharm社区版如何运行Django工程?

PyCharm 社区版虽然不像专业版那样提供对 Django 的直接支持&#xff0c;但仍然可以通过一些手动配置来运行 Django 工程。以下是详细的步骤&#xff1a; 步骤 1&#xff1a;安装 Django 确保你的环境中已经安装了 Django。如果没有安装&#xff0c;可以通过以下命令安装&…

什么是DApp?从智能合约到完整DApp系统开发

随着区块链技术的蓬勃发展&#xff0c;去中心化应用&#xff08;DApp&#xff09;逐渐成为数字经济的重要组成部分。DApp不仅具有去中心化的特性&#xff0c;还能提供更高的安全性和透明度。在这篇文章中&#xff0c;我们将深入探讨DApp的概念、智能合约的作用&#xff0c;以及…

姿态矩阵/旋转矩阵/反对称阵

物理意义&#xff0c;端点矢量角速率叉乘本身向量&#xff1b; 负号是动系b看固定系i是相反的&#xff1b; 一个固定 在惯性导航解算中&#xff0c;旋转矢量的叉乘用于描述姿态矩阵的微分方程。你提到的公式中&#xff0c; ω i b b \boldsymbol{\omega}_{ib}^b \times ωibb…

笔记20250226

电源树Power Tree(电源树)分析&#xff1a;从零开始掌握电源管理的秘诀-公司宣传网站1.6 电源树中电流的计算方法(硬件基础系列)-CSDN博客Xilinx的FPGA硬件设计一——电源篇_xilinx内核电流-CSDN博客

数据结构秘籍(一)线性数据结构

1.数组 数组&#xff08;Array&#xff09;是一种很常见的数据结构。它由相同类型的元素&#xff08;element&#xff09;组成&#xff0c;并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引&#xff08;index&#xff09;计算出该元素对应的存储地址。 数组的特…

学Java第三十一天----------多态调用成员的特点

一、多态调用成员的特点 成员变量调用&#xff1a;编译看左边&#xff0c;运行也看左边&#xff0c;即获取的是父类的成员变量值 成员方法调用&#xff1a;编译看左边&#xff0c;运行看右边&#xff0c;即运行的是子类的成员方法 二、多态的优势 示例1&#xff1a;上一节的代…