【协同任务】人工蜂群算法多无人机作业路径规划【含Matlab源码 1235期】

💥💥💞💞欢迎来到Matlab仿真科研站博客之家💞💞💥💥

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。

🍎个人主页:Matlab仿真科研站博客之家

🏆代码获取方式:
💥扫描文章底部QQ二维码💥

⛳️座右铭:行百里者,半于九十;路漫漫其修远兮,吾将上下而求索。
在这里插入图片描述

⛄更多Matlab路径规划(仿真科研站版)仿真内容点击👇
Matlab路径规划(仿真科研站版)

⛄一、多无人机协同作业简介

0 引言
多架无人机组成无人机集群可以协同完成任务,是未来无人机的发展方向。组成无人机集群的多架无人机通过机间链路互相通信实现协作,可以迅速准确地执行路径规划、协同侦察、协同感知和协同攻击等复杂任务。
为实现无人机集群协作的诱人前景,国内外都积极开展了相关研究工作。美国方面,美国国防预先研究计划局(DARPA)于2015年推出“小精灵”项目,计划研制具备自组织和智能协同能力的无人机蜂群系统。美国防部战略能力办公室(SCO)2014年启动了“无人机蜂群”项目,旨在通过有人机空射“灰山鹑”微型无人机蜂群执行低空态势感知和干扰任务。美国海军研究局(ONR)于2015年公布了“低成本无人机蜂群”(LOCUST)项目,研发可快速连续发射的无人机蜂群,无人机之间利用近距离射频网络共享态势信息,协同执行掩护、攻击或防御任务。2017年,在 DARPA 会议中心举办“进攻性集群战术”(OFFSET)项目的提案人活动,目标是发展基于游戏的开放架构,为城市作战的无人集群系统生成、评估和集成集群战术。
欧洲方面,2016 年,欧洲防务局启动了“欧洲蜂群”项目,开展了无人机蜂群的自主决策、协同飞行等关键技术研究。2016年,英国国防部发起无人机蜂群竞赛,参赛的多个团队控制无人机蜂群实现了通信中继、协同干扰、目标跟踪定位和区域测绘等任务。2017 年,俄罗斯无线电电子技术集团对外发表研究计划称,在战斗机上装载多架蜂群无人机可实现协同侦察和攻击的新型作战样式。
国内也相继展开相关研究。最近,中国电科(CETC)电子科学研究院发布了陆军协同无人机“蜂群”视频,引起广泛关注。
面对这一重要课题,本文研究总结了无人机协同应用的发展趋势,对其当前研究进展和发展方向进行了探讨,并提出无人机集群任务协作的发展趋势是多智能体协同。

1 无人机协同应用发展趋势
对现有研究工作的分析如图1所示,无人机协同应用大体上可以分为3个阶段,分别是分布式协同,群体智能协同和未来的多智能体协同。
在这里插入图片描述
图1 无人机协同技术的发展趋势
无人机集群协同发展的第1个阶段是简单分布式协同。在该阶段,协同任务根据执行条件,预先在简单连接和组合的集群成员之间经过计算处理后分配执行。集群基本没有能力根据环境与目标的变化动态调整任务分配,各无人机分担的任务通常是确定的。

鉴于预分配方式的局限性,受生物集群活动的启发,群体智能被应用于无人机集群,使无人机集群协同发展到第2个阶段——群体智能协同。在该阶段中,各个无人机节点被赋予初级智能,能够进行简单的认知和决策;通过集群个体之间更为紧密的耦合,可以根据执行中的反馈调整优化方式或者优化目标,使整个无人机集群系统有能力构成自组织、高稳定的分布式系统。群体智能协同阶段当前正处于研究和应用迅速发展时期。

随着节点计算能力的进一步提升和人工智能技术的飞速发展,无人机协同即将进入发展的第3个阶段——多智能体协同。在多智能体协同发展阶段,集群中的各个无人机都将是一个独立的综合智能体,具有多维度认知计算和高级智能处理能力,从而实现更高效的自主学习和决策,并在此基础上,完成更复杂、更艰巨的任务。

2 分布式协同
从无人机集群出现开始就被用于解决协同路径规划、协同感知和协同任务规划等分布式协作任务。早期的无人机分布式协同任务通常都是提前进行充分的计算和分配,无人机节点按照既定算法或者方案予以执行。根据计算结果,分布式协同无人机群可组织执行配置好的任务,如图2所示。
在这里插入图片描述
图2 分布式协同阶段的任务执行方式
2.1 协同路径规划
协同路径规划中,要求在给定目标或者搜索目标后,无人机节点根据当前的任务状态来确定飞行路径。针对协同搜索和跟踪任务的路线规划,无人机集群可采用最大化目标功能来检测最重要的目标,并在关键时刻对其进行跟踪,从而获得最有价值的信息。而协同搜索的路径规划可以分成无人机工作区间划分和全区域覆盖搜索路径规划2个子问题,将多机协同搜索转化为子区域上的单机搜索,对目标区域快速进行划分并生成飞行路线。基于改进遗传算法的多无人机协同侦察航迹规划算法,可用于解决面向复杂战场环境中高效侦察多种类型目标过程中的路径规划问题,并能够有效地提高航迹规划精度和效率。

2.2 协同感知
协同感知是多无人机集群共同探测感知某一目标区域状态的任务形式。在这类任务中最常见的是协同频谱感知。针对协同频谱感知任务特点,采用最佳融合准则的分布式协同任务执行方案可以优化检测性能,使协作频谱感知总错误率达到最小,并能降低协作感知时间,节省感知过程开销。

