三维路径规划基于matlab粒子群算法融合鸡群算法多无人机三维路径规划含Matlab源码 1792期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三维路径规划基于matlab粒子群算法融合鸡群算法多无人机三维路径规划含Matlab源码 1792期相关的知识,希望对你有一定的参考价值。

一、无人机简介

无人机的航迹规划是指在综合考虑无人机飞行油耗、威胁、飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约束的目标优化问题。航迹规划算法是航迹规划的核心。国内外相继开展了相关研究, 提出了许多航迹规划算法, 如模拟退火算法、人工势场法、遗传算法、蚁群算法等。但由于无人机面临的规划空间异常复杂、规划约束条件多且模糊性大, 航迹搜索算法存在寻优能力差、计算量过大、效率不高等问题, 在航迹规划的最优性和实时性方面有待进一步提高。

1 鸡群优化算法流程
CSO算法的具体流程步骤:
步骤1:初始化种群规模N,并设置空间维数D,最大迭代次数T,NR,NH,
NC和NM等参数。
步骤2:计算个体的适应度值,将迭代次数置0,t=0。
步骤3:判断Mod(t, G) 是否为0。若是, 则根据个体适应度值将鸡群中的个
体重新排序,并重新划分等级制度;若不是,直接跳转步骤4。
步骤4:将整个鸡群分组,确定组内的跟随关系和母子关系。
步骤5:按照公式迭代更新公鸡,母鸡和小鸡的位置。
步骤6:计算个体的适应度值,并且更新个体最优和全局最优。
步骤7:置迭代次数t=t+1,若满足迭代停止条件,则转步骤8,否则,转到
步骤3。
步骤8:结束,输出全局最优值。
鸡群算法流程图如图3.1所示。

