赞
踩
博主简介:热爱科研的Matlab仿真开发者一枚。
擅长领域:擅长智能算法路径优化、神经网络预测、图像处理、语音处理等多种领域Matlab仿真。
MATLAB仿真合作可加 v:19563987482
针对边缘网络环境下多人机之间存在计算负载不均的情况,联合考虑多无人机任务分配、计算资源分配和无人机飞行轨迹,研究多无人机间协作的智能任务卸载方案,采用分布式CBBA算法求解。
%该软件包实现了基于共识的捆绑算法(CBBA),这是一种分散的基于市场的协议。
%为异构代理网络上的多代理多任务分配问题提供了可证明的良好近似解决方案。
%当前版本支持具有有效性时间窗口的任务、异构代理任务兼容性要求以及平衡任务奖励和成本的评分功能。
close all;
clear
%初始化全局变量
WORLD.CLR = rand(100,3);
WORLD.XMIN = -5;
WORLD.XMAX = 5;
WORLD.YMIN = -5;
WORLD.YMAX = 5;
WORLD.ZMIN = 0.0;
WORLD.ZMAX = 5;
WORLD.MAX_DISTANCE = sqrt((WORLD.XMAX - WORLD.XMIN)^2 + …
(WORLD.YMAX - WORLD.YMIN)^2 + …
(WORLD.ZMAX - WORLD.ZMIN)^2);
%定义代理和任务
%CBBA参数定义中的代理和任务类型
CBBA_Params = CBBA_Init(0,0);
%初始化代理可能用到的参数
agent_default.id = 0; %代理的ID
agent_default.type = 0; %代理的类型
agent_default.avail = 0; %代理的可行性
agent_default.clr = []; %用于绘图
agent_default.x = 0;
agent_default.y = 0;
agent_default.z = 0; %代理的x,y,z坐标位置
agent_default.nom_vel = 0; %代理的巡航速度
agent_default.fuel = 0; %代理执行任务的代价/m
%初始化任务可能用到的参数
task_default.id = 0; %任务的ID
task_default.type = 0; %任务的类型
task_default.value = 0; %任务的价值
task_default.x = 0;
task_default.y = 0;
task_default.z = 0; %任务的x,y,z坐标位置
task_default.start = 0; %任务的开始时间
task_default.duration = 0; %任务的持续时间
task_default.end = 0; %任务的结束时间
task_default.lambda = 0.1; %任务指数折扣
%设置默认代理
%QUAD
agent_quad = agent_default;
agent_quad.type = CBBA_Params.AGENT_TYPES.QUAD; %设置代理类型
agent_quad.nom_vel = 2; %quad类型代理的巡航速度
agent_quad.fuel = 1; %quad类型代理执行任务的代价
%CAR
agent_car = agent_default;
agent_car.type = CBBA_Params.AGENT_TYPES.CAR;
agent_car.nom_vel = 2;
agent_car.fuel = 1;
%FLY
agent_fly = agent_default;
agent_fly.type = CBBA_Params.AGENT_TYPES.FLY;
agent_fly.nom_vel = 2;
agent_fly.fuel = 1;
%设置默认任务
%SCOUT
task_scout = task_default;
task_scout.type = CBBA_Params.TASK_TYPES.SCOUT; %任务类型
task_scout.value = 30; %任务价值
task_scout.start = 0; %任务开始时间
task_scout.duration = 5; %任务持续时间
task_scout.end = 100; %任务结束时间
%STRIKE
task_strike = task_default;
task_strike.type = CBBA_Params.TASK_TYPES.STRIKE;
task_strike.value = 50;
task_strike.start = 0;
task_strike.duration = 15;
task_strike.end = 100;
%ASSESSMENT
task_assessment = task_default;
task_assessment.type = CBBA_Params.TASK_TYPES.ASSESSMENT;
task_assessment.value = 15;
task_assessment.start = 0;
task_assessment.duration = 10;
task_assessment.end = 100;
%定义场景
N = 12; %代理人数量
M = 33; %任务数量
%设置随机的代理
for n = 1:N
if(n/N <= 1/4)
agents(n) = agent_quad;
elseif(1/4 < n/N && n/N < 3/4)
agents(n) = agent_car;
else
agents(n) = agent_fly;
end
%设置代理参数
agents(n).id = n;
agents(n).x = rand(1)(WORLD.XMAX - WORLD.XMIN) + WORLD.XMIN;
agents(n).y = rand(1)(WORLD.YMAX - WORLD.YMIN) + WORLD.YMIN;
agents(n).clr = WORLD.CLR(n,:);
end
%设置随机任务
for m = 1:M
if(m/M <= 1/3)
tasks(m) = task_scout;
elseif(m/M > 1/3 && m/M <=2/3)
tasks(m) = task_strike;
else
tasks(m) = task_assessment;
end
%设置任务参数
tasks(m).id = m;
if tasks(m).type == 1
tasks(m).start = rand(1)20;
elseif tasks(m).type == 2
tasks(m).start = tasks(m-M/3).start + tasks(m-M/3).duration + rand(1)10;
else
tasks(m).start = tasks(m-M/3).start + tasks(m-M/3).duration + rand(1)10;
end
tasks(m).end = tasks(m).start + tasks(m).duration;
for j = 1:M/3
tasks(j).x = rand(1)(WORLD.XMAX - WORLD.XMIN)+ WORLD.XMIN;
tasks(j).y = rand(1)(WORLD.YMAX - WORLD.YMIN)+ WORLD.YMIN;
tasks(j).z = rand(1)(WORLD.ZMAX - WORLD.ZMIN)+ WORLD.ZMIN;
tasks(j+M/3).x = tasks(j).x;
tasks(j+M/3).y = tasks(j).y;
tasks(j+M/3).z = tasks(j).z;
tasks(j+2M/3).x = tasks(j).x;
tasks(j+2M/3).y = tasks(j).y;
tasks(j+2*M/3).z = tasks(j).z;
end
end
%初始化通信图和直径
Graph = ~eye(N);
%运行CBBA
tic
[CBBA_Assignments,Total_Score] = CBBA_Main(agents, tasks, Graph);
toc
fprintf(‘Total_Score = %d\n’,Total_Score);
PlotAssignments(WORLD, CBBA_Assignments, agents, tasks, 1);
MATLAB2019a
参考文献:
[1].基于顺序扩展一致性包算法的多无人机分布式任务分配_高程
[2].考虑时间窗约束的多无人机任务分配_魏兆恬
[3].考虑时序约束的多智能体协同任务分配_颜骥
完整代码 可点击博主主页,打开资源搜索对应文章标题。该资源有三个视频讲解可供大家参考理解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。