2025年优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO)
真菌生长优化算法(Fungal Growth Optimizer,FGO) 是发表在中科院一区期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:6.7)的2025年3月智能优化算法

01.引言
Fungal Growth Optimizer (FGO) 是一种基于真菌生长行为的元启发式优化算法,灵感来源于真菌的菌丝尖端生长、分支和孢子萌发三个关键生物学过程。该算法通过模拟真菌在复杂环境中寻找营养的机制,平衡探索与开发能力,有效解决高维、多模态优化问题。代码实现了FGO的核心数学模型,结合文献描述,以下从原理、流程和实现细节进行全面解析。
02.算法原理
在真菌包括一个真核生物王国,在环境中营养物质的循环中起着重要作用;它们是异养生物,即它们不能自己生产食物,必须从有机材料中获取营养。真菌包括大约 144,000 种已知物种,例如酵母菌、霉菌、霉菌和蘑菇。真菌与细菌和植物表现出共生关系,可以有性繁殖和无性繁殖。然而,它们也会引起动植物的各种疾病。真菌非常适合在复杂环境中生长,因为它们能够产生菌丝,从而形成复杂的菌丝网络。菌丝是真菌细胞的独特生长形式,具有丝状结构。形成菌丝体的主要菌丝生长行为是菌丝尖端生长、分枝和孢子萌发 。以下将简单介绍真菌生长优化算法原理。
1. 菌丝尖端生长 (Hyphal Tip Growth)
(1)探索阶段:通过指数生长模型模拟菌丝随机探索,公式:

其中r1为随机数,t为当前迭代次数。方向由随机个体差异驱动:S_new = S + E*(Sa - Sb)
(2)开发阶段:基于化学趋向性,分为两种策略:
-
趋向最优解:方向向量包含当前最优解信息:
![]()
-
避让有害区域:引入反向扰动项Ec,公式:
![]()
2. 菌丝分支 (Branching)
-
侧向分支:结合随机个体差异和最优解方向:
![]()
其中E^L为分支生长速率,受适应度影响。
3. 孢子萌发 (Spore Germination)
-
位置更新:在最优解与随机个体间插值,并加入随机扰动

