蛇优化算法Snake Optimizer, SO是一种受蛇类捕食行为启发的智能优化方法具有结构简单、易于实现的特点。然而原始 SO 在种群多样性和搜索精度方面仍存在不足容易陷入局部最优。为此研究人员提出了改进蛇优化算法Improved Snake Optimizer, ISO通过引入三种全新的增强策略显著提升算法性能。ISO 模拟了蛇类在自然环境中应对捕食与生存压力的多样化行为初始化阶段采用多策略混沌系统MSCS增强个体初始分布的随机性与均匀性探索阶段融合反捕食者策略APS拓展搜索范围提高收敛速度与精度开发阶段引入双向种群进化动态BPED保持种群多样性强化全局搜索能力与局部开发能力的平衡。ISO 展现出极强的全局优化能力在数值优化与工程设计问题中优于多种主流算法。该成果于2025年发表在计算机领域一区TOP期刊Expert Systems with Applications期刊上具备广泛的工程实用前景。Abdelazim G. Hussien教授受自然界中蛇类独特的捕食、战斗与交配行为启发提出了一种新型的群体智能算法——蛇优化器Snake Optimizer, SO。SO 算法将蛇群种群精确划分为雄性与雌性两类并基于温度和食物可得性等自然因素对蛇类行为进行数学建模该过程如下图所示。1、算法原理1SO算法SO 算法将蛇群种群平均划分为雄性与雌性两类个体如下式所示仅当温度Temp较低且食物供应量Q充足的条件下雌蛇才会与雄蛇发生战斗或交配行为。温度与食物供应量的数学表达如下式所示其中 表示个体总数 和分别表示雄性个体与雌性个体的数量 和分别表示最大迭代次数与当前迭代次数常数的取值为。SO 算法同样包含探索阶段与开发阶段。当食物匮乏 时蛇群进入探索阶段并依据以下公式相对于食物的位置进行更新其中 和表示雄性蛇的当前位置与随机雄蛇的位置其对应的适应度值分别为与 和分别为问题的上界与下界 是范围内的随机数常数。雌性蛇的位置更新方式与雄性蛇相同。当食物供应充足 时蛇群进入开发阶段若温度满足 蛇将完全朝向食物方向移动具体如下式所示其中 和 分别表示蛇群雄性或雌性的个体位置和最优个体的位置常数 取值为 2。当环境温度较低 时蛇将进入战斗模式或交配模式。其中雄性个体的战斗模式和交配模式分别由下式表示最后适应度最差的雄性与雌性个体分别根据以下公式进行更新算法持续运行直到满足终止条件为止。其中 表示最优雌性蛇的位置 和 分别表示最优雌性蛇与蛇群中第 个个体的适应度值。雌性蛇的位置更新过程与雄性蛇相同。 和 分别表示最差雄性蛇与最差雌性蛇的位置。蛇优化算法的伪代码如下。2多策略混沌系统原始 SO 算法采用伪随机方法生成初始随机种群。大量研究表明该种群初始化方式易导致个体聚集最终影响算法的局部开发和全局探索能力。为提升 SO 算法初始化阶段的表现采用多策略混沌系统MSCS对 SO 算法进行种群初始化其具体形式如下式所示其中 表示第 个个体 表示多策略混沌系统MSCS 和 分别表示问题的上界和下界。由两个显著不同的混沌种子组成混沌种子 表示逻辑映射混沌如下式所示混沌种子 表示正弦映射混沌如下式所示MSCS 最终以正弦变换的形式输出实现复杂且均匀的混沌行为。MSCS 的结构如以下公式所示其中 是逻辑映射混沌的控制参数 是正弦映射混沌的控制参数。本文选择来构建多策略混沌系统MSCS。此外 是 MSCS 的调制参数本研究中取。其中 表示当前的混沌映射值 表示 MSCS 的输出值且。下图展示了逻辑映射混沌、正弦映射混沌及 MSCS 在相空间中的接近点或附近值。图中显示逻辑映射和正弦映射的输出状态仅集中在相空间的一小部分区域表现出明显的混沌退化而 MSCS 则呈现出极其均匀的分布体现了其更优的随机性和鲁棒性。K-熵是表征混沌系统的重要指标。不同类型的动力系统具有不同的K-熵数值。在混沌系统中K-熵大于零且K-熵越高信息丢失速率越快表明系统具有更高的混沌度或复杂性。对于混沌映射迭代函数的输出K-熵的计算公式如下其中 表示两个混沌轨迹之间的时间间隔本研究中设为1。为了直观展示逻辑混沌映射、正弦混沌映射以及多策略混沌系统MSCS的混沌特性及其随控制参数变化的情况对控制参数进行了归一化处理并随机模拟了1000个样本点如下图所示。从图中可以看出在整个参数范围内MSCS的Kolmogorov熵K-熵均高于逻辑映射和正弦映射且其随控制参数变化较小表明MSCS具有比逻辑映射和正弦映射更强的混沌稳定性和鲁棒性。混沌系统的基本特性是对初始条件的极端敏感性即由近似初值生成的轨迹随时间呈指数分离。Lyapunov指数用以定量描述此现象代表系统相空间中轨迹平均指数收敛或发散的速率。Lyapunov指数数值越大说明混沌行为越显著混沌度越高。若一阶差分方程可微分则Lyapunov指数可通过下式计算从图可以观察到MSCS的Lyapunov指数始终高于逻辑映射和正弦映射且始终保持大于零。这表明MSCS在混沌性能上优于逻辑映射和正弦映射表现出更强的初值鲁棒性和抗干扰能力。MSCS增强了蛇形优化算法SO的随机初始化过程使初始种群更加均匀分布且真正随机化。这一改进显著提升了算法初始解的质量和整体稳定性从而使算法能够更快速地收敛到高质量解。3反捕食策略在蛇形优化SO算法中当食物缺乏时蛇进入探索阶段下图(a)对该捕食行为进行了简要说明。然而由于探索阶段策略多样性有限SO算法易于沿着次优解方向发展最终导致获得局部最优解而非全局最优解。此外当蛇外出觅食时其天敌如鹰、猫鼬等可能会攻击它们。为应对这种威胁蛇会尝试躲避捕食者并远离当前位置。图(b)对该躲避行为进行了简化描述。此躲避行为对于扩展SO算法的搜索范围极为有利有助于寻找全局最优解。将反捕食策略APS引入SO算法以数学模型形式模拟蛇逃避捕食者的自然行为。APS仅在蛇处于无食状态 的捕食阶段发生。针对雄性和雌性蛇采用不同的捕食者躲避策略以增强种群多样性。雄性蛇采取的APS数学模型如下式所示其中 表示雄性蛇在捕食者出现时的位置。 是通过多策略混沌系统MSCS随机生成的正整数1或2。 。 和分别表示蛇在面对捕食者时的逃逸范围该范围会随着算法运行逐渐减小从而加快算法的收敛速度。 表示雄性蛇在探索阶段捕食行为中的位置。 和 分别表示雄性蛇在使用躲避捕食策略和捕食策略时的适应度值。在自然界中雌性蛇对物种的繁殖起着关键作用。因此在面对捕食者时为了更好地保护雌性蛇并将其位置靠近更优样本。该自然行为通过以下公式进行建模其中 表示雌性蛇在捕食者出现时的位置 表示雌性蛇的最佳位置。 表示雌性蛇在探索阶段觅食行为时的位置。 和 分别表示雌性蛇在采用躲避捕食策略和觅食策略时的适应度值。如果蛇的新位置是安全的则视为可接受否则将保持当前位置。该自然行为通过下式进行建模其中 表示蛇群在第次迭代时的位置 和分别表示和 的适应度值。为了验证 APS 的有效性可视化雄蛇APS-m、雌蛇APS-f以及整个蛇群APS-all在搜索空间中的位置轨迹。下图展示了 SO、APS-m、APS-f 和 APS-all 在三维空间中的搜索历史及其在不同二维平面上的投影。如图 (a) 所示种群的历史轨迹表明SO 在寻优过程中在整个搜索阶段内始终保持着明显无序的种群结构从初始阶段延续至后期阶段。仅有少量种群数据点被观测到在最优解附近进行探索。在引入 APS 后雄性与雌性蛇均能通过迭代迅速逼近最优解的位置这说明 APS 对蛇群中两性个体均具有积极影响。可以明显看出引入 APS 后蛇群可以迅速收敛至最优解的位置该加速效果显著提升了算法的收敛速度与整体效率。4双向种群演化动态 种群演化动态机制在基于种群的优化算法中尤为有效主要包括两个关键步骤第一步是淘汰适应性差的个体第二步则是对被淘汰个体围绕当前最优个体进行变异或自迁移操作以提升种群中值水平。为提升自组织SO算法中的种群多样性及优化能力提出了一种新策略即双向种群演化动态Bidirectional Population Evolution Dynamics, BPED该策略替代了 SO 算法中孵化阶段的随机搜索机制。BPED 策略主要包括两个步骤。首先依据自然界中广泛存在的帕累托法则保留种群中适应度较高的前 20% 个体并对其保留自然变异。对于由前 20% 个体构成的高质量种群新变异个体 可根据公式获得其中 和 表示种群中除个体 之外的两个不同的高质量个体均来自前 20% 的优秀个体 表示种群中当前适应度最优的个体 为基于正弦函数定义的变异因子具体形式如下式所示其中 表示数据的维度 表示算法的总迭代次数 表示当前迭代次数。BPED 策略的第二部分是对剩余 80% 个体采用 PED 策略进行变异、淘汰与种群迁移以生成新的个体记为 。这部分个体被随机划分为两组其中被分配到第一组的个体将围绕种群当前最优个体进行变异其数学表达式如下式所示其余 80% 个体中的一部分将根据下式进行迁移操作在其初始位置附近重新定位以实现进一步的局部探索与 PED 策略相比BPED 策略引入了一种新颖的双向变异机制分别作用于高性能个体与低性能个体从而提升种群的整体中值水平并显著增强种群多样性。BPED 策略如下图所示为验证 BPED 的有效性构建了一个具有多个谷值与峰值的函数其最优解位于最高峰顶点二维投影位置位于平面右上角如下图所示。由于存在多个峰值该函数对优化算法构成较大挑战算法极易陷入局部最优。SO 的优化结果如图 (b) 所示其个体分布往往聚集于多个局部最优区域表明其在摆脱局部最优干扰方面存在困难。相比之下ISO 的优化结果见图 (c)由于引入了 BPED 策略ISO 的种群多样性显著提升使得算法能够有效引入种群变异全面探索多个局部与全局最优解区域增加了跳出局部最优陷阱的可能性。以上三种新策略共同对原始蛇优化器进行了改进显著提升了算法的收敛速度、精度与稳定性。改进后的蛇优化器ISO的详细流程图如下所示2、结果展示可以看出来SO算法其实本身也不弱但是ISO完全更胜一筹有兴趣的同学可以参考学习一下这位作者是如何改进的。3、MATLAB核心代码% 改进蛇优化算法Improved Snake Optimizer, ISO function [Xfood, fval,gbest_t,Trajectories,fitness_history, position_history] ISO(N,T,lb,ub,dim,fobj) %initial vec_flag[1,-1]; Threshold0.25; Thresold2 0.6; C10.5; C2.05; C32; % Strategy 1: Multi-strategy chaotic system(MSCS) % % Initialization if length(lb)2 XlbMSCS(N,dim)*(ub-lb); else Xrepmat(lb,N,1)MSCS(N,dim).*repmat((ub-lb),N,1);%eq.(10) end for i1:N fitness(i)fobj(X(i,:)); end Trajectorieszeros(N,T); position_historyzeros(N,T,dim); fitness_historyzeros(N,T); [GYbest, gbest] min(fitness); Xfood X(gbest,:); %Diving the swarm into two equal groups males and females Nmround(N/2);%eq.(1) NfN-Nm; XmX(1:Nm,:); XfX(Nm1:N,:); fitness_mfitness(1:Nm); fitness_ffitness(Nm1:N); [fitnessBest_m, gbest1] min(fitness_m); Xbest_m Xm(gbest1,:); [fitnessBest_f, gbest2] min(fitness_f); Xbest_f Xf(gbest2,:); for t 1:T Positions[Xm;Xf]; for i1:size(Positions,1) position_history(i,t,:)Positions(i,:); Trajectories(:,t)Positions(:,1); fitness_history(i,t)fobj(Positions(i,:)); end Tempexp(-((t)/T)); %eq.(2) QC1*exp(((t-T)/(T)));%eq.(3) if Q1 Q1; end % Exploration Phase (no Food) if QThreshold for i1:Nm %Strategy 1: MSCS lb_aplb(1)/t; ub_apub(1)/t; z rand(1, 1); z sin(pi*( z .* (1 - z) sin(pi * z))); %eq.(13) for j1:1:dim rand_leader_index floor(Nm*rand()1); X_randm Xm(rand_leader_index, :); flag_index floor(2*rand()1); Flagvec_flag(flag_index); Amexp(-fitness_m(rand_leader_index)/(fitness_m(i)eps)); Xnewm1(i,j)X_randm(j)Flag*C2*Am*((ub(1)-lb(1))*randlb(1));%eq.(4) end % Strategy 2: Anti-predator strategies(APS-m) Xnewm2(i,:) X(i,:) -round(1z).* (lb_ap rand(1,1) .* (ub_ap-lb_ap)); %eq.(16) Xnewm2(i,:) max(Xnewm2(i,:),lb_ap);Xnewm2(i,:) min(Xnewm2(i,:),ub_ap); if fobj(Xnewm2(i,:)) fobj(Xnewm1(i,:))%eq.(17) Xnewm(i,:)Xnewm2(i,:);%eq.(17) else Xnewm(i,:)Xnewm1(i,:);%eq.(17) end if(fobj(Xnewm(i,:))fitness(i))%eq.(20) X(i,:) Xnewm(i,:);%eq.(20) fitness(i) fobj(Xnewm(i,:)); end end % Strategy 2: Anti-predator strategies(APS-f) for i1:Nf for j1:1:dim rand_leader_index floor(Nf*rand()1); X_randf Xf(rand_leader_index, :); flag_index floor(2*rand()1); Flagvec_flag(flag_index); Afexp(-fitness_f(rand_leader_index)/(fitness_f(i)eps)); Xnewf1(i,j)X_randf(j)Flag*C2*Af*((ub(1)-lb(1))*randlb(1));%eq.(4) end Xnewf2(i,:)X(i,:)rand(1,1) .* (Xbest_f-round(1z).*X(i,:)); % Eq.(18) Xnewf2(i,:) max(Xnewf2(i,:),lb_ap);Xnewf2(i,:) min(Xnewf2(i,:),ub_ap); if fobj(Xnewf2(i,:)) fobj(Xnewf1(i,:))%Eq.(18) Xnewf(i,:)Xnewf2(i,:);%Eq.(18) else Xnewf(i,:)Xnewf1(i,:);%Eq.(18) end if(fobj(Xnewf(i,:))fobj(Xbest_f))%eq.(20) X(i,:) Xnewf(i,:);%eq.(20) fitness(i) fobj(Xnewf(i,:)); end end else %Exploitation Phase (Food Exists) if TempThresold2 %hot for i1:Nm flag_index floor(2*rand()1); Flagvec_flag(flag_index); for j1:1:dim Xnewm(i,j)Xfood(j)C3*Flag*Temp*rand*(Xfood(j)-Xm(i,j));%eq.(5) end end for i1:Nf flag_index floor(2*rand()1); Flagvec_flag(flag_index); for j1:1:dim Xnewf(i,j)Xfood(j)Flag*C3*Temp*rand*(Xfood(j)-Xf(i,j));%eq.(5) end end else %cold if rand0.6 %fight for i1:Nm for j1:1:dim FMexp(-(fitnessBest_f)/(fitness_m(i)eps)); Xnewm(i,j)Xm(i,j) C3*FM*rand*(Q*Xbest_f(j)-Xm(i,j));%eq.(6) end end for i1:Nf for j1:1:dim FFexp(-(fitnessBest_m)/(fitness_f(i)eps)); Xnewf(i,j)Xf(i,j)C3*FF*rand*(Q*Xbest_m(j)-Xf(i,j));%eq.(6) end end else%mating for i1:Nm for j1:1:dim Mmexp(-fitness_f(i)/(fitness_m(i)eps)); Xnewm(i,j)Xm(i,j) C3*rand*Mm*(Q*Xf(i,j)-Xm(i,j));%eq.(7) end end for i1:Nf for j1:1:dim Mfexp(-fitness_m(i)/(fitness_f(i)eps)); Xnewf(i,j)Xf(i,j) C3*rand*Mf*(Q*Xm(i,j)-Xf(i,j));%eq.(7) end end flag_index floor(2*rand()1); eggvec_flag(flag_index); if egg1 %Strategy 3:Bidirectional population evolution dynamics (BPED) freq 1/dim; X[Xnewm;Xnewf]; for i1:N FIT1(i)fobj(X(i,:)); end [PAIXU,I1]sort(FIT1); aceil(N*0.8);%Pareto principle %%Mutation factor w1/2*(sin(2*pi*freq*tpi)*(t/T)1);%eq.(23) for i1:a dx randperm(a); q dx(1); k dx(2); if q i q dx(3); else if k i k dx(3); end end for j1:dim Xgood_new(I1(i),j) X(q,j) w*(Xfood(j)-round(1z)*X(k,j));%eq.(21) end fit_gnewfobj(Xgood_new(I1(i),:)); if fit_gnew PAIXU(i) X(I1(i),:) Xgood_new(I1(i),j);%eq.(22) end end % Population evolution dynamics(EPD) for ia1:N for j1:dim z1I1(i); if rand0.5 Xbad_new(z1,j)Xfood(j)sign(rand-0.50)*(lb_aprand*(ub_ap-lb_ap));%eq.(24) else Xbad_new(z1,j)X(z1,j) - 2*sign(rand-0.50)*(lb(1)rand*(ub(1)-lb(1)));%eq.(25) end end FIT2fobj(Xbad_new(z1,:)); if FIT2FIT1(z1) X(z1,:)Xbad_new(z1,:); else X(z1,:)lbrand*(ub-lb); end end for i1:Nm Xnewm(i,:)X(i,:); Xnewf(i,:)X(iNm,:); end end end end end for j1:Nm Flag4ubXnewm(j,:)ub; Flag4lbXnewm(j,:)lb; Xnewm(j,:)(Xnewm(j,:).*(~(Flag4ubFlag4lb)))ub.*Flag4ublb.*Flag4lb; y fobj(Xnewm(j,:)); if yfitness_m(j) fitness_m(j)y; Xm(j,:) Xnewm(j,:); end end [Ybest1,gbest1] min(fitness_m); for j1:Nf Flag4ubXnewf(j,:)ub; Flag4lbXnewf(j,:)lb; Xnewf(j,:)(Xnewf(j,:).*(~(Flag4ubFlag4lb)))ub.*Flag4ublb.*Flag4lb; y fobj(Xnewf(j,:)); if yfitness_f(j) fitness_f(j)y; Xf(j,:) Xnewf(j,:); end end [Ybest2,gbest2] min(fitness_f); if Ybest1fitnessBest_m Xbest_m Xm(gbest1,:); fitnessBest_mYbest1; end if Ybest2fitnessBest_f Xbest_f Xf(gbest2,:); fitnessBest_fYbest2; end if Ybest1Ybest2 gbest_t(t)min(Ybest1); else gbest_t(t)min(Ybest2); end if fitnessBest_mfitnessBest_f GYbestfitnessBest_m; XfoodXbest_m; else GYbestfitnessBest_f; XfoodXbest_f; end end fval GYbest; end %% Strategy 1: MSCS function z MSCS(N,dim) z rand(N, dim); z sin(pi*( z .* (1 - z) sin(pi * z)));%eq.(13) z abs(z); end参考文献[1] Zhu Y, Huang H, Wei J, et al. ISO: An improved snake optimizer with multi-strategy enhancement for engineering optimization[J]. Expert Systems with Applications, 2025, 281: 127660.完整代码获取后台回复关键词TGDM846获取更多代码