✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
⛄ 内容介绍
相较于一架多功能昂贵的大型无人机,多架异构低成本无人机集群在作战可靠性和复杂环境适应性方面,具有潜在优势。无人机集群任务分配是通过优化为集群中的无人机选择合理的任务,使集群执行任务的收益最大或执行代价最小,高效实时的任务分配是保障集群作战效能最大的重要手段之一。近年来,分布式的协同任务分配技术(无中心网络节点)得到学术界和工业界的广泛关注。但是,针对相关研究大多停留在算法收敛性的理论分析和纯数字仿真验证阶段,算法设计较少考虑实际计算芯片的资源约束;性能验证方面,缺乏计算芯片在环的半实物平台的支撑。针对这两方面不足,本论文进行了如下的研究。首先,针对无人机-单任务条件下的分配问题,研究了分配算法的目标模型和约束模型,以及基于分布式拍卖算法的求解方法,对算法收敛性做了分析,并进行了仿真验证与分析;针对需要多个无人机一起执行同一个任务的场景,修正了问题模型,研究了基于合同网协议的求解方法,该方法的核心思想是在无人机集群内局部执行"招标-竞标-中标"的流程,对合同网协议进行了仿真分析。针对无人机-多任务分配的场景,研究了基于CBBA算法的求解流程,并进行了仿真分析。采用无人机动态存储任务序列的策略;并在无人机间互通信息,以调整当前任务序列,进而避免任务冲突。
⛄ 部分代码
%计算投标值
function [CBBA_Data,bestIdxs,taskTimes,feasibility] = CBBA_ComputeBids(CBBA_Params,CBBA_Data,agent,tasks,feasibility)
%判断路径是否已满,如果满了就不用添加任务
L = find(CBBA_Data.path == -1);
if(isempty(L))
return;
end
%初始化任务的投标,最佳ID,时间
CBBA_Data.bids = zeros(1,CBBA_Params.M);
bestIdxs = zeros(1,CBBA_Params.M);
taskTimes = zeros(1,CBBA_Params.M);
for m = 1:CBBA_Params.M
%检查代理和任务类型是否对应
if(CBBA_Params.CM(agent.type,tasks(m).type) > 0 )
%检测路径中是否包含当前的任务m
if(isempty(find(CBBA_Data.path(1,1:L(1,1)-1) == m, 1)))
bestBid = 0;
bestIndex = 0;
bestTime = -1;
%在其他任务位置j插入任务m,判断能否生成更好的路径
for j = 1:L(1,1)
%判断是否有新的可行的路径
if(feasibility(m,j) == 1)
skip = 0;
% if(CBBA_Params.CM(agent.type,tasks(m).type) == 1)
% if(CBBA_Data.path(1,j-1) >= 7 && CBBA_Data.path(1,j-1) <= 13)
% CBBA_Data.path(1,j) = [];
% CBBA_Data.times(1,j) = [];
% taskNext = [];
% timeNext = [];
% else
% taskNext = tasks(CBBA_Data.path(j));
% timeNext = CBBA_Data.times(j);
% end
% elseif(CBBA_Params.CM(agent.type,tasks(m).type) == 2)
% if(CBBA_Data.path(1,j-1) >= 7 && CBBA_Data.path(1,j-1) <= 13)
% taskPrev = tasks(CBBA_Data.path(j-1));
% timePrev = CBBA_Data.times(j-1);
% end
% end
%是否把m插到开头
if(j == 1)
taskPrev = [];
timePrev = [];
else
taskPrev = tasks(CBBA_Data.path(j-1));
timePrev = CBBA_Data.times(j-1);
end
%是否把m插入到最后
if(j == L(1,1))
taskNext = [];
timeNext = [];
else
taskNext = tasks(CBBA_Data.path(j));
timeNext = CBBA_Data.times(j);
end
%调用Scoring_CalcScore功能包
[score, minStart ,maxStart] = Scoring_CalcScore(CBBA_Params,agent,tasks(m),taskPrev,timePrev,taskNext,timeNext);
if(minStart > maxStart)
skip = 1;
feasibility(m,j) = 0;
end
%保存最佳数值和任务的位置
if(~skip)
if(score > bestBid)
bestBid = score;
bestIndex = j;
bestTime = minStart;
end
end
end
end
%保存最佳的出价信息
if(bestBid > 0)
CBBA_Data.bids(1,m) = bestBid;
bestIdxs(1,m) = bestIndex;
taskTimes(1,m) = bestTime;
end
end
end
end
⛄ 运行结果
⛄ 参考文献
[1]林晨. 面向无人机集群任务分配的分布式算法研究[D]. 电子科技大学, 2019.
[2]陈华毅. 基于智能优化算法的多无人机协同航迹规划研究[D]. 中国矿业大学(江苏).