飞道的博客

【无人机分配】一种无人机实时最优任务分配模型附matlab代码

271人阅读  评论(0)

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

边界处理:超出边界为离开用户,未超出边界为该时候

最新用户采用泊松分布在指定区域产生新用户

伪代码

1. t=0,输入生成初始用户L(mainxx.m 中1-43)

(mainxx.m中43-51 步骤2,3)

2. 根据1中用户L计算无人机候选位置(one_step.m中2-44)

(Onestep。M中的46-53(步骤3))

3. 蒙特卡洛模拟:

生成决策变量,计算适应度函数,计算最优无人机位置

4. While t

考虑用户行走,更新用户位置(mainxxx.m中56-77)

Mainxx.m中81-87

根据更新的用户,计算候选无人机位置,

蒙特卡洛模拟:

生成决策变量,计算适应度函数,计算最优无人机位置

t=t+1

end

⛄ 部分代码

clc

close all

clear all

disp('无人机优化模型')

%参数准备

%区域用户位置

d1=100; %区域A长度

d2=80; %区域A长度

N=30;%用户个数

C=6;%天线个数

bc=1;%电池损耗/每个内容---假设容量相等 电池消耗相同

Bm=[10 10 10];%无人机容量

%索引位置tuple={content k,UAV m,location q}

height=10;

h_max=20;

delta_d=0.5;%location interval

n1=3;%无人机个数

%discrete the location

%用户位置

%discrete the location

d1a=0:delta_d:d1;

d2a=0:delta_d:d2;

%离散位置

index=[];

for i=1:1:length(d1a)

    for j=1:1:length(d2a)

        index=[index;[d1a(i),d2a(j)]];

    end

end

num_index=size(index,1);%number of location

%新增人群位置计算

%新增人群不可能出现位置

d1a1=[5,d1-5];

d2a1=[5,d2-5];

[len,~]=find((index(:,1)>=d1a1(1) & index(:,1)<=d1a1(2)) & (index(:,2)>=d2a1(1) & index(:,2)<=d2a1(2)));

id_new=setdiff(1:1:size(index,1),len');  %新增用户编号

new_candi=index(id_new',:);%新增人群位置

%随机生成用户

user_index=randperm(num_index,N);

user_location=[];

for i=1:1:length(user_index)

    user_location=[user_location;index(user_index(i),:)];%%N*2

end

%仿真时间T

T=5;%仿真时间T

v=1;%用户行走速度

delta_p=2;%单位时间变化人数

theta_max=2*pi;%用户随机行走方向

best_uav=cell(1,T);

best_task=zeros(1,T);

[x_ind,task]=one_step(user_location,height,h_max,C,N,n1,bc,Bm);  %主程序

best_uav{1,1}=x_ind;

best_task(1,1)=task;

old_ind=x_ind;%设置就得无人机位置

for t=2:1:T

    %更新用户

    new_user_location=[];

    %考虑原始用户行走

    for i=1:1:size(user_location,1) 

      user_location(i,1)=user_location(i,1)+v*cos(random('unif',0,theta_max));

      user_location(i,2)=user_location(i,2)+v*sin(random('unif',0,theta_max));

      %边界更新,如果超出边界 则认为用户离开

      if (user_location(i,1)>d1) | (user_location(i,1)<0) | (user_location(i,2)<0)|(user_location(i,2)>d2)

          continue;%用户离开不管

      else

          new_user_location=[new_user_location;user_location(i,:)]; %用户没离开保留

      end

    end

    %当前时刻新来客户

    num_new=random('poiss',delta_p);

    if num_new==0

        new_user_location=new_user_location;

    else

        new_id=randperm(length(id_new),num_new);

        new_coming=new_candi(new_id',:);

        new_user_location=[new_user_location; new_coming];

    end

    %用户个数更新

    N=size(new_user_location,1);

    %计算当前无人机位置

    [x_ind,task]=one_step(new_user_location,height,h_max,C,N,n1,bc,Bm);  %主程序

    %无人机位置分配--中心服务器向无人机分配无人机更新位置

    x_ind=allot_uav(x_ind,old_ind);

    best_uav{1,t}=x_ind;

    best_task(1,t)=task;

    %我下一时刻用户位置更新

    user_location=new_user_location;%上一时刻用户位置

    old_ind=x_ind;

    if mod(t,20)==0

    figure,

    plot(user_location(:,1),user_location(:,2),'r*')

    xlabel('x')

    ylabel('y')

    title(num2str(t))

    end

end

figure,plot(1:1:T,best_task,'->')

xlabel('T/(min)')

ylabel('Task/(n)')

grid on

ylim([0 40])

Q1=[];Q2=[];Q3=[];

for i=1:1:T

Q1=[Q1,(best_uav{1,i}(1,:))'];

Q2=[Q2,(best_uav{1,i}(2,:))'];

Q3=[Q3,(best_uav{1,i}(3,:))'];

end

figure,

plot3(Q1(1,:),Q1(2,:),Q1(3,:),'r->')

hold on

plot3(Q2(1,:),Q2(2,:),Q2(3,:),'b->')

hold on

plot3(Q3(1,:),Q3(2,:),Q3(3,:),'c->')

xlabel('x')

ylabel('y')

zlabel('height')

grid on

legend('UAV-1','UAV-2','UAV-3')

title('the location of UAV')

⛄ 运行结果

⛄ 参考文献

⛄ Matlab代码关注

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料


转载:https://blog.csdn.net/matlab_dingdang/article/details/128219797
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场