⛳️座右铭:行百里者,半于九十。
更多Matlab路径规划仿真内容点击👇
①Matlab路径规划(进阶版)
②付费专栏Matlab路径规划(初级版)
⛳️关注CSDN海神之光,更多资源等你来!!
0 引言
随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化、完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下救援的白鲨MIX水下无人机等,决定飞行器性能主要是内部的飞控系统和外部的路径规划问题。就路径问题而言,在具体实施任务时仅靠操作员手中的遥控器控制无人飞行器执行相应的工作,可能会对操作员心理以及技术提出极高的要求,为了避免个人操作失误,进而造成飞行器损坏的危险,一种解决问题的方法就是对飞行器进行航迹规划。
飞行器的测量精度,航迹路径的合理规划,飞行器工作时的稳定性、安全性等这些变化对飞行器的综合控制系统要求越来越高。无人机航路规划是为了保证无人机完成特定的飞行任务,并且能够在完成任务的过程中躲避各种障碍、威胁区域而设计出最优航迹路线的问题。
1 蚁群算法(ant colony algorithm,ACA)起源和发展历程
Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,于是在1991年在其博士论文中首次系统地提出一种基于蚂蚁种群的新型智能优化算法“蚂蚁系统(Ant system,简称AS)”,后来,提出者及许多研究者对该算法作了各种改进,将其应用于更为广泛的领域,如图着色问题、二次分配问题、工件排序问题、车辆路径问题、车间作业调度问题、网络路由问题、大规模集成电路设计等。近些年来,M.Dorigo等人把蚂蚁算法进一步发展成一种通用的优化技术“蚁群优化(Ant Colony Optimization,简称ACO)”,并将所有符合ACO框架的算法称为“蚁群优化算法(ACO algorithm)”。
t=[4 5;16 25.8;10 45;20 55;30 65;35 55;29 31;37 26;47 27;50 51.3;51 17;14 7;40 10;26.7 22.5;21 39;38 42;5 26;28 53;20 13;10 60;26 41;54 38;7 58;12 36;30 2] %24个点,第25个点事origin
save t.mat t
load t.mat
%%计算城市间相互距离
%n=size(t,1);
n=6;
D=zeros(25,25);
for i=1:25
for j=1:25
if i~=j
D(i,j)=sqrt(sum((t(i,:)-t(j,:)).^2));
else
D(i,j)=1e-4;
end
end
end
%%初始化参数
m=4; %蚂蚁个数 【原来是1只蚂蚁要走过24个点,现在是4只蚂蚁总共走过24个点】【5组蚂蚁,每组里面4只,每只走过6个点】
alpha=1; %信息素重要程度因子
beta=5; %启发函数重要程度因子
rho=0.1; %信息素挥发因子
Q=50; %总量
eta=1https://blog.csdn.net/TIQCmatlab/article/details/D; %启发函数
tau=ones(25,25);%信息素矩阵
table=zeros(m,n);%路径记录表
iter=1; %迭代次数初始值
iter_max=400; %迭代次数最大值
route_best=zeros((4*iter_max),n); %每次迭代最佳路径
length_best=zeros(iter_max,1);%每次迭代最佳路径长度(应该是一次比一次小)
length_ave=zeros(iter_max,1); %每次迭代路径平均长度
%%迭代寻找最佳路径
while iter<=iter_max
city_index=1:24; %城市来标号
wholetable=[];
s=1;
while s<=10
start=zeros(4,1);
temp=randperm(24);
for i=1:4
start(i)=temp(i);
end
table(:,1)=start;
for j=2:n
for i=1:m
tabu=table(1:((j-1)4+i-1)); %把第i只蚂蚁之前所走过的所有城市放入禁忌表中 【把table里面从第一个数到j-1全放到禁忌表中】
allow_index=~ismember(city_index,tabu); %【走过的变成0,能走的为1】【若tabu=(1 4)则allow_index=(0 1 1 0 1 1 1…)】【注意:allow_index与city_index同维】
allow=city_index(allow_index); %把还能走的序号摘出来了(待访问的城市集合)
P=allow;
%计算城市的转移概率
for k=1:max(size(allow))
P(k)=(tau(tabu(end-3),allow(k))alpha)*(eta(tabu(end-3),allow(k))beta);
end
P=P/sum§;
%轮盘赌法选择下一个城市
pc=cumsum§; % (p1 p1+p2 p1+p2+p3 p1+p2+p3+p4 …)【p1<->allow(1) p2<->allow(2) …】
target_index=find(pc>=rand); %选中那个概率较大的选中的点,返回的是allow数组中的序号
target=allow(target_index(1)); %这次返回的是allow数组中城市的真正序号
table(i,j)=target; %把选好这个点放到路径表里面
end
end
wholetable=[wholetable;table];
table=zeros(m,n); %下面要做的是把table表清零然后重新走
s=s+1; %第5次完了以后table里第一列有数,所以下次iter循环的时候应该清零,其实不清零也行,后面有再给table第一列覆盖数
end
%吧wholetable总共40行,先每行进行2-opt之后,再更新信息素
s1=wholetable;
wholetable2=wholetable;
for tt=1:40
% s1(tt,:)=wholetable(tt,:);
l1(tt)=0;
for e=1:5
l1(tt)=l1(tt)+D(wholetable(tt,e),wholetable(tt,(e+1)));
end
l1(tt)=l1(tt)+D(wholetable(tt,1),25)+D(wholetable(tt,6),25); %l1是2opt之前每行的长度
% wholetable2(tt,:)=wholetable(tt,:);
for i=1:5
for j=1:6
if j>i
for k=0:fix((j-i)/2)
u=s1(tt,(i+k));
s1(tt,(i+k))=s1(tt,(j-k));
s1(tt,(j-k))=u;
end
l0=0;
for e=1:5
l0=l0+D(s1(tt,e),s1(tt,(e+1)));
end
l0=l0+D(s1(tt,1),25)+D(s1(tt,6),25); %l0是每次之后每行的长度
if l0<=l1(tt)
l1(tt)=l0;
wholetable2(tt,:)=s1(tt,:);
else
l1(tt)=l1(tt);
wholetable2(tt,:)=wholetable2(tt,:);
end
s1(tt,:)=wholetable(tt,:);
end
end
end
end %wholetable2(tt,:)里面放的都是改过的最短的路径,共40行;l1(tt)放的是改过后最短的长度,共40行
%%开始计算路径啦
Length_=[];
h=0;
while h<=37
Length1=zeros(4,1);
for i=1:4
route1=wholetable2((i+h)😅; %【把第i只蚂蚁走过的路径给route】【route里就是m只蚂蚁每只走过的序列了】
for j=1:5
Length1(i)=Length1(i)+D(route1(j),route1(j+1));
end
Length1(i)=Length1(i)+D(route1(6),25)+D(route1(1),25);
end
length1=0;
for r=1:4
length1=length1+Length1®;
end
Length_=[Length_;length1]; %Length_是一个10行的纵矩阵
h=h+4;
end
%%计算最短路径及平均距离
if iter==1
[min_length,min_index]=min(Length_);
length_best(iter)=min_length;
length_ave(iter)=mean(Length_);
route_best(1:4,:)=wholetable2((4min_index-3):(4min_index)😅; %route_best(1:4,:)是本次10只蚂蚁中总和最短的4条路径
else
[min_length,min_index]=min(Length_);
length_best(iter)=min(min_length,length_best(iter-1));
length_ave(iter)=mean(Length_);
if length_best(iter)==min_length
route_best((4iter-3):(4iter),:)=wholetable2((4min_index-3):(4min_index)😅;
else
route_best((4iter-3):(4iter),:)=route_best((4iter-7):(4*iter-4)😅;
end
end
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
[3]巫茜,罗金彪,顾晓群,曾青.基于改进PSO的无人机三维航迹规划优化算法[J].兵器装备工程学报. 2021,42(08)
[4]邓叶,姜香菊.基于改进人工势场法的四旋翼无人机航迹规划算法[J].传感器与微系统. 2021,40(07)
[5]马云红,张恒,齐乐融,贺建良.基于改进A*算法的三维无人机路径规划[J].电光与控制. 2019,26(10)
[6]焦阳.基于改进蚁群算法的无人机三维路径规划研究[J].舰船电子工程. 2019,39(03)
3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除
🍅 仿真咨询
1 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化
2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化
5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配
6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化
7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化
8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置
9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长