ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

多无人机多目标任务分配:问题定义、建模方法与算法选型

多无人机多目标任务分配:问题定义、建模方法与算法选型 多无人机多目标任务分配问题我在研究生阶段啃了整整三个月的文献才终于把这块硬骨头啃出点味道来。这篇笔记是系列整理的第一篇重点梳理问题定义、建模方式和主流求解算法顺带记录我自己复现和避坑的经验。如果你正准备进入这个方向或者被“多对多分配”这种组合爆炸问题折磨过这篇内容应该能帮你少走很多弯路。1. 问题定义多无人机多目标任务分配到底在解什么1.1 任务分配的数学描述先把问题说得朴素一点现在有一群无人机它们的编号集合是 U {U1, U2, ..., Un}这些无人机可能是异构的有的飞得快但载荷小有的续航长但速度慢同时又有一批目标任务点编号集合是 T {T1, T2, ..., Tm}每个任务点有自己的类型、权重、时间窗、所需执行能力。任务分配要做的就是决定“哪架无人机、在什么时间、按什么顺序去执行哪些任务”。从数学角度看这个问题的标准形式可以写成min J w1 * Σ cost_i w2 * Σ time_i w3 * Σ risk_i s.t. 每架无人机的能力约束 每个任务的执行次数约束 时间窗约束 通信约束这里的 cost、time、risk 都是归一化后的指标w1、w2、w3 是权重系数代表指挥员对不同目标的偏好。一般文献里用的目标函数还包括总航程最短、任务完成价值最大、资源消耗最均衡等等。实际工程中很少只优化单一指标所以大部分论文实际做的是“加权多目标优化”然后再用帕累托前沿去讨论多组解的折中关系。我自己的理解是任务分配不像普通TSP旅行商问题那样只求一条最短回路它更接近“带多重约束的Pickup and Delivery Problem”和“多旅行商问题”的合体。每架无人机对应一个旅行商每个任务点可能被不止一架无人机覆盖也可能多架无人机协同完成同一个复合任务比如先侦察再打击这就产生了“任务拆分”和“任务协同”的额外维度。这类问题几乎没有解析最优解绝大多数时候只能靠启发式算法和分布式协商去逼近。1.2 与单机任务规划的区别很多人刚开始接触时会混淆“任务分配”和“航迹规划”。航迹规划解决的是“给定起点和终点怎么走最安全、最省油”任务分配解决的是“哪些任务给谁做以及做任务的顺序是什么”。两者虽然经常串联使用但思考层面完全不同。单机任务规划的场景里只有一架无人机、一组按一定顺序排列的任务核心是求解一条满足约束的飞行路径。这时的决策变量是连续或者离散的点序列规模小常用动态规划、A*或者RRT就能处理。但转到多无人机多目标任务分配时问题结构变成“无人机的组合×任务子集的组合×执行顺序的组合”这是一个典型的组合爆炸问题。假设有8架无人机和12个任务点即使不考虑协同和拆分粗略排列组合数量也远超过常规暴力搜索能处理的范围。更麻烦的是多无人机场景下的约束通常是动态出现的。比如无人机A在飞行途中电量告急原本分配给它的任务需要重新调配或者无人机B临时被敌方火力威胁需要立即改变航线。这些动态变化要求分配算法不能是一次性离线算完就完事而是要在运行中不断循环“感知-分配-执行-再分配”的闭环。这也是“在线任务重分配”成为近些年研究热点的原因。所以我做综述的时候习惯把问题首先按“静态/动态”“集中式/分布式”两个维度分类再往下看算法。2. 主流建模方式从指派问题到市场机制2.1 基于分布式拍卖的典型流程多无人机任务分配的建模方式最经典的源头可以追溯到“指派问题”。举个例子如果有4架无人机和4个任务且每个任务只需要1架无人机完成那这就是一个标准的线性指派问题直接用匈牙利算法就能得到全局最优解。但实际工程很少这么理想因为任务数通常不等于无人机数任务之间存在优先级无人机的载荷也不一样于是必须引入更复杂的模型。我强烈推荐先弄懂分布式拍卖算法Auction Algorithm因为它是理解后续很多方法包括一致性束算法CBBA的基础。拍卖算法的直观逻辑特别像拍卖场每个任务被当成“拍卖品”每架无人机根据自己的边际收益对任务出价出价最高的无人机获得该任务。为了协调冲突无人机之间只需要交换各自的出价和胜者信息最后收敛到一组无冲突的分配结果。一个典型的分布式拍卖流程可以拆成四步初始化每架无人机维护一个本地任务列表、一个价格向量以及一个胜者列表。初始时这些列表可以是空的。出价阶段每架无人机根据本地信息计算出自己对每个未分配任务的“边际收益”。边际收益可以定义为“如果把这个任务插进我当前任务序列的某个位置总目标函数能改善多少”。选边际收益最大的任务提交一个出价。冲突消解无人机之间通过通信交换出价信息。如果发现同一任务被多架无人机出价比较谁的出价高价高者暂时获得该任务落选者回收自己的出价并继续寻找其他任务。终止判断当所有无人机都无法找到边际收益为正的任务时分配结束输出结果。这套流程的理解价值在于它把全局最优化问题分解成了大量局部决策无人机之间只需通信“出价”和“胜者”这两类信息不要求所有信息集中到中心节点因此在通信拓扑发生变化时也能继续运行。很多团队后来把拍卖算法和一致性协议结合起来就是为了解决通信受限情况下的冲突消解问题。我在复现这类算法时最大的体会是“边际收益的计算不能光看收益还要考虑插入顺序”因为任务序列不同边际收益的计算结果完全不同。这个细节如果没处理好算法收敛后任务序列的不合理性会很突出。2.2 与其他优化模型的对比除了拍卖模型任务分配领域还有几类常见建模方式我把它们整理成了下面几张“面孔”混合整数线性规划MILP模型把任务分配建模成二进制变量的线性规划问题用CPLEX/Gurobi这类求解器可以得到小规模问题的全局最优解。优点是解质量有保证缺点是计算量随变量数量增长太快一般只适合离线或者小规模实时场景。马尔可夫决策过程MDP/部分可观察马尔可夫决策过程POMDP模型把任务分配看作序贯决策问题用强化学习或动态规划求解。适合处理不确定环境和动态威胁但真实规模下维度灾难非常严重。市场机制/合同网模型Contract Net Protocol把任务分配看作“招标-投标-中标”过程。有些任务管理者发出招标信息无人机们根据自身状态提交“执行条件”管理者选择最合适的投标者。这种方式直观、易实现但缺点是管理者节点容易成为通信瓶颈且对动态环境的响应速度一般。图论与匹配模型把无人机与任务建模成二分图用匹配算法求最大权重匹配。适合解决“一对一”或“一对多”的简单场景扩展性不足。我用表格简单对比一下建模方式优点缺点适用场景拍卖模型分布式、通信量小、可在线重分配解质量对出价函数敏感动态任务、通信受限MILP可求全局最优规模受限、需中心化计算小规模离线规划MDP/POMDP显式建模不确定性维度爆炸、难求解单机或极少量无人机合同网灵活、易实现有中心节点瓶颈中小规模静态分配图匹配理论成熟、求解快模型表达能力弱一对一、一对多固定匹配读到这里你应该能感觉到真实的多无人机多目标任务分配并不是“一种模型打天下”而是根据任务性质、通信条件、实时性要求混合采用多种建模思路。综述笔记里最重要的工作就是把这些模型各自的前提假设和适用边界画清楚否则很容易出现“仿真里跑得很好真机上完全不是一回事”的情况。3. 算法选型求解这类NP难问题的几条路线3.1 集群智能方法遗传算法与粒子群任务分配问题通常被证明为NP难这意味着在输入规模变大时精确算法基本无法在有限时间内给出最优解。实战中大家更常用的是各种启发式算法其中“集群智能”是热度非常高的一族。**遗传算法GA**用来做任务分配并不复杂关键在编码方式。最常见的编码方法是“基于任务排序的整数编码”。假设有3架无人机6个任务你就设计一段长度为6的基因串每个基因位上的数字代表执行该任务的无人机编号同时再用另一个数组保存任务执行顺序。这样就能保证一个基因唯一对应一个可行的任务序列。适应度函数可以直接用目标函数也就是“总航程惩罚项”如果某个解违反了时间窗约束就给它加上一个很大的惩罚值让它在进化过程中被自然淘汰。我在复现遗传算法时发现真正影响效果的不是交叉变异算子而是初始种群的生成方式。如果一开始全部用随机生成很容易导致大量不可行解算法要花非常多代才能把可行区域“捞”回来。更聪明的做法是先用贪心算法生成一部分较优个体再让它们参与后续进化。这个“用启发式解做初始种群的种子”的小技巧能让收敛速度提升一个量级。**粒子群算法PSO**相比遗传算法更贴合连续优化但任务分配是离散的组合问题所以通常需要把PSO改成分离散版本。常见做法是把粒子的位置向量映射成任务分配矩阵比如粒子每一维的数值落在[0, n)区间向下取整就能得到无人机编号。不过这种映射很容易造成多个粒子对应同一个无效解需要额外的修正机制。我的经验是PSO在任务规模较小比如10架无人机、20个任务以内时速度快、效果也可以接受但任务一多它的局部搜索能力会明显弱于遗传算法和禁忌搜索。**蚁群算法ACO**也经常被用到它天然适合处理“任务顺序”这类排列问题。把每个任务看成图上的节点用信息素浓度引导无人机依次选择下一次要执行的任务。但ACO在多无人机场景下很容易陷入“早熟”因为信息素衰减参数一旦设置不好算法会过分集中在局部最优路径上。如果要用ACO我建议配合2-opt局部搜索算子使用每轮迭代后对每个解做一次邻域搜索对所有解的质量提升非常明显。3.2 一致性束算法CBBA常见实现细节如果说近十年分布式任务分配领域哪个算法影响力最大CBBA绝对排得上号。CBBA全称Consensus-Based Bundle Algorithm它把“拍卖机制”和“一致性协议”结合起来既能处理多无人机对多任务的争抢又能适应通信距离受限、通信拓扑不固定的情况。我在做项目时最常用的就是CBBA它的整体框架可以概括为两阶段循环束构建阶段Bundle Construction每架无人机维护一个“束”也就是它自认为要执行的任务序列。每轮迭代中无人机计算把新任务插入束中某个位置能够增加的边际收益选择增量最大的任务加入束中并对它出价。冲突消解阶段Consensus无人机之间共享各自的出价向量“胜者”信息和“胜者价格”列表。如果发现邻居无人机对某个任务的出价更高那么本机就让出该任务如果发现冲突但双方信息不一致就利用时间戳和节点编号来消解分歧。CBBA的代码实现非常考验细节。有几个点我必须提醒大家第一出价函数需要满足“递减边际收益”性质否则算法无法保证收敛率。也就是说随着束中任务越来越多新增任务带来的边际收益应该逐步下降。现实中任务间可能存在强耦合比如两个任务必须由同一架无人机配合执行这就会破坏递减性。处理办法是预先做任务聚类把强耦合任务打包成复合任务再参与分配。第二通信网络的时序管理是关键。很多复现CBBA翻车的场景不是算法本身错了而是节点之间的消息发送和接收顺序没有处理好。一般的做法是给每个消息打上时间戳每次收到消息后先更新本机维护的“胜者时间表”再用这个时间表去决定是否响应出价。我在Matlab里模拟时特意把通信延迟建模成了固定延迟随机抖动结果发现CBBA仍能稳定收敛但收敛轮数明显增加这在实际中值得注意。第三CBBA默认“每架无人机最多执行K个任务”K的选取直接影响解质量。如果K设置过大单架无人机任务束会很长导致部分无人机超载反而浪费资源。较好的做法是在任务分配前先做一个粗略的“任务需求·无人机能力”匹配估算出合理的K范围然后跑多组K值对比。例如我有一次项目里8架无人机要处理28个任务K4时总体任务完成价值最高K5时虽然完成了更多任务但续航超限整体方案反而不可行。CBBA的好处是通信负载低、可扩展性强很适合大规模异构无人机群。但它也不是万能的它天然不擅长处理“任务间存在严格时序要求”的场景。如果某个任务必须等另一个任务完成后才能开始需要额外引入时序约束预处理或者在收益函数中加入“奖励扰动量”来引导顺序。这一块目前学术界还在不断扩展很多新工作都是在CBBA基础上加时序和协同约束。4. 我在复现和整理这类综述时的几点经验4.1 仿真参数设置要均匀做多无人机任务分配研究最大的坑往往不是算法本身而是参数对比不公平。很多人在仿真时不同算法用不同迭代次数或者对比较算法没有认真调参导致实验结果“看起来我的算法最好”其实是占了不公平的便宜。我建议在综述笔记里设立一套固定的基准参数模板无人机数量、任务数量、地图尺寸、通信半径等环境参数保持一致所有比较算法使用相同的最大迭代次数或运行时间上限比如统一跑5秒而不是统一迭代1000次每个算法至少跑30次蒙特卡洛仿真报告均值和方差而不是只贴一次最好结果设置至少两种任务规模比如小规模5机10任务和大规模20机80任务分别看算法的收敛速度和解质量。这套模板不是为了凑字数的而是为了保证结论可信。我自己吃过亏之前在对比遗传算法和蚁群算法时遗传算法用了500代而蚁群只用了100代得到的结果自然严重偏斜。后来把所有算法的运行时间统一到相同阈值算法排名直接反转了。这个坑希望大家一定不要踩。4.2 评价指标要配套任务分配的评价指标不能只盯“目标函数值”一个数那样很容易掩盖算法的真实行为。我在综述笔记里常用的评价指标有4个完成任务总价值Total Mission Value衡量整体收益是最直观的指标。平均任务完成率Task Completion Ratio已执行任务数/总任务数用来反映资源紧张的场景下算法能保住多少任务。单机最大负载均衡度Load Balance Index常用公式1 - max_load / avg_load或标准差来表示如果一架无人机被塞了太多任务其他无人机却闲着系统的鲁棒性会很差。计算时间Computation Time包含算法收敛时间和通信时间分布式算法的计算时间不能只算本机CPU时间还得加上通信往返的仿真时间。我见过很多论文只报第一个指标不报完成率和均衡度然后宣称“显著优于对比算法”。但把后三个指标补上后其“优越性”往往会大打折扣。特别是负载均衡度在动态环境中直接影响无人机群的整体存活能力。你总不希望某架无人机为了多完成任务而耗尽电量最后导致整个系统没有了备份力量吧。所以在设计实验时一定要把这几个指标同时看。4.3 边界条件与通信问题多无人机任务分配里最容易被忽略但最致命的是边界条件。所谓边界条件包括无人机的留空时间、最大转弯半径、禁飞区约束、电子干扰区域等。很多仿真模型把这些条件过于简化导致算法在实际部署时会出现“规划路线好看但飞机根本飞不过去”或者“以为飞得过去实际电量不够”的尴尬。我个人的习惯是在做任务分配之前先用一个简易的“可达性分析”去筛掉一批不合理的任务-无人机配对。具体做法是对每一对无人机-任务用Bresenham直线或者简化动力学模型估算飞行距离和时间再对比无人机剩余能量生成一个“可行分配矩阵”。这个矩阵会作为后续分配算法的输入硬约束强行排除那些不可达的匹配。虽然这一步会增加预处理时间但能显著提升整体方案的工程可行性。通信问题同样重要。分布式任务分配算法依赖无人机之间的信息交互但真实环境下通信带宽有限、距离影响信号强度、GPS拒止等场景也经常出现。综述笔记里不能忽略对“通信拓扑动态变化”的仿真。我常用一个简单模型每架无人机只与通信半径R内的邻居通信仿真中让无人机的飞行位置实时改变导致邻居关系不断刷新。这种动态拓扑下的算法性能才更接近实战。凡是只靠全连通网络验证的算法工程落地大概率要打折扣。其实写综述笔记最大的价值不是把别人的方法罗列一遍而是帮自己梳理清楚“现有方法分别在解决什么问题、遗留了什么问题”。我在整理多无人机多目标任务分配这个方向时最大的体会是离开具体的任务场景和约束去谈算法优劣完全是耍流氓。明明任务规模只有10个非要去上一个复杂的分布式共识算法那是杀鸡用牛刀反过来任务规模上百、通信不稳定还坚持用集中式MILP那就很难满足实时性要求。所以读者在看任何文献时建议先问自己四个问题这是静态还是动态场景通信条件是否理想任务之间有没有时序耦合评价指标是不是均衡考虑了完成率、负载和计算代价问完这四个问题再优秀的算法也能很快判断出它在你的场景下到底适不适合。后续我计划在这篇笔记的基础上继续整理任务分配的在线重分配策略以及融合学习与规划的新思路到时候再和大家细聊。
返回列表