【任务分配】基于matlab蚁群算法无人机任务分配【含Matlab源码 1265期】_任务分配 基于蚁群算法-程序员宅基地

技术标签: matlab  Matlab路径规划(进阶版)  

博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
个人主页:海神之光
代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(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 蚁群算法(ant colony algorithm,ACA)起源和发展历程
Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士论文中首次系统地提出一种基于蚂蚁种群的新型智能优化算法“蚂蚁系统(Ant system,简称AS)”,后来,提出者及许多研究者对该算法作了各种改进,将其应用于更为广泛的领域,如图着色问题、二次分配问题、工件排序问题、车辆路径问题、车间作业调度问题、网络路由问题、大规模集成电路设计等。近些年来,M.Dorigo等人把蚂蚁算法进一步发展成一种通用的优化技术“蚁群优化(Ant Colony Optimization,简称ACO)”,并将所有符合ACO框架的算法称为“蚁群优化算法(ACO algorithm)”。

在这里插入图片描述
具体来说,各个蚂蚁在没有事先告知食物在什么地方的前提下开始寻找食物。当一只找到食物以后,它会向环境释放一种挥发性分泌物pheromone (称为信息素,该物质随着时间的推移会逐渐挥发消失,信息素浓度的大小表征路径的远近)信息素能够让其他蚂蚁感知从而起到一个引导的作用。通常多个路径上均有信息素时,蚂蚁会优先选择信息素浓度高的路径,从而使浓度高的路径信息素浓度更高,形成一个正反馈。有些蚂蚁并没有像其它蚂蚁一样总重复同样的路,他们会另辟蹊径,如果另开辟的道路比原来的其他道路更短,那么,渐渐地,更多的蚂蚁被吸引到这条较短的路上来。最后,经过一段时间运行,可能会出现一条最短的路径被大多数蚂蚁重复着。最终,信息素浓度最高的路径即是最终被蚂蚁选中的最优路径。
与其他算法相比,蚁群算法是一种比较年轻的算法,具有分布式计算、无中心控制、个体之间异步间接通信等特点,并且易于与其他优化算法相结合,经过不少仁人志士的不断探索,到今天已经发展出了各式各样的改进蚁群算法,不过蚁群算法的原理仍是主干。

2 蚁群算法的求解原理
基于上述对蚁群觅食行为的描述,该算法主要对觅食行为进行以下几个方面模拟:
(1)模拟的图场景中包含了两种信息素,一种表示家,一种表示食物的地点,并且这两种信息素都在以一定的速率进行挥发。
(2)每个蚂蚁只能感知它周围的小部分地方的信息。蚂蚁在寻找食物的时候,如果在感知范围内,就可以直接过去,如果不在感知范围内,就要朝着信息素多的地方走,蚂蚁可以有一个小概率不往信息素多的地方走,而另辟蹊径,这个小概率事件很重要,代表了一种找路的创新,对于找到更优的解很重要。
(3)蚂蚁回窝的规则与找食物的规则相同。
(4)蚂蚁在移动时候首先会根据信息素的指引,如果没有信息素的指引,会按照自己的移动方向惯性走下去,但也有一定的机率改变方向,蚂蚁还可以记住已经走过的路,避免重复走一个地方。
(5)蚂蚁在找到食物时留下的信息素最多,然后距离食物越远的地方留下的信息素越少。找到窝的信息素留下的量的规则跟食物相同。蚁群算法有以下几个特点:正反馈算法、并发性算法、较强的鲁棒性、概率型全局搜索、不依赖严格的数学性质、搜索时间长,易出现停止现象。
蚂蚁转移概率公式:
在这里插入图片描述
公式中:是蚂蚁k从城市i转移到j的概率;α,β分别为信息素和启发式因子的相对重要程度;为边(i,j)上的信息素量;为启发式因子;为蚂蚁k下步允许选择的城市。上述公式即为蚂蚁系统中的信息素更新公式,是边(i,j)上的信息素量;ρ是信息素蒸发系数,0<ρ<1;为第k只蚂蚁在本次迭代中留在边(i,j)上的信息素量;Q为一正常系数;为第k只蚂蚁在本次周游中的路径长度。
在蚂蚁系统中,信息素更新公式为:
在这里插入图片描述
3 蚁群算法的求解步骤:
(1)初始化参数在计算之初,需要对相关参数进行初始化,如蚁群规模(蚂蚁数量)m、信息素重要程度因子α、启发函数重要程度因子β、信息素会发银子ρ、信息素释放总量Q、最大迭代次数iter_max、迭代次数初值iter=1。
(2)构建解空间将各个蚂蚁随机地置于不同的出发点,对每个蚂蚁k(k=1,2,3…m),按照(2-1)计算其下一个待访问城市,直到所有蚂蚁访问完所有城市。
(3)更新信息苏计算每个蚂蚁经过路径长度Lk(k=1,2,…,m),记录当前迭代次数中的最优解(最短路径)。同时,根据式(2-2)和(2-3)对各个城市连接路径上信息素浓度进行更新。
(4) 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。
(5)判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。3. 判断是否终止若iter<iter_max,则令iter=iter+1,清空蚂蚁经过路径的记录表,并返回步骤2;否则,终止计算,输出最优解。

在这里插入图片描述

三、部分源代码

clc;
clear;
%% initialization

% Define the position of the robots
% % Robot_position=[1,2;1,4;1,6;1,8;1,10];
% UAV_position=[5,7;3,2;7,13;6,9;5,5];
% % Define the target positions
% Target_position=[3,6;5,4;5,6;5,8;8,6];

% Random position
UAV_number=4; % The number of UAVs
task_number=15; % The number of Target positions
SizeofMap = [1 500];
size_UAV = 0;
size_task = 0;

while (size_UAV<UAV_number && size_task < task_number)
UAV_position = randi(SizeofMap,UAV_number,2);
Target_position = randi(SizeofMap,task_number,2);
% UAV_position = unique(UAV_position,‘rows’);
% Target_position = unique(Target_position,‘rows’);
size_UAV = size(unique(UAV_position,‘rows’),1);
size_task = size(unique(Target_position,‘rows’),1);
end

% Initial the speed of UAVs
UAV_speed=ones(UAV_number,1)*50;

% UAV_position = randi([1,15],10,2);
% Target_position = randi([1,15],10,2);

% UAV_number=5; % The number of UAVs
% task_number=5; % The number of Target positions
maxT=10; % The maximum tasks can be done by a single worker
task_fixed_number=1; % The number of workers are required for a single task
% unfinishtask_number=task_number;

ant_num=100; % The numbder of ants
iteratornum=200; % The iteration times

% pheromoneMatrix = [];% The matrix to store the pheromone
% maxPheromoneMatrix = []; % The assigned workers based on the pheromone matrix
% criticalPointMatrix = [];% This matrix is used to decide allocation by
% % using pheromone matrix or randomly
%
% % Initialize the last 3 matrix
% % The pheromone are initialized as all ‘1’
% pheromoneMatrix = ones(task_number,UAV_number);
% for i=1:task_number
% % From beginning, assign the workers randomly
% maxPheromoneMatrix(i) =unidrnd(UAV_number) ;
% % Once the value less or equal to 1, the allocation is based on the
% % pheromone matrix; otherwise, it is allocated randomly. For
% % initialization, the tasks are allocated randomly.
% criticalPointMatrix(i)=ceil(ant_num/task_number );
% end

%% The implementation of Ant Colony Algorithm
judge = 1;
while (isempty(Target_position) == 0)

if (judge == 1)
    %task_number =  task_number_new;
    best_ant_path = AntColonyAlgorothm(UAV_position,Target_position,UAV_number,UAV_speed,task_number,...
        ant_num, iteratornum, maxT,task_fixed_number);
    [row,col]=find(best_ant_path==1);
    
    task_number_imme = task_number;
    for j = 1: UAV_number
        mid = find(col==j);
        if (isempty(mid) == 0)
        len = length(mid);
        allo=mid(randi(len));
        Best_Strategy(j)=allo;
        else
            Best_Strategy(j)= task_number + 1;
            task_number=task_number+1;
        end
    end
end


        for j = 1:size(Best_Strategy,2)
            if(Best_Strategy(1,j) > task_number_imme)
                %Best_Strategy_updated(i,j)=0;
                Target_position(Best_Strategy(1,j),:) = UAV_position( j, :);
                %task_number=task_number+1;
            end
        end



for j =1: size(Best_Strategy,2)
    difference(j,:)=Target_position(Best_Strategy(j),:)-UAV_position(j,:);
    if (difference(j,1)==0)
        angle(j)= pi/2;
    else
        angle(j)= atan(difference(j,2)/difference(j,1));
    end
end
%end

% for i= 1: size(Best_Strategy,1)
for j= 1: size(Best_Strategy,2)
    if (difference(j,1) > 0)
        UAV_step(j,1)= UAV_speed(j)*cos(angle(j));
        UAV_step(j,2)= UAV_speed(j)*sin(angle(j));
    elseif(difference(j,1) < 0)
        UAV_step(j,1)= -UAV_speed(j)*cos(angle(j));
        UAV_step(j,2)= -UAV_speed(j)*sin(angle(j));
    elseif ((difference(j,1) == 0)&& (difference(j,2) > 0))
        UAV_step(j,1)= UAV_speed(j)*cos(angle(j));
        UAV_step(j,2)= UAV_speed(j)*sin(angle(j));
    elseif ((difference(j,1) == 0)&& (difference(j,2) < 0))
        UAV_step(j,1)= - UAV_speed(j)*cos(angle(j));
        UAV_step(j,2)= - UAV_speed(j)*sin(angle(j));
    end
end

[UAV_p
if (isempty(Target_position_new) == 1)
    break;
end
UAV_position = UAV_position_new;
if (size(Target_position,1) > size(Target_position_new,1))
    Target_position = Target_position_new;
    judge =1;
else
    judge = 0;
end

end
% task_number_imme = task_number;
% if (task_number_imme<UAV_number)
% for i = 1:size(Best_Strategy,1)
% for j = 1:size(Best_Strategy,2)
% if(Best_Strategy(i,j) > task_number_imme)
% %Best_Strategy_updated(i,j)=0;
% Target_position(Best_Strategy(i,j) = UAV_position( j, ;
% task_number=task_number+1;
% end
% end
% end
% % elseif (task_number==UAV_number)
% %
% % if (Target_position == UAV_position)
% % Target_position =[];
% % end
% end
% end
% % Start iteration
% for i=1:iteratornum
% best_ant_path=[]; % To find the best task allocation results in each iteration
% all_ant_path=[]; % To store the whole task allocation results in each iteration
%
% % For each ant
% for j=1:ant_num
% % To count how many tasks can be accomplished
% for p=1:UAV_number
% worker_quality§=maxT;
% end
%
% record_assign_worker=assignonetask(j,k,criticalPointMatrix,maxPheromoneMatrix,UAV_number,worker_quality);
% oneant_path(k,record_assign_worker)=1;
% worker_task(k,record_assign_worker)=0;
% worker_quality(record_assign_worker)=worker_quality(record_assign_worker)-1;
%
% % Once the worker has approached its maximum task capacity,
% % then, this worker cannot be assigned any task any more
% if worker_quality(record_assign_worker)==0
% worker_task(:,record_assign_worker)=0;
% end
% maxPheromoneMatrix=updatemaxPheromoneMatrix_special(pheromoneMatrix,maxPheromoneMatrix,k,record_assign_worker,worker_quality,worker_task,UAV_number,task_number);
% end
% end
% % Record all ant paths in each iteration
% all_ant_path=[all_ant_path;oneant_path];
% end
% % Find the best ant path in the stored information previously, and
% % record the corresponded travel distance of all UAVs
% [best_ant_path, min_dist(i)]=find_best_ant_path(all_ant_path,UAV_number,task_number,ant_num,UAV_position,Target_position);
%
% % Update the pheromone matrix and others based on the best ant path
% pheromoneMatrix=updatePheromoneMatrix(best_ant_path, pheromoneMatrix,UAV_number,task_number);
% maxPheromoneMatrix=updatemaxPheromoneMatrix(pheromoneMatrix,UAV_number,task_number);
% criticalPointMatrix=updatecriticalPointMatrix(pheromoneMatrix,UAV_number,task_number,ant_num);
% end

%% Display the task allcocation strategy
% Draw_Strategy(UAV_position,Target_position,best_ant_path, min_dist);
%end
function [maxPheromoneMatrix]=updatemaxPheromoneMatrix_special(pheromoneMatrix,maxPheromoneMatrix,current_task,record_assign_worker,worker_quality,worker_task,worker_number,task_number)

% The task capacity should also be updated, once the task has already
% already be completed, then the pheromone matrix has to be updated
for j=1:task_number
for i=1:worker_number
if worker_task(j,i)==0
pheromoneMatrix(j,i)=0;
end
end
end
% Find the column index of the maximum value in each row
[C,I]=max(pheromoneMatrix(current_task,:));
maxPheromoneMatrix(current_task)=I;

%对下面的影响进行操作
if worker_quality(record_assign_worker)==0
for i=current_task+1:task_number
% If the best allocation of the task is this worker, then find the
% next best worker
if maxPheromoneMatrix(i)==record_assign_worker
% Find the column index of the maximum value in each row
[C,I]=max(pheromoneMatrix(i,:));
maxPheromoneMatrix(i)=I;
end
end
end
end

四、运行结果

在这里插入图片描述

五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]焦阳.基于改进蚁群算法的无人机三维路径规划研究[J].舰船电子工程. 2019,39(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

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

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/TIQCmatlab/article/details/119951896

智能推荐

2022黑龙江最新建筑八大员(材料员)模拟考试试题及答案_料账的试题-程序员宅基地

文章浏览阅读529次。百分百题库提供建筑八大员(材料员)考试试题、建筑八大员(材料员)考试预测题、建筑八大员(材料员)考试真题、建筑八大员(材料员)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。310项目经理部应编制机械设备使用计划并报()审批。A监理单位B企业C建设单位D租赁单位答案:B311对技术开发、新技术和新工艺应用等情况进行的分析和评价属于()。A人力资源管理考核B材料管理考核C机械设备管理考核D技术管理考核答案:D312建筑垃圾和渣土._料账的试题

chatgpt赋能python:Python自动打开浏览器的技巧-程序员宅基地

文章浏览阅读614次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python自动打开浏览器

Linux中安装JDK-RPM_linux 安装jdk rpm-程序员宅基地

文章浏览阅读545次。Linux中安装JDK-RPM方式_linux 安装jdk rpm

net高校志愿者管理系统-73371,计算机毕业设计(上万套实战教程,赠送源码)-程序员宅基地

文章浏览阅读25次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-高校志愿者管理系统主要功能模块包括页、个人资料(个人信息。修改密码)、公共管理(轮播图、系统公告)、用户管理(管理员、志愿用户)、信息管理(志愿资讯、资讯分类)、活动分类、志愿活动、报名信息、活动心得、留言反馈,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取SQL Server 作为后台数据的主要存储单元,采用Asp.Net技术进行业务系统的编码及其开发,实现了本系统的全部功能。

小米宣布用鸿蒙了吗,小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们...-程序员宅基地

文章浏览阅读122次。原标题:小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们目前华为已开始对鸿蒙系统大规模宣传,不过中国手机四强中的另外三家小米、OPPO、vivo对于是否采用鸿蒙系统保持沉默,甚至OPPO还因此而闹出了一些风波,对此柏铭科技认为这是因为中国制造当下需要小米OV几家继续将手机出口至海外市场。 2020年中国制造支持中国经济渡过了艰难的一年,这一年中国进出口贸易额保持稳步增长的势头,成为全球唯一..._小米宣布用鸿蒙系统

Kafka Eagle_kafka eagle git-程序员宅基地

文章浏览阅读1.3k次。1.Kafka Eagle实现kafka消息监控的代码细节是什么?2.Kafka owner的组成规则是什么?3.怎样使用SQL进行kafka数据预览?4.Kafka Eagle是否支持多集群监控?1.概述在《Kafka 消息监控 - Kafka Eagle》一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情。今天_kafka eagle git

随便推点

Eva.js是什么(互动小游戏开发)-程序员宅基地

文章浏览阅读1.1k次,点赞29次,收藏19次。Eva.js 是一个专注于开发互动游戏项目的前端游戏引擎。:Eva.js 提供开箱即用的游戏组件供开发人员立即使用。是的,它简单而优雅!:Eva.js 由高效的运行时和渲染管道 (Pixi.JS) 提供支持,这使得释放设备的全部潜力成为可能。:得益于 ECS(实体-组件-系统)架构,你可以通过高度可定制的 API 扩展您的需求。唯一的限制是你的想象力!_eva.js

OC学习笔记-Objective-C概述和特点_objective-c特点及应用领域-程序员宅基地

文章浏览阅读1k次。Objective-C概述Objective-C是一种面向对象的计算机语言,1980年代初布莱德.考斯特在其公司Stepstone发明Objective-C,该语言是基于SmallTalk-80。1988年NeXT公司发布了OC,他的开发环境和类库叫NEXTSTEP, 1994年NExt与Sun公司发布了标准的NEXTSTEP系统,取名openStep。1996_objective-c特点及应用领域

STM32学习笔记6:TIM基本介绍_stm32 tim寄存器详解-程序员宅基地

文章浏览阅读955次,点赞20次,收藏16次。TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在 72MHz 计数时钟下可以实现最大 59.65s 的定时,59.65s65536×65536×172MHz59.65s65536×65536×721​MHz不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。_stm32 tim寄存器详解

前端基础语言HTML、CSS 和 JavaScript 学习指南_艾编程学习资料-程序员宅基地

文章浏览阅读1.5k次。对于任何有兴趣学习前端 Web 开发的人来说,了解 HTML、CSS 和JavaScript 之间的区别至关重要。这三种前端语言都是您访问过的每个网站的用户界面构建块。而且,虽然每种语言都有不同的功能重点,但它们都可以共同创建令人兴奋的交互式网站,让用户保持参与。因此,您会发现学习所有三种语言都很重要。如果您有兴趣从事前端开发工作,可以通过多种方式学习这些语言——在艾编程就可以参与到学习当中来。在本文中,我们将回顾每种语言的特征、它们如何协同工作以及您可以在哪里学习它们。HTML vs C._艾编程学习资料

三维重构(10):PCL点云配准_局部点云与全局点云配准-程序员宅基地

文章浏览阅读2.8k次。点云配准主要针对点云的:不完整、旋转错位、平移错位。因此要得到完整点云就需要对局部点云进行配准。为了得到被测物体的完整数据模型,需要确定一个合适的坐标系变换,将从各个视角得到的点集合并到一个统一的坐标系下形成一个完整的数据点云,然后就可以方便地进行可视化,这就是点云数据的配准。点云配准技术通过计算机技术和统计学规律,通过计算机计算两个点云之间的错位,也就是把在不同的坐标系下的得到的点云进行坐标变..._局部点云与全局点云配准

python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载-程序员宅基地

文章浏览阅读273次。提取码:0oorGoogle和YouTube由于Python的高可适应性、易于维护以及适合于快速开发而采用它。如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。《Python学习..._零基础学pythonpdf电子书

推荐文章

热门文章

相关标签