智能优化算法:莲花算法(Lotus flower algorithm,LFA)介绍,提供MATLAB代码

一、 莲花算法

1.1 算法原理

莲花算法(Lotus flower algorithm,LFA)是一种受自然启发的优化算法,其灵感来源于莲花的自清洁特性和授粉过程。莲花的自清洁特性,即所谓的“莲花效应”,是由其叶片表面的微纳米结构和蜡质层共同作用实现的。这种特性使得水滴能够在叶片表面形成球状,并带走灰尘和污垢,从而使叶片始终保持清洁。在算法中,这种自清洁效应被用来模拟优化过程中的局部搜索和全局搜索的平衡。

授粉过程是莲花繁衍的重要方式,包括生物授粉和非生物授粉。生物授粉是指昆虫等生物在花丛中穿梭,将花粉从一朵花传播到另一朵花;非生物授粉则是通过风、水等自然因素传播花粉。在算法中,生物授粉被用来模拟全局搜索,而非生物授粉则被用来模拟局部搜索。

在这里插入图片描述

1.2 算法介绍

1.2.1 LEA 探索阶段

LEA 的探索阶段(Exploration Phase)主要基于蜻蜓算法(Dragonfly Algorithm)的全局授粉过程,模拟蜻蜓在花粉传播中的行为。蜻蜓算法通过模拟蜻蜓的群体行为,包括分离(Separation)、对齐(Alignment)、内聚(Cohesion)以及对食物的吸引和对敌人的回避,来实现对解空间的全局搜索。

  • 分离(Separation):避免个体与邻近个体发生碰撞,计算公式为:
    S i = − ∑ j = 1 N ( X i − X j ) S_i = -\sum_{j=1}^{N} (X_i - X_j) Si=j=1N(XiXj)
    其中, X i X_i Xi 表示当前个体的位置, X j X_j Xj 表示邻近个体的位置, N N N 为邻近个体的数量。

  • 对齐(Alignment):个体的速度与邻近个体的速度保持一致,计算公式为:
    A i = 1 N ∑ j = 1 N V j A_i = \frac{1}{N} \sum_{j=1}^{N} V_j Ai=N1j=1NVj
    其中, V j V_j Vj 表示邻近个体的速度。

  • 内聚(Cohesion):个体向邻近个体的中心位置移动,计算公式为:
    C i = 1 N ∑ j = 1 N ( X j − X i ) C_i = \frac{1}{N} \sum_{j=1}^{N} (X_j - X_i) Ci=N1j=1N(XjXi)
    其中, X j X_j Xj 表示邻近个体的位置。

  • 食物吸引(Food Attraction):个体向食物源移动,计算公式为:
    F i = X food − X i F_i = X_{\text{food}} - X_i Fi=XfoodXi
    其中, X food X_{\text{food}} Xfood 表示食物源的位置。

  • 敌人回避(Enemy Distraction):个体远离敌人,计算公式为:
    E i = X enemy − X i E_i = X_{\text{enemy}} - X_i Ei=XenemyXi
    其中, X enemy X_{\text{enemy}} Xenemy 表示敌人的位置。

通过上述五个因素的综合作用,蜻蜓算法能够有效地探索解空间。在 LEA 中,这些机制被用来模拟蜻蜓在全局搜索中的行为,以实现对问题的全局优化。

1.2.2 LEA 开发阶段

LEA 的开发阶段(Exploitation Phase)主要基于局部授粉过程,模拟植物的自花授粉行为。在这个阶段,算法通过局部搜索来细化和优化已找到的解。

  • 局部搜索:在局部授粉过程中,每个解(花)会围绕当前最优解进行局部搜索。搜索的步长会随着迭代次数的增加而逐渐减小,以实现对最优解的精细化搜索。计算公式为:
    X i t + 1 = X i t + R ( X i t − g ∗ ) X_{i}^{t+1} = X_i^t + R (X_i^t - g^*) Xit+1=Xit+R(Xitg)
    其中, X i t X_i^t Xit 表示当前解, g ∗ g^* g 表示当前最优解, R R R 为步长衰减系数,计算公式为:
    R = 2 e − ( 4 t L ) 2 R = 2e^{-\left(\frac{4t}{L}\right)^2} R=2e(L4t)2
    其中, t t t 为当前迭代次数, L L L 为最大迭代次数。

通过局部搜索,LEA 能够在已找到的解附近进行更深入的搜索,从而提高算法的开发能力。

1.2.3 LEA 开发阶段强化

