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

一、简介

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

2、差分进化算法的流程
初始化种群
变异
交叉
选择
【路径规划】基于matlab改进差分算法之三维多无人机协同航迹规划【含Matlab源码 169期】_第1张图片
三、差分进化的具体步骤
对于无约束优化问题
【路径规划】基于matlab改进差分算法之三维多无人机协同航迹规划【含Matlab源码 169期】_第2张图片
【路径规划】基于matlab改进差分算法之三维多无人机协同航迹规划【含Matlab源码 169期】_第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改进差分算法之三维多无人机协同航迹规划【含Matlab源码 169期】_第4张图片
【路径规划】基于matlab改进差分算法之三维多无人机协同航迹规划【含Matlab源码 169期】_第5张图片

四、备注

完整代码或者代写添加QQ2449341593。
往期回顾>>>>>>
【VRP】基于matlab遗传算法的带时间窗的车辆路径问题【含Matlab源码 002期】
【路径规划】基于matlab A*算法解决三维路径规划问题【含Matlab源码 003期】
【路径规划】基于matlab人工蜂群的路径规划【含Matlab源码 004期】
【路径规划】基于matlab蚁群求解多旅行商MTSP问题【含Matlab源码 005期】
【路径规划】基于matlab蚁群算法的无人机路径规划【含Matlab源码 008期】
【路径规划】基于matlab遗传算法求解多VRP问题【含Matlab源码 010期】
【路径规划】基于matlab遗传算法的多中心VRP求解【含Matlab源码 011期】
【路径规划】基于matlab粒子群的三维无人机路径规划【含Matlab源码 015期】
【路径规划】基于matlab采用遗传算法编制多物流中心的开放式车辆路径问题【含Matlab源码 017期】
【路径规划】基于matlab粒子群之机器人栅格路径规划【含Matlab源码 018期】
【路径规划】基于matlab蚁群算法求解最短路径【含Matlab源码 019期】
【路径规划】基于matlab 免疫算法之物流中心选址问题【含Matlab源码 020期】
【路径规划】基于matlab人工蜂群的无人机三维路径规划【含Matlab源码 021期】
【路径规划】基于matalb栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 022期】
【路径规划】基于matlab栅格地图——遗传算法的机器人最优路径规划【含Matlab源码 027期】
【路径规划】基于matlab蚁群的多无人机攻击调度【含Matlab源码 034期】
【路径规划】基于matlab蚁群的三维路径规划【含matlab源码 043期】
【路径规划】基于matlab粒子群优化蚁群的最短路径求解【含Matlab源码 076期】
【路径规划】基于matlab蚁群算法求解多中心VRP问题【含Matlab源码 111期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 112期】
【路径规划】基于matlab蚁群算法求解带时间窗的多中心VRP问题【含Matlab源码 113期】
【路径规划】基于matalb遗传算法的多中心VRP求解【含Matlab源码 114期】
【路径规划】基于matlab模拟退火求解VRP问题【含Matlab源码 115期】
【路径规划】基于matlab A星的栅格路径规划【含Matlab源码 116期】
【路径规划】基于matlab一种带交叉因子的双向寻优粒子群栅格地图路径规划【含Matlab源码 117期】
【TSP】基于matlab蚁群算法求解旅行商TSP问题含GUI【含Matlab源码 118期】
【路径规划】基于matlab蚁群算法栅格地图路径规划【含Matlab源码 119期】
【TSP问题】基于matlab差分进化求解的TSP问题【含matlab源码 131期】
【路径规划】基于matlab遗传算法的旅行商 TSP 问题【含Matlab源码 135期】
【路径规划】基于matlab模拟退火算法的旅行商 TSP 问题【含Matlab源码 136期】
【路径规划】基于matlab蚁群算法的智能车路径规划【含Matlab源码 137期】
【路径规划】华为杯:无人机在抢险救灾中的优化运用【含Matlab源码 138期】
【路径规划】基于matlab RRT三维路径规划【含Matlab源码 151期】
【路径规划】基于matalb人工势场无人机编队路径规划【 含Matlab 155期】
【VRP问题】基于matlab节约算法求解TWVRP问题【含Matlab源码 156期】
【VRP问题】基于matlab节约算法求解CVRP问题【含Matalb源码 157期】
【VRP问题】基于matlab禁忌搜索算法求解VRP问题【含Matalb源码 158期】
【VRP问题】基于matlab模拟退火求解CVRP问题【含Matlab源码 159期】
【VRP问题】基于matlab人工鱼群求解带时间窗的VRP问题【含Matlab源码 161期】
【VRP问题】基于matlab遗传算法求解带容量的VRP问题【含Matlab源码 162期】
【路径规划】基于matlab狼群算法之三维路径规划【含Matlab源码 167期】
【路径规划】基于matlab人工势场的无人机三维路径规划【含Matlab源码 168期】

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