其中S_g为随机符号(±1),E为指数生长因子
03.算法算法流程(结合代码)
1.初始化阶段
S = initialization(N, dim, ub, lb);
Sp = S; % 个体历史最优
fit = fobj(S);
[Score, Position] = min(fit);
初始化阶段通过均匀分布生成初始菌丝群体,每个菌丝代表解空间中的一个候选解。这里通过initialization函数实现了两种边界处理方式:
- 单边界模式
(当
ub/lb为标量时):所有维度共享同一边界范围。 - 多边界模式
(当
ub/lb为向量时):每个维度独立设置边界,更适应高维异构问题。
初始适应度计算后,记录全局最优解(Position)及其适应度(Score)。此步骤为算法后续的“营养分配”和“菌丝行为选择”提供基准。
2. 主循环结构
while t < Tmaxif rand < rand % 随机选择生长或分支%% 菌丝尖端生长for i=1:N% 计算探索概率Erp = (fit(i)-min(fit))/(max(fit)-min(fit)+eps);Er = M + (1 - t/Tmax)*(1 - M);if p < Er % 探索F = (fit(i)/sum(fit)) * rand * (1 - t/Tmax)^(1 - t/Tmax);E = exp(F);S(i,:) = S(i,:) + E*(Sa - Sb); % 随机方向生长else % 开发Ec = (rand-0.5).*rand.*(Sa - Sb); % 环境扰动if rand < rand % 避让策略De2 = rand.*(S(i,:) - Position).*(rand>rand);S(i,:) = S(i,:) + De2.*nutrients(i) + Ec*(rand>rand);else % 趋向策略De = rand*(Sa - S(i,:)) + rand*(beta*Position - S(i,:));S(i,:) = S(i,:) + De.*nutrients(i) + Ec*(rand>Ep);endendendelse%% 分支与孢子萌发if rand < 0.5 % 分支EL = 1 + exp(fit(i)/sum(fit))*(rand>rand);S(i,:) = S(i,:) + r5*EL*(Sb - Sc) + (1-r5)*EL*(Sa - Position);else % 孢子萌发mu = sign(rand-0.5)*rand*exp(F);S(i,:) = ((t/Tmax)*Position + (1-t/Tmax)*Sa + Sb)/2 + mu*abs(mean(Sabc)-S(i,:));endend% 边界处理与适应度更新S = min(max(S, lb), ub);[fit, Position, Score] = updateFitness(S, fit, fobj);
end
主循环通过rand < rand实现随机行为选择:
-
菌丝尖端生长(约50%概率):模拟菌丝在当前位置的延伸,包含探索与开发两种策略。
-
分支与孢子萌发(约50%概率):模拟菌丝侧向分支或孢子扩散,增强全局搜索能力。
这种随机机制避免了算法陷入固定模式,同时通过后续的适应度评估实现动态行为调节:表现差的个体更倾向于探索,表现优的个体偏向开发。
3.菌丝尖端生长
子模块1:探索阶段
F = (fit(i)/sum(fit)) * rand * (1 - t/Tmax)^(1 - t/Tmax);
E = exp(F);
S(i,:) = S(i,:) + E*(Sa - Sb);
-
营养驱动:F的计算结合个体适应度占比(fit(i)/sum(fit)),使高适应度个体(营养丰富区域)生长速率更快。
-
时间衰减:(1 - t/Tmax)^(...)项在迭代后期抑制探索,逐步转向开发。
-
随机扰动:方向向量Sa - Sb通过随机选择个体引入多样性,避免局部最优。
子模块2:开发阶段
De = rand*(Sa - S(i,:)) + rand*(beta*Position - S(i,:));
S(i,:) = S(i,:) + De.*nutrients(i) + Ec*(rand>Ep);
-
双目标驱动:方向向量包含随机个体差异(Sa - S(i,:))和全局最优吸引(beta*Position - S(i,:)),平衡局部搜索与全局收敛。
-
环境扰动:Ec项模拟外界环境变化,当rand > Ep时触发扰动,帮助逃离次优区域。
4. 分支与孢子萌发
子模块1:侧向分支
EL = 1 + exp(fit(i)/sum(fit))*(rand>rand);
Dep1 = S(b,:) - S(c,:);
Dep2 = S(a,:) - Position;
S(i,:) = S(i,:) + r5*EL*Dep1 + (1-r5)*EL*Dep2;
自适应分支强度:EL项通过指数函数放大高适应度个体的分支能力,使优质区域被更密集搜索。
混合方向策略:Dep1(随机差异)与Dep2(趋向最优解)通过r5权重混合,兼具探索与开发特性
子模块2:孢子萌发
mu = sign(rand-0.5)*rand*exp(F);
S(i,:) = ((t/Tmax)*Position + (1-t/Tmax)*Sa + Sb)/2 + mu*abs(mean(Sabc)-S(i,:));
-
时空插值:(t/Tmax)*Position + ...在迭代初期偏向随机位置(Sa, Sb),后期偏向全局最优,实现从探索到开发的平滑过渡。
-
定向扰动:mu项通过sign(rand-0.5)随机化扰动方向(正/负),结合exp(F)控制扰动强度,模拟孢子随风扩散的不确定性。
5. 边界处理与适应度更新
S(i,:) = min(max(S(i,:), lb), ub);
if nF < fit(i) Sp(i,:) = S(i,:); fit(i) = nF; if nF < Score Position = S(i,:); Score = nF; end
end
-
硬边界约束:通过min/max函数将解强制限制在定义域内,简单但可能导致边界聚集。改进方向可引入反射边界或自适应缩放。
-
精英保留策略:仅接受更优解更新个体历史最优(Sp)和全局最优(Position),保证算法单调收敛。
-
收敛曲线记录:每次评估后更新Convergence_curve,为后续分析提供迭代过程可视化数据。
算法特性总结
(1)多模态处理能力:
-
孢子萌发机制通过随机插值和扰动,有效跳出局部最优,适合多峰优化问题。
-
分支行为在优质解周围生成多样性解,避免早熟收敛。
(2)自适应平衡探索与开发:
-
时间衰减因子(1 - t/Tmax)逐步降低探索强度。
-
营养分配nutrients动态调整个体搜索倾向。
(3)计算复杂度:
-
时间复杂度为O(Tmax*N*dim),与主流元启发式算法(如PSO、GA)相当。
-
空间复杂度为O(N*dim),适合大规模并行计算。