2 改进鸡群算法流程
改进鸡群算法流程图如图3.2所示。改进CSO算法的具体流程步骤如下:
步骤1:初始化种群规模N,并设置空间维数D,最大迭代次数T,NR,NH,
NC和NM等相关参数。
步骤2:计算个体的适应度值,将迭代次数置0,t=0。
步骤3:判断Mod(t, G) 是否为0。若是, 则根据个体适应度值将鸡群中的个
体重新排序,并重新划分等级制度;若不是,直接跳转步骤4。
步骤4:将整个鸡群分组,确定组内的跟随关系和母子关系。
步骤5:计算动态权值a’,锁定因子[’。
步骤6:按照公式迭代更新公鸡,母鸡和小鸡的位置。
步骤7:计算个体的适应度值,并且更新个体最优和全局最优。
步骤8:置迭代次数t=t+1,若满足迭代停止条件,则转步骤8,否则,转到
步骤3。
步骤9:结束,输出全局最优值。

三、部分源代码


clc,clear , close all
feature jit off
%% 模型基本参数
% 载入地形  矩阵
filename = 'TestData1.xlsx' ;
model.x_data  = xlsread(  filename  , 'Xi') ;
model.y_data = xlsread(filename, 'Yi') ;
model.z_data  = xlsread( filename , 'Zi') ;

model.x_grid =  model.x_data(1,:) ;
model.y_grid =model.y_data(:, 1) ;

model.xs =  10  ;  %起点   相关信息 
model.ys = 90  ;
model.zs  =   interp2(  model.x_data ,  model.y_data,   model.z_data   ,  ...
    model.xs ,     model.ys   ,'linear' ) ;  %  高度为插值得到


model.xt  =  130 ; % 终点 相关信息
model.yt  = 10 ;
model.zt = interp2(  model.x_data ,  model.y_data, model.z_data   ,  ...
    model.xt  ,    model.yt  ,  'linear');  %  高度为插值得到

model.n=   5  ;  %  粗略导航点设置
model.nn=  80 ;  %  插值法获得的导航点总数
model.Safeh = 0.01 ;  %  与障碍物的最低飞行高度   

% 导航点   边界值
model.xmin=  min(  model.x_data(  :  ) ) ;
model.xmax= max (  model.x_data(  :  ) ) ;
model.ymin= min(  model.y_data(  :  ) ) ;
model.ymax= max(  model.y_data(  :  ) ) ;
model.zmin= min(  model.z_data(  :  ) ) ;
model.zmax =model.zmin + (1+ 0.1)*( max( model.z_data(:) )-model.zmin ) ;

% 模型的其他参数
model.nVar  =  3*model.n ; % 编码长度
model.pf = 10^7 ; % 惩罚系数

%  障碍物 位置坐标及半径
model.Barrier =  [10,60 , 8 ;
    40, 50,6
    60, 50 , 5
    100, 30,  8 ] ;
model.Num_Barrier  =  size(model.Barrier , 1 ); %  障碍物的数目

model.weight1 = 0.5; % 权重1 飞行线路长度权重
model.weight2 = 0.3; % 权重2  飞行最低高度相关权重
model.weight3 = 0.2; % 权重3 最大攻角约束 权重
function PlotSolution(BestSol ,model)
%% 绘图函数
%% 模型基本参数
% 载入地形  矩阵
filename = 'TestData1.xlsx' ;
model.x_data  = xlsread(  filename  , 'Xi') ;
model.y_data = xlsread(filename, 'Yi') ;
model.z_data  = xlsread( filename , 'Zi') ;

model.x_grid =  model.x_data(1,:) ;
model.y_grid =model.y_data(:, 1) ;

model.xs =  10  ;  %起点   相关信息 
model.ys = 90  ;
model.zs  =   interp2(  model.x_data ,  model.y_data,   model.z_data   ,  ...
    model.xs ,     model.ys   ,'linear' ) ;  %  高度为插值得到

model.n=   5  ;  %  粗略导航点设置
model.nn=  80 ;  %  插值法获得的导航点总数
model.Safeh = 0.01 ;  %  与障碍物的最低飞行高度   

% 导航点   边界值
model.xmin=  min(  model.x_data(  :  ) ) ;
model.xmax= max (  model.x_data(  :  ) ) ;
model.ymin= min(  model.y_data(  :  ) ) ;
model.ymax= max(  model.y_data(  :  ) ) ;
model.zmin= min(  model.z_data(  :  ) ) ;
model.zmax =model.zmin + (1+ 0.1)*( max( model.z_data(:) )-model.zmin ) ;

figure(1);%subplot(2,2,1)
mesh( model.x_data  , model.y_data , model.z_data );   hold on

colorbar; box  on  ,
set(gcf,'Color',[1 1 1]);
% set(gcf, 'unit' , 'centimeters','position' , [2 2 30 15]);
h3= plot3( BestSol.Sol.xx  ,  BestSol.Sol.yy ,  BestSol.Sol.zz , '-r'); hold on


% temp = 10^-2 ;
h1 =  plot3(   model.xs, model.ys, model.zs,  'o' , 'MarkerEdgeColor','r', ...
    'MarkerFaceColor','r');  hold on
h2 =  plot3(  model.xt , model.yt , model.zt, '^' , 'MarkerEdgeColor','r', ...
    'MarkerFaceColor','r');  hold on
if   isfield( model ,'Barrier')
    for ind =  1: model.Num_Barrier
        [X,Y,Z] = cylinder( model.Barrier(ind, 3)  ,100);
        h4=  surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(:))- model.zmin) ) ; hold on
        set(h4,  'edgecolor','m','facecolor', 'm') ;
    end
end

if   ~isfield( model ,'Barrier')
    legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')
else
    legend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域'  , 'Location','southoutside', 'Orientation','horizontal')
end

xlabel('x / km','fontsize',10 ,'fontname','Times new roman');
ylabel('y / km','fontsize',10 ,'fontname','Times new roman');
zlabel('z / km','fontsize',10 ,'fontname','Times new roman');

set(gca, 'xlim' , [    model.xmin  model.xmax]) ;
set(gca, 'ylim' , [    model.ymin  model.ymax]) ;

