项目介绍 MATLAB实现基于ACO-MLP-CNN 蚁群算法(ACO)结合多层感知机(MLP)与卷积神经网络(CNN)进行无人机三维路径规划(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点
MATLAB实现基于ACO-MLP-CNN 蚁群算法(ACO)结合多层感知机(MLP)与卷积神经网络(CNN)进行无人机三维路径规划的详细项目实例
请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人
或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解)
无人机三维路径规划已经从传统的二维平面航迹生成,发展为融合环境感知、智能决策、动态约束与实时控制的综合型任务。伴随低空经济、城市空域管理、应急通信、灾害搜救、精细化巡检与智能物流的持续推进,无人机的航线生成不再只是“从起点到终点”的几何连线问题,而是要同时兼顾空间障碍规避、航程能耗、姿态平稳、通信可达、任务时效以及飞行安全等多重指标。真实场景中,建筑群、山体、塔架、电力线路、禁飞区域、动态目标和气象扰动共同构成复杂三维环境,使得路径规划问题呈现明显的高维、非线性、强约束和动态变化特征。单纯依赖几何最短路径往往无法满足飞行安全需求,而仅仅依赖局部避障又容易陷入局部最优,导致航迹迂回、能耗过高或在复杂障碍密集区域失效。
蚁群算法在组合优化领域具有较强的全局搜索能力,能够通过信息素累积与路径概率选择,在离散空间中逐步逼近高质量解。对于三维路径规划而言,蚁群算法可以将环境离散为三维栅格、航路点集合或状态图结构,通过多只蚂蚁并行搜索候选航线,从而实现对复杂空间的全局探索。然而,传统蚁群算法也存在收敛速度不稳定、早熟收敛、对参数敏感、在动态环境中更新不足等问题。尤其在三维无人机路径规划中,环境规模一旦扩大,搜索空间迅速膨胀,单靠静态启发式信息往往难以充分利用环境先验与历史经验,搜索效率和解质量都会受到限制。
多层感知机能够对低维特征、统计特征以及路径评价指标进行非线性映射学习,适合用于路径代价评估、环境风险判别与启发式信息生成。卷积神经网络则擅长提取空间局部结构特征,对栅格化三维地图、障碍物分布、危险区域形态和局部通道结构具有较强的表达能力。将卷积神经网络与多层感知机组合,能够形成“空间感知加全局评估”的混合智能模型:CNN负责从三维环境切片、局部地图块或体素特征中提取空间结构信息,MLP负责融合无人机状态、任务约束、路径段特征与全局代价指标,最终输出路径评分、节点可行性、启发式引导值或风险预测值。再将该学习结果嵌入蚁群算法的信息素更新与转移概率计算中,就能够形成数据驱动与群智能搜索协同工作的路径规划框架。
这种 ACO-MLP-CNN 的组合策略具有明显工程价值。对固定场景而言,CNN 与 MLP 能够学习障碍分布与路径优劣之间的复杂关系,使蚁群搜索不再仅依赖距离和随机性,而是借助学习到的环境经验进行更有针对性的扩展;对动态场景而言,网络模型可以快速评估新出现的障碍影响,配合蚁群算法对信息素进行局部修正,从而提升重规划能力;对高复杂度场景而言,该框架能够兼顾全局寻优能力与局部辨识能力,缓解单一算法在收敛性、鲁棒性和泛化能力方面的短板。进一步地,在 MATLAB 环境中实现该方法,能够借助矩阵计算、神经网络工具箱、可视化能力以及优化建模能力,较方便地构建一个可运行、可调试、可扩展的完整原型系统,用于教学、科研验证和工程预研。
无人机三维路径规划的核心难点并不只是找出一条可飞路径,而是要在有限计算时间内找到一条综合代价更优、风险更低、平滑性更好、可执行性更强的轨迹。ACO-MLP-CNN 方法正是围绕这一目标建立起“环境理解、路径搜索、代价评估、动态修正”的统一闭环。CNN 提供空间感知能力,MLP 提供多因素融合能力,ACO 提供全局组合搜索能力,三者协同后能够在复杂三维空域中生成更具工程可落地性的无人机航迹方案。随着无人机任务从静态、单机、低密度环境走向动态、协同、强约束环境,这种融合式智能规划方案具有较强的现实意义和扩展潜力。
该项目的首要目标,是为无人机建立一套可以在复杂三维环境中稳定运行的路径生成机制。传统最短路径方法虽然能够快速给出几何意义上的连接结果,但在障碍稠密、禁飞区分布复杂、航线高度受限的环境里,往往无法保证安全边界与飞行约束。通过 ACO-MLP-CNN 融合框架,可以将环境中的障碍物、危险区域、飞行禁区以及地形起伏映射到统一的三维代价空间,再利用蚁群算法从起点到终点进行多路径并行探索,从而逐步筛选出更加安全的候选航迹。CNN 模块对局部空间结构的提取,可以让系统对狭窄通道、障碍聚集区和可通行空间具备更强识别能力;MLP 模块则可将路径段长度、转角变化、海拔差和风险指标统一编码为综合代价。最终形成的路径生成机制不仅关注能否到达目标,更关注是否能够以较低风险、较少绕行和更好稳定性完成任务,这对实战型无人机系统非常重要。
路径规划系统常见问题之一是搜索耗时长、结果波动大、参数调试繁琐。蚁群算法在高维三维空间中虽然具备较强的探索性,但若启发式信息不足,容易产生盲目搜索,导致迭代次数上升、收敛变慢。引入 CNN 与 MLP 之后,系统能够从历史环境样本和路径样本中学习更有效的启发信息,使蚂蚁在扩展节点时更倾向于选择高可行性、高收益方向,从而减少无效搜索。CNN 负责局部环境结构判断,MLP 负责多指标综合评分,两者共同生成更高质量的先验引导,使信息素更新不再完全依赖试探式回报,而是借助预测结果提前过滤明显劣解。这样一来,路径搜索过程的收敛速度、稳定性以及最终路径质量都会显著提升,尤其适合对计算时间敏感的巡检、救援和在线重规划任务。
无人机任务往往不是静态固定的,飞行过程中可能遇到新障碍、临时禁飞区域、气流扰动或任务点位置变化。纯规则型路径规划遇到环境变化后,通常需要重新完整搜索,代价较高。ACO-MLP-CNN 框架的意义在于,CNN 可以快速识别新环境局部结构变化,MLP 可以对变化带来的风险增量进行估计,蚁群算法则可以依据更新后的信息素与启发值迅速调整搜索方向,形成较强的在线重规划能力。由于该框架不是依赖单一几何规则,而是基于数据驱动特征和群智能搜索联合决策,因此对不同尺寸、不同障碍密度、不同目标位置的环境具有更好的泛化能力。对于实际应用来说,这意味着系统在新场景中不必每次都从零开始,而是可以利用已有经验快速形成可行航迹,这一点在灾害现场、陌生地形和临时任务中尤为关键。
无人机路径规划并不是孤立模块,往往与载荷能耗、通信链路、航迹平滑、任务时限和空域规则紧密相关。该项目的意义之一,在于将“能飞”“飞得安全”“飞得经济”“飞得稳定”整合到统一的决策框架中。ACO 负责离散空间中的全局路径组合,CNN 为局部空间结构提供特征表达,MLP 则进一步融合速度、距离、风险、转角、爬升率等多维指标,形成统一的路径评估结果。该机制特别适合需要多目标权衡的任务场景,例如电力巡检要求路径尽量沿设备分布区域稳定覆盖,应急物资投送要求路径尽量短且避开高风险区域,环境监测则要求在固定时间内完成多个观测点访问。通过该框架,路径规划不再只是“找路”,而是转化为面向任务约束的综合优化问题,对提升无人机系统智能化水平具有现实意义。
三维路径规划的第一大难点在于环境表达。二维平面中的障碍通常可以通过多边形或占据网格表示,而三维空域则需要同时刻画地形高度、空中障碍、建筑物体积、禁飞层和通行走廊。若离散粒度过粗,路径会失去精度,容易出现穿越障碍或过度保守;若离散粒度过细,状态空间会迅速膨胀,导致蚁群搜索负担过重,神经网络训练样本需求也随之增加。解决该问题的关键,是采用分层离散化与局部体素化相结合的方式:宏观层面使用航路图、关键航点或粗栅格组织全局搜索,微观层面用局部三维体素或邻域块提取 CNN 输入特征。这样既保留了三维环境的空间结构,又避免单纯高分辨率网格带来的计算爆炸。与此同时,可在代价函数中加入障碍距离惩罚、爬升代价和危险区额外惩罚,使离散环境中的每个节点都具备可解释的风险权重,为后续蚁群与神经网络联动提供统一基础。
蚁群算法在复杂空间中常见的问题是信息素过快集中,导致搜索过早偏向局部优解,后续迭代缺乏足够探索性;同时,信息素挥发系数、启发式权重、信息素重要度以及蚂蚁数量等参数对结果影响较大。若参数选择不合适,算法可能出现振荡、停滞或收敛缓慢。针对这一问题,解决方案应从“启发式增强”和“更新机制改良”两个方面入手。启发式增强方面,可由 CNN 对局部环境结构进行识别,输出节点可行性与通道优先级,由 MLP 进一步融合路径长度、转角和平滑性给出综合评分,从而让蚂蚁在构造路径时不再单看距离。更新机制方面,可采用精英保留、局部信息素重置、分阶段挥发率调整以及边界惩罚等策略,抑制早熟收敛。通过神经网络预测值参与转移概率,蚁群在探索早期更开放,在后期更聚焦,能够兼顾全局搜索广度与局部收敛质量,提升稳定性。
将 CNN 与 MLP 嵌入蚁群算法后,系统不再是单纯的搜索程序,而是包含训练、验证、推理、信息素迭代和路径反馈的复合系统。难点在于如何构造训练样本、如何避免模型过拟合、如何确保网络输出与路径规划目标一致,以及如何在 MATLAB 中实现稳定运行。解决方式是在样本层面构建多场景三维地图数据、路径片段样本和评价标签,使 CNN 学习局部空间结构,MLP 学习多指标融合映射;在训练层面采用规范化输入、交叉验证、早停和权重衰减控制泛化误差;在部署层面,将训练好的模型作为蚁群的辅助决策模块,只在构造路径时参与评分,不直接替代搜索。这样可以避免神经网络因训练不足而造成的错误决策,也可以保留蚁群算法的可解释性和鲁棒性。若模型预测与真实代价不一致,则通过在线反馈重新调整信息素分布,实现“搜索结果反哺模型”的闭环优化。
整个系统的基础是三维环境建模层,该层负责把真实空域转换为可计算的数字地图。建模过程中,环境中的地形高度、建筑体、禁飞区、危险区域和任务区域都需要被编码为三维占据信息或代价体素。对于无人机路径规划来说,环境不是简单的“可走”与“不可走”,而是一个连续变化的风险场。为便于 ACO 和神经网络处理,通常采用三维栅格、体素地图或航路图方式进行离散化,每个节点都包含坐标、可通行性、局部风险值、与障碍物的距离、能量代价等属性。三维建模层的核心原理在于把几何信息转化为结构化状态信息,从而为后续算法提供统一输入。该层若设计合理,将直接影响搜索空间大小、网络输入形态和路径可解释性。建模过程中还可结合地图膨胀策略,对障碍物边缘设置安全缓冲区,避免路径过于贴近障碍导致实际飞行风险上升。
卷积神经网络在该项目中的作用,是从局部三维或二维投影环境中学习空间结构特征。无人机在飞行中面对的障碍布局往往具有明显局部模式,例如建筑群之间的狭窄通道、障碍物围成的凹形区域、上方高风险下方可通行的立体结构等。这类模式不容易被简单距离指标表达,而卷积网络擅长通过卷积核在局部邻域中提取边缘、通道、密集区和空旷区等特征。理论上,CNN 通过层层卷积与池化,逐渐扩大感受野,学习从局部几何结构到更高层空间语义的映射关系。在 ACO-MLP-CNN 框架中,CNN 输出的不仅是图像分类意义上的标签,而是节点可通行概率、局部风险分数或方向优先级等结构化特征,这些结果可直接作为蚁群算法的信息素偏置项或启发式项,从而让搜索更具方向性和环境敏感性。
多层感知机在该模型中承担融合与判别任务。经过 CNN 提取的空间特征,通常还需要与路径长度、转角变化、爬升高度、飞行能耗、风险距离和目标接近度等指标共同输入到 MLP 中进行综合映射。MLP 的基本原理是利用多层全连接结构和非线性激活函数,把多维特征转换为单一评分或多输出评价值。与线性模型相比,MLP 能够表达复杂的非线性关系,适合处理“某条路径是否优于另一条路径”这类综合判断问题。对于无人机路径规划而言,MLP 输出可以表示路径段代价、下一节点吸引度、整体可行性评分或多目标权衡分值。这样一来,蚁群算法在做路径转移概率计算时,不再只依赖几何距离,而是结合 MLP 生成的综合评价,实现更贴近任务目标的路径选择。MLP 还可在训练阶段利用历史最优路径样本进行监督学习,从而把经验知识注入规划系统。
蚁群算法是整个系统的决策核心之一,其原理来源于自然界蚂蚁通过信息素寻路的群体行为。每只蚂蚁从起点出发,在环境图上按概率选择下一节点,节点选择概率通常与信息素强度和启发式可取性有关。路径构造完成后,算法根据路径质量进行信息素更新,优质路径会得到更多信息素奖励,较差路径则随着挥发而逐渐淡出。该机制能够让群体逐渐聚焦到高质量解附近。在 ACO-MLP-CNN 框架中,蚁群算法不再单纯使用距离倒数作为启发函数,而是结合 CNN 输出的局部结构评分与 MLP 预测的综合路径质量,这样可以大幅提升搜索效率。信息素更新层还需要考虑三维规划中的安全惩罚、转角惩罚和高度变化惩罚,以避免路径虽然短却不适飞行。通过精英策略、局部更新和全局强化的组合,系统可以在保持探索性的同时加快收敛。
路径规划系统最终不仅要给出数值结果,还要能够进行直观展示与验证。路径优化与可视化验证层负责对 ACO 搜索得到的候选航迹进行平滑处理、可飞性检查、长度统计、风险评估和三维图形展示。无人机实际飞行对轨迹平滑性要求较高,离散节点路径若直接执行,容易出现频繁转弯和姿态抖动,因此需要在最终输出阶段进行路径后处理,例如通过插值、样条拟合或折线合并减小拐点数量。验证层还要计算路径总长度、总爬升量、转角平均值、最低安全距离等指标,并借助三维图、热力图、收敛曲线展示算法表现。MATLAB 在这一步具有明显优势,可通过三维绘图、轨迹动画和曲线统计帮助分析不同参数配置下的性能差异。该层不仅是结果呈现模块,也是调试和迭代优化的重要依据。
一、三维环境数据构建与栅格化
clear; % 清空工作区变量,避免旧变量影响当前环境构建
clc; % 清空命令行窗口,便于观察本次运行输出
rng(42); % 固定随机种子,保证环境生成与结果可复现
gridSize = [30, 30, 12]; % 定义三维栅格尺寸,表示x、y、z三个方向的离散规模
startNode = [2, 2, 2]; % 定义无人机起点坐标,位于三维栅格内部边缘
goalNode = [28, 28, 10]; % 定义无人机终点坐标,位于对角远端高层区域
occMap = false(gridSize); % 创建三维占据地图,false表示当前体素默认可通行
occMap(10:14, 8:18, 1:8) = true; % 构建一组高体积障碍物,模拟建筑群阻挡
occMap(18:22, 4:12, 1:6) = true; % 构建另一组障碍物,模拟低空密集设施
occMap(6:9, 20:26, 1:9) = true; % 构建高耸障碍区域,模拟塔架或立体禁入结构
occMap(15:17, 15:17, 1:12) = true; % 构建竖直贯通障碍,模拟核心禁飞区
occMap(startNode(1), startNode(2), startNode(3)) = false; % 确保起点位置可通行,避免初始状态无解
occMap(goalNode(1), goalNode(2), goalNode(3)) = false; % 确保终点位置可通行,避免目标点被占据
[xg, yg, zg] = ndgrid(1:gridSize(1), 1:gridSize(2), 1:gridSize(3)); % 生成三维坐标网格,用于后续节点遍历与空间映射
二、CNN 输入样本与局部空间特征提取
patchSize = 5; % 定义局部三维块尺寸,用于提取节点周围空间结构
halfPatch = floor(patchSize/2); % 计算局部块半径,便于围绕中心点截取邻域
samplePoint = [12, 12, 4]; % 选取一个代表性空间点,用于演示局部特征提取
localPatch = zeros(patchSize, patchSize, patchSize); % 初始化局部体素块,存储环境片段
for ix = 1:patchSize % 遍历局部块x方向
for iy = 1:patchSize % 遍历局部块y方向
for iz = 1:patchSize % 遍历局部块z方向
gx = samplePoint(1) + ix - halfPatch - 1; % 计算局部块对应的全局x坐标
gy = samplePoint(2) + iy - halfPatch - 1; % 计算局部块对应的全局y坐标
gz = samplePoint(3) + iz - halfPatch - 1; % 计算局部块对应的全局z坐标
if gx >= 1 && gx <= gridSize(1) && gy >= 1 && gy <= gridSize(2) && gz >= 1 && gz <= gridSize(3) % 判断坐标是否越界
localPatch(ix, iy, iz) = occMap(gx, gy, gz); % 将占据信息写入局部块
else
localPatch(ix, iy, iz) = 1; % 边界外视为障碍,增强安全保守性
end
end
end
end
cnnInput = reshape(single(localPatch), [patchSize, patchSize, patchSize, 1]); % 将局部块整理为CNN输入格式,单精度更适合网络推理
三、MLP 综合代价评估网络结构
featureVec = [0.72, 0.41, 0.58, 0.26, 0.63, 0.35]; % 构造路径特征向量,包含距离、风险、转角、高度变化等指标
mlpWeights1 = randn(8, numel(featureVec)) * 0.2; % 初始化第一层权重矩阵,用于特征映射
mlpBias1 = zeros(8, 1); % 初始化第一层偏置,保证起始输出稳定
mlpWeights2 = randn(4, 8) * 0.2; % 初始化第二层权重矩阵,用于中间层抽象表示
mlpBias2 = zeros(4, 1); % 初始化第二层偏置,增强表达灵活性
mlpWeights3 = randn(1, 4) * 0.2; % 初始化输出层权重矩阵,输出单一综合评分
mlpBias3 = 0; % 初始化输出层偏置,表示基础代价偏移
hidden1 = tanh(mlpWeights1 * featureVec(:) + mlpBias1); % 第一隐藏层非线性变换,提取组合特征
hidden2 = tanh(mlpWeights2 * hidden1 + mlpBias2); % 第二隐藏层进一步压缩并增强非线性表达
mlpScore = 1 ./ (1 + exp(-(mlpWeights3 * hidden2 + mlpBias3))); % 输出层使用Sigmoid归一化综合评分,范围在0到1之间
四、ACO 节点转移概率计算
currentNode = [3, 3, 2]; % 定义当前蚂蚁所在节点,用于计算下一步转移概率
candidateNodes = [4, 3, 2; 3, 4, 2; 3, 3, 3; 4, 4, 2]; % 构造若干候选节点,表示邻域可选方向
tau = [1.4, 1.2, 1.6, 1.1]; % 定义候选边信息素强度,体现历史搜索偏好
eta = [0.8, 0.9, 0.95, 0.7]; % 定义候选边启发式值,可由距离和CNN/MLP融合得到
alpha = 1.5; % 设置信息素重要度,控制历史经验在转移决策中的权重
beta = 2.0; % 设置启发式重要度,控制局部可行性在转移决策中的权重
combinedHeuristic = eta .* (0.6 + 0.4 * mlpScore); % 将MLP评分注入启发式信息,增强对优质路径的偏好
probNumerator = (tau .^ alpha) .* (combinedHeuristic .^ beta); % 计算每个候选节点的概率分子
probability = probNumerator / sum(probNumerator); % 归一化得到转移概率分布
[~, selectedIdx] = max(probability); % 选择概率最高的候选节点作为当前示例转移结果
nextNode = candidateNodes(selectedIdx, :); % 记录选中的下一节点,作为路径延伸方向
五、信息素更新与精英强化机制
pheromone = ones(gridSize) * 0.5; % 初始化三维信息素矩阵,所有通道先设置为均匀状态
rho = 0.15; % 设置信息素挥发系数,控制旧经验的遗忘速度
Q = 80; % 设置信息素释放强度系数,用于奖励高质量路径
pathNodes = [startNode; 3 3 2; 4 4 2; 6 7 3; 9 10 4; 12 14 5; goalNode]; % 构造一条示例路径,表示搜索得到的候选航迹
pathLength = 0; % 初始化路径长度累计值
for k = 1:size(pathNodes,1)-1 % 遍历路径中相邻节点对
pathLength = pathLength + norm(pathNodes(k+1,:) - pathNodes(k,:)); % 计算相邻节点欧氏距离并累加
end
pathQuality = 1 / (pathLength + 0.01); % 根据路径长度定义质量值,越短对应奖励越高
pheromone = (1 - rho) * pheromone; % 先执行全局挥发操作,避免信息素无限堆积
for k = 1:size(pathNodes,1)-1 % 再对路径中的每条边进行强化
px = pathNodes(k,1); % 提取边起点x坐标
py = pathNodes(k,2); % 提取边起点y坐标
pz = pathNodes(k,3); % 提取边起点z坐标
pheromone(px, py, pz) = pheromone(px, py, pz) + Q * pathQuality; % 在当前节点位置施加信息素增量
end
六、三维路径可视化与结果检查
figure('Color','w'); % 创建白色背景图窗,便于展示三维路径
hold on; % 打开叠加绘图模式,方便同时绘制障碍物与路径
axis equal; % 保持三维坐标比例一致,避免几何形变
xlabel('X'); % 设置x轴标签,表示空间横向坐标
ylabel('Y'); % 设置y轴标签,表示空间纵向坐标
zlabel('Z'); % 设置z轴标签,表示空间高度坐标
title('ACO-MLP-CNN 三维无人机路径规划示意'); % 设置图像说明,突出三维路径规划主题
for ix = 1:gridSize(1) % 遍历三维栅格x方向
for iy = 1:gridSize(2) % 遍历三维栅格y方向
for iz = 1:gridSize(3) % 遍历三维栅格z方向
if occMap(ix, iy, iz) % 判断当前位置是否为障碍体素
plot3(ix, iy, iz, 'ks', 'MarkerFaceColor', [0.2 0.2 0.2], 'MarkerSize', 4); % 绘制障碍物体素,使用深色方块显示
end
end
end
end
route = pathNodes; % 将示例路径作为最终航迹显示
plot3(route(:,1), route(:,2), route(:,3), '-ro', 'LineWidth', 2, 'MarkerSize', 6); % 绘制无人机路径,红色折线加圆点标记
plot3(startNode(1), startNode(2), startNode(3), 'gp', 'MarkerFaceColor', 'g', 'MarkerSize', 12); % 绘制起点,使用绿色五角星突出
plot3(goalNode(1), goalNode(2), goalNode(3), 'bp', 'MarkerFaceColor', 'b', 'MarkerSize', 12); % 绘制终点,使用蓝色五角星突出
view(3); % 设置三维视角,便于观察航迹空间结构
grid on; % 显示网格,提高空间读图精度
hold off; % 关闭叠加绘图模式,完成结果展示
clear; % 清空工作区变量,避免旧变量影响当前环境构建
clc; % 清空命令行窗口,便于观察本次运行输出
rng(42); % 固定随机种子,保证环境生成与结果可复现
gridSize = [30, 30, 12]; % 定义三维栅格尺寸,表示x、y、z三个方向的离散规模
startNode = [2, 2, 2]; % 定义无人机起点坐标,位于三维栅格内部边缘
goalNode = [28, 28, 10]; % 定义无人机终点坐标,位于对角远端高层区域
occMap = false(gridSize); % 创建三维占据地图,false表示当前体素默认可通行
occMap(10:14, 8:18, 1:8) = true; % 构建一组高体积障碍物,模拟建筑群阻挡
occMap(18:22, 4:12, 1:6) = true; % 构建另一组障碍物,模拟低空密集设施
occMap(6:9, 20:26, 1:9) = true; % 构建高耸障碍区域,模拟塔架或立体禁入结构
occMap(15:17, 15:17, 1:12) = true; % 构建竖直贯通障碍,模拟核心禁飞区
occMap(startNode(1), startNode(2), startNode(3)) = false; % 确保起点位置可通行,避免初始状态无解
occMap(goalNode(1), goalNode(2), goalNode(3)) = false; % 确保终点位置可通行,避免目标点被占据
[xg, yg, zg] = ndgrid(1:gridSize(1), 1:gridSize(2), 1:gridSize(3)); % 生成三维坐标网格,用于后续节点遍历与空间映射
patchSize = 5; % 定义局部三维块尺寸,用于提取节点周围空间结构
halfPatch = floor(patchSize/2); % 计算局部块半径,便于围绕中心点截取邻域
samplePoint = [12, 12, 4]; % 选取一个代表性空间点,用于演示局部特征提取
localPatch = zeros(patchSize, patchSize, patchSize); % 初始化局部体素块,存储环境片段
for ix = 1:patchSize % 遍历局部块x方向
for iy = 1:patchSize % 遍历局部块y方向
for iz = 1:patchSize % 遍历局部块z方向
gx = samplePoint(1) + ix - halfPatch - 1; % 计算局部块对应的全局x坐标
gy = samplePoint(2) + iy - halfPatch - 1; % 计算局部块对应的全局y坐标
gz = samplePoint(3) + iz - halfPatch - 1; % 计算局部块对应的全局z坐标
if gx >= 1 && gx <= gridSize(1) && gy >= 1 && gy <= gridSize(2) && gz >= 1 && gz <= gridSize(3) % 判断坐标是否越界
localPatch(ix, iy, iz) = occMap(gx, gy, gz); % 将占据信息写入局部块
else
localPatch(ix, iy, iz) = 1; % 边界外视为障碍,增强安全保守性
end
end
end
end
cnnInput = reshape(single(localPatch), [patchSize, patchSize, patchSize, 1]); % 将局部块整理为CNN输入格式,单精度更适合网络推理
featureVec = [0.72, 0.41, 0.58, 0.26, 0.63, 0.35]; % 构造路径特征向量,包含距离、风险、转角、高度变化等指标
mlpWeights1 = randn(8, numel(featureVec)) * 0.2; % 初始化第一层权重矩阵,用于特征映射
mlpBias1 = zeros(8, 1); % 初始化第一层偏置,保证起始输出稳定
mlpWeights2 = randn(4, 8) * 0.2; % 初始化第二层权重矩阵,用于中间层抽象表示
mlpBias2 = zeros(4, 1); % 初始化第二层偏置,增强表达灵活性
mlpWeights3 = randn(1, 4) * 0.2; % 初始化输出层权重矩阵,输出单一综合评分
mlpBias3 = 0; % 初始化输出层偏置,表示基础代价偏移
hidden1 = tanh(mlpWeights1 * featureVec(:) + mlpBias1); % 第一隐藏层非线性变换,提取组合特征
hidden2 = tanh(mlpWeights2 * hidden1 + mlpBias2); % 第二隐藏层进一步压缩并增强非线性表达
mlpScore = 1 ./ (1 + exp(-(mlpWeights3 * hidden2 + mlpBias3))); % 输出层使用Sigmoid归一化综合评分,范围在0到1之间
currentNode = [3, 3, 2]; % 定义当前蚂蚁所在节点,用于计算下一步转移概率
candidateNodes = [4, 3, 2; 3, 4, 2; 3, 3, 3; 4, 4, 2]; % 构造若干候选节点,表示邻域可选方向
tau = [1.4, 1.2, 1.6, 1.1]; % 定义候选边信息素强度,体现历史搜索偏好
eta = [0.8, 0.9, 0.95, 0.7]; % 定义候选边启发式值,可由距离和CNN/MLP融合得到
alpha = 1.5; % 设置信息素重要度,控制历史经验在转移决策中的权重
beta = 2.0; % 设置启发式重要度,控制局部可行性在转移决策中的权重
combinedHeuristic = eta .* (0.6 + 0.4 * mlpScore); % 将MLP评分注入启发式信息,增强对优质路径的偏好
probNumerator = (tau .^ alpha) .* (combinedHeuristic .^ beta); % 计算每个候选节点的概率分子
probability = probNumerator / sum(probNumerator); % 归一化得到转移概率分布
[~, selectedIdx] = max(probability); % 选择概率最高的候选节点作为当前示例转移结果
nextNode = candidateNodes(selectedIdx, :); % 记录选中的下一节点,作为路径延伸方向
pheromone = ones(gridSize) * 0.5; % 初始化三维信息素矩阵,所有通道先设置为均匀状态
rho = 0.15; % 设置信息素挥发系数,控制旧经验的遗忘速度
Q = 80; % 设置信息素释放强度系数,用于奖励高质量路径
pathNodes = [startNode; 3 3 2; 4 4 2; 6 7 3; 9 10 4; 12 14 5; goalNode]; % 构造一条示例路径,表示搜索得到的候选航迹
pathLength = 0; % 初始化路径长度累计值
for k = 1:size(pathNodes,1)-1 % 遍历路径中相邻节点对
pathLength = pathLength + norm(pathNodes(k+1,:) - pathNodes(k,:)); % 计算相邻节点欧氏距离并累加
end
pathQuality = 1 / (pathLength + 0.01); % 根据路径长度定义质量值,越短对应奖励越高
pheromone = (1 - rho) * pheromone; % 先执行全局挥发操作,避免信息素无限堆积
for k = 1:size(pathNodes,1)-1 % 再对路径中的每条边进行强化
px = pathNodes(k,1); % 提取边起点x坐标
py = pathNodes(k,2); % 提取边起点y坐标
pz = pathNodes(k,3); % 提取边起点z坐标
pheromone(px, py, pz) = pheromone(px, py, pz) + Q * pathQuality; % 在当前节点位置施加信息素增量
end
figure('Color','w'); % 创建白色背景图窗,便于展示三维路径
hold on; % 打开叠加绘图模式,方便同时绘制障碍物与路径
axis equal; % 保持三维坐标比例一致,避免几何形变
xlabel('X'); % 设置x轴标签,表示空间横向坐标
ylabel('Y'); % 设置y轴标签,表示空间纵向坐标
zlabel('Z'); % 设置z轴标签,表示空间高度坐标
title('ACO-MLP-CNN 三维无人机路径规划示意'); % 设置图像说明,突出三维路径规划主题
for ix = 1:gridSize(1) % 遍历三维栅格x方向
for iy = 1:gridSize(2) % 遍历三维栅格y方向
for iz = 1:gridSize(3) % 遍历三维栅格z方向
if occMap(ix, iy, iz) % 判断当前位置是否为障碍体素
plot3(ix, iy, iz, 'ks', 'MarkerFaceColor', [0.2 0.2 0.2], 'MarkerSize', 4); % 绘制障碍物体素,使用深色方块显示
end
end
end
end
route = pathNodes; % 将示例路径作为最终航迹显示
plot3(route(:,1), route(:,2), route(:,3), '-ro', 'LineWidth', 2, 'MarkerSize', 6); % 绘制无人机路径,红色折线加圆点标记
plot3(startNode(1), startNode(2), startNode(3), 'gp', 'MarkerFaceColor', 'g', 'MarkerSize', 12); % 绘制起点,使用绿色五角星突出
plot3(goalNode(1), goalNode(2), goalNode(3), 'bp', 'MarkerFaceColor', 'b', 'MarkerSize', 12); % 绘制终点,使用蓝色五角星突出
view(3); % 设置三维视角,便于观察航迹空间结构
grid on; % 显示网格,提高空间读图精度
hold off; % 关闭叠加绘图模式,完成结果展示




更多详细内容请访问
http://【无人机路径规划】MATLAB实现基于ACO-MLP-CNN蚁群算法(ACO)结合多层感知机(MLP)与卷积神经网络(CNN)进行无人机三维路径规划的详细项目实例(含完整的程序,GUI设计和代码详资源-CSDN下载 https://download.csdn.net/download/xiaoxingkongyuxi/92858662
https://download.csdn.net/download/xiaoxingkongyuxi/92858662
https://download.csdn.net/download/xiaoxingkongyuxi/92858662
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)