无人机分配基于matlab共识的捆绑算法CBBA带时间窗的多无人机多任务调度含Matlab源码 2215期
Posted 海神之光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无人机分配基于matlab共识的捆绑算法CBBA带时间窗的多无人机多任务调度含Matlab源码 2215期相关的知识,希望对你有一定的参考价值。
⛄一、 带时间窗的多UAV航迹规划问题的两阶段启发式算法
本文采用一种两阶段启发式算法用于问题求解, 算法的第一阶段利用“最迟完成服务节点优先” (Latest-Service-Finished-First, 简称LSFF) 算法求得问题的初始解, 第二阶段利用模拟退火算法 (SA算法) 改善初始解, 获得“满意解”。
1 LSFF算法
LSFF算法是一种逆向计算的迭代算法, 其基本思想是:从返回机场开始, 逆向迭代计算从待服务节点飞往后继节点的最迟动身 (完成物资投放) 时间, 并选择最晚可服务节点优先服务, 重复上述过程直至全部节点均被服务为止;这里只接受可行解。
假设当前后续节点为succ, 其最迟抵达时间为maxatsucc, 待服务节点i的最迟动身时间为maxdepti, 则LSFF算法的流程可描述如下:
步骤1:创建空航行线路为当前航迹, 令succ=0, maxatsucc=l0;
步骤2:计算所有的maxdepti=maxmaxatsucc-ti, succ, lsucc+stsucc, 并进行约束条件校验, 从可行节点中选择满足maxdeptk=maxmaxdepti的节点k作为优先服务节点;
步骤3:将节点k插入至航段间<0, succ>, 令succ=k, maxatsucc=maxdeptk-stk, 更新节点k的服务标志;
步骤4:重复步骤2、步骤3, 直至无节点可服务为止。若仍有节点未服务, 创建新路径, 令succ=0, maxatsucc=l0, 转步骤2;否则转步骤5;
步骤5输出初始解sinit。
从上述描述显见, LSFF算法是一种“头插式”算法, 新节点的插入位置必定是航迹的第一条航段之间。由此可将时间窗约束的处理方法修正如下:计算UAV从机场出发抵达新节点i的最早时间minati=e0+t0i, 若maxdepti同时满足式 (14) 、式 (15) , 则时间窗约束满足, 否则不满足。
2 SA算法
利用LSFF算法产生初始解后, 进一步利用SA算法改进初始解, 下面分别对SA算法的邻域结构和算法流程进行描述。
(1) 邻域结构
本文采用两种邻域变换:remove操作和insert操作来构造邻域, 如图1所示。
(2) 算法流程
步骤1:设置起始温度btemp和etemp, 设置温度迭代步长tstep, 令当前温度temp=btemp, 令当前解x=sinit, 当前最优解s=sinit, 初始化内循环次数maxcnt;
步骤2:如果temp>etemp, 重复执行步骤3~步骤5;
步骤3:令内循环次数cnt=1, 重复步骤4, 直至cnt=maxcnt为止;
步骤4:随机选择交换节点node, 利用remove和insert操作, 将其插入任一条可行路径, 产生邻域解x’;令f (·) 表示解·对应的目标函数值, rand_max为随机数的上限, 比较f (x’) 和f (x) , 如果f (x’) <f (x) , 则令x=x’, 如果f (x’) <f (s) , 则令s=x’;如果f (x’) ≥f (x) , 则计算接受概率Pos=exp (- (f (x’) -f (x) ) /temp) , 并产生[0, rand_max]间的随机数rand, 如果满足Pos≥rand/rand_max, 则令x=x’;cnt=cnt+1;
步骤5:令temp=temp*tstep;
步骤6:输出满意解s。
⛄二、部分源代码
%CBBA主要功能
function [CBBA_Data,Total_Score] = CBBA_Main(agents,tasks,Graph)
%初始化CBBA的参数
CBBA_Params = CBBA_Init(length(agents),length(tasks));
for n = 1:CBBA_Params.N
CBBA_Data(n).agentID = agents(n).id;%代理人id
CBBA_Data(n).agentIndex = n;%代理的索引
CBBA_Data(n).bundle = -ones(1,CBBA_Params.M);%初始化任务包
CBBA_Data(n).path = -ones(1,CBBA_Params.M);%初始化路径
CBBA_Data(n).times = -ones(1,CBBA_Params.M);%初始化时间戳
CBBA_Data(n).scores = -ones(1,CBBA_Params.M);%初始化分值
CBBA_Data(n).bids = zeros(1,CBBA_Params.M);%初始化投标值
CBBA_Data(n).winners = zeros(1,CBBA_Params.M);%初始化获胜者列表
CBBA_Data(n).winnerBids = zeros(1,CBBA_Params.M);%初始化获胜任务列表
end
%初始化工作变量
T = 1;%当前的迭代次数
t = zeros(CBBA_Params.N,CBBA_Params.N);%初始化获胜者winner的时间矩阵
lastTime = T-1;%上一次时间
doneFlag = 0;%完成标志
%CBBA主回路
while(doneFlag == 0)
%代理之间进行交流,就中标代理和投标价值达成共识
[CBBA_Data,t] = CBBA_Communicate(CBBA_Params,CBBA_Data,Graph,t,T);
%构建任务包,在各个代理上运行CBBA
for n = 1:CBBA_Params.N
[CBBA_Data(n), newBid] = CBBA_Bundle(CBBA_Params, CBBA_Data(n), agents(n), tasks);
%更新最后一次情况的改变
if(newBid)
lastTime = T;
end
end
%确保任务分配已经完成
if(T - lastTime > CBBA_Params.N)
doneFlag = 1;
elseif(T - lastTime > 2*CBBA_Params.N)
disp(‘由于通信错误,算法未完成’);
doneFlag = 1;
else
T = T + 1;
end
end
⛄三、运行结果
⛄四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]马华伟,王天晓,胡笑旋.带时间窗的多无人机航迹规划两阶段启发式算法[J].火力与指挥控制. 2014,39(08)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
以上是关于无人机分配基于matlab共识的捆绑算法CBBA带时间窗的多无人机多任务调度含Matlab源码 2215期的主要内容,如果未能解决你的问题,请参考以下文章
任务分配基于matlab蚁群算法无人机任务分配含Matlab源码 1265期
任务分配基于matlab蚁群算法无人机任务分配含Matlab源码 1265期
优化分配基于matlab模拟退火策略优化免疫算法求解无人机协同优化分配问题含Matlab源码 1978期