为了进一步增强开发阶段的搜索能力,LEA 引入了水滴在荷叶上移动的局部搜索机制。这个机制模拟了水滴在荷叶表面的流动,通过水滴的移动来寻找最优解。

  • 水滴移动:每个解(水滴)在搜索空间中移动,寻找最优解。水滴的移动速度和位置更新公式为:
    V i t + 1 = q V i t V_i^{t+1} = q V_i^t Vit+1=qVit
    X i t + 1 = X i t + V i t + 1 X_i^{t+1} = X_i^t + V_i^{t+1} Xit+1=Xit+Vit+1
    其中, V i t V_i^t Vit 表示当前速度, q q q 为速度衰减系数。

  • 水滴溢出:当水滴在一个坑(局部最优解)中积累过多时,会溢出并流向其他坑。溢出的水滴会根据坑的容量(适应度值)选择下一个目标坑。计算公式为:
    c i = ∣ ∣ f i − f max ∣ ∣ ∣ ∣ f min − f max ∣ ∣ × const c_i = \frac{||f_i - f_{\text{max}}||}{||f_{\text{min}} - f_{\text{max}}||} \times \text{const} ci=∣∣fminfmax∣∣∣∣fifmax∣∣×const
    其中, f i f_i fi 表示当前坑的适应度值, f max f_{\text{max}} fmax f min f_{\text{min}} fmin 分别表示最大和最小适应度值, const \text{const} const 为常数。

通过水滴的移动和溢出机制,LEA 能够在局部搜索中更有效地找到最优解。

1.2.4 LEA 步骤

LEA 的主要步骤如下:

  1. 初始化:生成初始解,随机分布蜻蜓(解)在搜索空间中。
  2. 评估:计算每个解的适应度值,确定当前最优解。
  3. 更新:根据蜻蜓算法的机制更新解的位置,包括分离、对齐、内聚、食物吸引和敌人回避。
  4. 局部搜索:在当前最优解附近进行局部搜索,模拟水滴在荷叶上的移动。
  5. 终止条件:检查是否达到最大迭代次数或满足其他终止条件。如果未满足,则返回步骤 2。

1.3 算法流程

在这里插入图片描述

莲花算法的流程主要包括以下步骤:

  1. 初始化:随机生成一群蜻蜓(每个蜻蜓代表一个候选解),并设定算法的参数,如种群大小、最大迭代次数等。
  2. 评估:计算每个蜻蜓的位置对应的适应度值,确定当前最优解。
  3. 更新:根据蜻蜓算法的机制更新蜻蜓的位置,包括分离、对齐、内聚、食物吸引和敌人回避。
  4. 局部搜索:在当前最优解附近进行局部搜索,模拟水滴在荷叶上的移动。
  5. 终止条件:检查是否达到最大迭代次数或满足其他终止条件。如果未满足,则返回步骤 2。

1.4 算法描述

  • 分离(Separation):避免个体与邻近个体发生碰撞,计算公式为: S i = − ∑ j = 1 N ( X i − X j ) S_i = -\sum_{j=1}^{N} (X_i - X_j) Si=j=1N(XiXj)其中, X i X_i Xi 表示当前个体的位置, X j X_j Xj 表示邻近个体的位置, N N N 为邻近个体的数量。

  • 对齐(Alignment):个体的速度与邻近个体的速度保持一致,计算公式为: A i = 1 N ∑ j = 1 N V j A_i = \frac{1}{N} \sum_{j=1}^{N} V_j Ai=N1j=1NVj其中, V j V_j Vj 表示邻近个体的速度。

  • 内聚(Cohesion):个体向邻近个体的中心位置移动,计算公式为: C i = 1 N ∑ j = 1 N ( X j − X i ) C_i = \frac{1}{N} \sum_{j=1}^{N} (X_j - X_i) Ci=N1j=1N(XjXi)其中, X j X_j Xj 表示邻近个体的位置。

  • 食物吸引(Food Attraction):个体向食物源移动,计算公式为: F i = X food − X i F_i = X_{\text{food}} - X_i Fi=XfoodXi其中, X food X_{\text{food}} Xfood 表示食物源的位置。

  • 敌人回避(Enemy Distraction):个体远离敌人,计算公式为: E i = X enemy − X i E_i = X_{\text{enemy}} - X_i Ei=XenemyXi其中, X enemy X_{\text{enemy}} Xenemy 表示敌人的位置。

