【DE三维路径规划】基于matlab改进的差分算法多无人机协同三维路径规划【含Matlab源码 169期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、无人机简介

0 引言
随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化、完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下救援的白鲨MIX水下无人机等,决定飞行器性能主要是内部的飞控系统和外部的路径规划问题。就路径问题而言,在具体实施任务时仅靠操作员手中的遥控器控制无人飞行器执行相应的工作,可能会对操作员心理以及技术提出极高的要求,为了避免个人操作失误,进而造成飞行器损坏的危险,一种解决问题的方法就是对飞行器进行航迹规划。
飞行器的测量精度,航迹路径的合理规划,飞行器工作时的稳定性、安全性等这些变化对飞行器的综合控制系统要求越来越高。无人机航路规划是为了保证无人机完成特定的飞行任务,并且能够在完成任务的过程中躲避各种障碍、威胁区域而设计出最优航迹路线的问题。

1 常见的航迹规划算法
在这里插入图片描述
图1 常见路径规划算法
文中主要对无人机巡航阶段的航迹规划进行研究,假设无人机在飞行中维持高度与速度不变,那么航迹规划成为一个二维平面的规划问题。在航迹规划算法中,A算法计算简单,容易实现。在改进A算法基础上,提出一种新的、易于理解的改进A算法的无人机航迹规划方法。传统A算法将规划区域栅格化,节点扩展只限于栅格线的交叉点,在栅格线的交叉点与交叉点之间往往存在一定角度的两个运动方向。将存在角度的两段路径无限放大、细化,然后分别用两段上的相应路径规划点作为切点,找到相对应的组成内切圆的圆心,然后作弧,并求出相对应的两切点之间的弧所对应的圆心角,根据下式计算出弧线的长度
在这里插入图片描述
式中:R———内切圆的半径;
α———切点之间弧线对应的圆心角。

⛄二、差分进化算法简介

1 差分进化算法的介绍
差分进化算法(Differential Evolution, DE)是一种基于群体差异的启发式随机搜索算法,该算法是由R.Storn和K.Price为求解Chebyshev多项式而提出的。DE算法也属于智能优化算法,与前面的启发式算法,如ABC,PSO等类似,都属于启发式的优化算法。DE算法是我在一篇求解盒子覆盖问题论文中使用的一种优化算法。

2 差分进化算法的流程
(1)初始化种群
(2)变异
(3)交叉
(4)选择
在这里插入图片描述
3 差分进化的具体步骤
对于无约束优化问题
在这里插入图片描述
在这里插入图片描述
4、选择
在DE中采用的是贪婪选择的策略,即选择较优的个体作为新的个体。

⛄三、部分源代码

%清空环境
clear;

%定义地形对象
cTerrain = CTerrain3D;
%定义威胁区对象
cTread = CTread;

%调整为统一的图形环境
figure(‘Renderer’,‘opengl’);

%绘制地形和威胁区
cTerrain.draw();
cTread.draw();

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%数据形式说明
%xs 初始点位置集合,三维点集
%yt 目标点位置集合,三维点集
%MxsEna 能力矩阵,集合中的二元组表示最大最小飞行速度
%MxsDIs 最大航程矩阵,集合中的值表示UAV最大可飞的距离
%MytTOrd 任务点间的时序坐标,要求尽量在前面的先执行

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调用目标分配算法
%AssignType表示不同的模型,1, N=M; 2, N>M; 3, N<M
%Key表示算法执行次数, 0,执行一次,1,执行多次
AssignType =1;
Key = 0;

%时间测试
Time = cputime;

%% 第一种情况的实验
if AssignType == 1
%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%
xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;];
yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
70 181 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 128 156 12;];

MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
    % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
    0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];

MxsDis=[%400 700 650 500 700 900 450 610 400 700
    %650 500 700 900 450 610 700 900 450 610
    500 700 300 350 700 900 450 610 450 610];


ytW = [%1 3 4 2 1 1 3 2 1 2
    %3 2 1 3 2 1 2 3 2 1
    1 1 1 1 1 1 1 1 1 1];

MytTOrd=[3 4; 5 2; 6 8; 7 4;];