2.3 协同任务规划
协同任务规划要求集群系统能够根据目标任务和执行情况,对任务进行系统分配。例如,针对协同打击任务,通过建立无人机毁伤代价指标函数、航程代价指标函数和价值收益指标函数,可以实现多无人机协同打击任务的分配[5];而通过建立多目标优化模型并采用遗传算法,能有效提高任务的完成效率。针对协同搜救任务,使用一种新的基于通信保持的拍卖方法的自适应反馈调节遗传算法,能够改善传统遗传算法存在易陷入局部最优的弱点。

通过以上3种类型协同任务的相关研究工作可以看出,无人机集群的分布式协同方式虽然充分考虑了“分布式”特点,能够根据任务目标和集群特征,设置有效的目标函数和优化方法去寻求最优或者较优的结果,但是其任务执行环境和求解目标需要在任务执行之前进行优化计算,然后分配执行,不能适应实际中动态的任务目标和环境变化,缺乏“智能性”的感知和适应性行为。随着人们对“蜂群”“鸟群”等生物群体智能研究的深入,群体智能协同被进一步引入到无人机的协同中。

3 群体智能协同
“鸟群”“蚁群”等生物群体,虽然其中的个体智能有限,但是群体却展现出高度的自组织性,这一特点与无人机集群自主协同的需求相符,因而群体智能在无人机协同应用领域也得到了广泛研究,使无人机集群协同具有了初步的智能性。具备群体智能的无人机集群系统在任务拆解和执行过程中引入了群体反馈和适变能力,可执行较复杂的动态任务,其过程如图3所示。
在这里插入图片描述
图3 群体智能协同阶段的任务执行方式
3.1 协同路径规划
山区路径规划任务受到地形特征的强烈影响,难以预先确定性分配执行,简单的分布式协同无法胜任。例如,为了执行山区应急物资运输的路径规划任务,一种考虑路径安全度的改进蚁群算法可快速收敛并生成更短路径。蚁群算法也被用于无人机协同飞抵空战场的航迹规划任务中;一种基于改进混沌蚁群算法更能克服传统蚁群智能算法中易出现局部极值、收敛效率低的缺陷,提升算法的全局寻优能力和搜索效率。针对协同攻击移动目标场景的航迹规划,另一种改进的蚁群算法建立了结合任务分配的无人机群协同航迹规划模型,可以快速地对地面多个移动目标规划出有效的航迹。

3.2 协同感知
在协同感知任务中,群体智能也得到应用。针对无人机集群通信场景和需求,出现了考虑结合认知无线电技术指导下的智能通信思想和汇聚有限智慧的群体智能理论方法,构建了群体智能协同通信模型和智能协同感知模型。

3.3 协同任务规划
协同作战是协同任务规划中的典型场景,结合群体智能优化算法的优势,基于粒子群-整数编码狼群算法的集群组网任务分配算法适合解决此类协同问题;由于无人机集群协同决策困难,还可以结合狼群算法的认知与协作能力,实现在复杂环境下迅速对目标进行跟踪和包围。这种协同任务,是第一类简单协同所不能胜任的。

虽然无人机集群和群体智能的结合可以充分发挥无人机集群优势,增强分布式协同智能性,可在任务执行过程中与环境和任务执行中间过程产生一定交互和反馈,使之具备一定的自适应能力,但是,这种智能仍然是非常有限的,其本质仍然是基于特定计算模式和反馈模式下的分布式优化算法。

4 多智能体协同
随着人工智能技术和节点自身算力的不断增强,未来无人机集群中的个体将具备更强的智能性,能够独立对环境和任务进行感知和评估,实现多个智能体之间的交互和协同,从而具备多智能体协同能力。

近年来,人工智能领域研究取得了突破性进展。其中,深度强化学习在诸多领域得到了成功应用。无线通信网络基于多智能体深度强化学习的资源分配技术也得到了深入研究。多智能体深度强化学习模型早已被用于解决车联网中频谱资源分配问题,这种应用已经与无人机集群系统颇为接近。例如一种基于多智能体深度强化学习的分布式动态功率分配方案。基于多智能体深度强化学习的策略还可被用于二者的结合——用无人机辅助车辆网络进行多维资源管理。

虽然基于强化学习的多智能体通信网络资源分配问题已经得到了广泛研究,但是由于网络特性的不同,传统的针对其他通信网络的研究成果不能直接用于无人机集群网络。因而基于强化学习的多智能体自主协同应用逐渐成为未来无人机多智能体自主协同的一个研究热点。针对无人机群的通信网络资源动态分配问题而提出的多智能体深度强化学习方案也陆续出现,例如,一种基于多智能体深度强化学习的分布式干扰协调策略被用于受到干扰的无人机网络中的文件下载业务。智能体在适用于无人机网络特点的独立强化学习中,其行为策略通常只能根据它们对全局环境的局部个体观察来制定。针对这种局限性,联合采用2种不同规模的智能体可解决智能体之间的通信问题。

无人机集群协同,经常会处理动态高维离散和连续动作状态空间的优化求解问题,近来出现的演员-评论家算法是深度强化学习的一个新兴方向,结合了基于值函数和基于策略函数的深度强化学习两大分支的优势,非常适用于无人机集群的智能协同。利用演员-评论家算法,在无线信道和可再生能源再生率都是随机变化,且环境动态变化条件下,可寻求资源分配最佳策略,如用于解决车联网中复杂动态环境下的资源分配问题。应用设备到设备(D2D)网络的异构蜂窝网络环境下,基于演员-评论家算法的策略可用于智能化节能模式选择和资源分配。

