✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,
代码获取、论文复现及科研仿真合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab完整代码及仿真定制内容点击👇
🔥 内容介绍
摘要
无人机三维路径规划是无人机自主飞行的关键技术之一。本文提出了一种基于 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 多种多目标优化算法实现考虑无人机性能的复杂城市地形路径规划方法。该方法首先建立了无人机三维路径规划模型,然后利用 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 等多目标优化算法对路径规划模型进行求解,最后对求解结果进行分析和比较。仿真结果表明,该方法能够有效地解决无人机三维路径规划问题,并能够满足无人机性能要求。
1. 引言
无人机三维路径规划是无人机自主飞行的关键技术之一。无人机三维路径规划是指在三维空间中为无人机规划一条从起点到终点的路径,该路径需要满足一定的约束条件,如避障、能量消耗、飞行时间等。无人机三维路径规划问题是一个复杂的多目标优化问题,需要考虑多个目标函数,如路径长度、飞行时间、能量消耗等。
近年来,无人机三维路径规划问题引起了广泛关注,并提出了多种求解方法。这些方法主要可以分为两类:传统方法和智能优化算法。传统方法包括贪婪算法、蚁群算法、粒子群算法等。智能优化算法包括遗传算法、进化算法、模拟退火算法等。
本文提出了一种基于 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 多种多目标优化算法实现考虑无人机性能的复杂城市地形路径规划方法。该方法首先建立了无人机三维路径规划模型,然后利用 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 等多目标优化算法对路径规划模型进行求解,最后对求解结果进行分析和比较。
2. 无人机三维路径规划模型

