草庐IT

Matlab群体智能优化算法之巨型睡莲优化算法(VAO)

勉为其难免免 2023-07-08 原文

Matlab群体智能优化算法之巨型睡莲优化算法(VAO)

摘要:介绍一种新型智能优化算法,巨型睡莲优化算法。其应用于24个基准测试函数,并与其他10个著名算法进行了比较。提出的算法在10个优化问题上进行了测试:最小生成树、枢纽位置分配、二次分配、聚类、特征选择、回归、经济调度、并行机器调度、颜色量化和图像分割,并与传统算法和生物启发算法进行了比较。总体而言,该算法在所有任务中的表现都令人满意。参考文献:Mousavi S M H. Victoria Amazonica Optimization (VAO): An Algorithm Inspired by the Giant Water Lily Plant[J]. arXiv preprint arXiv:2303.08070, 2023.

注:

  • 仅记录学习过程,如有侵权,联系删除
  • 本文所用墨滴模板为slandarer创作

文章目录

灵感来源

维多利亚亚马逊植物,通常呗称为巨型睡莲,拥有世界上最大的浮动球形叶片,最大叶片直径为3米。它通过其刺的力量传播叶子,并在下面形成一个大阴影,杀死任何需要阳光的植物。这些水霸用他们强大的刺迫使每一个浮出水面,并增加他们的力量,从水面攫取更多空间。当它们蔓延到整个池塘或盆地时,最早胜场的叶子有更多的生长空间,每片叶子都获得独特的大小。它的花是变性的,当它们开花时,甲虫负责授粉过程,被雌花的气味吸引。进入花朵后,甲虫身上沾满了花粉,并将其转移到另一朵花上受精。甲虫离开后,花变成了雄花,颜色从白色变成粉红色。雄花死亡并沉入水中,释放出它的种子,帮助创造新的一代。

在作者提出的算法中,介绍了这种壮丽植物的数学生命周期,每片叶子和花朵都被当作一个实体。

第二幅图,直径写10-100形象的比喻一下传播力,并不是直径100米。

VAO算法

VOA算法关注的是初始种群(叶子和花)的分布以及它们在表面上响应的传播力。该算法主要是一种基于蜂群局部搜索的元启发式算法,因此唯一的缺点是有可能陷入局部最优。

下面介绍一下算法中涉及的各个字母的含义

  • $\phi $ :直径
  • λ \lambda λ :优化任务,本质上就是让直径越来越大。睡莲通过用上升的力量和脊柱强行置换彼此所能获得的空间大小,从而增大其直径。这种竞争被成为内部竞争,用 λ \lambda λ表示。
  • $\omega :睡莲生长存在三个常见的困难。花内甲虫的死亡,甲虫不受粉或者授粉不当,以及温度降低。所有这些因素都有可能对这个过程不利,我们在这里把它们都成为 :睡莲生长存在三个常见的困难。花内甲虫的死亡,甲虫不受粉或者授粉不当,以及温度降低。所有这些因素都有可能对这个过程不利,我们在这里把它们都成为 :睡莲生长存在三个常见的困难。花内甲虫的死亡,甲虫不受粉或者授粉不当,以及温度降低。所有这些因素都有可能对这个过程不利,我们在这里把它们都成为\omega 。显然, 。显然, 。显然,\omega $的值越大,表明植物越弱。
  • ψ \psi ψ :害虫,如睡莲蚜虫,也可以通过吃植物的叶子和在叶子上制造洞来伤害植物。本文用 ψ \psi ψ来代表这种威胁值。 ψ \psi ψ的值越低,对植物生长和扩张越有利。
  • μ \mu μ:最后,当池塘里的甲虫用另一种睡莲给花授粉时,就会发生突变。这种现象被成为“杂交突变”,用 μ \mu μ表示。这种突变可以在正反两个方向上发生,每一代的比率为0.2%。
  • α \alpha α:最大和最强的叶子时最好的,用 α \alpha α表示。

伪代码

V A O = ∑ i = 1 n ∑ j = 1 n ( x i j [ ∅ i j , λ i j ] + ψ + ω ) ∗ ( μ ) V A O=\sum_{i=1}^n \sum_{j=1}^n(x i j[\varnothing i j, \lambda \mathrm{ij}]+\psi+\omega) *(\mu) VAO=i=1nj=1n(xij[ij,λij]+ψ+ω)(μ)

在上述公式中,可以明确看出,直径,内部竞争,困难,威胁,突变五个参数的影响


产生种群,定义每个个体的直径,定义内部竞争,定义困难和威胁,二者随机范围都在[0.1,0.3],变异概率是一个0.2。
终止循环的条件是迭代次数。在每一次的迭代过程中,首先比较每个睡莲的直径或者内部竞争,一直更新最大的;其次,变异作用一下;再次;困难和威胁作用;从次,计算适应度值;最后排序并且找到最好的。

  • 加粗字体:MATLAB
  • 斜体:MATLAB

评价和结果

本文不在此列出详细绘制这种三维图,网上这种代码很多,大家也可以参考原文,然后自己写代码。
可以在下述链接中找到这些函数的代码。
http://www.sfu.ca/~ssurjano/index.html