%引入新的协同矩阵,最大起始时间矩阵
Twait = [];
Twindow=[];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if Key == 0
    
    
    %%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%
    %调用目标分配算法,并取得解和相关数据,计算算法耗费时间
    %定义目标分配算法对象
    DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);
    % MC = Cal1.GetMcost();
    %Cal1 = CallocationTargetOld1(cTerrain);
    %标签显示文字
    xlabel('X/km')
    ylabel('Y/km')
    zlabel('Z/km')
    %DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
    %执行run并返回结果集
    t1 = cputime;
    [solU solT solC solF ] = DDE1.run();
    Time = cputime -t1;
    
    %         %结果
    solU
    solT
    solC
    solF
    Time
    
    
else if Key == 1
        for i=1:10
            DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
            % MC = Cal1.GetMcost();
            %Cal1 = CallocationTargetOld1(cTerrain);
            %标签显示文字
            xlabel('X/km')
            ylabel('Y/km')
            zlabel('Z/km')
            %DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
            %执行run并返回结果集
            t1 = cputime;
            [solU solT solC solF ] = DDE1.run();
            solu(i,:) = solU;
            solt(i,:) = solT;
            solc(i,:) = solC;
            solf(i,:) = solF;
            Time(i,:) = cputime -t1;
        end %i
        %         %结果
        solu
        solt
        solc
        solf
        Time
        
    end % key=1
end % key=0

else if AssignType == 2
%% 第二种实验的情况
%%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%
xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
%45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
78 20 15;93 31 12;31 20 13;112 32 15; 134 26 17;45 52 12;36 63 13;67 34 16;21 85 15;32 62 13;];
yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
%81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
70 181 12;15 133 13 ; 19 151 12 ;160 192 13 ];

    MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
        % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
        0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.3 0.5;0.3 0.6;];
    
    MxsDis=[%400 700 650 500 700 900 450 610 400 700
        %650 500 700 900 450 610 700 900 450 610
        500 700 300 350 700 900 450 610 450 610];
    
    
    
    ytW = [%1 3 4 2 1 1 3 2 1 2
        %3 2 1 3 2 1 2 3 2 1
        1 1 1 1];
    
    %这个数据里都代表的是目标点,是目标点与目标点的关系
    MytTOrd=[3 2];
    
    %引入新的协同矩阵,最大起始时间矩阵
    Twait = [30 40 20 15 50 70 30 80 90 65];
    Twindow=[];
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    if Key == 0
        
   
    else if Key == 1
            for i=1:20
                DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
                % MC = Cal1.GetMcost();
                %Cal1 = CallocationTargetOld1(cTerrain);
                %标签显示文字
                xlabel('X/km')
                ylabel('Y/km')
                zlabel('Z/km')
                %DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
                %执行run并返回结果集
                t1 = cputime;
                [solU solT solC solF ] = DDE1.run();
                solu(i,:) = solU;
                solt(i,:) = solT;
                solc(i,:) = solC;
                solf(i,:) = solF;
                Time(i,:) = cputime -t1;
            end %i
            %         %结果
            solu
            solt
            solc
            solf
            Time
            
        end % key=1
    end % key=0
    
    
