2025年7月份最新一区算法——向光生长算法

注:该算法已按照智能优化算法APP标准格式进行整改,可直接集成到APP中,方便大家与自己的算法进行对比。(近期智能优化算法APP将会迎来超级大更新!请时刻保持关注哦!)

向光生长算法(Phototropic Growth Algorithm, PGA)是一种受到植物向光性生长机制启发的智能优化方法。在自然界中,植物依靠体内生长素的分布调节,主动朝向光源生长,以最大化光合作用效率,展现出令人惊叹的环境适应能力。科研人员正是借助这一生物行为特征,提出了PGA算法,模拟植物在光照引导下的三大关键策略:趋光性定向生长、自适应分枝调节机制,以及在资源受限环境中的探索式延展过程。这些策略被巧妙抽象为数学模型,有效融合全局探索与局部开发能力,使 PGA 在求解复杂、多约束优化问题中展现出卓越的解质量。

该成果于2025年7月最新发表在计算机领域一区期刊Knowledge-Based Systems上,具有出色的应用前景。

为了在多变的环境条件下实现最优生长和发育,植物进化出多种机制,其中之一即为向光性。向光性是指植物对光源发生趋向或背离的定向生长反应。该响应对于植物适应光照变化、最大化光合作用至关重要。向光性涉及多个生理过程,主要包括细胞分裂和细胞伸长的变化。下图所示的有丝分裂过程在向光性中起着关键作用,它通过产生能够朝向光源伸长的新细胞来实现定向生长。有丝分裂是指细胞分裂为两个完全相同的子细胞的过程。

细胞伸长是植物生长与发育中的另一个关键过程。当光线照射植物的一侧时,生长素会在阴影一侧积聚,从而使该区域的细胞比光照区域的细胞伸长得更快。由此,阴影区域生长更快,导致植物向着光源方向弯曲。下图展示了细胞伸长的过程,其中阴影区域的细胞更快地伸长,使植物向光倾斜。

1 算法原理详解

(1)初始化

该算法首先初始化一个由细胞组成的种群,记作集合 ,这些细胞也被视为搜索代理。在算法中,光照对细胞行为的影响具有核心地位。因此,种群被划分为两个区域:光照区域和阴影区域,分别表示接受良好光照的细胞与处于遮蔽位置的细胞。处于光照区域的细胞数量由区间内的一个随机值控制, 为该比例的上下限。该值通过公式生成,其中是在范围内均匀分布的随机变量。此设定确保在整体种群 中所占比例合理受限于指定区间。

为了将该比例转换为具体的细胞数量,需要将其乘以总种群规模 。然而,该操作可能产生一个小数,而当  表示具体细胞数时,小数并无实际意义。因此,引入下取整函数以将结果向下取整至最接近的整数。计算  的最终公式如下所示:

在确定  之后,算法继续将解集合  中的前  个个体指定为处于光照区域的细胞(记为 )。该子集的数学表示如下:

阴影区域的细胞数量  等于总细胞数  减去光照区域细胞数 ,其表达式为:

阴影区域的细胞集合  是解集  的子集,可定义为:

(2)光照区细胞的有丝分裂

为了对有丝分裂过程进行数学建模,种群中的每个细胞都会分裂成两个子细胞,这一母细胞分裂成两个子细胞的现象称为有丝分裂。变异算子是生成子细胞多样性的关键组成部分。该算子应用于第一个复制体,并相对于从种群中随机选取的细胞进行计算。通过随机选择细胞的方法,此方法准确模拟了由于辐射或化学物质等环境因素引起的变异的随机性,保证变异算子具有广泛的可能结果:

在许多生物系统中,生长和适应速率在初期通常较为强劲,但随着时间推移逐渐减弱。例如,细胞生物学表明,细胞在早期阶段经历快速生长和分裂,但随着成熟临近,这种迅猛的增长速度会减缓,这通常归因于资源限制、环境压力以及细胞的内在老化过程。受此启发,算法采用指数衰减函数𝛼来模拟这一自然演变过程。此行为的数学表达见以下公式:

