真菌生长优化算法(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 < Tmax
if rand < rand % 随机选择生长或分支
%% 菌丝尖端生长
for i=1:N
% 计算探索概率Er
p = (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);
end
end
end
else
%% 分支与孢子萌发
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,:));
end
end
% 边界处理与适应度更新
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为例,可达到以下效果:
2.分解类:EEMD、VMD、REMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可,优化算法优化VMD/ICEEMDAN为例,可达到以下效果:
(2)基于改进天鹰优化算法(IAO)优化ICEEMDAN参数
3.去噪算法算法类:VMD/CEEMDAN/ICEEMDAN/SVMD+小波阈值/SVD去噪,可在去噪算法前加智能优化算法优化参数以VMD-WT/SVD为例,可达到以下效果: