首页 > 行业资讯 > 【路径规划】基于改进差分实现三维多无人机协同航迹规划matlab源码

【路径规划】基于改进差分实现三维多无人机协同航迹规划matlab源码

时间:2022-06-22 来源: 浏览:

【路径规划】基于改进差分实现三维多无人机协同航迹规划matlab源码

原创 天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #路径规划matlab源码 354个

1基于改进差分实现三维多无人机协同航迹规划

针对已知三维环境下的多无人机动态路径规划问题,在多无人机协同方面基于参考路径长度以及威胁距离进行任务点规划,并根据实际环境设定了约束函数和适应度函数.在航迹规划算法方面则采用改进差分进化算法,将种群基于种群个体的适应度均分为两个子种群,选择不同的变异策略.仿真验证结果显示,改进差分进化算法得到的规划路径在路径长度,适应度值优于传统差分进化算法,可以生成路径更短且适应度值更优的航迹.

1.1 差分进化算法的介绍

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

1.2 差分进化算法的流程

  1. 初始化种群

  2. 变异

  3. 交叉

  4. 选择

(DE流程)

2 部分代码

%清空环境 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

3 仿真结果

4 参考文献

[1]徐瑞莲, 周新志, 宁芊. 基于改进差分进化算法的多无人机航迹规划[J]. 火力与指挥控制, 2020, v.45;No.298(01):171-175+181.

5 代码下载

天天Matlab

赞赏二维码 微信扫一扫赞赏作者 赞赏

已喜欢, 对作者说句悄悄话
最多40字,当前共

  人赞赏

1 / 3

长按二维码向我转账

赞赏二维码

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