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

一、差分进化算法的介绍

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

二、差分进化算法的流程

  1. 初始化种群
  2. 变异
  3. 交叉
  4. 选择

(DE流程)

三、差分进化的具体步骤

   对于无约束优化问题

利用差分进化求解这样的优化问题,主要分为初始化、变异、交叉和选择等几项操作。

1、初始化

   如前面的的群智能优化算法一样,差分进化也需要初始化种群:

其中,是第个个体,表示第维。

其中,分别为第维的下界和上界,表示在区间上的随机数。

2、变异

       DE算法通过差分策略实现个体变异,常见的差分策略是随机选取种群中两个不同的个体,将其向量差缩放后与待变异个体进行向量合成。

其中,是三个随机数,区间为称为缩放因子,为一个确定的常数。表示第代。

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

%时间测试 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 ```

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于改进分的三维无人机协同航迹规划主要涉及到无人机路径优化和协同控制。下面将详细介绍在Matlab中实现算法的源码。 首先,在Matlab中,我们可以利用已有的无人机模型和传感器模型来进行仿真实验。假设我们有三架无人机,每架无人机的初始位置、速度和目标点分别为(p1, v1, goal1),(p2, v2, goal2)和(p3, v3, goal3)。 接下来,我们需要定义无人机的动力学模型,以及考虑到分约束的路径规划算法。在改进算法中,我们可以利用优化方法(如梯度下降法)来求解路径规划问题。具体来说,我们可以定义一个代价函数,将路径规划问题转化为优化问题。代价函数的目标是最小化无人机的总体路径长度,并考虑到约束条件(如避障、最小飞行时间等)。 在具体实现中,我们可以使用MATLAB的优化工具箱中的函数,如fmincon或fminunc,来进行优化求解。这些函数可以通过提供定义好的代价函数,指定约束条件等来进行调用。在调用时,我们需要将无人机的初始位置、速度和目标点作为输入,作为优化问题的起点。 最后,通过迭代优化算法,我们可以获取到使得代价函数最小化的最佳路径。将优化结果以及相关参数可视化展示,便于进一步分析和实验结果的验证。 以上就是基于改进实现三维无人机协同航迹规划的大致思路,具体的实现细节可以根据具体的项目需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值