axis tight
axis normal 
hold on

set(gca,  'cameraposition',  [-337 , 0 , 14.2])
%%
figure(2);%subplot(2,2,2)
mesh( model.x_data  , model.y_data , model.z_data );   hold on
view(2)
%   contour( model.x_data  , model.y_data , model.z_data );  hold on
colorbar; box  on  ,
set(gcf,'Color',[1 1 1]);
% set(gcf, 'unit' , 'centimeters','position' , [2 2 30 15]);
h3= plot3(  BestSol.Sol.xx  , BestSol.Sol.yy , BestSol.Sol.zz , '-r'); hold on


% temp = 10^-2 ;
h1 =  plot3(   model.xs, model.ys, model.zs,  'o' , 'MarkerEdgeColor','b', ...
    'MarkerFaceColor','b');  hold on
h2 =  plot3(  model.xt , model.yt , model.zt, '^' , 'MarkerEdgeColor','g', ...
    'MarkerFaceColor','g');  hold on
% legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')
if   isfield( model ,'Barrier')
    for ind =  1: model.Num_Barrier
        [X,Y,Z] = cylinder( model.Barrier(ind, 3)  ,100);
        h4=  surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(:))- model.zmin) ) ; hold on
        set(h4,  'edgecolor','m','facecolor', 'm') ;
    end
end

if   ~isfield( model ,'Barrier')
    legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')
else
    legend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域'  , 'Location','southoutside', 'Orientation','horizontal')
end


xlabel('x / km','fontsize',10 ,'fontname','Times new roman');
ylabel('y / km','fontsize',10 ,'fontname','Times new roman');
zlabel('z / km','fontsize',10 ,'fontname','Times new roman');

set(gca, 'xlim' , [    model.xmin  model.xmax]) ;
set(gca, 'ylim' , [    model.ymin  model.ymax]) ;

axis tight
axis normal 
hold off
hold on
%%
figure(3);%subplot(2,2,3)

% mesh( model.x_data  , model.y_data , model.z_data );   hold on
% view(2)
contour( model.x_data  , model.y_data , model.z_data );  hold on
colorbar; box  on  ,
set(gcf,'Color',[1 1 1]);
% set(gcf, 'unit' , 'centimeters','position' , [2 2 30 15]);
h3= plot3(  BestSol.Sol.xx  ,  BestSol.Sol.yy ,   BestSol.Sol.zz , '-r'); hold on
% temp = 10^-2 ;
h1 =  plot3(   model.xs, model.ys, model.zs,  'o' , 'MarkerEdgeColor','b', ...
    'MarkerFaceColor','b');  hold on
h2 =  plot3(  model.xt , model.yt , model.zt, '^' , 'MarkerEdgeColor','g', ...
    'MarkerFaceColor','g');  hold on
% legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')
if   isfield( model ,'Barrier')
    for ind =  1: model.Num_Barrier
        [X,Y,Z] = cylinder( model.Barrier(ind, 3)  ,100);
        h4=  surf(X+model.Barrier(ind, 1),Y+model.Barrier(ind, 2), model.zmin+Z*( max(model.z_data(:))- model.zmin) ) ; hold on
        set(h4,  'edgecolor','m','facecolor', 'm') ;
    end
end

if   ~isfield( model ,'Barrier')
    legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')
else
    legend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域'  , 'Location','southoutside', 三维路径规划基于matlab粒子群算法无人机山地三维路径规划含Matlab源码 1831期

三维路径规划基于matlab球面矢量粒子群算法无人机三维路径规划含Matlab源码 1682期

路径规划基于粒子群的三维无人机路径规划matlab源码

三维路径规划基于matlab粒子群算法无人机三维路径规划含Matlab源码 1260期

路径规划基于粒子群的无人机三维路径规划含障碍matlab源码

三维路径规划基于matlab粒子群算法无人机山地三维路径规划含Matlab源码 1405期