基于苔藓生长优化算法(Moss Growth Optimization, MGO)的多无人机协同三维路径规划(提供MATLAB代码)

news2024/10/26 5:25:46

一、苔藓生长优化算法介绍

苔藓生长优化算法(Moss Growth Optimization, MGO)是一种受自然界苔藓生长机制启发的元启发式优化算法。这种算法模仿了苔藓在潮湿环境中的扩散和生长方式,以寻找复杂问题的最优解。以下是苔藓生长优化算法的一些基本概念和特点:

1. 算法灵感来源

苔藓植物在自然界中以其独特的生长方式而著称,它们能够在潮湿的环境中迅速扩散。这种生长方式不需要复杂的根系结构,而是通过孢子的传播和生长来实现。苔藓生长优化算法正是受到这种简单而有效的生长机制的启发。
在这里插入图片描述

2. 算法基本原理

在MGO中,每个解可以被视为一个苔藓孢子,这些孢子在解空间中随机扩散。每个孢子的生长和扩散受到其适应度(即解决方案的质量)的影响。适应度较高的孢子更有可能扩散到新的区域,而适应度较低的孢子则可能逐渐消亡。

  1. 个体表示:在MGO中,每个个体(或称为“苔藓孢子”)代表优化问题的一个潜在解。这些孢子在解空间中随机分布。

  2. 环境因素:算法模拟环境因素对苔藓生长的影响。例如,湿度可以代表问题中的目标函数值,湿度越高,孢子生长的可能性越大。

  3. 生长机制:苔藓孢子根据环境因素(如湿度)的生长概率在解空间中“生长”或移动。这种移动可以是随机的,也可以是向更好的解方向的有偏移动。

  4. 在这里插入图片描述

  5. 繁殖机制:在找到有利的环境条件时,苔藓孢子可以繁殖,生成新的孢子。这类似于遗传算法中的交叉和变异操作,用于增加种群的多样性。

  6. 适应度评估:每个孢子的适应度根据其在解空间中的位置和环境因素进行评估。

  7. 选择和淘汰:在每一代中,根据孢子的适应度进行选择,适应度较低的孢子可能会被淘汰,而适应度较高的孢子则有更高的机会生存和繁殖。

3.核心机制:

风向测定:MGO开发了一种创新的机制,称为“风向测定”。这种机制利用大多数个体与最优个体之间的位置关系,来决定种群中所有个体的进化方向。风向测定有效地帮助MGO避免陷入局部最优解决方案。
孢子扩散搜索:MGO通过孢子扩散搜索策略进行探索。在有大量风的情况下,孢子的传播以高度不可预测的方式发生,导致相当长的传播距离。该策略允许个体进行随机选择,以防止固定步长在早期阶段导致收敛缓慢而在后期阶段无法收敛,从而确保种群多样性。
双繁殖搜索:MGO还采用了双繁殖搜索策略进行开发。它模拟有性生殖和营养生殖,通过这两种生殖方式产生新的个体,这些个体靠近原始个体。双繁殖搜索的方法允许苔藓在更有限的区域内繁殖,但它有利于快速识别苔藓的最佳栖息地。

4. 算法步骤

在这里插入图片描述

  1. 初始化:在解空间中随机生成初始孢子种群。

  2. 环境评估:评估每个孢子的适应度,这可能基于目标函数值和模拟的环境因素。

  3. 生长和繁殖

    • 根据生长概率(可能与适应度相关),孢子在解空间中移动或“生长”。
    • 在找到有利条件时,孢子繁殖生成新的孢子。
  4. 选择和更新:根据适应度选择孢子,淘汰适应度较低的孢子,并更新种群。

  5. 终止条件:重复步骤2-4,直到满足预设的迭代次数、适应度阈值或其他终止条件。

  6. 输出最优解:输出适应度最高的孢子,作为优化问题的近似最优解。
    在这里插入图片描述

5.性能特点

  • 搜索能力:由于孢子的随机生长和繁殖,MGO具有较好的全局搜索能力,适用于复杂和多模态的优化问题。
  • 简单易实现:算法的基本概念和操作相对简单,易于实现和调整。
  • 参数调整:算法的性能可能依赖于一些关键参数,如孢子的初始数量、生长概率和繁殖率,需要适当调整以获得最佳性能。

6.参考文献

[1]Boli Zheng, Yi Chen, Chaofan Wang, Ali Asghar Heidari, Lei Liu, Huiling Chen, The moss growth optimization (MGO): concepts and performance, Journal of Computational Design and Engineering, Volume 11, Issue 5, October 2024, Pages 184–221, https://doi.org/10.1093/jcde/qwae080