随着节点智能算力的不断增强,无人机集群中的每架无人机可以作为一个具有深度强化学习能力的智能体,而整个集群可通过合作构成多智能体。相邻无人机之间通过通信网络进行信息交换与分发。如图4所示,每架无人机都与局部环境相互作用,根据从周围环境或者同伴无人机得到的信息,针对承载的任务需求,通过深度强化学习,智能地产生动作策略,进行自身资源与行为的分配与调整,进而与环境和同伴互动,并获得个体奖励。
在这里插入图片描述
图4 基于多智能体的无人机集群
每架无人机的深度强化学习智能体由2个深度神经网络构成,包括演员网络和评论家网络,如图5所示。
在这里插入图片描述
图5 基于演员评论家算法的无人机智能体
演员网络负责输出动作,评论家网络负责评价演员的动作,以获得相互促进的效果。与传统的深度强化学习方法相比,演员-评论家算法同时吸取了基于值函数方法和基于策略函数方法的优点,从价值和策略两方面来训练提升智能体,训练的更快,效果也更好。通过训练和学习,期望智能体的评论家网络可以获得最佳效用评估函数:
在这里插入图片描述
智能体从周围环境中观察得到状态信息St ,例如干扰状态、相邻无人机等。演员网络拟合动作策略函数π(St;ωπ),根据状态信息St,动作策略函数输出当前时隙的动作at,也就是资源分配结果,并应用到环境中得到个体的即时奖励rt。奖励由奖励函数计算得到,负责反馈一个即时的、合理的、具有指导意义的奖励值,从而激励智能体向目标更新策略。评论家网络拟合效用评估函数Q(St,at,ω),负责预测和评估在当前状态St采用动作at所能得到的状态动作价值,即长期性回报Rt为:
在这里插入图片描述
式中,γ是折扣因子,γ表示了当前对于未来收益的重视程度,取值在0~1之间,取值0则表示智能体忽视未来收益,只看重当前的收益rt,取值1则表示智能体将未来每个时刻的收益都视为与当前时刻收益一样的重要性。获得最大的长期性回报是智能体的最终目的,这个目标可以根据任务的性质被定义为不同的评判标准。

评论家网络的最佳效用评估函数对应的演员网络动作策略即为最佳动作策略π*。动作策略函数的参数通过策略梯度的方法进行更新,效用评估函数的参数采用最小化损失函数进行更新:
在这里插入图片描述
式中,yt为优势函数,用来衡量计算执行动作后的实际效用评估值。通过更新,智能体的演员网络的动作策略输出的动作越来越好,而评论家网络的效用评估也会越来越准确。基于多智能体的无人机群的每架无人机都会朝着收益最大的方向执行动作,从而实现集群的收益最大化。

⛄二、人工蜂群算法简介

1 蜜蜂采蜜
自然界中的蜜蜂总能在任何环境下以极高的效率找到优质蜜源,且能适应环境的改变。蜜蜂群的采蜜系统由蜜源、雇佣蜂、非雇佣蜂三部分组成,其中一个蜜源的优劣有很多要素,如蜜源花蜜量的大小、离蜂巢距离的远近、提取的难易程度等;雇佣蜂和特定的蜜源联系并将蜜源信息以一定概率形式告诉同伴;非雇佣蜂的职责是寻找待开采的蜜源,分为跟随蜂和侦查蜂两类,跟随峰是在蜂巢等待而侦查蜂是探测蜂巢周围的新蜜源。蜜蜂采蜜时,蜂巢中的一部分蜜蜂作为侦查蜂,不断并随机地在蜂巢附近寻找蜜源,如果发现了花蜜量超过某个阈值的蜜源,则此侦査蜂变为雇佣蜂开始釆蜜,采蜜完成后飞回蜂巢跳摇摆舞告知跟随峰。摇摆舞是蜜蜂之间交流信息的一种基本形式,它传达了有关蜂巢周围蜜源的重要信息如蜜源方向及离巢距离等,跟随峰利用这些信息准确评价蜂巢周围的蜜源质量。当雇佣蜂跳完摇摆舞之后,就与蜂巢中的一些跟随蜂一起返回原蜜源采蜜,跟随蜂数量取决于蜜源质量。以这种方式,蜂群能快速且有效地找到花蜜量最高的蜜源。
在这里插入图片描述
蜜蜂采蜜的群体智能就是通过不同角色之间的交流转换及协作来实现的。具体采蜜过程如图所示。在最初阶段,蜜蜂是以侦查蜂的形式出现,且对蜂巢周闱的蜜源没有任何了解,由于蜜蜂内在动机和外在的条件不同侦查蜂有两种选择:①成为雇佣蜂,开始在蜂巢周围随机搜索蜜源,如图中路线②成为跟随峰,在观察完摇摆舞后开始搜索蜜源,如图中路线。假设发现两个蜜源和,在发现蜜源后,该侦查蜂变成一只雇佣蜂,雇佣蜂利用其自身属性记住蜜源的位置,并立刻投入到采蜜中。采蜜完成后蜜蜂带着满载花蜜返回蜂巢,将花蜜卸载到卸蜜房,卸载完成后雇佣蜂有三种可能的行为①放弃自己发现的花蜜量不高的蜜源,变成一个不受约束的非雇佣蜂,如图中的路线;②在招募区跳摇摆舞,招募一些待在蜂巢中跟随峰,带领其再次返回所发现的蜜源如图中的路线;③不招募其他蜜蜂,继续回到原来的蜜源采蜜如图中的路线。在现实生活中并不是所有的蜜蜂一开始就立刻采蜜,另外大多数蜜蜂在一次采蜜完成后都会选择回到招募区跳摇摆舞来招募更多的蜜蜂去采蜜。