此方程基于指数衰减函数的标准形式推导而来,通常表示为:

其中,𝐴为初始值,𝑘为衰减常数,𝑡为时间。

基因突变中的内在随机性体现了自然界的适应策略。尽管突变遵循一定模式,但其不可预测性确保了物种能够应对未知挑战。算法中的𝑟2和𝑟3项即反映了这种生物随机性。定义为 ,其取值范围为−1到1,允许突变既可增强也可减弱,体现了突变的双重特性:部分有益于生存,部分则可能有害。为更好理解,考虑有丝分裂的生物学表达:

变异项是引入多样性的重要组成部分,其数学表达式为:

пеш

针对光照区域细胞的变异算子 是所提优化算法的重要组成部分。它模拟了变异的随机性和多样性,保证了解空间的广泛多样性。引入随机变异因子 和生长限制因子 ,使得变异算子在不同环境条件下表现出强大的鲁棒性和适应性。

为了数学地描述这一行为,生长素重分布算子计算当前光照细胞相对于最佳光照细胞的位移,记作 。该位移通过当前细胞与最佳光照细胞的位置差进行建模,并乘以代表生长素影响和光照强度的调节因子。基于新细胞位置 受当前细胞 与最佳光照细胞 之间差异影响的基本假设,可表示为:

然而,这一位置差异 需要通过若干因子进行调节,以体现生长素的影响及生物过程中的内在随机性。生长限制因子 代表生长素的作用,而 引入了随机成分,反映了生物过程中的不确定性。结合这些因子后,调节后的位置偏移可表示为:

最后,新细胞的位置 由当前位置与经过调节的位移相加得到:

пеш

为了确定 ,可以借鉴之前定义的随机变量 和 。由于它们被定义为 ,使其取值范围在 之间, 也可类似定义为:

该取值范围使该算子能够同时考虑正向和负向的变化,模拟植物细胞中生长素的双向调控作用。该公式虽具数学结构性,但实质体现了自然界“适应与优化”的核心策略。考虑到细胞随着成熟对生长变化的敏感度降低,通过逐渐减小的生长限制因子 体现,随着时间推移, 下降,从而限制了允许的生长变化幅度。这种设计能够模拟细胞过程中的内在随机性,更真实地反映细胞对光照的响应行为。

(3)阴影区域细胞的有丝分裂

本节介绍了用于更新阴影区域细胞 的两种主要变异算子。该类变异算子的目标是模拟植物在生长和发育过程中,因环境因素而产生的变化。变异算子:作用于第一份有丝分裂副本。用于更新 的第一变异算子形式上与 的更新公式类似,这是因为阴影区域细胞的变异主要归因于遗传因素。该变异算子的更新公式如下所示:

此处,  的计算方式与类似。该算子的整体作用在于引入独立于物理条件的阴影区细胞变异。生长素重分布算子是用于更新值的第二种突变算子。该算子通过模拟光照条件差异下生长素从光照细胞向阴影细胞的再分配过程,推动阴影细胞的生长,从而使植物向光弯曲。根据当前最优光照细胞来计算该变化量,变化量通过随机突变因子进行缩放以模拟随机变化,同时通过生长限制因子 控制允许的生长变化幅度。生长素重分布算子的更新公式如下所示:

其中,  是一个在区间  之间的随机数。由上述两种突变算子生成的新细胞将被追加到当前解集(即 )中。随后,根据适应度值对所有解进行评估,并剔除最差的解。该机制确保了解集的规模保持不变,且仅保留适应度最高的细胞参与后续进化过程。

在算法的第二阶段,考虑了生长素对细胞伸长的影响。生长素是一类植物激素,参与调控植物体内多种生长与发育过程,尤其在细胞沿植物轴向方向的生长调控中发挥着关键作用。当植物暴露于不均匀的光照条件下时,生长素的分布将出现差异化。结果是,处于阴影区域的细胞比位于光照区域的细胞具有更高浓度的生长素。阴影区细胞中较高的生长素浓度会导致其细胞伸长程度大于光照区的细胞,从而使植物茎尖朝向光源发生弯曲。这一适应机制对于植物最大化光照利用、促进生长与生存具有重要意义。在细胞伸长阶段,算法引入了细胞的弯曲现象及其弯曲因子,以模拟细胞在搜索空间中的运动行为。