在作者提供的源代码中,和现在所看到的公式有所不一样。在位置更新上,所用公式并不是文中提到的公式。除此之外,他还有一个合并和排序更新,这个类似于反向学习的思路,假如原来有20个睡莲,在经过公式更新后,就会变成40个,然后对这40个进行排序,取前20个睡莲。他还有一个突变系数阻尼比,这个其实可以理解,不能一直在突变,突变的概率会越来越小的。这个系数给的是0.98,也就是0.2*0.98,依次类推。

在此给出更新公式:
KaTeX parse error: Expected 'EOF', got '_' at position 11: \text{new_̲x}=x_i+\psi * e…

仔细看看这个公式,核心部分在第二部分和第三部分,第二部分包含了困难威胁内部竞争三个参数。
其中, Δ = 0.05 ∗ ( V a r M a x − V a r M i n ) \Delta = 0.05 * (VarMax-VarMin) Δ=0.05(VarMaxVarMin);
μ = μ ∗ μ d a m p \mu = \mu*\mu_{damp} μ=μμdamp;
μ d a m p = 0.98 \mu_{damp} = 0.98 μdamp=0.98

基本测试函数的测试(此处只给一例,Ackley函数)

Ackley函数,给了一个睡莲的分布图,和原文中的图9应该是对应的。

没看明白这个的意义。不如画一个三维的动态图,去看睡莲的走向。这个图,作者应该是想体现能找到最优的那个点吧。不是很理解。

鸢尾花分类测试

作者给出了十个测试问题的代码,感兴趣的可以自己试试。

再次提醒大家,所有的代码都是作者开源的。不要购买任何这种别人提出来的什么算法代码,这代码在mathworks上都是免费下载的。或者去github上下载。

在这给出枢纽位置分配的测试结果。30个位置选5个枢纽

最后画一个三线表,比较一下目标函数和运行时间。
你用什么算法,什么算法就能达到最好。上面的图是我在matlab2022a运行的。可能不同版本也会有差距。原文中,作者就在不同性能的电脑上进行测试了。

写在最后

到此结束,感兴趣的去mathworks上下载源代码,原文。
mathworks用QQ邮箱可以免费注册,无需科学上网。

Seyed Muhammad Hossein Mousavi (2023). Victoria Amazonica Optimization VAO Algorithm (https://github.com/SeyedMuhammadHosseinMousavi/Victoria-Amazonica-Optimization-VAO-Algorithm), GitHub. 检索来源 2023/3/29.

本文由mdnice多平台发布

有关Matlab群体智能优化算法之巨型睡莲优化算法(VAO)的更多相关文章

  1. Matlab imread()读到了什么 (浅显 当复习文档了) - 2

    matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1

  2. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  3. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  4. 100个python算法超详细讲解:画直线 - 2

    1.问题描述使用Python的turtle(海龟绘图)模块提供的函数绘制直线。2.问题分析一幅复杂的图形通常都可以由点、直线、三角形、矩形、平行四边形、圆、椭圆和圆弧等基本图形组成。其中的三角形、矩形、平行四边形又可以由直线组成,而直线又是由两个点确定的。我们使用Python的turtle模块所提供的函数来绘制直线。在使用之前我们先介绍一下turtle模块的相关知识点。turtle模块提供面向对象和面向过程两种形式的海龟绘图基本组件。面向对象的接口类如下:1)TurtleScreen类:定义图形窗口作为绘图海龟的运动场。它的构造器需要一个tkinter.Canvas或ScrolledCanva

  5. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  6. 玩以太坊链上项目的必备技能(初识智能合约语言-Solidity之旅一) - 2

    前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型

  7. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  8. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  9. ruby - 在 Ruby 中实现 Luhn 算法 - 2

    我一直在尝试用Ruby实现Luhn算法。我一直在执行以下步骤:该公式根据其包含的校验位验证数字,该校验位通常附加到部分帐号以生成完整帐号。此帐号必须通过以下测试:从最右边的校验位开始向左移动,每第二个数字的值加倍。将乘积的数字(例如,10=1+0=1、14=1+4=5)与原始数字的未加倍数字相加。如果总模10等于0(如果总和以零结尾),则根据Luhn公式该数字有效;否则无效。http://en.wikipedia.org/wiki/Luhn_algorithm这是我想出的:defvalidCreditCard(cardNumber)sum=0nums=cardNumber.to_s.s

  10. Ruby 斐波那契算法 - 2

    下面是我写的一个计算斐波那契数列中的值的方法:deffib(n)ifn==0return0endifn==1return1endifn>=2returnfib(n-1)+(fib(n-2))endend它工作到n=14,但在那之后我收到一条消息说程序响应时间太长(我正在使用repl.it)。有人知道为什么会这样吗? 最佳答案 Naivefibonacci进行了大量的重复计算-在fib(14)fib(4)中计算了很多次。您可以将内存添加到您的算法中以使其更快:deffib(n,memo={})ifn==0||n==1returnnen

随机推荐