2 算法模型
人工蜂群算法就是模拟蜜蜂的采蜜过程而提出的一种新型智能优化算法,它也是由食物源、雇佣蜂和非雇佣蜂三部分组成。
食物源:食物源即为蜜源。在任何一个优化问题中,问题的可行解都是以一定形式给出的。在人工蜂群算法中,食物源就是待求优化问题的可行解,是人工蜂群算法中所要处理的基本对象。食物源的优劣即可行解的好坏是用蜜源花蜜量的大小即适应度来评价的。
雇佣蜂:雇佣蜂即为引领蜂与食物源的位置相对应,一个食物源对应一个引领蜂。在人工蜂群算法中,食物源的个数与引领蜂的个数相等;引领蜂的任务是发现食物源信息并以一定的概率与跟随蜂分享;概率的计算即为人工蜂群算法中的选择策略,一般是根据适应度值以轮盘赌的方法计算。
非雇佣蜂:非雇佣蜂包括跟随蜂和侦査蜂跟随蜂在蜂巢的招募区内根据引领蜂提供的蜜源信息来选择食物源,而侦查蜂是在蜂巢附近寻找新的食物源。在人工蜂群算法中,跟随蜂依据引领蜂传递的信息,在食物源附近搜索新食物源,并进行贪婪选择。若一个食物源在经过次后仍未被更新,则此引领蜂变成侦査蜂,侦查蜂寻找新的食物源代替原来的食物源。
在这里插入图片描述

3 算法搜索过程
在这里插入图片描述
4 分类
人工蜂群算法中将人工蜂群分为引领蜂、跟随蜂和侦查蜂三类,每一次搜索过程中,引领蜂和跟随蜂是先后开采食物源,即寻找最优解,而侦查蜂是观察是否陷入局部最优,若陷入局部最优则随机地搜索其它可能的食物源。每个食物源代表问题一个可能解,食物源的花蜜量对应相应解的质量(适应度值fiti)。
(1)人工蜂群算法搜索过程中,首先需要初始化,其中包括确定种群数、最大迭代次数MCN、、控制参数limit和确定搜索空间即解的范围,在搜索空间中随机生成初始解xi(i=1,2,3,……,SN),SN为食物源个数,每个解xi是一个D维的向量,D是问题的维数。初始化之后,整个种群将进行引领蜂、跟随蜂和侦查蜂搜寻过程的重复循环,直到达到最大迭代次数MCN或误差允许值 ε。
(2)在搜索过程开始阶段,每个引领蜂由式(2-3)产生一个新解即新食物源,
vij=xij+Φij(xij-xkj) (2-3)
式中,k∈﹛1,2,…,SN﹜,j∈{1,2,…,D},且k ≠i;Φij为[-1,1]之间的随机数。计算新解的fiti并评价它,若新解的fiti优于旧解,则引领蜂记住新解忘记旧解。反之,它将保留旧解。
(3)在所有引领蜂完成搜寻过程之后,引领蜂会在招募区跳摇摆舞把解的信息及信息与跟随蜂分享。跟随蜂根据式计算每个解的选择概率,
pi=fiti/∑k=1SNfitk。 (2-4)
然后在区间[-1,1]内随机产生一个数,如果解的概率值大于该随机数,则跟随蜂由式(2-3)产生一个新解,并检验新解的fiti,若新解的fiti比之前好,则跟随蜂将记住新解忘掉旧解;反之,它将保留旧解。
四、在所有跟随蜂完成搜寻过程之后,如果一个解经过limit次循环仍然没有被进一步更新,那么就认为此解陷入局部最优,该食物源就会被舍弃。设食物源xi被舍弃,则此食物源对应的引领蜂转成一个侦查蜂。侦察蜂由(2-5)式产生一个新的食物源代替它。

                                                             xij=xminj+rand(0,1)(xmaxj-xminj)          (2-5)

其中j∈{1,2…,D}。然后返回引领蜂搜索过程,开始重复循环。
五、人工蜂群算法的食物源质量一般是越大越好,即适应度值越大越好,而对应于要优化的问题,需要分两种情况考虑:即最小值问题、最大值问题。设fi是优化问题的目标函数,所以若优化最小值问题时,适应度函数为fi的变形,一般用式(2-6)表示;若优化最大值问题,适应度函数即目标函数。