莲花算法通过模拟莲花的自清洁特性和授粉过程,实现了全局搜索和局部搜索的平衡。它的主要特点是结合了蜻蜓算法的群体行为和水滴在荷叶上的移动机制,能够在复杂的问题空间中有效地寻找最优解。

参考文献:
[1]Dalirinia, Elham, Mehrdad Jalali, Mahdi Yaghoobi and Hamid Tabatabaee. “Lotus effect optimization algorithm (LEA): a lotus nature-inspired algorithm for engineering design optimization.” J. Supercomput. 80 (2023): 761-799.

二、核心MATLAB代码

function [Best_score,Best_pos,cg_curve]=LEA(SearchAgents_no,Max_iteration,lb,ub,dim,fobj)
% display('optimizing your problem');
cg_curve=zeros(1,Max_iteration);if size(ub,2)==1ub=ones(1,dim)*ub;lb=ones(1,dim)*lb;
endr=(ub-lb)/10;
Delta_max=(ub-lb)/10;Food_fitness=inf;
Food_pos=zeros(dim,1);Enemy_fitness=-inf;
Enemy_pos=zeros(dim,1);X=initialization(SearchAgents_no,dim,ub,lb);
Fitness=zeros(1,SearchAgents_no);DeltaX=initialization(SearchAgents_no,dim,ub,lb);for iter=1:Max_iterationr=(ub-lb)/4+((ub-lb)*(iter/Max_iteration)*2);w=0.9-iter*((0.9-0.4)/Max_iteration);my_c=0.1-iter*((0.1-0)/(Max_iteration/2));if my_c<0my_c=0;ends=2*rand*my_c; a=2*rand*my_c; c=2*rand*my_c; f=2*rand;      e=my_c;        for i=1:SearchAgents_noFitness(1,i)=fobj(X(:,i)');if Fitness(1,i)<Food_fitnessFood_fitness=Fitness(1,i);Food_pos=X(:,i);endif Fitness(1,i)>Enemy_fitnessif all(X(:,i)<ub') && all( X(:,i)>lb')Enemy_fitness=Fitness(1,i);Enemy_pos=X(:,i);endendendfor i=1:SearchAgents_noindex=0;neighbours_no=0;clear Neighbours_DeltaXclear Neighbours_X%find the neighbouring solutionsfor j=1:SearchAgents_noDist2Enemy=distance(X(:,i),X(:,j));if (all(Dist2Enemy<=r) && all(Dist2Enemy~=0))index=index+1;neighbours_no=neighbours_no+1;Neighbours_DeltaX(:,index)=DeltaX(:,j);Neighbours_X(:,index)=X(:,j);endendS=zeros(dim,1);if neighbours_no>1for k=1:neighbours_noS=S+(Neighbours_X(:,k)-X(:,i));endS=-S;elseS=zeros(dim,1);endif neighbours_no>1A=(sum(Neighbours_DeltaX')')/neighbours_no;elseA=DeltaX(:,i);endif neighbours_no>1C_temp=(sum(Neighbours_X')')/neighbours_no;elseC_temp=X(:,i);endC=C_temp-X(:,i);Dist2Food=distance(X(:,i),Food_pos(:,1));if all(Dist2Food<=r)F=Food_pos-X(:,i);elseF=0;endDist2Enemy=distance(X(:,i),Enemy_pos(:,1));if all(Dist2Enemy<=r)Enemy=Enemy_pos+X(:,i);elseEnemy=zeros(dim,1);endfor tt=1:dimif X(tt,i)>ub(tt)X(tt,i)=lb(tt);DeltaX(tt,i)=rand;endif X(tt,i)<lb(tt)X(tt,i)=ub(tt);DeltaX(tt,i)=rand;endendif any(Dist2Food>r)if neighbours_no>1for j=1:dimDeltaX(j,i)=w*DeltaX(j,i)+rand*A(j,1)+rand*C(j,1)+rand*S(j,1);if DeltaX(j,i)>Delta_max(j)DeltaX(j,i)=Delta_max(j);endif DeltaX(j,i)<-Delta_max(j)DeltaX(j,i)=-Delta_max(j);endX(j,i)=X(j,i)+DeltaX(j,i);endelse% Eq. (3.8)X(:,i)=X(:,i)+Levy(dim)'.*X(:,i);DeltaX(:,i)=0;endelsefor j=1:dim% Eq. (3.6)DeltaX(j,i)=(a*A(j,1)+c*C(j,1)+s*S(j,1)+f*F(j,1)+e*Enemy(j,1)) + w*DeltaX(j,i);if DeltaX(j,i)>Delta_max(j)DeltaX(j,i)=Delta_max(j);endif DeltaX(j,i)<-Delta_max(j)DeltaX(j,i)=-Delta_max(j);endX(j,i)=X(j,i)+DeltaX(j,i);end endFlag4ub=X(:,i)>ub';Flag4lb=X(:,i)<lb';X(:,i)=(X(:,i).*(~(Flag4ub+Flag4lb)))+ub'.*Flag4ub+lb'.*Flag4lb;endBest_score=Food_fitness;Best_pos=Food_pos';cg_curve(iter)=Best_score;
end
end
function o=Levy(d)
beta=3/2;
%Eq. (3.10)
sigma=(gamma(1+beta)*sin(pi*beta/2)/(gamma((1+beta)/2)*beta*2^((beta-1)/2)))^(1/beta);
u=randn(1,d)*sigma;
v=randn(1,d);
step=u./abs(v).^(1/beta);
% Eq. (3.9)
o=0.01*step;
end

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

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