else if AssignType == 3
        %% 第三种实验的情况
        %%%%%%%%%%%%%%%%%%%%%%%数据区%%%%%%%%%%%%
        xs = [%11 2 3;2 17 5; 34 26 7;5 2 2;6 33 3;27 34 6;21 45 5;25 12 3;22 17 11;13 31 12;
            %45 21 11; 36 22 11;13 21 16;41 25 10;25 25 11;53 12 14;22 12 12;18 32 11; 67 34 12;26 16 15;
            78 20 15;93 31 12;31 20 13;112 32 15];
        yt = [%40 210 12;170 90 13 ; 80 197 21 ;172 120 13;160 56 13;160 143 21;170 200 21;113 200 12;97 134 16;100 145 11;
            %81 101 21; 72 152 12; 133 60 11;84 164 21; 150 90 21;146 121 12; 167 54 12; 108 165 12;99 120 21;110 143 11;
            70 131 12;15 133 13 ; 19 151 12 ;160 192 13;101 120 23;160 113 12;82 101 11;173 140 12;182 65 14; 45 176 12;];
        
        MxsEna=[%0.2 0.3; 0.2 0.4;0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3; 0.2 0.4;
            % 0.4 0.75;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;0.2 0.3;0.35 0.45;0.3 0.5;0.3 0.6;
            0.2 0.5; 0.3 0.4;0.4 0.75;0.3 0.45];
        
        MxsDis=[%400 700 650 500 700 900 450 610 400 700
            %650 500 700 900 450 610 700 900 450 610
            700 700 900 650];
        
        ytW = [%1 3 4 2 1 1 3 2 1 2
            %3 2 1 3 2 1 2 3 2 1
            1 1 1 1 1 1 1 1 1 1];
        
        MytTOrd=[3 4; 5 2];
        
        %引入新的协同矩阵,最大起始时间矩阵
        Twait = [30 40 20 15];
        Twindow=[1300,6000];
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        if Key == 0
            
            
            %%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%
            %调用目标分配算法,并取得解和相关数据,计算算法耗费时间
            %定义目标分配算法对象
            DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,1);
            % MC = Cal1.GetMcost();
            %Cal1 = CallocationTargetOld1(cTerrain);
            %标签显示文字
            xlabel('X/km')
            ylabel('Y/km')
            zlabel('Z/km')
            %DDEAssign1=DDEAssignTarget1(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd);
            %执行run并返回结果集
            t1 = cputime;
            [solU solT solC solF]  = DDE1.run();
            Time = cputime -t1;
            
            %         %结果
            solU
            solT
            solC
            solF
            Time
            
            
        else if Key == 1
                
                for i=1:20
                    DDE1 = DMDEAssignTarget(cTerrain,xs,yt,MxsEna,MxsDis,ytW,MytTOrd,Twait,Twindow,i);
                    % MC = Cal1.GetMcost();
                    %Cal1 = CallocationTargetOld1(cTerrain);
                    %标签显示文字
                    xlabel('X/km')
                    ylabel('Y/km')
                    zlabel('Z/km')
                    
                    t1 = cputime;
                    [solU solT solC solF ] = DDE1.run();
                    solu(i,:) = solU;
                    solt(i,:) = solT;
                    solc(i,:) = solC;
                    solf(i,:) = solF;
                    Time(i,:) = cputime -t1;
                end %i
                %         %结果
                solu
                solt
                solc
                solf
                Time
            end % key=1
        end % key=0
        
    end % type =3
    
end % type =2

end % type=1

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]丁柏圆,郑凯元,刘承禹,李云鹏,孙健,孙卫民,游世勋.基于改进差分进化的多无人机协同航迹欺骗算法研究[J].航天电子对抗. 2021,37(05)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

  • 5
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
差分算法是一种常用的路径规划算法,可以用于多无人机协同三维路径规划。在这个算法中,首先需要确定无人机的起点和终点坐标,以及地图数据的引入。差分算法通过对地图进行离散化,将三维的问题转化为二维网格上的问题,从而简化计算。 在改进差分算法中,首先需要对地图进行建模,将其分为网格。然后,根据无人机的起点和终点坐标,确定网格中的起点和终点。接下来,计算路径的权重,包括距离和障碍物等因素。在差分算法中,可以使用启发式搜索方法,如A*算法或Dijkstra算法,来计算路径的权重。通过这些算法,可以在网格中计算出最短路径。 在差分算法中,还可以考虑无人机的动态规划问题,即考虑无人机在运动过程中的动态要素,如速度、加速度等。通过改进差分算法,可以将动态规划问题纳入路径规划中,从而更好地模拟无人机的运动行为。 最后,利用Matlab编程,可以实现差分算法的计算和路径规划Matlab提供了丰富的函数库和工具,可以帮助我们进行数学计算和图形化展示。通过使用Matlab,可以快速实现差分算法,并对结果进行可视化展示。 综上所述,基于Matlab改进差分算法可以应用于多无人机协同三维路径规划。该算法通过离散化地图和启发式搜索方法,计算出最短路径。同时,考虑无人机的动态规划问题,提高路径规划的准确性。通过Matlab的编程实现,可以快速实现算法并进行可视化展示。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值