fiti={1+abs(fi) fi>=01/1+fi fi>0 (2-6)
人工蜂群算法在评价食物源时一般进行贪婪选择按式(2-7)进行。

vi={xi fit(xi)<=fit(vi)vi fit(vi)>fit(xi) (2-7)
人工蜂群算法就是通过循环搜索,最终找到最优食物源或最优解。

5 算法步骤
人工蜂群算法具体实现步骤:
步骤1:初始化种群:初始化各个参数,蜂群总数SN、食物源被采集次数即最大迭代次数MCN及控制参数limit,确定问题搜索范围,并且在搜索范围内随机产生初始解xi(i=1,2,…SN) 。
步骤2:计算并评估每个初始解的适应度。
步骤3:设定循环条件并开始循环
步骤4:引领蜂对解xi按照式(2-3)进行邻域搜索产生新解(食物源)vi,并计算其适应度值;
步骤5:按照式(2-7)进行贪婪选择:如果vi的适应度值优于xi,则利用vi替换xi,将vi作为当前最好的解,否则保留xi不变;
步骤6:根据式(2-4)计算食物源的概率pi;
步骤7:跟随蜂依照概率pi选择解或食物源,按照式(2-3)搜索产生新解(食物源)vi,并计算其适应度。
步骤8:按式(2-7)进行贪婪选择;如果vi的适应度优于xi,则用vi代替xi,将vi作为当前最好解,否则保留xi不变;
步骤9:判断是否有要放弃的解。若有,则侦查蜂按式(2-5)随机产生新解将其替换;
步骤10:记录到目前为止的最优解;
步骤11:判断是否满足循环终止条件,若满足,循环结束,输出最优解,否则返回步骤4继续搜索。

⛄三、部分源代码

function POS=runUAVABC4(obj)
global boundary setstart setfinal node setstart_2 setfinal_2 ;
maxCycle=10;%算法迭代次数
%/* Problem specific variables*/

D=2;
NP=40;
FoodNumber=NP/2;
limit=NPD;
ub=ones(1,D)
(boundary(1)-10);
lb=ones(1,D)*(boundary(2)+10);
setfinal_2=setfinal;
setstart_2=setstart;
runtime=node+1;
objfun=‘UAV2’;

GlobalMins=zeros(1,runtime);
GlobalParams_s=[setstart_2;zeros(node+1,2);setfinal_2];

for r=1:2runtime
Range = repmat((ub-lb),[FoodNumber 1]);
Lower = repmat(lb, [FoodNumber 1]);
Foods = rand(FoodNumber,D) .
Range + Lower;

%%
if r<=node/2%Step1:将奇数位置的节点双向规划(基于X坐标均分)
X_ave=setstart_2(1)😦(setfinal_2(1)-setstart_2(1))/(node/2+1)):setfinal_2(1);
X_ave=X_ave(2:end-1);
if rem(r,2)~=0
Foods(:,1)=X_ave((r+1)/2);
ObjVal=feval(objfun,Foods,GlobalParams_s(r,:),GlobalParams_s(node+4-r,:));
else
Foods(:,1)=X_ave(node/2+1-r/2);
ObjVal=feval(objfun,Foods,GlobalParams_s(r+1,:),GlobalParams_s(node+5-r,:));
end
else
if r>node/2&&r<=runtime%Step2:将偶数位置的节点单向插缝规划(基于Step1所产生节点间的Y坐标中值)
feckParams_s=[0;0;GlobalParams_s(1:(end-2),2)];
feckParams_s=(GlobalParams_s(:,2)-feckParams_s)/2;
feckParams_s=[feckParams_s(3:end);0;0];
Y_ave=GlobalParams_s(:,2)+feckParams_s;
Foods(:,2)=Y_ave(2*(r-node/2)-1);
ObjVal=feval(objfun,Foods,GlobalParams_s(2*(r-node/2)-1,:),GlobalParams_s(2*(r-node/2)+1,:));
elseif r>runtime&&r<=runtime+node/2%Step3:重新将奇数位置的节点单向插缝规划(基于Step2所产生节点间的X坐标中值)
feckParams_s=[0;GlobalParams_s(4:end,1);0;0];
feckParams_s=(feckParams_s-GlobalParams_s(:,1))/2;
X_ave=GlobalParams_s(:,1)+feckParams_s;
Foods(:,1)=X_ave(2*(r-runtime));
ObjVal=feval(objfun,Foods,GlobalParams_s(2*(r-runtime)😅,GlobalParams_s(2*(r-runtime)+2,:));
else%Step4:重新将偶数位置的节点单向插缝规划(基于Step3所产生节点间的Y坐标中值)
feckParams_s=[0;0;GlobalParams_s(1:(end-2),2)];
feckParams_s=(GlobalParams_s(:,2)-feckParams_s)/2;
feckParams_s=[feckParams_s(3:end);0;0];
Y_ave=GlobalParams_s(:,2)+feckParams_s;
Foods(:,2)=Y_ave(2*(r-node/2-runtime)-1);
ObjVal=feval(objfun,Foods,GlobalParams_s(2*(r-node/2-runtime)-1,:),GlobalParams_s(2*(r-node/2-runtime)+1,:));
end
end
%
%

Fitness=calculateFitness(ObjVal);
%reset trial counters
trial=zeros(1,FoodNumber);

%/The best food source is memorized/
BestInd=find(ObjVal==min(ObjVal(find(ObjVal>0))));
BestInd=BestInd(end);
GlobalMin=ObjVal(BestInd);
GlobalParams=Foods(BestInd,:);

iter=1;
while (iter <= maxCycle),
%雇佣蜂先采一批蜜源回去供观察蜂观察
%%%%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%
for i=1:(FoodNumber)
Param2Change=fix(randD)+1;
neighbour=fix(rand
FoodNumber)+1;
while(neighbour==i)
neighbour=fix(rand*FoodNumber)+1;
end;

   sol=Foods(i,:);
   %与第个蜜源相对应的采蜜蜂依据如下公式寻找新的蜜源
   sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;%(rand-0.5)*2  即产生一个[-1:1]的随机数
 
    ind=find(sol<(lb));%如果超出边界,则将值转变为边界值
    sol(ind)=lb(ind);
    ind=find(sol>(ub));
    sol(ind)=ub(ind);
  
    %evaluate new solution
  if r<=node/2
        if rem(r,2)~=0
      ObjValSol=feval(objfun,sol,GlobalParams_s(r,:),GlobalParams_s(node+4-r,:)); 
        else
      ObjValSol=feval(objfun,sol,GlobalParams_s(r+1,:),GlobalParams_s(node+5-r,:)); 
        end
  else
    if r>node/2&&r<=runtime
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2)-1,:),GlobalParams_s(2*(r-node/2)+1,:));   
    elseif r>runtime&&r<=runtime+node/2
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-runtime),:),GlobalParams_s(2*(r-runtime)+2,:));   
    else
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2-runtime)-1,:),GlobalParams_s(2*(r-node/2-runtime)+1,:));   
    end
   end
  
    FitnessSol=calculateFitness(ObjValSol);
    
   % /*a greedy selection is applied between the current solution i and its mutant 
   if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
        Foods(i,:)=sol;
        Fitness(i)=FitnessSol;
        ObjVal(i)=ObjValSol;
        trial(i)=0;
    else
        trial(i)=trial(i)+1;
   end;
 end;

%%%%%%%%%%%%%%%%%%%%%%%% CalculateProbabilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
prob=(0.9.Fitness./max(Fitness))+0.1;
%prob=Fitness./sum(Fitness);
%%%%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
i=1;
t=0;
while(t<FoodNumber)
if(rand<prob(i))
t=t+1;
Param2Change=fix(rand
D)+1;%随机生成[1:D]上的一个整数
neighbour=fix(rand*(FoodNumber))+1;
%/Randomly selected solution must be different from the solution i/
while(neighbour==i)
neighbour=fix(rand*(FoodNumber))+1;
end

   sol=Foods(i,:);
   sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2;
   %  /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/
    ind=find(sol<(lb));%如果超出边界,则将值转变为边界值
    sol(ind)=lb(ind);
    ind=find(sol>(ub));
    sol(ind)=ub(ind);
    
    %evaluate new solution
    if r<=node/2
        if rem(r,2)~=0
      ObjValSol=feval(objfun,sol,GlobalParams_s(r,:),GlobalParams_s(node+4-r,:)); 
        else
      ObjValSol=feval(objfun,sol,GlobalParams_s(r+1,:),GlobalParams_s(node+5-r,:)); 
        end
  else
    if r>node/2&&r<=runtime
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2)-1,:),GlobalParams_s(2*(r-node/2)+1,:));   
    elseif r>runtime&&r<=runtime+node/2
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-runtime),:),GlobalParams_s(2*(r-runtime)+2,:));   
    else
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2-runtime)-1,:),GlobalParams_s(2*(r-node/2-runtime)+1,:));   
    end
   end
 
    FitnessSol=calculateFitness(ObjValSol);
   % /*a greedy selection is applied between the current solution i and its mutant*/
   if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/
        Foods(i,:)=sol;
        Fitness(i)=FitnessSol;
        ObjVal(i)=ObjValSol;
        trial(i)=0;
    else
        trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/
   end;