论文伪代码:

04.论文中算法对比图

[1]Abdel-Basset M, Mohamed R, Abouhawwash M. Fungal growth optimizer: A novel nature-inspired metaheuristic algorithm for stochastic optimization[J]. Computer Methods in Applied Mechanics and Engineering, 2025, 437: 117825.
05.本代码效果图


✅作者简介:信号处理方向在校博士研究生,目前专研于MATLAB算法及科学绘图等,熟知各种信号分解算法、神经网络时序、回归和分类预测算法、数据拟合算法以及滤波算法。提供一个可以相互学习相互进步的平台
🚩技术信仰:知行合一,让每一行代码都成为解决问题的利器
🔍后台私信备注个人需求(比如TOC-BP)定制以下TOC算法优化模型(看到秒回):
1.回归/时序/分类预测类:BP、RF、XGBoost、RBF、LSSVM、SVM、ELM、DELM、ESN、RELM等等均可,优化算法优化BP为例,可达到以下效果:
(1)优化BP神经网络的数据时序预测
(2)优化BP神经网络的数据回归(多输入多输出)预测
(3)优化BP神经网络的数据回归预测
2.分解类:EEMD、VMD、REMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可,优化算法优化VMD/ICEEMDAN为例,可达到以下效果:
(1)基于改进天鹰优化算法(IAO)优化的VMD参数
(2)基于改进天鹰优化算法(IAO)优化ICEEMDAN参数
3.去噪算法算法类:VMD/CEEMDAN/ICEEMDAN/SVMD+小波阈值/SVD去噪,可在去噪算法前加智能优化算法优化参数以VMD-WT/SVD为例,可达到以下效果:
(1)基于VMD-SpEn(样本熵)联合小波阈值去噪
(2)基于SVMD-SVD的信号去噪算法
(3)基于ZOA优化VMD-IAWT岩石声发射信号降噪算法
相关文章:
2025年优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO)
真菌生长优化算法(Fungal Growth Optimizer,FGO) 是发表在中科院一区期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:6.7)的2025年3月智能优化算法 01.引言 Fungal Growth Optimizer (FGO) 是一种基于真菌生长行为的元启发式优化算法…...
人工智能之数学基础:矩阵分解之LU分解
本文重点 LU分解是线性代数中一种重要的矩阵分解方法,它将一个方阵分解为一个下三角矩阵(L)和一个上三角矩阵(U)的乘积。这种分解方法在数值线性代数中有着广泛的应用,特别是在求解线性方程组、计算矩阵的行列式、求逆矩阵等方面。 LU分解的基本概念 设A是一个nn的方阵…...
阿里通义千问发布全模态开源大模型Qwen2.5-Omni-7B
Qwen2.5-Omni 是一个端到端的多模态模型,旨在感知多种模态,包括文本、图像、音频和视频,同时以流式方式生成文本和自然语音响应。汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https:/…...
23 种设计模式中的解释器模式
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 这种模式通常用于需要解释执行某种语言的场景,如正则表达式、SQL解析等。 解释器模式的核心组件。 抽象表达式(Ab…...
AquaMoon and Chess_CodeForces - 1545B
由110变成011,由011变成110,“11”的组合和0可以交换位置 如果是1110 或者是 1110 的情况,红色的“11”与0换位置,变成1011,可以看成蓝色的“11”到了0的后面,蓝色“11”和0的相对位置改变了,而…...
软考-数据库系统工程师第四版pdf
软考-数据库系统工程师第四版pdf git中的文件相对没有那么清楚,网盘的有高清版 github下载 这里我给出仓库地址 链接: https://github.com/yaodada123/ruankao-pdf https://github.com/yaodada123/ruankao-pdf gitee下载 https://gitee.com/yao-hengchao/ruank…...
淘天集团Java开放岗暑期实习笔试(2025年4月2日)
摘要: 除3道笔试题外,还有10道单选、5道不定项、2道Java单选、1道Java不定项选择题,笔试时长100分组,整体难度很大。三道算法题本人全部没有AC(惭愧),事后总结至此。 第一道算法题,…...
关于 数据库 UNION 和 UNION ALL 的使用,以及 分库分表环境下多表数据组合后的排序和分页问题的解决方案 的详细说明,并以表格总结关键内容
以下是关于 数据库 UNION 和 UNION ALL 的使用,以及 分库分表环境下多表数据组合后的排序和分页问题的解决方案 的详细说明,并以表格总结关键内容: 1. UNION 和 UNION ALL 的核心区别 1.1 定义与语法 UNION 功能:合并两个或多个 …...
【接口重复请求】axios通过AbortController解决页面切换过快,接口重复请求问题
处理网络请求时,我们经常会遇到需要中途取消请求的情况,比如用户在两个tab之间反复横跳的场景,如果每个接口都从头请求到结束,那必然会造成很大的服务压力。 AbortController是一个Web API,它提供了一个信号对象&…...
论文阅读:基于增强通用深度图像水印的混合篡改定位技术 OmniGuard
一、论文信息 论文名称:OmniGuard: Hybrid Manipulation Localization via Augmented Versatile Deep Image Watermarking作者团队:北京大学发表会议:CVPR2025论文链接:https://arxiv.org/pdf/2412.01615二、动机与贡献 动机: 随着生成式 AI 的快速发展,其在图像编辑领…...
Flutter极速接入IM聊天功能并支持鸿蒙
Flutter极速接入IM聊天功能并支持鸿蒙 如果你们也是Flutter项目,想快速接入聊天,包括聊天的UI界面,强烈推荐这一家。因为我们已经完成了集成,使用非常稳定,集成也非常快捷方便。 而且,就在今天,…...
深挖 DeepSeek 隐藏玩法·智能炼金术2.0版本
前引:屏幕前的你还在AI智能搜索框这样搜索吗?“这道题怎么写”“苹果为什么红”“怎么不被发现翘课” ,。看到此篇文章的小伙伴们!请准备好你的思维魔杖,开启【霍格沃茨模式】,看我如何更新秘密的【知识炼金…...
C语言数组知识点
一、数组的基本概念 1.定义 数组是相同数据类型元素的集合,通过连续内存存储,支持高效访问。 核心特点: 元素类型相同 内存连续分配 通过下标访问(从 0 开始) 2.分类 一维数组:线性结构(如…...
【新手初学】SQL注入getshell
一、引入 木马介绍: 木马其实就是一段程序,这个程序运行到目标主机上时,主要可以对目标进行远程控制、盗取信息等功能,一般不会破坏目标主机,当然,这也看黑客是否想要搞破坏。 木马类型: 按照功…...
DAY 34 leetcode 349--哈希表.两个数组的交集
题号349 我尝试硬解失败 /*class Solution {public int[] intersection(int[] nums1, int[] nums2) {int n1nums1.length;int n2nums2.length;int sizeMath.min(n1,n2);int []arrnew int[size];int count0;for(int i0;i<n1;i){outerloop:for(int j0;j<n2;j){if(nums1[i…...
Qt常用宏定义判断大全
Qt 提供了一系列预定义宏用于判断 Qt 版本、操作系统平台、编译器特性等。这些宏在跨平台开发中非常有用。 1. Qt 版本判断宏 // 检查Qt版本 #if QT_VERSION > QT_VERSION_CHECK(5, 15, 0)// Qt 5.15.0及以上版本特有代码 #endif// 常用版本判断 #if QT_VERSION > QT_V…...
tsconfig.json:error TS6306: Referenced project ‘/tsconfig.node.json‘
这是TypeScript配置文件中的错误。具体有两个问题: 错误TS6306:引用的项目/tsconfig.node.json必须设置"composite": true错误TS6310:引用的项目tsconfig.node.json不能禁用emit 要解决这些问题,需要修改tsconfig.nod…...
14-SpringBoot3入门-MyBatis-Plus之CRUD
1、整合 13-SpringBoot3入门-整合MyBatis-Plus-CSDN博客 2、表 3、crud package com.sgu;import com.sgu.mapper.UserMapper; import com.sgu.pojo.User; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.spri…...
前端面试常考算法题目详解
根据2025年最新前端面试趋势,结合腾讯、阿里等大厂真题,我为你整理了以下高频算法题型及JS实现方案: 一、数组/字符串处理 1. 两数之和(哈希表法) 问题:找出数组中两数之和等于目标值的索引 const twoSu…...
三轴云台之相机技术篇
一、结构设计 三轴云台通常由空间上三个互相垂直的框架构成,包括内框(俯仰框)、中框(方位框)和外框(横滚框)。这些框架分别负责控制相机的俯仰运动、方位运动和横滚运动,从而实现对目…...
质量和工艺之间的区别与联系?
我们生活中常常会遇到这些现象:冰箱漏水,修手机,电脑死机卡死,空调不制冷等等一些现象,我相信99%用户的第一反应是产品的质量不太行对吧! 其实不然,站在专业分析角度,难道冰箱漏水就一定是质量的问题吗? 不一定,小编认为要根本原因出发考虑,冰箱漏水了,可能和工艺…...
Bugku-再也没有纯白的灵魂
下载文件发现是兽音先用https://roar.iiilab.com/加密flag 得到“~呜嗷嗷嗷嗷呜啊嗷啊呜呜嗷呜呜~嗷嗷~啊嗷啊呜嗷嗷~嗷~嗷~呜呜嗷呜啊啊”,与密文对比对比发现字段少个啊,并且B对应嗷,U对应呜,G对应啊,K对应~补充啊后…...
推导Bias² + Variance + σ²_ε
问题的背景 我们有一个真实函数 f ( x ) f(x) f(x) 和基于训练数据 D D D 训练得到的模型 f ^ ( x ; D ) \hat{f}(x;D) f^(x;D)。对于任意输入 x x x: y y y 是真实的观测值,定义为 y f ( x ) ϵ y f(x) \epsilon yf(x)ϵ,其中 …...
多模态大语言模型arxiv论文略读(一)
Does Transliteration Help Multilingual Language Modeling? ➡️ 论文标题:Does Transliteration Help Multilingual Language Modeling? ➡️ 论文作者:Ibraheem Muhammad Moosa, Mahmud Elahi Akhter, Ashfia Binte Habib ➡️ 研究机构: Pennsyl…...
单元测试原则之——不要模拟不属于你的类型
在单元测试中,不要模拟不属于你的类型(Don’t mock types you don’t own)是一个重要的原则。这是因为外部库或框架的类型(如第三方依赖)可能会在未来的版本中发生变化,而你的模拟可能无法反映这些变化,从而导致测试失效。 以下是一个基于Java Mockito 的示例,展示如何…...
算法与数据结构面试题
算法与数据结构面试题 加油! 考查数据结构本身 什么是数据结构 简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构&a…...
边缘检测技术现状初探2:多尺度与形态学方法
一、多尺度边缘检测方法 多尺度边缘检测通过在不同分辨率/平滑度下分析图像,实现: 粗尺度(大σ值):抑制噪声,提取主体轮廓细尺度(小σ值):保留细节,检测微观…...
【AI News | 20250402】每日AI进展
AI Repos 1、Dolphin 由数据海洋AI与清华大学联合研发的Dolphin多任务语音识别模型正式亮相。该模型覆盖东亚、南亚、东南亚及中东地区40余种语言,并支持22种汉语方言,训练数据量超21万小时(含自有及开源数据),具备语…...
大智慧前端面试题及参考答案
如何实现水平垂直居中? 在前端开发中,实现元素的水平垂直居中是一个常见的需求,以下是几种常见的实现方式: 使用绝对定位和负边距:将元素的position设置为absolute,然后通过top、left属性将其定位到父元素的中心位置,再使用负的margin值来调整元素自身的偏移,使其水平垂…...
LLM 分词器Tokenizer 如何从 0 到 1 训练出来
写在前面 大型语言模型(LLM)处理的是人类的自然语言,但计算机本质上只能理解数字。Tokenizer(分词器) 就是架在自然语言和计算机数字表示之间的一座至关重要的桥梁。它负责将我们输入的文本字符串分解成模型能够理解的最小单元——Token,并将这些 Token 转换成对应的数字…...