在弯曲度的计算中,优先考虑光照区域的细胞。植物细胞的弯曲度可通过公式进行计算:

其中,  是一个自适应参数,用于在算法初期支持搜索空间的探索行为,在后期则促进对最优解的开发(利用);  是方向切换系数,赋予了移动过程中的灵活性,模拟了现实世界中的变异性。

弯曲因子受光照强度的影响。在求解实际优化问题时,本文所提出的算法将当前最优适应度解视为光源,所有细胞会趋向该最优解发生弯曲。弯曲因子( )的计算方式如公式所示:

其中,  是一个位于区间 (−1, 1) 内的随机数。术语  确保每个细胞朝着当前最优解的方向移动,从而模拟植物的向光弯曲响应;同时,随机数  引入了受控的随机性。

除了曲率因子之外,细胞邻域在决定细胞伸长的程度上也起着关键作用。一个细胞是否处于光照区或阴影区,可以通过其周围的细胞来推断。从物理上看,阴影区的细胞往往彼此靠近,而光照区的细胞则相对分散。细胞邻域项考虑了相邻细胞的影响,并通过因子  进行缩放,以限制成熟细胞随时间发生的变化幅度;同时通过  体现细胞在感知生长素过程中的随机性。细胞邻域的计算公式如下所示:

其中,  是一个取值范围在  内的随机数。因此,每个细胞在“细胞伸长阶段”的更新公式如下所示:

PGA优化算法的流程图如下所示:

2 结果展示

3、MATLAB核心代码

3、MATLAB核心代码