相关文章

CSS 媒体查询:从入门到精通,打造跨设备完美体验

在当今移动互联网时代&#xff0c;用户访问网站的设备早已不再局限于桌面电脑&#xff0c;手机、平板等各种屏幕尺寸的设备层出不穷。为了确保用户在不同设备上都能获得良好的浏览体验&#xff0c;响应式网页设计应运而生。而 CSS 媒体查询&#xff0c;正是实现响应式设计的核心…

【Python LeetCode 专题】树

LeetCode 题目104. 二叉树的最大深度(gif 图解)方法一:后序遍历(DFS)方法二:层序遍历(BFS)872. 叶子相似的树(DFS 遍历)1448. 统计二叉树中好节点的数目(DFS 遍历)437. 路径总和 III(前缀和 + DFS 回溯)1372. 二叉树中的最长交错路径(DFS)236. 二叉树的最近公共…

Spring有哪些缺点?

大家好&#xff0c;我是锋哥。今天分享关于【Spring有哪些缺点?】面试题。希望对大家有帮助&#xff1b; Spring有哪些缺点? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring框架是一个广泛使用的企业级Java开发框架&#xff0c;提供了丰富的功能和强大的灵…

MySQL数据库——索引潜规则(回表查询、索引覆盖、索引下推)

大家好&#xff0c;这里是编程Cookbook。本文详细介绍MySQL索引的三个潜规则——回表查询、索引覆盖、索引下推&#xff0c;以提升数据库的性能。 文章目录 索引回顾聚集索引&#xff08;Clustered Index&#xff09;非聚集索引&#xff08;Secondary Index/辅助索引/二级索引&…

VScode运行后出现黑窗口

原文链接&#xff1a;VScode运行出黑窗口 1.安装插件&#xff1a;C/C Compile Run 2.快捷键【CtrlShiftp】,点击【首选项&#xff1a;打开用户设置】

使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统

GitHub代码仓库 架构 从高层次来看&#xff0c;这些系统的步骤如下&#xff1a; 将问题转换为SQL查询&#xff1a;模型将用户输入转换为SQL查询。 执行SQL查询&#xff1a;执行查询。 回答问题&#xff1a;模型根据查询结果响应用户输入。 样本数据 下载样本数据&#xf…

【前端小点】vue3项目内根据主题读取不同文件夹下的图片资源(图片文件)

项目要求实现一键换肤的功能&#xff0c;不仅仅是主题颜色上的替换&#xff0c;还有图片素材的替换&#xff0c;主题颜色替换的方案大同小异&#xff0c;下面仅对图片素材的一件替换进行方法描述。 主要思路 使用本地仓库对当前主题进行存储&#xff0c;系统根据主题去加载不同…

vxe-table实现动态列

vxe-table实现动态列 1.动态列解释2.解决步骤2.1将后端返回的动态列表头&#xff0c;按照格式拼接在固定列表头上2.2将后端返回的列表数据按照键值对格式组装 1.动态列解释 正常列表是有固定的列&#xff1b;我的需求是&#xff0c;最初只知道表格的固定两列&#xff0c;查询数…

Windows 11 使用容器(Docker Podman)

文章目录 背景1、相关网站1.1、WSL1.2、Docker1.3、Podman 2、环境3、安装部署3.1、安装 WSL3.2、Docker3.2.1、Docker Desktop3.2.1.1、安装3.2.1.2、拉取镜像3.2.1.3、启动容器 3.3、Podman3.3.1、安装3.3.2、使用3.3.3、异常处理 总结 背景 Windows 系统中使用容器&#xf…