二、无人机(UAV)三维路径规划

单个无人机三维路径规划数学模型参考如下文献:

Phung M D , Ha Q P . Safety-enhanced UAV Path Planning with Spherical Vector-based Particle Swarm Optimization[J]. arXiv e-prints, 2021.

每个无人机的目标函数由路径长度成本,安全性与可行性成本、飞行高度成本和路径平滑成本共同组成:

2.1路径长度成本

路径长度成本由相邻两个节点之间的欧氏距离和构成,其计算公式如下:
在这里插入图片描述

2.2路径安全性与可行性成本

在这里插入图片描述

路径安全性与可行性成本通过下式计算:

在这里插入图片描述

2.3路径飞行高度成本

在这里插入图片描述

飞行高度成本通过如下公式计算所得:
在这里插入图片描述
在这里插入图片描述

2.4路径平滑成本

在这里插入图片描述

投影向量通过如下公式计算:

在这里插入图片描述

转弯角度的计算公式为:
在这里插入图片描述

爬坡角度的计算公式为:

在这里插入图片描述

平滑成本的计算公式为:
在这里插入图片描述

2.5总成本(目标函数)

在这里插入图片描述

总成本由最优路径成本,安全性与可行性成本、飞行高度成本和路径平滑成本的线性加权所得。其中,b为加权系数。

三、实验结果

在三维无人机路径规划中,无人机的路径由起点,终点以及起始点间的点共同连接而成。因此,自变量为无人机起始点间的各点坐标,每个无人机的目标函数为总成本(公式9)。本文研究3个无人机协同路径规划,总的目标函数为3个无人机的总成本之和。

Xmin=[Xmin0,Xmin1,Xmin2];
Xmax=[Xmax0,Xmax1,Xmax2];
dim=dim0+dim1+dim2;
fobj=@(x)GetFun(x,fobj0,fobj1,fobj2);%总的目标函数
pop=50;
maxgen=1500;

[fMin ,bestX,Convergence_curve]=mgo(pop,maxgen,Xmin,Xmax,dim,fobj);%Trajectories,fitness_history, population_history
% save bestX bestX
BestPosition1 = SphericalToCart(bestX(1:dim/3),model);% 第一个无人机得到的路径坐标位置
BestPosition2 = SphericalToCart(bestX(1+dim/3:2*dim/3),model1);% 第二个无人机得到的路径坐标位置
BestPosition3 = SphericalToCart(bestX(1+2*dim/3:end),model2);% 第三个无人机得到的路径坐标位置

gca1=figure(1);
gca2=figure(2);
gca3=figure(3);
PlotSolution(BestPosition1,model,gca1,gca2,gca3);% 画第一个无人机
PlotSolution1(BestPosition2,model1,gca1,gca2,gca3);% 画第二个无人机
PlotSolution2(BestPosition3,model2,gca1,gca2,gca3);% 画第三个无人机

figure
plot(Convergence_curve,'LineWidth',2)
xlabel('Iteration');
ylabel('Best Cost');
grid on;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
完整MATLAB代码见下方名片

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

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

相关文章

如何清空回收站后在 Windows 11/10 中恢复已删除的文件

这篇文章将解释如何将已删除的文件、文件夹和其他项目从回收站还原或恢复到原始位置。有时,我们最终会删除重要的文件和文件夹,然后我们不知道如何将它们恢复到原来的位置。但是您不必担心,因为这篇针对初学者的帖子将详细指导您完成所有步骤…

JDK下载与IDEA环境配置

JDK下载与IDEA环境配置 前言 ​ 国庆过后新生也是正式进入小组学习了,我们组有一个学Java的,在使用IDEA时遇到了一些问题,输出会乱码,那这一看肯定是字符集出了问题,但是我看IDEA配置的字符集没有什么问题&#xff0…

第三版大气痕量分子光谱(ATMOS)2 级产品,包含垂直势温(θ)网格上的痕量气体

目录 简介 摘要 代码 引用 网址推荐 0代码在线构建地图应用 机器学习 ATMOS L2 Trace Gases on Potential Temperature Grid, Tab Delimited Format V3 (ATMOSL2TT) at GES DISC 简介 这是第三版大气痕量分子光谱(ATMOS)2 级产品,包…

电阻分压电路:【图文讲解】

在电子电路中,电阻同样发挥着重要作用,同时也是一个最基本的元器件,电阻在电路中可以起到限流、分流、分压、发热的作用。 本节,我们重点来聊聊电阻的分压电路。如下图,是一个经典的电阻分压电路。 1:电路…

