700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【PSO三维路径规划】基于matlab粒子群算法融合鸡群算法多无人机三维路径规划【含Matla

【PSO三维路径规划】基于matlab粒子群算法融合鸡群算法多无人机三维路径规划【含Matla

时间:2024-03-20 20:29:01

相关推荐

【PSO三维路径规划】基于matlab粒子群算法融合鸡群算法多无人机三维路径规划【含Matla

一、无人机简介

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

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 allfeature 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,660, 50 , 5100, 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 oncolorbar; 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 onh2 = plot3( model.xt , model.yt , model.zt, '^' , 'MarkerEdgeColor','r', ...'MarkerFaceColor','r'); hold onif 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 onset(h4, 'edgecolor','m','facecolor', 'm') ;endendif ~isfield( model ,'Barrier')legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')elselegend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域' , 'Location','southoutside', 'Orientation','horizontal')endxlabel('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 tightaxis normal hold onset(gca, 'cameraposition', [-337 , 0 , 14.2])%%figure(2);%subplot(2,2,2)mesh( model.x_data , model.y_data , model.z_data ); hold onview(2)% contour( model.x_data , model.y_data , model.z_data ); hold oncolorbar; 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 onh2 = 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 onset(h4, 'edgecolor','m','facecolor', 'm') ;endendif ~isfield( model ,'Barrier')legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')elselegend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域' , 'Location','southoutside', 'Orientation','horizontal')endxlabel('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 tightaxis normal hold offhold 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 oncolorbar; 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 onh2 = 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 onset(h4, 'edgecolor','m','facecolor', 'm') ;endendif ~isfield( model ,'Barrier')legend( [ h1 , h2 , h3] , '起点' , '终点' , '线路', 'Location','southoutside' , 'Orientation','horizontal')elselegend( [ h1 , h2 , h3 h4] , '起点' , '终点' , '线路' , '无法通行区域' , 'Location','southoutside', 'Orientation','horizontal')endxlabel('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 tightaxis normal hold offhold on%% 收敛曲线figure(4);%subplot(2,2,4)% semilogy( BestSol.BestCost ,'LineWidth',2);plot( BestSol.BestCost ,'LineWidth',2);xlabel('迭代次数');ylabel('目标函数');grid on;set(gca,'XLim',[0 BestSol.MaxIt]);%X轴的数据显示范围hold on

四、运行结果

五、matlab版本及参考文献

1 matlab版本

a

2 参考文献

[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,.

[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,.

[3]巫茜,罗金彪,顾晓群,曾青.基于改进PSO的无人机三维航迹规划优化算法[J].兵器装备工程学报. ,42(08)

[4]肖雨荷.基于自适应鸡群—粒子群混合算法的移动机器人路径规划[D].长沙理工大学

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。