%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 向光生长算法(Phototropic Growth Algorithm, PGA)
function [Fbest,Xbest,CNVG]=PGA(N,T,lb,ub,dim,fobj,nn)
% initialise the best cell
Fbest=inf;
vec_flag=[1,-1];
Nl=round((0.2*rand+0.4)*N);%eq.(2&3)
%Initialise the plant cells
X=initialization(N,dim,ub,lb);
for i=1:Nfitness(i)=feval(fobj,X(i,:)',nn);
end
[GYbest, gbest] = min(fitness);
Xbest= X(gbest,:);
Ns=N-Nl;
Xs=X(1:Ns,:);
Xl=X(Ns+1:N,:);% Initialisng fitness variables
fitness_s=fitness(1:Ns);
fitness_l=fitness(Ns+1:N);[fitnessBest_s, gbest1] = min(fitness_s);
Xbest_s = Xs(gbest1,:);[fitnessBest_l, gbest2] = min(fitness_l);
Xbest_l = Xl(gbest2,:);Curvaure=1;
% ConcS=Curvaure*(mean(Xs)./Xbest_s).*(mean(fitness_s)/fitnessBest_s);
% ConcL=Curvaure*(mean(Xl)./Xbest_l).*(mean(fitness_l)/fitnessBest_l);t=0; % Loop counterwhile t<Talpha = exp(-1*t/T); % eq(5)for i=1:size(Xs,1)FU=Xs(i,:)>ub;FL=Xs(i,:)<lb;Xs(i,:)=(Xs(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;fitness_s(i) = feval(fobj,Xs(i,:)',nn);if fitness_s(i)<fitnessBest_sfitnessBest_s=fitness_s(i);Xbest_s=Xs(i,:);endendfor i=1:size(Xl,1)FU=Xl(i,:)>ub;FL=Xl(i,:)<lb;Xl(i,:)=(Xl(i,:).*(~(FU+FL)))+ub.*FU+lb.*FL;fitness_l(i) = feval(fobj,Xl(i,:)',nn);if fitness_l(i)<fitnessBest_lfitnessBest_l=fitness_l(i);Xbest_l=Xl(i,:);endendflag_index = floor(2*rand()+1);beta=vec_flag(flag_index);Curvaure=beta*(alpha-mean(fitness_s)/Fbest); %Eq(17)for i=1:size(Xl,1)r2=2*rand(1,dim)-1;r3=2*rand(1,dim)-1;r4=2*rand(1,dim)-1;dd=randi([1,N]);flag_index = floor(2*rand()+1);beta=vec_flag(flag_index);Xlnew1(1,:)=X(dd,:)+beta*alpha.*r2.*abs(X(dd,:)-Xl(i,:))+beta*alpha.*r3.*abs(Xbest_l-Xl(i,:));%Eq(9)Xlnew1(2,:)=Xl(i,:)+alpha.*r4.*abs(Xbest_l-Xl(i,:));%Eq(13)for j=1:2Tp=Xlnew1(j,:)>ub;Tm=Xlnew1(j,:)<lb;Xlnew1(j,:)=(Xlnew1(j,:).*(~(Tp+Tm)))+ub.*Tp+lb.*Tm;fitness_lNew(j)=feval(fobj, Xlnew1(j,:)',nn);endXl=[Xl; Xlnew1];fitness_l=[fitness_l fitness_lNew];endfor i=1:size(Xs,1)r=2*rand(1,dim)-1;flag_index = floor(2*rand()+1);beta=vec_flag(flag_index);Xsnew1(1,:)=Xs(i,:)+beta*alpha.*r.*abs(Xs(i,:)-X(randi([1,N]),:));% Eq(15)Xsnew1(2,:)=Xl(randi(Ns),:)+beta*alpha.*r.*(Xbest_l-Xs(i,:));%% Eq(16)for j=1:2Tp=Xsnew1(j,:)>ub;Tm=Xsnew1(j,:)<lb;Xsnew1(j,:)=(Xsnew1(j,:).*(~(Tp+Tm)))+ub.*Tp+lb.*Tm;fitness_sNew(j)=feval(fobj, Xsnew1(j,:)',nn);endXs=[Xs; Xsnew1];fitness_s=[fitness_s fitness_sNew];end[fitness_s, SortOrder]=sort(fitness_s);Xs=Xs(SortOrder,:);[fitnessBest_s,Sbest]=min(fitness_s);Xbest_s=Xs(Sbest,:);Xs=Xs(1:Ns,:);fitness_s=fitness_s(1:Ns);[fitness_l, SortOrder]=sort(fitness_l);Xl=Xl(SortOrder,:);[fitnessBest_l,lbest]=min(fitness_l);Xbest_l=Xl(lbest,:);Xl=Xl(1:Nl,:);fitness_l=fitness_l(1:Nl);if fitnessBest_l<FbestFbest=fitnessBest_l;Xbest=Xbest_l;elseif fitnessBest_s<FbestFbest=fitnessBest_s;Xbest=Xbest_s;endX=[Xs;Xl];fitall=[fitness_s fitness_l];for i=1:Nr=2*rand(1,dim)-1;flag_index = floor(2*rand()+1);beta=vec_flag(flag_index);FOC=r.*(Curvaure.*X(i,:)-Xbest);  %eq(18)Cell_vicinity=beta*alpha.*r.*(X(i,:)+X(i+1,:))/2;   %eq(19)Xnew(1,:)=X(i,:)+FOC+Cell_vicinity;  %eq(20)for j=1:1Tp=Xnew(j,:)>ub;Tm=Xnew(j,:)<lb;Xnew(j,:)=(Xnew(j,:).*(~(Tp+Tm)))+ub.*Tp+lb.*Tm;fitnessn(j)=feval(fobj, Xnew(j,:)',nn);endX=[X; Xnew];fitall=[fitall fitnessn];end[fitall, SortOrder]=sort(fitall);X=X(SortOrder,:);[Fbest,best]=min(fitall);Xbest=X(best,:);X=X(1:N,:);Nl=N-Ns;Xs=X(1:Ns,:);Xl=X(Ns+1:N,:);fitness_s=fitness(1:Ns);fitness_l=fitness(Ns+1:N);[fitnessBest_s, gbest1] = min(fitness_s);Xbest_s = Xs(gbest1,:);[fitnessBest_l, gbest2] = min(fitness_l);Xbest_l = Xl(gbest2,:);%     Update iteration countert=t+1;CNVG(t)=Fbest;endend

参考文献

[1] Bohat V K, Hashim F A, Batra H, et al. Phototropic growth algorithm: A novel metaheuristic inspired from phototropic growth of plants[J]. Knowledge-Based Systems, 2025, 322: 113548.

完整代码获取

后台回复关键词:

TGDM869


获取更多代码:

或者复制链接跳转:https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu

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

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

相关文章

脚手架新建Vue2/Vue3项目时,项目文件内容的区别

一. package.json vue版本号不同vue2中会多一个依赖&#xff1a;vue-template-compiler&#xff0c;作用是预编译Vue2模板为渲染函数&#xff0c;减少运行时开销。vue-template-compiler与vue版本要保持一致&#xff0c;否则会报错。eslintConfig中的extends不同 eslintConfig…

微信小程序入门实例_____从零开始 开发一个每天记账的微信小程序

在前面的微信小程序实例中我们开发了体重记录等实用小程序&#xff0c;今天来尝试一个和生活消费紧密相关的 ——“每日记账小程序”。它能帮你随时记录收支情况&#xff0c;让每一笔花费都清晰可查。下面就跟着步骤&#xff0c;一步步构建这个小程序。​体验一个开发者的快乐。…

2026python实战——如何利用海外代理ip爬取海外数据

家人们&#xff01;随着跨境电商的发展&#xff0c;是不是越来越多的小伙伴们也开始搞海外的数据分析了&#xff1f;不过虽然我们已经整天爬虫、数据采集打交道了&#xff0c;但一到海外数据&#xff0c;还是有不少人掉进坑里。你们是不是也遇到过以下情况&#xff1a;花了一堆…

Spring Boot启动原理:从main方法到内嵌Tomcat的全过程

Spring Boot的启动过程是一个精心设计的自动化流程&#xff0c;下面我将详细阐述从main方法开始到内嵌Tomcat启动的全过程。 1. 入口&#xff1a;main方法 一切始于一个简单的main方法&#xff1a; SpringBootApplication public class MyApplication {public static void m…

小白学Python,网络爬虫篇(1)——requests库

目录 一、网络爬虫的介绍 1.网络爬虫库 2.robots.txt 规则 二、requests 库和网页源代码 1.requests 库的安装 2.网页源代码 三、获取网页资源 1.get () 函数 &#xff08;1&#xff09;get() 搜索信息 &#xff08;2&#xff09;get() 添加信息 2.返回 Response 对象…

平板可以用来办公吗?从文档处理到创意创作的全面测评

在快节奏的现代职场&#xff0c;一个核心疑问始终萦绕在追求效率的职场人心中&#xff1a;平板电脑&#xff0c;这个轻薄便携的设备&#xff0c;真的能替代笔记本电脑&#xff0c;成为值得信赖的办公伙伴吗&#xff1f; 答案并非简单的“是”或“否”&#xff0c;而是一个充满潜…

docker gitlab 备份 恢复 版本升级(16.1.1到18.2.0)

docker 启动 # 在线 docker pull gitlab/gitlab-ce:latest # 离线 docker save -o gitlab-ce-latest.tar gitlab/gitlab-ce:latest docker load -i gitlab-ce-latest.tardocker run --detach \--publish 8021:80 --publish 8023:22 \ --name gitlab_test \--restart always \-…

web3 区块链技术与用

#53 敲点算法题 瑞吉外卖day4 调整心态 睡眠 及精神 web3 以下是应北京大学肖臻老师《区块链技术与用》公开课的完整教学大纲&#xff0c;综合课程内容、技术模块及前沿扩展&#xff0c;分为核心章节与专题拓展两部分&#xff0c;引用自公开课资料及学员笔记。 &#x1f4…

Redis1:高并发与微服务中的键值存储利器

redis中存储的数据格式为键值对&#xff08;Key,Value&#xff09;在高并发的项目和微服务的项目会频繁的用到redisNoSQL型数据库1.初始Redis1.1认识NoSQLSQL&#xff1a;structure query language关系型数据库结构化&#xff1a;有固定格式要求&#xff08;表关系&#xff0c;…

/字符串/

字符串 个人模板 5. 最长回文子串 93. 复原 IP 地址 43. 字符串相乘 227. 基本计算器 II

我的开发日志:随机数小程序

文章目录前言UI设计代码前言 为什么我要设计这个程序呢&#xff1f;因为我要用&#xff0c;懒得在网上下载了&#xff0c;于是干脆写了一个。 UI设计 UI是我凹出来的&#xff0c;你们要使用&#xff0c;直接新建一个UI.ui文件&#xff0c;然后把下面的东西输进去就可以了。 …

《Oracle SQL:使用 RTRIM 和 TO_CHAR 函数格式化数字并移除多余小数点》

select RTRIM(to_char(1222.11123344,fm9999990.9999),.) from dual 这条 SQL 语句主要用于对数字进行格式化处理&#xff0c;并移除格式化结果右侧多余的小数点。下面将详细拆解该语句的执行过程和各部分作用。语句详细拆解1. to_char(1222.11123344,fm9999990.9999)函数功能&…

「Java案例」方法重装求不同类型数的立方

利用方法重装实现不同类型数值的立方计算 立方计算方法的重载实现 编写一个程序,要求编写重载方法xxx cube(xxx value)实现对不同类型数值计算立方。 # 源文件保存为“CubeCalculator.java” public class CubeCalculator {public static void main(String[] args) {// 测试…

API 接口开发与接入实践:自动化采集淘宝商品数据

在电商数据分析、价格监控等场景中&#xff0c;自动化采集淘宝商品数据具有重要价值。本文将详细介绍如何通过 API 接口开发实现淘宝商品数据的自动化采集&#xff0c;包含完整的技术方案和代码实现。 一、淘宝 API 接入基础 1. 接入流程概述 注册淘宝账号获取 ApiKey 和 Ap…

python-pptx 的layout 布局

一、布局基础概念 在 PowerPoint 中&#xff0c;布局&#xff08;Layout&#xff09; 决定了幻灯片的占位符&#xff08;如标题、内容、图片等&#xff09;的排列方式。python-pptx 提供了对布局的编程控制。二、默认布局类型及索引 通过 prs.slide_layouts[index] 访问&#x…

服务器mysql数据的简单备份脚本

服务器mysql数据的简单备份脚本 一个小型项目mysql数据库数据的定时备份 通过crontab定时执行脚本: 0 1 * * * /home/yuyu/mysqlbak.sh备份文件加入时间戳,防止覆盖支持删除超过x天的备份数据文件&#xff0c;防止备份数据文件太多 #!/bin/bash# 配置变量 DB_HOST"127.0.…

数据分析:从数据到决策的核心逻辑与实践指南

在数据驱动决策的时代&#xff0c;“数据分析” 早已不是专业分析师的专属技能&#xff0c;而是每个职场人都需要掌握的基础能力。但很多人在面对数据时&#xff0c;常会陷入 “罗列数据却无结论”“指标好看却解决不了问题” 的困境。本文将基于数据分析的核心定义、关键维度和…

元宇宙与Web3.0:技术特征、关系及挑战

一、元宇宙的技术特征&#xff08;2025年&#xff09;1. 空间构建技术3D建模与渲染&#xff1a;实时渲染技术&#xff08;如Unity HDRP&#xff09;实现路径追踪光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D场景。数字孪生技术&#xff1a;城市级…

关于一个引力问题的回答,兼谈AI助学作用

关于一个引力问题的回答&#xff0c;兼谈AI助学作用今日&#xff0c;一个小朋友问我&#xff0c;他从一本物理科普读物上看到这样依据话&#xff1a;地球对人造地球卫星的引力大于太阳对人造地球卫星的引力&#xff0c;但太阳对月亮的引力大于地球对月亮的引力。因书上没有解释…

Java使用FastExcel实现模板写入导出(多级表头)

依赖配置 (Maven pom.xml)<dependencies><!-- FastExcel 核心库 --><dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.0.0</version></dependency><!-- Apache POI…