💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。当哲学课上老师问你什么是科学,什么是电的时候,不要觉得这些问题搞笑。哲学是科学之母,哲学就是追究终极问题,寻找那些不言自明只有小孩子会问的但是你却回答不出来的问题。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能让人胸中升起一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它居然给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
基于改进粒子群算法的多无人机协同航迹规划是一种利用优化算法解决复杂问题的方法,它旨在为多架无人机(UAVs)设计出高效、安全且符合任务要求的飞行路径。这种方法通过模仿鸟群的社会行为来搜索最优解,同时对基本粒子群优化(Particle Swarm Optimization, PSO)算法进行改进以适应多无人机系统的特殊需求。下面简要介绍其核心概念和一般流程。
基本概念
-
粒子群优化(PSO):这是一种群体智能优化技术,其中每个解表示为一个“粒子”,在解空间中搜索最优解。每个粒子根据自身历史最优解和群体最优解调整其飞行方向和速度。
-
多无人机协同:指多架无人机通过通信与协作,共同完成特定任务,如搜索救援、环境监测或货物运输等。协同要求无人机之间避免碰撞、共享信息并可能执行分工合作。
改进粒子群算法的应用
-
适应性调整参数:传统的PSO算法通常使用固定的参数设置,而在多无人机协同环境中,任务复杂度和环境动态性要求算法具备自适应性。改进措施可能包括动态调整惯性权重、认知系数和社交系数等,以适应不同的搜索阶段或环境变化。
-
约束处理:实际的无人机航迹规划需要考虑众多约束条件,如飞行器动力学限制、避障规则、飞行空域限制等。改进算法会引入惩罚函数或直接在粒子更新机制中嵌入约束处理策略,确保生成的航迹既优化又可行。
-
多目标优化:协同任务往往涉及多个相互冲突的目标,如最小化总飞行时间、最大化覆盖面积或减少能耗等。改进的PSO算法会采用多目标优化技术,如NSGA-II、MOEA/D等,寻找帕累托最优解集。
-
协同机制设计:为了促进无人机间的有效协作,算法需要设计特殊的协同机制,比如信息共享协议、任务分配策略和编队控制方法。这可能涉及到粒子编码方式的创新,以及在搜索过程中融入协同目标函数。
一般流程
- 初始化:随机生成初始粒子群,每个粒子代表一条可能的无人机航迹。
- 评估:根据预定义的目标函数(如总飞行距离、能量消耗、任务完成效率等)计算每个粒子的适应度值。
- 更新:依据当前粒子的最佳位置、群体全局最佳位置及调整策略更新每个粒子的速度和位置。
- 检查停止条件:如果达到预设的最大迭代次数或满足其他终止标准,则停止;否则返回步骤2。
- 结果提取:从最终的粒子群中选择最佳解作为多无人机的协同航迹规划方案。
📚2 运行结果
部分代码:
% 1 迭代图
plot(1:length(yy1),yy1,'Color',[233 196 107]/255,'LineWidth',2);
hold on;
plot(1:length(yy3),yy3,'Color',[38 70 83]/255,'LineWidth',2)
grid on
legend('PSO','IDM-PSO','FontSize',12,'FontName','Times New Roman')
xlabel('进化代数','FontSize',12)
ylabel('最优个体适应度','FontSize',12)
title('进化曲线对比','FontSize',14)
% 2 三维图
figure
subplot(121)
% 画起点和终点
p1 = scatter3(startPos(1), startPos(2), startPos(3),100,'bs','MarkerFaceColor','y');
hold on
p2 = scatter3(goalPos(1), goalPos(2), goalPos(3),100,'kp','MarkerFaceColor','y');
% 画山峰曲面
surf(X,Y,Z) % 画曲面图
shading flat % 各小曲面之间不要网格
colormap summer ;
% 威胁物
alpha=0.4; % 不透明度
a1=[270 200 0];
b1=[270 200 100];
R1 = 20;
[X1,Y1,Z1] = myplotcylinder(a1,b1,R1);
p3 = surf(X1,Y1,Z1,'facecolor',[2 48 71]/255,'edgecolor','none','FaceAlpha',alpha);hold on %圆柱表面
a2=[170 350 0];
b2=[170 350 100];
R2 = 30;
[X2,Y2,Z2] = myplotcylinder(a2,b2,R2);
surf(X2,Y2,Z2,'facecolor',[2 48 71]/255,'edgecolor','none','FaceAlpha',alpha) %圆柱表面
a3=[300 300 0];
b3=[300 300 100];
R3 = 25;
[X3,Y3,Z3] = myplotcylinder(a3,b3,R3);
surf(X3,Y3,Z3,'facecolor',[2 48 71]/255,'edgecolor','none','FaceAlpha',alpha) %圆柱表面
a4=[350 400 0];
b4=[350 400 100];
R4 = 30;
[X4,Y4,Z4] = myplotcylinder(a4,b4,R4);
surf(X4,Y4,Z4,'facecolor',[2 48 71]/255,'edgecolor','none','FaceAlpha',alpha) %圆柱表面
xlabel('x(m)','FontName','Times New Roman')
ylabel('y(m)','FontName','Times New Roman')
zlabel('z(m)','FontName','Times New Roman')
xlim([0,500]);ylim([0,500]);
% 画路径
% 利用三次样条拟合散点
pop = zbest1;
x_seq=[startPos(1), pop(1:dim), goalPos(1)];
y_seq=[startPos(2), pop(dim+1:2*dim), goalPos(2)];
z_seq=[startPos(3), pop(2*dim+1:3*dim), goalPos(3)];
k = length(x_seq);
i_seq = linspace(0,1,k);
xx_seq = linspace(0,1,100);
yy_seq = linspace(0,1,100);
zz_seq = linspace(0,1,100);
X_seq = spline(i_seq,x_seq,xx_seq);
Y_seq = spline(i_seq,y_seq,yy_seq);
Z_seq = spline(i_seq,z_seq,zz_seq);
path = [X_seq', Y_seq', Z_seq'];
pos = [[pop(1:dim)]' [pop(dim+1:2*dim)]' [pop(2*dim+1:3*dim)]'];
p4 = plot3(path(:,1), path(:,2),path(:,3),'Color',[233 196 107]/255,'LineWidth',2);
p4.LineWidth=3;
% 利用三次样条拟合散点
pop = zbest3;
x_seq=[startPos(1), pop(1:dim), goalPos(1)];
y_seq=[startPos(2), pop(dim+1:2*dim), goalPos(2)];
z_seq=[startPos(3), pop(2*dim+1:3*dim), goalPos(3)];
k = length(x_seq);
i_seq = linspace(0,1,k);
xx_seq = linspace(0,1,100);
yy_seq = linspace(0,1,100);
zz_seq = linspace(0,1,100);
X_seq = spline(i_seq,x_seq,xx_seq);
Y_seq = spline(i_seq,y_seq,yy_seq);
Z_seq = spline(i_seq,z_seq,zz_seq);
path = [X_seq', Y_seq', Z_seq'];
pos = [[pop(1:dim)]' [pop(dim+1:2*dim)]' [pop(2*dim+1:3*dim)]'];
p6 = plot3(path(:,1), path(:,2),path(:,3),'Color',[38 70 83]/255,'LineWidth',2);
hold off
grid on
legend([p1,p2,p3,p4,p6],'起点','终点','威胁区','PSO路线','IDM-PSO路线')
title('三维路线图')
subplot(122)
% alpha=1;
% 画起点和终点
p1 = scatter3(startPos(1), startPos(2), startPos(3),100,'bs','MarkerFaceColor','y');
hold on
p2 = scatter3(goalPos(1), goalPos(2), goalPos(3),100,'kp','MarkerFaceColor','y');
% 画山峰曲面
surf(X,Y,Z) % 画曲面图
shading flat % 各小曲面之间不要网格
colormap summer ;
p3 = surf(X1,Y1,Z1,'facecolor',[2 48 71]/255,'edgecolor',[2 48 71]/255,'FaceAlpha',alpha);hold on
surf(X2,Y2,Z2,'facecolor',[2 48 71]/255,'edgecolor',[2 48 71]/255,'FaceAlpha',alpha)
surf(X3,Y3,Z3,'facecolor',[2 48 71]/255,'edgecolor',[2 48 71]/255,'FaceAlpha',alpha)
surf(X4,Y4,Z4,'facecolor',[2 48 71]/255,'edgecolor',[2 48 71]/255,'FaceAlpha',alpha)
scatter3(b1(1),b1(2),b1(3),20,'MarkerFaceColor',[158 49 80]/255,'MarkerEdgeColor','none')
scatter3(b2(1),b2(2),b2(3),20,'MarkerFaceColor',[158 49 80]/255,'MarkerEdgeColor','none')
scatter3(b3(1),b3(2),b3(3),20,'MarkerFaceColor',[158 49 80]/255,'MarkerEdgeColor','none')
scatter3(b4(1),b4(2),b4(3),20,'MarkerFaceColor',[158 49 80]/255,'MarkerEdgeColor','none')
% 利用三次样条拟合散点
pop = zbest1;
x_seq=[startPos(1), pop(1:dim), goalPos(1)];
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。
[1]何文建.多无人机协同航迹规划方法的研究与应用[J].[2024-07-03].
[2]何文彪,胡永江,李文广.基于改进哈里斯鹰算法的异构无人机协同侦察航迹规划[J].中国惯性技术学报, 2023, 31(7):717-723.
[3]唐必伟.粒子群算法的改进及其在无人机任务规划中的应用[J].西北工业大学, 2017.
[4]方群,徐青.基于改进粒子群算法的无人机三维航迹规划[J].西北工业大学学报, 2017, 35(1):8.DOI:10.3969/j.issn.1000-2758.2017.01.011.
[4]秦赟.基于改进粒子群算法的无人机航迹规划[D].电子科技大学,2011.DOI:CNKI:CDMD:2.1011.192319.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取