【路径规划】基于matlab考虑分配次序的多无人机协同目标分配建模与遗传算法求解【含Matlab源码 143期】

一、简介

首先通过分析UAV分配次序对打击任务总收益的影响, 设计了动态战场环境的更新规则. 将航程代价和任务代价作为惩罚项修正目标函数, 建立了考虑分配次序的UAVs协同目标分配优化模型. 然后针对模型的物理意义改进了遗传算法基因编码方式, 设计了MUCTA遗传算法. 该算法利用状态转移思想, 引进SDR算子获得多种分配次序种群, 同时以单行变异算子修正UAV与目标对应关系, 并采用最优个体法和轮盘赌法筛选子代个体.

二、源代码

%本实验目的是验证改进的DE离散目标分配算法的有效性
%实验设置:各种环境,调用目标分配的算法
%目标分配实验的输入:代价矩阵
%利用代价矩阵和映射方法,在离散和连续空间转换
%目标分配实验的输出:有效的基因染色体表示
%比较实验:
%1、可行性分析,三种模型
%2、进化策略对比分析,证明采用双策略的有效性
%3、大数据分析
%4、与其他方法的比较
% 本文只用到了AssignType =2;情形,即UAV数量大于TARGET数量
%使用了改动的遗传算法
%相比较源程序,较大改动部分为:对象执行区(GetFit1和Getfit2两个函数),和差分进化区(全部改动),其他部分有少量改动,我不记得了。很多部分直接删改,可能注释没有对应的上,强烈建议对比源代码学习观看
%本人编程能力较差,编写格式不规范,很多地方注释不足以及随心所欲各种直接删改,不同实验直接改数据,以及出现的重复,各种FOR循环嵌套等等,我自己都觉得乱七八糟。再次强烈建议对比源代码
%建议只使用该代码框架(即阅读源代码即可,本代码可适当看一下就行,估计很费劲),自行删改其中内容,写自己的文章,但注意源代码自行备份,自己的代码尽量多注释以及写实验说明,方便后来的师弟或师妹。
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
%清空环境
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 =2;
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 40 15;93 31 12;31 25 13;112 32 15; 134 26 17;45 52 12;36 55 13;67 34 16;21 45 15;160 30 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 151 12;40 155 13 ; 19 151 12 ;150 140 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
              
        
        %%%%%%%%%%%%%%%%%%%%%%算法执行区%%%%%%%%%%%%%%%%%%
        %调用目标分配算法,并取得解和相关数据,计算算法耗费时间
        %定义目标分配算法对象
          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并返回结果集
        
           [solU solT solC solF   cpop ]  = DDE1.run();
        Time 
cpop;
%         %结果
         solU
         solT
         solC
         solF
         Time
         
          else if Key == 1
                  Time2=0;
                  cpop3=0;
                    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  cpop ] = DDE1.run();
        solu(i,:) = solU;
        solt(i,:) = solT;
        solc(i,:) = solC;
        solf(i,:) = solF;
        Time(i,:) = cputime -t1;
%         genX(i,:)=cpop(:,2);
       cpop2(:,i)=cpop(:,2);
       
        Time(i)
            end %i
%         %结果
 
%             figure(3);
%             grid on;     
%             hold on;
%             plot(genX(1:length(genX),1)',genX(1:length(genX),2)','linewidth',2);
%          solu
%          solt
%          solc
%          solf
         Time=Time2/20;
         cpop=cpop2/20;
              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 125 13 ; 19 151 12 ;142 120 13;120 100 23;160 90 12;82 101 11;173 140 12;160 160 14; 45 155 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')   
                    %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
            
        end % type =3
 
    end % type =2
 
end % type=1
    
 
 

三、运行结果

【路径规划】基于matlab考虑分配次序的多无人机协同目标分配建模与遗传算法求解【含Matlab源码 143期】_第1张图片
【路径规划】基于matlab考虑分配次序的多无人机协同目标分配建模与遗传算法求解【含Matlab源码 143期】_第2张图片
注:完整代码或者代写添加QQ2449341593
往期回顾>>>>>>
【Matlab 015期】【路径规划1】基于粒子群的三维无人机路径规划matlab源码
【Matlab 017期】【路径规划2】采用遗传算法编制多物流中心的开放式车辆路径问题Matlab程序
【Matlab 018期】【路径规划3】基于粒子群之机器人栅格路径规划
【Matlab 019期】【路径规划4】蚁群算法求解最短路径matlab
【Matlab 020期】【路径规划5】Matlab 免疫算法之物流中心选址问题
【Matlab 021期】【路径规划6】基于人工蜂群的无人机三维路径规划
【Matlab 027期】【路径规划7】基于栅格地图——遗传算法的机器人最优路径规划
【Matlab 034期】【路径规划8】基于蚁群的多无人机攻击调度
基于栅格地图——遗传算法的机器人最优路径规划【Matlab 022期】【路径规划9】
蚁群算法求解多中心vrp问题matlab【Matlab 111期】【路径规划11】
基于蚁群算法求解带时间窗的多中心VRP问题matlab【Matlab 112期】【路径规划12】
基于蚁群算法求解带时间窗的多中心VRP问题matlab【Matlab 113期】【路径规划13】
基于遗传算法的多中心VRP求解matlab【Matlab 114期】【路径规划14】
模拟退火求解VRP问题matlab【Matlab 115期】【路径规划15】
基于A星的栅格路径规划【Matlab 116期】【路径规划16】
一种带交叉因子的双向寻优粒子群栅格地图路径规划【Matlab 117期】【路径规划17】
【TSP】蚁群算法求解TSP问题matlab含GUI【Matlab 118期】【路径规划18】
基于蚁群算法栅格地图路径规划matlab【Matlab 119期】【路径规划19】

你可能感兴趣的:(matlab,路径规划)