1. 项目概述
今天咱们来点硬核的——用MATLAB实现三种群智能算法在栅格地图路径规划中的实战对比。作为一名在路径规划领域摸爬滚打多年的老司机,我发现很多初学者在面对各种优化算法时常常一头雾水。本文将用最接地气的方式,带大家手把手实现灰狼优化(GWO)、蜣螂优化(DBO)和麻雀搜索(SSA)算法,并在同一张地图上PK它们的表现。
提示:本文所有代码都已添加详细中文注释,即使是MATLAB新手也能轻松上手。文末还提供了五种预设地图和完整代码仓库。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与地图生成
2.1 创建栅格地图
首先我们需要一个测试场地——这里用20×20的栅格地图,障碍物密度设为30%。打开MATLAB创建一个CreateMap.m文件:
matlab复制function CreateMap(version)
mapSize = 20;
obstacleProb = 0.3; % 障碍物出现概率
rng('shuffle'); % 随机种子
% 生成随机地图(1可通行,-1障碍物)
map = randi([0,1], mapSize, mapSize);
map(map==0) = -1;
% 确保起点和终点不被障碍物阻挡
map(1,1) = 1; % 起点(1,1)
map(end,end) = 1; % 终点(20,20)
save(['mapData_v' num2str(version) '.mat'], 'map');
disp(['地图v' num2str(version) '生成完毕']);
end
避坑指南:每次生成新地图后,务必修改保存的文件名版本号,否则会覆盖旧地图。我曾在调试时因为忘记改版本号,导致反复加载错误地图排查了半天。
2.2 地图可视化
添加以下代码可以直观查看生成的地图:
matlab复制load('mapData_v1.mat');
imagesc(map);
colormap([1 0 0; 0 1 0]); % 红色障碍物,绿色可通行区域
hold on;
plot(1,1,'bo',20,20,'bx','MarkerSize',10); % 标记起点终点

图:障碍物密度从20%到40%的地图对比,密度越高算法挑战越大
3. 路径代价函数设计
3.1 代价函数组成
路径质量评估是算法的核心,我们的代价函数包含三个关键指标:
matlab复制function cost = pathCost(path, map)
% 输入:路径坐标序列、地图矩阵
% 输出:综合代价(值越小路径越优)
% 1. 碰撞惩罚(碰到障碍物直接死刑)
onObstacle = arrayfun(@(x,y) map(y,x)==-1, path(:,1), path(:,2));
collisionPenalty = sum(onObstacle) * 1000;
% 2. 路径长度(自然越短越好)
pathLength = size(path,1);
% 3. 转向惩罚(减少蛇皮走位)
directionChanges = 0;
for i = 2:length(path)-1
prev = path(i-1,:);
curr = path(i,:);
next = path(i+1,:);
angle = atan2(next(2)-curr(2),next(1)-curr(1)) - ...
atan2(curr(2)-prev(2),curr(1)-prev(1));
directionChanges = directionChanges + abs(angle);
end
cost = pathLength + directionChanges*0.3 + collisio