UE_C++ —— Gameplay Modules

目录 一&#xff0c;Module Creation INI File Setup 二&#xff0c;Multiple Gameplay Modules 三&#xff0c;Limitations 编译成 DLL 的游戏相关类的集合&#xff1b;正如引擎本身由一组模块构成一样&#xff0c;每个游戏也是由一个或多个游戏模块构成的&#xff1b;这些…

蓝桥杯定时器实现led闪烁

step1.配置定时器&#xff0c;TIM1时高级定时&#xff0c;TIM2是通用定时器&#xff0c;用TIM2就行&#xff0c;用内部时钟源&#xff0c;记住相关公式&#xff0c;定时器中断配置时要使能&#xff0c;且生成代码后也要在mian中写使能函数 step2.写代码 配置生成代码后多出的…

二:前端发送POST请求,后端获取数据

接着一&#xff1a;可以通过端口访问公网IP之后 二需要实现&#xff1a;点击飞书多维表格中的按钮&#xff0c;向服务器发送HTTP请求&#xff0c;并执行脚本程序 向服务器发送HTTP请求&#xff1a; 发送请求需要明确一下几个点 请求方法&#xff1a; 由于是向服务器端发送值…

内外网文件传输 安全、可控、便捷的跨网数据传输方案

一、背景与痛点 在内外网隔离的企业网络环境中&#xff0c;员工与外部协作伙伴&#xff08;如钉钉用户&#xff09;的文件传输面临以下挑战&#xff1a; 安全性风险&#xff1a;内外网直连可能导致病毒传播、数据泄露。 操作繁琐&#xff1a;传统方式需频繁切换网络环境&…

elasticsearch在windows上的配置

写在最前面&#xff1a; 上资源 第一步 解压&#xff1a; 第二步 配置两个环境变量 第三步 如果是其他资源需要将标蓝的文件中的内容加一句 xpack.security.enabled: false 不同版本的yaml文件可能配置不同&#xff0c;末尾加这个 xpack.security.enabled: true打开bin目…

OpenCV二值化处理

1.1. 为什么需要二值化操作 二值化操作将灰度图像转换为黑白图像&#xff0c;即将图像中的像素值分为两类&#xff1a;前景&#xff08;通常为白色&#xff0c;值为 255&#xff09;和背景&#xff08;通常为黑色&#xff0c;值为 0&#xff09;。二值化的主要目的是简化图像&…

[Android]浏览器下载的apk文件无法识别无法安装问题

在Android电话机上&#xff0c;用浏览器下载apk进行版本更新&#xff0c;出现下载文件没被识别为apk&#xff0c;导致无法安装问题。 原来的下载链接&#xff1a; https://mojsetup.obs.cn-southwest-2.myhuaweicloud.com/callphone-release-1.0.4.apk 修改后的下载链接&…

如何使用SSH连接设备?很简单!

前言 小白发现最近写的文章都与SSH息息相关&#xff0c;于是就有了这一篇文章&#xff0c;免得在后续的文章又不断重复如何SSH连接设备。 有需要的小伙伴自然就会看到这里&#xff0c;也不会影响到其他小伙伴的阅读体验。 至于文章里的广告嘛……就当是小伙伴们给小白的一点…

【自学嵌入式(9)ESP8266网络服务器的使用】

ESP8266网络服务器的使用 ESP8266WiFi 库① WiFiClass② WiFiClient③ WiFiServer④ WiFiUDP ESP8266WiFiMulti 库① WiFiMulti ESP8266WebServer 库① P8266WebServer 网络服务器实例在浏览器中控制ESP8266指示灯将开发板引脚状态显示在网页中 在之前的文章中&#xff0c;曾经…

pytorch3d安装记录

官方安装教程&#xff1a; https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md 通过pip 或conda 可以很容易安装上预编译好的包&#xff0c; 安装过程不会报错&#xff0c; 但是使用的时候就会报各种错误 &#xff0c;原因是预编译好的包跟自己的环境不一定…

【CVPR2024-工业异常检测】PromptAD:与只有正常样本的少样本异常检测的学习提示

代码链接 摘要 摘要写作总结&#xff1a; 1.提出 两个关键点 &#xff08;视觉语言模型【模型】 少量工业异常检测【方向】&#xff09; 2.想要解决的问题 3.针对上述问题&#xff0c;本文提出了一种什么【方法】的什么【应用方面】方法【模型名】 4.具体讲方法的步骤 5.实验…