end;

i=i+1;
 if (i==(FoodNumber)+1)
     i=1;
 end;   

end;

%/The best food source is memorized/
ind=find(ObjVal==min(ObjVal(find(ObjVal>0))));
ind=ind(end);
if (ObjVal(ind)<GlobalMin)
GlobalMin=ObjVal(ind);
GlobalParams=Foods(ind,:);%储存最小函数值对应参数
end;

%%%%%%%%%%%% SCOUT BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%侦察蜂用于防止算法陷入局部最优
ind=find(trial==max(trial));
ind=ind(end);
if (trial(ind)>limit)
Bas(ind)=0;

sol=(ub-lb).*rand(1,D)+lb;

  if r<=node/2
        if rem(r,2)~=0
      ObjValSol=feval(objfun,sol,GlobalParams_s(r,:),GlobalParams_s(node+4-r,:)); 
        else
      ObjValSol=feval(objfun,sol,GlobalParams_s(r+1,:),GlobalParams_s(node+5-r,:)); 
        end
  else
    if r>node/2&&r<=runtime
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2)-1,:),GlobalParams_s(2*(r-node/2)+1,:));   
    elseif r>runtime&&r<=runtime+node/2
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-runtime),:),GlobalParams_s(2*(r-runtime)+2,:));   
    else
    ObjValSol=feval(objfun,sol,GlobalParams_s(2*(r-node/2-runtime)-1,:),GlobalParams_s(2*(r-node/2-runtime)+1,:));   
    end
   end
 
    
FitnessSol=calculateFitness(ObjValSol);
Foods(ind,:)=sol;
Fitness(ind)=FitnessSol;
ObjVal(ind)=ObjValSol;

end;

fprintf(‘代数=%d GlobalMin=%g\n’,iter,GlobalMin);
iter=iter+1;
end ;% End of ABC

GlobalMins®=GlobalMin;

if r<=node/2
if rem(r,2)~=0
GlobalParams_s(r+2,:)=GlobalParams;
else
GlobalParams_s(node+3-r,:)=GlobalParams;
end
else
if r>node/2&&r<=runtime
GlobalParams_s(2*(r-node/2),:)=GlobalParams;
elseif r>runtime&&r<=runtime+node/2
GlobalParams_s(2*(r-runtime)+1,:)=GlobalParams;
else
GlobalParams_s(2*(r-node/2-runtime),:)=GlobalParams;
end
end

end; %end of runs
%=路径绘图====%
%line([setfinal(1) GlobalParams_s(node+2,1) ],[setfinal(2) GlobalParams_s(node+2,2)],‘Color’,‘k’,‘LineWidth’,1);
%line([setstart(1) GlobalParams_s(1,1) ],[setstart(2) GlobalParams_s(1,2)],‘Color’,‘k’,‘LineWidth’,1);
%plot(GlobalParams_s(2:(end-1),1),GlobalParams_s(2:(end-1),2),‘‘,‘Color’,‘r’);
plot(setstart(1) ,setstart(2) ,’
’,‘Color’,‘b’);
plot( setfinal(1),setfinal(2),‘hexagram’,‘Color’,‘g’);
text(setstart(1)+10 ,setstart(2)+10,num2str(obj));
%line(GlobalParams_s(:,1),GlobalParams_s(:,2),‘Color’,‘k’,‘LineWidth’,1);
%====================================================================================%
B;%B样条平滑
hold on;
save all
POS=GlobalParams_s;

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]张小孟,胡永江,李文广,庞强伟,袁国刚.基于改进人工蜂群算法的多无人机灭火任务规划[J].中国惯性技术学报. 2020,28(04)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用

1.1 PID优化
1.2 VMD优化
1.3 配电网重构
1.4 三维装箱
1.5 微电网优化
1.6 优化布局
1.7 优化参数
1.8 优化成本
1.9 优化充电
1.10 优化调度
1.11 优化电价
1.12 优化发车
1.13 优化分配
1.14 优化覆盖
1.15 优化控制
1.16 优化库存
1.17 优化路由
1.18 优化设计
1.19 优化位置
1.20 优化吸波
1.21 优化选址
1.22 优化运行
1.23 优化指派
1.24 优化组合
1.25 车间调度
1.26 生产调度
1.27 经济调度
1.28 装配线调度
1.29 水库调度
1.30 货位优化
1.31 公交排班优化
1.32 集装箱船配载优化
1.33 水泵组合优化
1.34 医疗资源分配优化
1.35 可视域基站和无人机选址优化