【AAOS】Android Automotive 15模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r47 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch aosp_car_x86_64-userdebug make -j8 运行效果 emualtor Home All apps Setting…

TDD(测试驱动开发)是否已死?

Rails 大神、创始人 David Heinemeier Hansson 曾发文抨击TDD。 TDD is dead. Long live testing. (DHH) 此后, Kent Beck、Martin Fowler、David Hansson 三人就这个观点还举行了系列对话(辩论) Is TDD Dead? 笔者作为一个多年在软件测试领域摸索的人&…

从秒级到小时级:TikTok等发布首篇面向长视频理解的多模态大语言模型全面综述

文章链接:https://arxiv.org/pdf/2409.18938 亮点直击 追踪并总结从图像理解到长视频理解的MM-LLMs的进展;回顾了各种视觉理解任务之间的差异,并强调了长视频理解中的挑战,包括更细粒度的时空细节、动态事件和长期依赖性;详细总结了MM-LLMs在…

整合 Knife4j:提升接口调试效率

整合 Knife4j:提升接口调试效率 Knife4j 是什么? Knife4j 是一个为 Java 项目生成和管理 API 文档的工具。实际上,它是 Swagger UI 的一个增强工具集,旨在让 Swagger 生成的 API 文档更优雅、更强大。 Knife4j 主要功能 美观的…

【LeetCode】动态规划—96. 不同的二叉搜索树(附完整Python/C++代码)

动态规划—96. 不同的二叉搜索树 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系二叉搜索树的性质:核心思路:状态定义:状态转移方程:边界条件: 3. 解决方法动态规划方法:伪代码: 4. 进一…

计算机毕业设计 内蒙古旅游景点数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 Spark 大数据【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

FreeRTOS——剖析静态创建任务内部实现

静态创建任务函数 TaskHandle_t xTaskCreateStatic (TaskFunction_t pxTaskCode, /*指向任务函数的指针*/const char *const pcName, /*任务函数名*/const uint32_t ulStackDepth, /*任务堆栈大小注意字为单位*/void *const pvParameters, /*传递的任务函…

数据处理中常见的归一化方法有哪些?为什么要对数据进行归一化?

🎁👉点击进入文心快码 Baidu Comate 官网,体验智能编码之旅,还有超多福利!🎁 🔍【大厂面试真题】系列,带你攻克大厂面试真题,秒变offer收割机! ❓今日问题&am…

Qt-系统QThread多线程介绍使用(62)

目录 描述 相关函数 使用 准备工作 重写run 发送信号 创建一个线程 启动线程 计时器运行流程 多线程运用场景 描述 qt多线程和Linux多线程类似 Linux有自己的一套多线程 API,Qt 也有着自己封装的多线程 API QT多线程参考了JAVA中的设计方式 QThread创建…

总结ES6—ES13新特性

目录 ES6let/const不同特性共同特性不能重复声明作用域提升问题暂时性死区( temporal dead zone)不添加window形成块级作用域 三者区别 模板字符串解构赋值数组的解构对象的解构 默认参数箭头函数展开运算符数值表示SymbolSetWeakSetMapWeakMapProxy 和 …

Linux Ubuntu dbus CAPI ---- #include<dbus.h>出现“无法打开源文件dbus/xxx.h“的问题

一、确保已安装dbus库和CAPI sudo apt-get install libdbus-1-dev 二、在c_cpp_properties.json的includePath中是否配置了dbus库依赖文件所在的路径 三、编译一个简单的dbus代码,在编译过程中只要出现.h文件找不到的情况,就使用下列命令找到.h文件路径…

【2024最新】基于springboot+vue的体质数据分析及可视化lw+ppt

作者:计算机搬砖家 开发技术:SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:Java精选实战项…

【设计模式】揭秘Spring框架:设计模式如何驱动代码重用与扩展性的最佳实践

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【设计模式】万字详解…

大数据毕业设计选题推荐-招聘信息数据分析系统-Python数据可视化-Hive-Hadoop-Spark

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

02.07.链表相交 最简方法之一

面试题 02.07. 链表相交 已解答 简单 相关标签 相关企业 提示 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链…

大家用 Flutter 做什么?Getx 遥遥领先!

大家用 Flutter 做什么?Getx 遥遥领先! 视频 https://youtu.be/hXRgZwqdWzI https://www.bilibili.com/video/BV1VDHhedETz/ 前言 原文 大家用 Flutter 做什么? Reddit 上的一个关于 flutter 社区投票,询问大家用 flutter 做什…