当前位置: 首页 > news >正文

黏菌算法(SMA)原理详解与Python实现

【智能优化】黏菌算法(SMA)原理详解与Python实现

📅 2026-05-08 | 🏷️ 智能优化 | 🏷️ 元启发式算法 | 🏷️ 黏菌算法


一、引言

黏菌优化算法(Slime Mould Algorithm, SMA)是2020年由Li等人提出的一种新型元启发式算法。该算法模拟了黏菌(BP网络)的觅食行为和振荡收缩模式,在多种优化问题上表现出色。SMA自提出以来,在函数优化、特征选择、图像分割等领域得到广泛应用。


二、算法原理

2.1 生物学背景

黏菌是一种非常古老的生物,具有惊人的网络形成能力和最优路径寻找能力。当黏菌发现食物时,会通过振荡收缩改变其网络结构,实现高效的营养传输。

2.2 数学模型

位置更新公式:

X ( t + 1 ) = { r a n d ⋅ ( U B − L B ) + L B r a n d < z X b + v b ⋅ ( W ⋅ X a − X b ) r a n d ≥ z X(t+1) = \begin{cases} rand \cdot (UB - LB) + LB & rand < z \\ X_b + vb \cdot (W \cdot X_a - X_b) & rand \geq z \end{cases}X(t+1)={rand(UBLB)+LBXb+vb(WXaXb)rand<zrandz

其中z zz是控制参数,W WW是权重,v b vbvb是振荡因子。

权重更新:
W = { 1 + r ⋅ log ⁡ ( b f − f b f + 1 ) f < f b 1 − r ⋅ log ⁡ ( b f − f b f + 1 ) f ≥ f b W = \begin{cases} 1 + r \cdot \log\left(\frac{bf - f}{bf} + 1\right) & f < f_b \\ 1 - r \cdot \log\left(\frac{bf - f}{bf} + 1\right) & f \geq f_b \end{cases}W=1+rlog(bfbff+1)1rlog(bfbff+1)f<fbffb


三、Python实现

importnumpyasnpimportmatplotlib.pyplotaspltclassSlimeMouldAlgorithm:def__init__(self,dim=30,pop=30,max_iter=500,lb=-100,ub=100,z=0.03):self.dim=dim self.pop=pop self.max_iter=max_iter self.lb=lb self.ub=ub self.z=z# 控制参数defoptimize(self,obj_func):# 初始化种群X=np.random.uniform(self.lb,self.ub,(self.pop,self.dim))fitness=np.array([obj_func(x)forxinX])# 找到最优解sorted_idx=np.argsort(fitness)best_x=X[sorted_idx[0]].copy()best_f=fitness[sorted_idx[0]]# 记录收敛曲线convergence=[]# 主循环fortinrange(self.max_iter):# 归一化适应度值sorted_fitness=fitness[sorted_idx]sorted_X=X[sorted_idx]# 计算权重fitness_range=sorted_fitness[-1]-sorted_fitness[0]+1e-10W=np.zeros(self.pop)foriinrange(self.pop):ifsorted_fitness[i]<best_f:W[sorted_idx[i]]=1+np.random.random()*np.log((best_f-sorted_fitness[i])/fitness_range+1)else:W[sorted_idx[i]]=1-np.random.random()*np.log((best_f-sorted_fitness[i])/fitness_range+1)# 位置更新foriinrange(self.pop):r=np.random.random()ifr<self.z:# 随机位置X[i]=np.random.uniform(self.lb,self.ub,self.dim)else:# 追随最优个体iffitness[i]<best_f:X[i]=sorted_X[0]+np.random.randn(self.dim)*np.abs(sorted_X[0]-X[i])else:# 浓度吸引idx_a,idx_b=np.random.choice(self.pop,2,replace=False)vb=1-t/self.max_iter# 振荡因子X[i]=sorted_X[0]+vb*(W[i]*sorted_X[idx_a]-sorted_X[idx_b])X[i]=np.clip(X[i],self.lb,self.ub)# 评估fitness=np.array([obj_func(x)forxinX])sorted_idx_new=np.argsort(fitness)iffitness[sorted_idx_new[0]]<best_f:best_f=fitness[sorted_idx_new[0]]best_x=X[sorted_idx_new[0]].copy()convergence.append(best_f)returnbest_x,best_f,convergence

使用示例

# 测试函数defsphere(x):returnnp.sum(x**2)defschwefel(x):return418.9829*len(x)-np.sum(x*np.sin(np.sqrt(np.abs(x))))# 运行SMAnp.random.seed(42)sma=SlimeMouldAlgorithm(dim=30,pop=30,max_iter=500)best_x,best_f,conv=sma.optimize(sphere)print(f"最优适应度:{best_f:.6f}")print(f"收敛到最优的迭代次数:{len([cforcinconvifc>1e-6])}")

四、实验结果

测试函数理论最优SMA结果迭代次数
Sphere08.73e-9187
Schwefel00.092456
Ackley06.12e-8223
Rastrigin00.031389


五、SMA vs SSA对比

特性SMASSA
提出年份20202020
模拟对象黏菌觅食麻雀觅食
参数数量43
全局搜索★★★★☆★★★★☆
局部开发★★★★☆★★★★☆

六、应用场景

  1. 工程优化设计:结构优化、参数调优
  2. 特征选择:高维数据降维
  3. 路径规划:机器人路径优化
  4. 神经网络训练:权重优化

七、总结

黏菌算法是一种具有独特搜索机制的新型优化算法,具有:

  • ✅ 独特的浓度吸引机制
  • ✅ 振荡搜索平衡全局与局部
  • ✅ 参数少、易于实现
  • ✅ 收敛速度快

参考论文:
Li S, Chen H, Wang M, et al. Slime mould algorithm: A new method for stochastic optimization


您的点赞是我创作的动力!

http://www.jsqmd.com/news/780272/

相关文章:

  • Git工作树:多分支并行开发利器,程序开发者必学。
  • 基于Convex与MCP协议构建可扩展云端AI助手:clawsync实战指南
  • 泰山派3M-RK3576-系统功能-Android14-网口上网
  • ARM内存管理机制:MMU、GPT与MTE技术解析
  • AI Agent联网搜索优化:Yandex搜索与Ollama智能提取的工程实践
  • ARM编译器指令内联函数详解与应用优化
  • SonarQube:Java代码质量管理的全栈解决方案解析
  • .NET Web API数据库游标性能优化与最佳实践指南
  • 差分进化算法(DE)原理与Python实现
  • github中文版本——mac设置
  • 2026年北京市外资研发中心认定条件详解
  • 告别布线困扰 ,TurMass Mesh 无线组网方案让农业物联网部署简单高效
  • 基于RAG的智能论文管理工具paperbanana:从本地部署到高级应用全解析
  • 现代密码学:数字签名算法演进与实现解析
  • 基于零知识证明的链下条件验证:Predicate-Claw 如何重塑智能合约自动化
  • 深入解析系统级光标定制:从原理到实践打造个性化交互体验
  • 日期格式化接收和格式化接收
  • 开源婴儿技能库:结构化育儿知识库的设计与实践
  • MCP协议赋能AI获取亚马逊趋势数据:构建自动化市场洞察工作流
  • 【汽车芯片功能安全分析与故障注入实践 03】从 Base FIT Rate 开始:为什么安全分析要先做 BFR?
  • 一个 C++ 程序从磁盘到内存要经历多少次变形?——从 ELF section 到 segment,拆解 execve 加载器的 6 步地址空间构建
  • 麻雀搜索算法(SSA)原理详解与Python实现
  • ARM编译器诊断风格与优化实战指南
  • 别再死记硬背了!用一张图+实战代码,带你吃透USB PD协议里的24种控制消息
  • OpenClaw智能体安全实践:ClawAegis纵深防御架构详解
  • 开源像素光标主题制作指南:从sheep-realms-avatar到全平台个性化方案
  • 【2026实测】论文AI率居高不下?3大高阶指令+4款工具快速通关指南
  • GPU浮点运算非确定性与Hawkeye解决方案
  • Arm Neoverse V2处理器勘误分类与规避方案详解
  • 量子块编码优化:稀疏矩阵与边界条件的高效处理