2025年SCI一区智能优化算法:真菌生长优化算法(Fungal Growth Optimizer,FGO),提供MATLAB代码

一. 真菌生长优化算法(FGO)

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

1、算法原理

FGO算法的核心在于模拟真菌的三种主要生长行为:菌丝尖端生长、分支和孢子萌发。这些行为在算法中分别对应不同的搜索策略,以实现对解空间的有效探索和开发。

  1. 菌丝尖端生长(Hyphal Tip Growth)
    菌丝尖端生长是真菌寻找营养物质的主要方式。在FGO算法中,这一行为通过模拟菌丝在搜索空间中的线性生长来实现。菌丝会根据环境中的营养浓度调整其生长方向,以找到营养丰富的区域。这种行为在算法中提供了主要的探索能力,帮助算法在解空间中广泛搜索。

  2. 分支(Branching)
    分支行为允许真菌从现有的菌丝侧枝上生长出新的菌丝,以进一步探索周围的环境。在FGO算法中,分支行为通过在现有解的基础上生成新的解来实现,从而增强了算法的探索能力。这种机制有助于算法在解空间中发现更多的潜在最优解。

  3. 孢子萌发(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. 初始化

    • 使用公式 (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
  2. 迭代过程

    • 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
          • 生成两个随机数 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
  3. 结束条件

    • 当迭代次数 t t t 达到最大迭代次数 t max ⁡ t_{\max} tmax 时,算法结束。
    • 输出最优解 S ∗ S^* S

3、 详细步骤说明

  1. 初始化

    • 随机生成 N N N 个初始菌丝个体,每个个体代表一个潜在的解。
    • 评估每个个体的适应度值,找到当前最优解 S ∗ S^* S
  2. 菌丝尖端生长行为

    • 通过比较随机数 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。
    • 使用相应的公式更新菌丝个体的位置。
    • 如果新位置的适应度值更好,则接受新位置。
  3. 菌丝分支和孢子萌发行为

    • 如果不执行菌丝尖端生长行为,则执行菌丝分支和孢子萌发行为。
    • 对于每个菌丝个体,生成随机数 r 2 r_2 r2 r 8 r_8 r8
    • 根据 r 2 r_2 r2 的值,决定是进行菌丝分支还是孢子萌发。
    • 使用相应的公式更新菌丝个体的位置。
    • 如果新位置的适应度值更好,则接受新位置。
  4. 迭代更新

    • 每次更新后,检查是否满足终止条件(达到最大迭代次数)。
    • 如果满足条件,则输出最优解;否则,继续下一次迭代。
      参考文献:
      [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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23358.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【人工智能】蓝耘智算平台盛大发布DeepSeek满血版:开创AI推理体验新纪元

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 蓝耘智算平台 蓝耘智算平台核心技术与突破元生代推理引擎快速入门&#xff1a;三步调用大模型接口&#xff0c;OpenAI SDK无缝兼容实战用例文…

基于AVue的二次封装:快速构建后台管理系统的CRUD方案

基于AVue的二次封装&#xff1a;快速构建后台管理系统的CRUD方案 在开发后台管理系统时&#xff0c;表格是常见的组件之一。然而&#xff0c;使用原生的Element Plus实现CRUD&#xff08;增删改查&#xff09;功能往往需要编写大量重复代码&#xff0c;过程繁琐。即使借助类似…

Spring全局异常处理

在项目开发中&#xff0c;异常是经常遇到的&#xff0c;但是如何更高效的处理好异常信息&#xff0c;让我们能快速定位到BUG&#xff0c;是很重要的&#xff0c;不仅能够提高我们的开发效率&#xff0c;还能让你代码看上去更舒服&#xff0c;SpringBoot的项目已经对有一定的异常…

华为昇腾服务器(固件版本查询、驱动版本查询、CANN版本查询)

文章目录 1. **查看固件和驱动版本**2. **查看CANN版本**3. **其他辅助方法**注意事项 在华为昇腾服务器上查看固件、驱动和CANN版本的常用方法如下&#xff1a; 1. 查看固件和驱动版本 通过命令行工具 npu-smi 执行以下命令查看当前设备的固件&#xff08;Firmware&#xff0…

pikachu靶场搭建教程

需要的东西 phpStudy&#xff1a; 链接&#xff1a; https://pan.baidu.com/s/1fJ-5TNtdDZGUf5FhTm245g 提取码&#xff1a;0278 pikachu-master&#xff1a; Github链接&#xff1a;https://github.com/zhuifengshaonianhanlu/pikachu 链接&#xff1a; https://pan.baidu.c…

R与RStudio简介及安装

目录 一、R与RStudio关系 二、R简介 2.1. 发展历史 2.2. R语言特点 三、安装指南 3.1 R安装指南 3.2 R studio安装指南 一、R与RStudio关系 R是统计领域广泛使用的工具&#xff0c;属于GNU系统的一个自由、免费、源代码开放的软件&#xff0c;是 用于统计计算和统计绘图…

netty基础知识梳理和总结

目录标题 由来netty整体结构核心功能可扩展的事件模型统一的通信 API零拷贝机制与字节缓冲区 传输服务协议支持 netty的IO模型netty核心组件ChannelEventLoop、EventLoopGroupChannelHandlerChannelPipelineBootstrapFuture netty的bytebufbytebuf的内部构造bytebuf的使用模式B…

《Head First设计模式》读书笔记 —— 单件模式

文章目录 为什么需要单件模式单件模式典型实现剖析定义单件模式本节用例多线程带来的问题解决问题优化 Q&A总结 《Head First设计模式》读书笔记 相关代码&#xff1a; Vks-Feng/HeadFirstDesignPatternNotes: Head First设计模式读书笔记及相关代码 用来创建独一无二的&a…

tailwindcss 前端 css 框架 无需写css 快速构建页面

版本&#xff1a;VUE3 TS 框架 vite 文章中使用tailwindcss 版本&#xff1a; ^3.4.17 简介&#xff1a; Tailwind CSS 一个CSS 框架&#xff0c;提供组件化的样式&#xff0c;直接在HTML 中编写样式&#xff0c;无需额外自定义CSS &#xff0c;快速&#xff01; 简洁&#…

给小米/红米手机root(工具基本为官方工具)——KernelSU篇

目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…

路由器的WAN口和LAN口有什么区别?

今时今日&#xff0c;移动终端盛行的时代&#xff0c;WIFI可以说是家家户户都有使用到的网络接入方式。那么路由器当然也就是家家户户都不可或缺的设备了。而路由器上的两个实现网络连接的基础接口 ——WAN 口和 LAN 口&#xff0c;到底有什么区别&#xff1f;它们的功能和作用…

【Open X-Embodiment】简单数据下载与预处理

文章目录 1. RLDS Dataset2. 处理成numpy格式3. 存储桶 1. RLDS Dataset 从 Octo 里面找到数据下载的代码 rlds_dataset_mod github 按照官网代码配置环境后&#xff0c;修改 prepare_open_x.sh&#xff0c;相当于只用 gsutil 下载数据&#xff1a; DOWNLOAD_DIR/mnt/data…

神经网络八股(1)

1.什么是有监督学习&#xff0c;无监督学习 有监督学习是带有标签的&#xff0c;无监督学习是没有标签的&#xff0c;简单来说就是有监督学习的输入输出都是固定的&#xff0c;已知的&#xff0c;无监督学习输入是已知的&#xff0c;输出是不固定的&#xff0c;无监督学习是通…

达梦:开发 ODBC配置指南

目录 达梦数据库DM8 ODBC配置指南&#xff08;Linux环境&#xff09;ODBC一、环境准备二、核心配置步骤1. 安装unixODBC2. 配置ODBC驱动&#xff08;odbcinst.ini&#xff09;3. 配置数据源&#xff08;odbc.ini&#xff09; 三、连接测试与验证1. 使用isql工具测试2. 执行基础…

Python游戏编程之赛车游戏6-1

通过Python的pygame模块可以实现赛车游戏&#xff0c;如图1所示。 图1 赛车游戏 从图1中可以看出&#xff0c;玩家通过键盘的左右键操作蓝色汽车躲避红色汽车的撞击&#xff0c;每成功躲避过一辆红色汽车&#xff0c;则玩家得一分。当蓝色汽车被红色汽车撞击后&#xff0c;游戏…

【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组&#xff1f;2.2 什么是会话&#xff1f; 3、应用层协议HTTP3.1 HTTP协议3.2 HT…

【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略

应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…

Windows 上源码安装 FastGPT

FastGPT 是一个强大的 AI RAG 平台&#xff0c;值得我们去学习了解。与常见的 Python 体系不同&#xff0c;Fast GPT 采用 Node.js/Next.js 平台&#xff08;对于广大 JS 开发者或前端开发者比较亲切友好&#xff09;&#xff0c;安装或部署比较简单。虽然一般情况下推荐简单的…

【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制

编写程序&#xff1a;超强力方法 —— 从战舰游戏到循环控制 在《Head First Java》的第五章节中&#xff0c;作者通过一个简单的战舰游戏示例&#xff0c;深入讲解了如何编写Java程序&#xff0c;并重点介绍了方法和循环控制的使用。这一章节的核心思想是&#xff1a;通过模块…

软件单元测试的技术要求

文章目录 一、软件单元测试的概念二、测试对象三、测试目的四、进入条件五、测试内容六、测试环境七、测试实施方一、软件单元测试的概念 单元测试(Unit Testing),是指对软件中的最小可测试单元进行测试验证。单元测试是白盒测试,主要依据软件详细设计和软件代码进行,不仅…