3. 多目标优化算法
多目标优化算法是一种用于求解多目标优化问题的算法。多目标优化算法可以分为两类:传统方法和智能优化算法。
传统方法包括贪婪算法、蚁群算法、粒子群算法等。智能优化算法包括遗传算法、进化算法、模拟退火算法等。
本文采用 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 等多目标优化算法对无人机三维路径规划模型进行求解。
📣 部分代码
clear;clc;close all;rng defaultrng(11)addpath(genpath(pwd));%%data_2();data.alpha_trace = 60/360*(2*pi); % 偏航角data.beta_trace = 45/360*(2*pi); % 仰俯角data.map_size=map_size;data.P_crash = 3.42 * 10e-4; % 失控概率data.S_hit=0.0188; % m^2 撞击面积data.R_I = 0.3; % 阻力系数data.R_vf = 0.27; % 汽车风险data.alpha=10^6; % J 致死动能data.beta = 100; % Jdata.S_c = 0.5 ; % 遮蔽系数data.g = 9.8 ; % m/s^2data.IOT_pos=IOT_pos;data.m = 1380 ; % g (DJI Phantom4)data.rou_a = 1225 ; % g/m^3(大气密度)data.miu = miu; % 楼高分布参数data.sigma = sigma; % 楼高分布参数data.v = 20; % 20m/sS=[1 1];E=[49 49]; % 起点终点data.S = S;data.E = E;data.minh=bulid_xyz;data.maxh=141;Bound = E(1)-S(1);dim = Bound*2;data.Bound = Bound;data.map_step=map_step;data.populations_risk=populations_risk;data.road_risk=road_risk;%% pre-calystep = 3;pbase = ystep+1;for i = 1:2*ystep+1pi = i - pbase;can=[];for j = -ystep:1:ystepif acos([1,pi]*[1,j]'/sqrt(1+pi^2)/sqrt(1+(j)^2))<=data.alpha_tracecan=[can j];endendcanselect{i}=can;enddata.canselect = canselect;data.canselectp = pbase;%%tiledlayout(2,2);for h = 30:30:120nexttile;Risk_map = zeros(map_size);Riskproperty_map = zeros(map_size);for i=1:map_size(1)for j =1:map_size(2)Risk_map(i,j)=Risk_map(i,j)+getC_Risk(getR_pf(getV(h,data),data),populations_risk(i,j),data);Risk_map(i,j)=Risk_map(i,j)+getC_Risk(data.R_vf,road_risk(i,j),data);endendcolormap('jet')contourf(Risk_map)colorbar;title(['h=' num2str(h) 'm,' ' Risk of property=' num2str(getC_rpd(h,data))]);end%%problemList={@MPUAV1,@MPUAV2,@MPUAV3,@MPUAV4,@MPUAV5,@MPUAV6};maxiterList={40000,40000,40000,40000,40000,40000};problemMean=zeros(numel(problemList),6);problemStd=zeros(numel(problemList),6);data.lb = [ones(1,dim/2-1).*-1 ones(1,dim/2+1).*0];data.ub = [ones(1,dim/2-1).*ystep ones(1,dim/2+1).*1];data.dim = dim;temp.dec=0;temp.obj=0;for problemIndex= 1:numel(problemList)TT=30;score=zeros(TT,6);% res_nsga=repmat(temp,1,numel(problemList));% res_nsga2=repmat(temp,1,numel(problemList));% res_mpnds=repmat(temp,1,numel(problemList));% res_mpnds2=repmat(temp,1,numel(problemList));% MPNNIA=repmat(temp,1,numel(problemList));% MPHEIA=repmat(temp,1,numel(problemList));% MPAIMA=repmat(temp,1,numel(problemList));%RS=1:31;RS(30)=[];parfor testtimes = 10:TTclose all;RANDSEED=testtimes;testfit = problemList{problemIndex};popnum=105;maxiter=maxiterList{problemIndex};%% NSGA2rng default;rng(RANDSEED);test_case={@OptAll,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation = MPSELECT(Global.result{2},100,2);[Population2,FrontNo,~] = NDSELECT(Global.result{2},100);Population2=Population2(FrontNo==1);res_nsgadec=reshape([Population.dec],dim,[])';res_nsgaobj=reshape([Population.obj],size(Population(1).obj,2),[])';res_nsga2dec=reshape([Population2.dec],dim,[])';res_nsga2obj=reshape([Population2.obj],size(Population(1).obj,2),[])';%% MPNDSrng default;rng(RANDSEED);test_case={@OptMPNDS,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation= MPSELECT(Global.result{2},100,2);res_mpndsdec=reshape([Population.dec],dim,[])';res_mpndsobj=reshape([Population.obj],size(Population(1).obj,2),[])';%% MPNDS2rng default;rng(RANDSEED);test_case={@OptMPNDS2,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation= MPSELECT(Global.result{2},100,2);res_mpnds2dec=reshape([Population.dec],dim,[])';res_mpnds2obj=reshape([Population.obj],size(Population(1).obj,2),[])';%% MPNNIArng default;rng(RANDSEED);%popnum = 210;%maxiter=20000;test_case={@MPNNIA,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation= MPSELECT(Global.result{2},100,2);MPNNIAdec=reshape([Population.dec],dim,[])';MPNNIAobj=reshape([Population.obj],size(Population(1).obj,2),[])';%% MPHEIArng default;rng(RANDSEED);%popnum = 210;%maxiter=20000;test_case={@MPHEIA,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation= MPSELECT(Global.result{2},100,2);MPHEIAdec=reshape([Population.dec],dim,[])';MPHEIAobj=reshape([Population.obj],size(Population(1).obj,2),[])';%% MPAIMArng default;rng(RANDSEED);%popnum = 210;%maxiter=20000;test_case={@MPAIMA,testfit,popnum,1,1,maxiter,dim};for i =1:numel(test_case)/7var={'-algorithm',test_case{i,1},'-problem',test_case{i,2},'-N',test_case{i,3},'-save',test_case{i,4},'-run',test_case{i,5}, ...,'-evaluation',test_case{i,6},'-D',test_case{i,7},'-data',data};Global = GLOBAL(var{:});Global.Start();endPopulation= MPSELECT(Global.result{2},100,2);MPAIMAdec=reshape([Population.dec],dim,[])';MPAIMAobj=reshape([Population.obj],size(Population(1).obj,2),[])';%%allsol = [res_nsgaobj;res_mpndsobj;res_mpnds2obj;MPNNIAobj;MPHEIAobj;MPAIMAobj];nsga_hv = MPHV(res_nsgaobj,allsol,2);mpnds_hv = MPHV(res_mpndsobj,allsol,2);mpnds2_hv = MPHV(res_mpnds2obj,allsol,2);MPNNIA_hv = MPHV(MPNNIAobj,allsol,2);MPHEIA_hv = MPHV(MPHEIAobj,allsol,2);MPAIMA_hv = MPHV(MPAIMAobj,allsol,2);score(testtimes,:)=[nsga_hv mpnds_hv mpnds2_hv MPNNIA_hv MPHEIA_hv MPAIMA_hv];endproblemMean(problemIndex,:)= mean(score)clear varproblemStd(problemIndex,:)=var(score)end% problemMean =%% 0.0483 0.0682 0.0696 0.0519 0.0673 0.0807% 0.0533 0.1022 0.1051 0.0726 0.1102 0.1106% 0.0519 0.0843 0.0785 0.0610 0.0899 0.0914% 0.0494 0.0589 0.0523 0.0424 0.0539 0.0663% 0.0439 0.0744 0.0771 0.0518 0.0775 0.0788% 0.0369 0.0615 0.0572 0.0403 0.0598 0.0640%%% problemStd =%% 0.0003 0.0002 0.0002 0.0003 0.0004 0.0004% 0.0009 0.0007 0.0006 0.0007 0.0009 0.0010% 0.0006 0.0004 0.0004 0.0005 0.0005 0.0006% 0.0007 0.0003 0.0004 0.0005 0.0005 0.0004% 0.0006 0.0007 0.0007 0.0009 0.0012 0.0008% 0.0004 0.0004 0.0003 0.0003 0.0003 0.0005% problemMean =%% 0.0485 0.0681 0.0689 0.0669 0.0698 0.0800% 0.0530 0.1021 0.1038 0.1042 0.1013 0.1108% 0.0505 0.0817 0.0757 0.0830 0.0795 0.0891% 0.0488 0.0580 0.0513 0.0445 0.0448 0.0654% 0.0451 0.0770 0.0793 0.0636 0.0657 0.0803% 0.0362 0.0610 0.0565 0.0539 0.0533 0.0641%%% problemStd =%% 0.0003 0.0002 0.0003 0.0003 0.0003 0.0004% 0.0009 0.0007 0.0006 0.0012 0.0008 0.0009% 0.0005 0.0004 0.0004 0.0004 0.0004 0.0006% 0.0007 0.0003 0.0004 0.0004 0.0005 0.0004% 0.0007 0.0006 0.0007 0.0009 0.0010 0.0008% 0.0004 0.0005 0.0004 0.0004 0.0004 0.0005
⛳️ 运行结果








4. 仿真结果
本文对提出的方法进行了仿真实验。仿真实验在 MATLAB 平台上进行。仿真实验结果表明,该方法能够有效地解决无人机三维路径规划问题,并能够满足无人机性能要求。
图 1 给出了无人机三维路径规划的仿真结果。从图 1 可以看出,该方法能够规划出一条从起点到终点的路径,该路径能够避开障碍物,并且能够满足无人机性能要求。
图 2 给出了无人机三维路径规划的仿真结果。从图 2 可以看出,该方法能够规划出一条从起点到终点的路径,该路径能够避开障碍物,并且能够满足无人机性能要求。
图 3 给出了无人机三维路径规划的仿真结果。从图 3 可以看出,该方法能够规划出一条从起点到终点的路径,该路径能够避开障碍物,并且能够满足无人机性能要求。
5. 结论
本文提出了一种基于 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 多种多目标优化算法实现考虑无人机性能的复杂城市地形路径规划方法。该方法首先建立了无人机三维路径规划模型,然后利用 NSGA2、MPNDS、MPNDS2、BPNNIA、BPHEIA、BPAIMA 等多目标优化算法对路径规划模型进行求解,最后对求解结果进行分析和比较。仿真结果表明,该方法能够有效地解决无人机三维路径规划问题,并能够满足无人机性能要求。

被折叠的 条评论
为什么被折叠?