2 机器学习和深度学习分类与预测
2.1 机器学习和深度学习分类
2.1.1 BiLSTM双向长短时记忆神经网络分类
2.1.2 BP神经网络分类
2.1.3 CNN卷积神经网络分类
2.1.4 DBN深度置信网络分类
2.1.5 DELM深度学习极限学习机分类
2.1.6 ELMAN递归神经网络分类
2.1.7 ELM极限学习机分类
2.1.8 GRNN广义回归神经网络分类
2.1.9 GRU门控循环单元分类
2.1.10 KELM混合核极限学习机分类
2.1.11 KNN分类
2.1.12 LSSVM最小二乘法支持向量机分类
2.1.13 LSTM长短时记忆网络分类
2.1.14 MLP全连接神经网络分类
2.1.15 PNN概率神经网络分类
2.1.16 RELM鲁棒极限学习机分类
2.1.17 RF随机森林分类
2.1.18 SCN随机配置网络模型分类
2.1.19 SVM支持向量机分类
2.1.20 XGBOOST分类

2.2 机器学习和深度学习预测
2.2.1 ANFIS自适应模糊神经网络预测
2.2.2 ANN人工神经网络预测
2.2.3 ARMA自回归滑动平均模型预测
2.2.4 BF粒子滤波预测
2.2.5 BiLSTM双向长短时记忆神经网络预测
2.2.6 BLS宽度学习神经网络预测
2.2.7 BP神经网络预测
2.2.8 CNN卷积神经网络预测
2.2.9 DBN深度置信网络预测
2.2.10 DELM深度学习极限学习机预测
2.2.11 DKELM回归预测
2.2.12 ELMAN递归神经网络预测
2.2.13 ELM极限学习机预测
2.2.14 ESN回声状态网络预测
2.2.15 FNN前馈神经网络预测
2.2.16 GMDN预测
2.2.17 GMM高斯混合模型预测
2.2.18 GRNN广义回归神经网络预测
2.2.19 GRU门控循环单元预测
2.2.20 KELM混合核极限学习机预测
2.2.21 LMS最小均方算法预测
2.2.22 LSSVM最小二乘法支持向量机预测
2.2.23 LSTM长短时记忆网络预测
2.2.24 RBF径向基函数神经网络预测
2.2.25 RELM鲁棒极限学习机预测
2.2.26 RF随机森林预测
2.2.27 RNN循环神经网络预测
2.2.28 RVM相关向量机预测
2.2.29 SVM支持向量机预测
2.2.30 TCN时间卷积神经网络预测
2.2.31 XGBoost回归预测
2.2.32 模糊预测
2.2.33 奇异谱分析方法SSA时间序列预测

2.3 机器学习和深度学习实际应用预测
CPI指数预测、PM2.5浓度预测、SOC预测、财务预警预测、产量预测、车位预测、虫情预测、带钢厚度预测、电池健康状态预测、电力负荷预测、房价预测、腐蚀率预测、故障诊断预测、光伏功率预测、轨迹预测、航空发动机寿命预测、汇率预测、混凝土强度预测、加热炉炉温预测、价格预测、交通流预测、居民消费指数预测、空气质量预测、粮食温度预测、气温预测、清水值预测、失业率预测、用电量预测、运输量预测、制造业采购经理指数预测

3 图像处理方面
3.1 图像边缘检测
3.2 图像处理
3.3 图像分割
3.4 图像分类
3.5 图像跟踪
3.6 图像加密解密
3.7 图像检索
3.8 图像配准
3.9 图像拼接
3.10 图像评价
3.11 图像去噪
3.12 图像融合
3.13 图像识别
3.13.1 表盘识别
3.13.2 车道线识别
3.13.3 车辆计数
3.13.4 车辆识别
3.13.5 车牌识别
3.13.6 车位识别
3.13.7 尺寸检测
3.13.8 答题卡识别
3.13.9 电器识别
3.13.10 跌倒检测
3.13.11 动物识别
3.13.12 二维码识别
3.13.13 发票识别
3.13.14 服装识别
3.13.15 汉字识别
3.13.16 红绿灯识别
3.13.17 虹膜识别
3.13.18 火灾检测
3.13.19 疾病分类
3.13.20 交通标志识别
3.13.21 卡号识别
3.13.22 口罩识别
3.13.23 裂缝识别
3.13.24 目标跟踪
3.13.25 疲劳检测
3.13.26 旗帜识别
3.13.27 青草识别
3.13.28 人脸识别
3.13.29 人民币识别
3.13.30 身份证识别
3.13.31 手势识别
3.13.32 数字字母识别
3.13.33 手掌识别
3.13.34 树叶识别
3.13.35 水果识别
3.13.36 条形码识别
3.13.37 温度检测
3.13.38 瑕疵检测
3.13.39 芯片检测
3.13.40 行为识别
3.13.41 验证码识别
3.13.42 药材识别
3.13.43 硬币识别
3.13.44 邮政编码识别
3.13.45 纸牌识别
3.13.46 指纹识别

3.14 图像修复
3.15 图像压缩
3.16 图像隐写
3.17 图像增强
3.18 图像重建

4 路径规划方面
4.1 旅行商问题(TSP)
4.1.1 单旅行商问题(TSP)
4.1.2 多旅行商问题(MTSP)
4.2 车辆路径问题(VRP)
4.2.1 车辆路径问题(VRP)
4.2.2 带容量的车辆路径问题(CVRP)
4.2.3 带容量+时间窗+距离车辆路径问题(DCTWVRP)
4.2.4 带容量+距离车辆路径问题(DCVRP)
4.2.5 带距离的车辆路径问题(DVRP)
4.2.6 带充电站+时间窗车辆路径问题(ETWVRP)
4.2.3 带多种容量的车辆路径问题(MCVRP)
4.2.4 带距离的多车辆路径问题(MDVRP)
4.2.5 同时取送货的车辆路径问题(SDVRP)
4.2.6 带时间窗+容量的车辆路径问题(TWCVRP)
4.2.6 带时间窗的车辆路径问题(TWVRP)
4.3 多式联运运输问题

