2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
一. 真菌生长优化算法(FGO)
真菌生长优化算法(Fungal Growth Optimizer,FGO)是一种新型的自然启发式元启发式算法,其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发等行为,提供了一系列的探索和开发操作符,以解决复杂的优化问题。FGO算法在多个领域展现出了良好的性能,尤其是在解决高维问题和避免陷入局部最优方面具有显著优势。

1、算法原理
FGO算法的核心在于模拟真菌的三种主要生长行为:菌丝尖端生长、分支和孢子萌发。这些行为在算法中分别对应不同的搜索策略,以实现对解空间的有效探索和开发。
-
菌丝尖端生长(Hyphal Tip Growth):
菌丝尖端生长是真菌寻找营养物质的主要方式。在FGO算法中,这一行为通过模拟菌丝在搜索空间中的线性生长来实现。菌丝会根据环境中的营养浓度调整其生长方向,以找到营养丰富的区域。这种行为在算法中提供了主要的探索能力,帮助算法在解空间中广泛搜索。 -
分支(Branching):
分支行为允许真菌从现有的菌丝侧枝上生长出新的菌丝,以进一步探索周围的环境。在FGO算法中,分支行为通过在现有解的基础上生成新的解来实现,从而增强了算法的探索能力。这种机制有助于算法在解空间中发现更多的潜在最优解。 -
孢子萌发(Spore Germination):
孢子萌发是真菌繁殖的重要方式。在FGO算法中,孢子萌发行为通过在搜索空间中随机生成新的解来实现。这些新的解在算法的早期阶段具有较高的随机性,随着算法的进行,它们的位置会逐渐调整到更接近当前最优解的区域。这种机制有助于算法在保持种群多样性的同时,逐步收敛到最优解。
2、算法流程
输入:种群规模 N N N,最大迭代次数 t max t_{\max} tmax,随机数 r 0 , r 10 , r 2 , r 8 r_0, r_{10}, r_2, r_8 r0,r10,r2,r8,以及其他相关参数。
输出:最优解 S ∗ S^* S∗。
-
初始化:
- 使用公式 (1) 初始化 N N N 个菌丝个体 S i t S_i^t Sit。
- 评估每个 S i t S_i^t Sit 的适应度值,并确定适应度值最高的个体作为当前最优解 S ∗ S^* S∗。
- 设置迭代计数器 t = 1 t = 1 t=1。
-
迭代过程:
- 当 t < t max t < t_{\max} t<tmax 时,执行以下步骤:
- 生成两个随机数 r 0 r_0 r0 和 r 10 r_{10} r10,取值范围为 [0, 1]。
- 如果 r 0 < r 10 r_0 < r_{10} r0<r10,执行菌丝尖端生长行为:
- 对于每个菌丝个体 i = 1 i = 1 i=1 到 N N N:
- 根据公式 (24) 和 (23) 计算能量 E i E_i Ei 和概率 p i p_i pi。
- 如果 p i < E i p_i < E_i pi<Ei(探索阶段 I):
- 使用公式 (8) 更新 S i t + 1 S_i^{t+1} Sit+1。
- 否则(开发阶段 I):
- 使用公式 (22) 更新 S i t + 1 S_i^{t+1} Sit+1。
- 如果新解 S i t + 1 S_i^{t+1} Sit+1 的适应度值小于当前解 S i t S_i^t Sit 的适应度值:
- 更新当前解 S i t = S i t + 1 S_i^t = S_i^{t+1} Sit=Sit+1。
- 迭代计数器加 1, t = t + 1 t = t + 1 t=t+1。
- 对于每个菌丝个体 i = 1 i = 1 i=1 到 N N N:
- 否则,执行菌丝分支和孢子萌发行为:
- 对于每个菌丝个体 i = 1 i = 1 i=1 到 N N N:
- 生成两个随机数 r 2 r_2 r2 和 r 8 r_8 r8,取值范围为 [0, 1]。
- 如果 r 2 < 0.5 r_2 < 0.5 r2<0.5(菌丝分支):
- 使用公式 (30) 更新 S i t + 1 S_i^{t+1} Sit+1。
- 否则(孢子萌发):
- 使用公式 (31) 更新 S i t + 1 S_i^{t+1} Sit+1。
- 如果新解 S i t + 1 S_i^{t+1} Sit+1 的适应度值小于当前解 S i t S_i^t Sit 的适应度值:
- 更新当前解 S i t = S i t + 1 S_i^t = S_i^{t+1} Sit=Sit+1。
- 迭代计数器加 1, t = t + 1 t = t + 1 t=t+1。
- 对于每个菌丝个体 i = 1 i = 1 i=1 到 N N N:
- 当 t < t max t < t_{\max} t<tmax 时,执行以下步骤:
-
结束条件:
- 当迭代次数 t t t 达到最大迭代次数 t max t_{\max} tmax 时,算法结束。
- 输出最优解 S ∗ S^* S∗。
3、 详细步骤说明
-
初始化:
- 随机生成 N N N 个初始菌丝个体,每个个体代表一个潜在的解。
- 评估每个个体的适应度值,找到当前最优解 S ∗ S^* S∗。
-
菌丝尖端生长行为:
- 通过比较随机数 r 0 r_0 r0 和 r 10 r_{10} r10,决定是否执行菌丝尖端生长行为。
- 对于每个菌丝个体,计算其能量 E i E_i Ei 和概率 p i p_i pi。
- 根据 p i p_i pi 和 E i E_i Ei 的关系,决定是进行探索阶段 I 还是开发阶段 I。
- 使用相应的公式更新菌丝个体的位置。
- 如果新位置的适应度值更好,则接受新位置。
-
菌丝分支和孢子萌发行为:
- 如果不执行菌丝尖端生长行为,则执行菌丝分支和孢子萌发行为。
- 对于每个菌丝个体,生成随机数 r 2 r_2 r2 和 r 8 r_8 r8。
- 根据 r 2 r_2 r2 的值,决定是进行菌丝分支还是孢子萌发。
- 使用相应的公式更新菌丝个体的位置。
- 如果新位置的适应度值更好,则接受新位置。
-
迭代更新:
- 每次更新后,检查是否满足终止条件(达到最大迭代次数)。
- 如果满足条件,则输出最优解;否则,继续下一次迭代。
参考文献:
[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.
二、核心MATLAB代码
% The Fungal Growth Optimizer
function [Gb_Fit,Gb_Sol,Conv_curve]=FGO(N,Tmax,ub,lb,dim,Fun_No,fhd)
%%%%-------------------Definitions--------------------------%%
%%
Gb_Sol=zeros(1,dim); % A vector to include the best-so-far solution
Gb_Fit=inf; % A Scalar variable to include the best-so-far score
Conv_curve=zeros(1,Tmax);
%%-------------------Controlling parameters--------------------------%%
%%
M=0.6; %% Determines the tradeoff percent between exploration and exploitation operators.
Ep=0.7; %% Determines the probability of environmental effect on hyphal growth
R=0.9; %% Determines the speed of convergence to the best-so-far solution
%%---------------Initialization----------------------%%
%%
S=initialization(N,dim,ub,lb); % Initialize the S of crested porcupines
t=0; %% Function evaluation counter
%%---------------------Evaluation-----------------------%%
for i=1:N%% Test suites of CEC-2014, CEC-2017, CEC-2020, and CEC-2022fit(i)=feval(fhd, S(i,:)',Fun_No);
end
% Update the best-so-far solution
[Gb_Fit,index]=min(fit);
Gb_Sol=S(index,:);
%% A new vector to store the best-so-far position for each hyphae
Sp=S;
opt=Fun_No*100; %% Best-known fitness
%% Optimization Process of FGO
while t<Tmax && opt~=Gb_Fit%% ----------------------------------------------------------------------------- %%if t <= Tmax/2 %% Compute the the nutrient allocation according to (12)nutrients = rand(N); % Allocate more randomly to encourage fluctuation exploitationelsenutrients = fit; % Exploitation phase: allocate based on fitnessendnutrients = nutrients / sum(nutrients)+2*rand; % Normalize nutrient allocation according to (13)%% ----------------------------------------------------------------------------- %%if rand<rand %% Hyphal tip growth behavior %%for i=1:Na=randi(N);b=randi(N);c=randi(N);while a==i | a==b | c==b | c==a ||c==i |b==ia=randi(N);b=randi(N);c=randi(N);endp=(fit(i)-min(fit))/(max(fit)-min(fit)+eps); %%% Compute p_i according to (23)Er=M+(1-t/(Tmax)).*(1-M); %%% Compute Er according to (24)if p<ErF=(fit(i)/(sum(fit))).*rand*(1-t/(Tmax))^(1-t/(Tmax)); %% Calculate F according to (5) and (6)E=exp(F); %% Calculate E according to (4)r1=rand(1,dim);r2=rand;U1=r1<r2; %% Binary vectorS(i,:) = (U1).*S(i,:)+(1-U1).*(S(i,:)+E.*(S(a,:)-S(b,:))); %% Generate the new hyphal growth according to (9)elseEc = (rand(1, dim) - 0.5) .* rand.*(S(a,:)-S(b,:)); % Compute the additional exploratory step using (17)if rand<rand %% Hypha growing in the opposite direction of nutrient-rich areas %De2 = rand(1,dim).* (S(i,:) - Gb_Sol).*(rand(1,dim)>rand); %% Compute De2 according to (16) %%S(i,:) = S(i,:) + De2 .* nutrients(i)+Ec*(rand>rand); %% Compute the new growth for the ith hyphal using (15)else %% Growth direction toward nutrient-rich areaDe = rand.* (S(a, :) - S(i, :)) + rand(1,dim).* ((rand>rand*2-1).*Gb_Sol - S(i, :)).*(rand()>R); %% Compute De according to (11) %%S(i,:) = S(i,:) + De .* nutrients(i)+Ec*(rand>Ep); %% Compute the new growth for the ith hyphal using (14)endend%% Return the search agents that exceed the search space's boundsfor j=1:size(S,2)if S(i,j)>ub(j)S(i,j)=lb(j)+rand*(ub(j)-lb(j));elseif S(i,j)<lb(j)S(i,j)=lb(j)+rand*(ub(j)-lb(j));endend% Calculate the fitness value of the newly generated solutionnF=feval(fhd, S(i,:)',Fun_No);%% update Global & Local best solutionif fit(i)<nFS(i,:)=Sp(i,:); % Update local best solutionelseSp(i,:)=S(i,:);fit(i)=nF;%% update Global best solutionif fit(i)<=Gb_FitGb_Sol=S(i,:); % Update global best solutionGb_Fit=fit(i);endendt=t+1; % Move to the next generationif t>TmaxbreakendConv_curve(t)=Gb_Fit;endif t>Tmaxbreak;endelser5=rand;for i=1:Nrr=rand(1,dim);a=randi(N);b=randi(N);c=randi(N);while a==i | a==b | c==b | c==a ||c==i |b==ia=randi(N);b=randi(N);c=randi(N);endif rand<0.5 %% Hyphal branchingEL=1+exp(fit(i)/(sum(fit)))*(rand>rand); %% Compute the growth rate of the hypha produced via lateral branching using (29)Dep1=(S(b,:)-S(c,:)); %% Compute Dep1 using (26)Dep2=(S(a,:)-Gb_Sol); %% Compute Dep1 using (27)r1=rand(1,dim);r2=rand;U1=r1<r2; %% Binary vectorS(i,:)= S(i,:).*U1+(S(i,:)+ r5.*Dep1.*EL+ (1-r5).*Dep2.*EL).*(1-U1); % Generate the new branch for the ith hyphal using (30)else %% Spore germinationsig=(rand>rand*2-1); %% 1 or -1F=(fit(i)/(sum(fit))).*rand*(1-t/(Tmax))^(1-t/(Tmax)); %% Calculate F according to (5) and (6)E=exp(F); %% Calculate E according to (4)for j=1:size(S,2)mu=sig.*rand.*E;if rand>randS(i,j)=(((t/(Tmax))*Gb_Sol(j)+(1-t/(Tmax))*S(a,j))+S(b,j))/2.0 + mu * abs((S(c,j)+S(a,j)+S(b,j))/3.0-S(i,j)); % Eq. (31)endendend%% Return the search agents that exceed the search space's boundsfor j=1:size(S,2)if S(i,j)>ub(j)S(i,j)=lb(j)+rand*(ub(j)-lb(j));elseif S(i,j)<lb(j)S(i,j)=lb(j)+rand*(ub(j)-lb(j));endend% Calculate the fitness value of the newly generated solutionnF=feval(fhd, S(i,:)',Fun_No);%% update Global & Local best solutionif fit(i)<nFS(i,:)=Sp(i,:); % Update local best solutionelseSp(i,:)=S(i,:);fit(i)=nF;%% update Global best solutionif fit(i)<=Gb_FitGb_Sol=S(i,:); % Update global best solutionGb_Fit=fit(i);endendt=t+1; % Move to the next generationif t>TmaxbreakendConv_curve(t)=Gb_Fit;end %% End for iend %% End Ifif t>Tmaxbreak;end
end%% End while
end
%_________________________________________________________________________%
% Fungal Growth Optimizer source code demo 1.0 %
% Developed in MATLAB R2019A %
% %
% %
% Main paper: Fungal Growth Optimizer: A Novel Nature-inspired Metaheuristic Algorithm for Stochastic Optimization %
% %
% %
%_________________________________________________________________________%
% This function initialize the first population of search agents
function Positions=initialization(SearchAgents_no,dim,ub,lb)
Boundary_no= length(ub); % numnber of boundaries
% If the boundaries of all variables are equal and user enter a signle
% number for both ub and lb
if Boundary_no==1Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;
end
% If each variable has a different lb and ub
if Boundary_no>1for i=1:dimub_i=ub(i);lb_i=lb(i);Positions(:,i)=rand(SearchAgents_no,1).*(ub_i-lb_i)+lb_i; end
end
相关文章:
2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码
一. 真菌生长优化算法(FGO) 真菌生长优化算法(Fungal Growth Optimizer,FGO)是一种新型的自然启发式元启发式算法,其灵感来源于自然界中真菌的生长行为。该算法通过模拟真菌的菌丝尖端生长、分支和孢子萌发…...
解决Spring Boot中Druid连接池“discard long time none received connection“警告
在使用Spring Boot结合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影响应用程序的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种…...
stm32常见的存储器应用
常用 STM32 存储器芯片介绍和应用 STM32 微控制器通常与多种存储器芯片一起工作,以下是几种常见的存储器类型及其应用: 1. 闪存(Flash Memory) STM32 内部的 闪存 是一种非易失性存储器,广泛用于存储程序代码和常驻…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
三级分类bug解决
文章目录 前端后端 前端 <!DOCTYPE html> <html xmlns:th"http://www.thymeleaf.org" lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…...
AxiosError: Network Error
不知怎么的,项目还在开发阶段,之前还好好的,玩儿了两天再一打开发现页面无法显示数据了,报错如下: 我以为是后端出问题了,但是后端控制台无报错,又用postman测试了一下,可以获取到数…...
CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项
CDefFolderMenu_MergeMenu函数分析之添加了分割线和属性菜单项两项 第一部分: void CDefFolderMenu_MergeMenu(HINSTANCE hinst, UINT idMainMerge, UINT idPopupMerge, QCMINFO *pqcm) { UINT idMax pqcm->idCmdFirst; if (idMainMerge) { HME…...
mysql的源码包安装
安装方式一:(编译好的直接安装) 1.添加一块10G的硬盘,给root逻辑卷扩容 (下面安装方式二有,一模一样的装就行,我就不写了,再写的话篇幅就太长了) 2.下载编译好的源码包…...
win11系统无法打开软件_组策略无法打开_gpedit.msc不生效_为了对电脑进行保护,已经阻止此应用---Windows工作笔记057
碰到这个问题挺麻烦的,要用的软件打不开了. 其实解决方法就是去组策略中修改一个策略就可以了,但是: 先来说: 而且,使用cmd输入的gpedit.msc也打不开了. 这个怎么解决? @echo off pushd "%~dp0"dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPo…...
【JAVA】io流之缓冲流
①BufferedInputStream、BufferedOutputStream(适合读写非普通文本文件) ②BufferedReader、BufferedWriter(适合读写普通文本文件。) 缓冲流的读写速度快,原理是:在内存中准备了一个缓存。读的时候从缓存中…...
from flask_session import Session 为什么是Session(app)这么用?
在 Flask 中,from flask_session import Session 和 Session(app) 的用法是为了配置和使用 Flask-Session 扩展,将用户的会话(Session)数据存储到服务器端(如 Redis、数据库或文件系统),而不是默…...
AI赋能的未来城市:如何用智能化提升生活质量?
这会是我们憧憬的未来城市吗? 随着技术的不断进步和城市化进程的加速,现代城市面临着诸多挑战——交通拥堵、环境污染、能源消耗、人口老龄化等问题愈发突出。为了应对这些挑战,建设智慧城市已成为全球发展的重要趋势。在这一进程中…...
【Go】Go wire 依赖注入
1. wire 简介 wire 是一个 Golang 的依赖注入框架(类比 Spring 框架提供的依赖注入功能) ⭐ 官方文档:https://github.com/google/wire 这里关乎到编程世界当中一条好用的设计原则:A用到了B,那么B一定是通过依赖注入的…...
深度集成DeepSeek与Java开发:智能编码新纪元全攻略 [特殊字符]
一、DeepSeek:Java开发者的第二大脑 🧠 1.1 传统开发痛点VS智能开发体验 传统开发DeepSeek智能辅助效率提升对比手动编写重复代码一键生成模板代码代码量减少70%↑调试全靠断点日志智能定位缺陷根源问题排查时间缩短60%↓文档维护耗时费力自动生成更新…...
WEB前端将指定DOM生成图片并下载最佳实践(html2canvas)
前言: html2canvas 是一个 JavaScript 库,其主要作用是将 HTML 元素或其部分内容渲染为 Canvas 图像。通过它,开发者可以将网页中的任意 DOM 元素(包括文本、图片、样式等)转换为图片格式(如 PNG 或 JPEG&…...
掌握.NET Core后端发布流程,如何部署后端应用?
无论你是刚接触.NET Core的新手还是已有经验的开发者,在这篇文章中你将会学习到一系列实用的发布技巧与最佳实践,帮助你高效顺利地将.NET Core后端应用部署到生产环境中 目录 程序发布操作 Docker容器注册表 文件夹发布 导入配置文件 网站运行操作 …...
深度学习学习笔记(34周)
目录 摘要 Abstracts 简介 Hourglass Module(Hourglass 模块) 网络结构 Intermediate Supervision(中间监督) 训练过程细节 评测结果 摘要 本周阅读了《Stacked Hourglass Networks for Human Pose Estimation》…...
C++ 设计模式-备忘录模式
游戏存档实现,包括撤销/重做、持久化存储、版本控制和内存管理 #include <iostream> #include <memory> #include <deque> #include <stack> #include <chrono> #include <fstream> #include <sstream> #include <ct…...
TOGAF之架构标准规范-信息系统架构 | 应用架构
TOGAF是工业级的企业架构标准规范,信息系统架构阶段是由数据架构阶段以及应用架构阶段构成,本文主要描述信息系统架构阶段中的应用架构阶段。 如上所示,信息系统架构(Information Systems Architectures)在TOGAF标准规…...
第一届网谷杯
统计四场的所有题目(共计12题,四场比赛一共上了21题【包括换题】) 随便记记,以免老题复用(已经复用了) Web 文件包含 1 伪协议 http://120.202.175.143:8011/?cphp://filter/convert.base64-encode/reso…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