4.4 机器人路径规划
4.4.1 避障路径规划
4.4.2 迷宫路径规划
4.4.3 栅格地图路径规划

4.5 配送路径规划
4.5.1 冷链配送路径规划
4.5.2 外卖配送路径规划
4.5.3 口罩配送路径规划
4.5.4 药品配送路径规划
4.5.5 含充电站配送路径规划
4.5.6 连锁超市配送路径规划
4.5.7 车辆协同无人机配送路径规划

4.6 无人机路径规划
4.6.1 飞行器仿真
4.6.2 无人机飞行作业
4.6.3 无人机轨迹跟踪
4.6.4 无人机集群仿真
4.6.5 无人机三维路径规划
4.6.6 无人机编队
4.6.7 无人机协同任务
4.6.8 无人机任务分配

5 语音处理
5.1 语音情感识别
5.2 声源定位
5.3 特征提取
5.4 语音编码
5.5 语音处理
5.6 语音分离
5.7 语音分析
5.8 语音合成
5.9 语音加密
5.10 语音去噪
5.11 语音识别
5.12 语音压缩
5.13 语音隐藏

6 元胞自动机方面
6.1 元胞自动机病毒仿真
6.2 元胞自动机城市规划
6.3 元胞自动机交通流
6.4 元胞自动机气体
6.5 元胞自动机人员疏散
6.6 元胞自动机森林火灾
6.7 元胞自动机生命游戏

7 信号处理方面
7.1 故障信号诊断分析
7.1.1 齿轮损伤识别
7.1.2 异步电机转子断条故障诊断
7.1.3 滚动体内外圈故障诊断分析
7.1.4 电机故障诊断分析
7.1.5 轴承故障诊断分析
7.1.6 齿轮箱故障诊断分析
7.1.7 三相逆变器故障诊断分析
7.1.8 柴油机故障诊断

7.2 雷达通信
7.2.1 FMCW仿真
7.2.2 GPS抗干扰
7.2.3 雷达LFM
7.2.4 雷达MIMO
7.2.5 雷达测角
7.2.6 雷达成像
7.2.7 雷达定位
7.2.8 雷达回波
7.2.9 雷达检测
7.2.10 雷达数字信号处理
7.2.11 雷达通信
7.2.12 雷达相控阵
7.2.13 雷达信号分析
7.2.14 雷达预警
7.2.15 雷达脉冲压缩
7.2.16 天线方向图
7.2.17 雷达杂波仿真

7.3 生物电信号
7.3.1 肌电信号EMG
7.3.2 脑电信号EEG
7.3.3 心电信号ECG
7.3.4 心脏仿真

7.4 通信系统
7.4.1 DOA估计
7.4.2 LEACH协议
7.4.3 编码译码
7.4.4 变分模态分解
7.4.5 超宽带仿真
7.4.6 多径衰落仿真
7.4.7 蜂窝网络
7.4.8 管道泄漏
7.4.9 经验模态分解
7.4.10 滤波器设计
7.4.11 模拟信号传输
7.4.12 模拟信号调制
7.4.13 数字基带信号
7.4.14 数字信道
7.4.15 数字信号处理
7.4.16 数字信号传输
7.4.17 数字信号去噪
7.4.18 水声通信
7.4.19 通信仿真
7.4.20 无线传输
7.4.21 误码率仿真
7.4.22 现代通信
7.4.23 信道估计
7.4.24 信号检测
7.4.25 信号融合
7.4.26 信号识别
7.4.27 压缩感知
7.4.28 噪声仿真
7.4.29 噪声干扰

7.5 无人机通信

7.6 无线传感器定位及布局方面
7.6.1 WSN定位
7.6.2 高度预估
7.6.3 滤波跟踪
7.6.4 目标定位
7.6.4.1 Dv-Hop定位
7.6.4.2 RSSI定位
7.6.4.3 智能算法优化定位
7.6.5 组合导航

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于MATLAB人工蜂群算法(Artificial Bee Colony, ABC),可以应用于无人机作业路径规划问题。人工蜂群算法是一种模仿蜜蜂觅食行为的启发式优化算法,在求解路径规划问题上具有一定的优势。 首先,无人机作业路径规划问题可看作是一个多目标优化问题,需要同时考虑到最短路径和最小能量消耗等多个目标的平衡。人工蜂群算法能够通过不同蜜蜂种群的分工合作,以多样化的方式搜索全局最优解,从而得到较好的路径规划结果。 其次,人工蜂群算法中的蜜蜂种群包括三类蜜蜂:雇佣蜜蜂、侦查蜜蜂和观察蜜蜂。雇佣蜜蜂通过采用局部搜索策略,在当前最优解周围进行搜索,以寻找更优解。侦查蜜蜂通过随机选择目标位置,探索新的解空间。观察蜜蜂负责更新全局最优解,并根据一定的选择概率,决定是否进行跟随其他蜜蜂的位置。 最后,在MATLAB中实现人工蜂群算法无人机作业路径规划,可以先定义目标函数,包括路径的距离和能量消耗。然后,利用蜜蜂种群的行为规则来搜索最优解,在每一代中更新和调整蜜蜂种群的位置和适应度。通过迭代过程,蜜蜂种群会不断优化路径规划结果,直至达到收敛条件。 综上所述,基于MATLAB人工蜂群算法可以应用于多目标优化的无人机作业路径规划问题中,通过蜜蜂种群的协作和迭代优化,得到较好的路径规划结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值