【路径规划】基于matlab麻雀算法机器人栅格地图最短路径规划【含Matlab源码 1582期】

本文介绍了使用Matlab实现的最短路径规划,结合栅格法和改进的麻雀搜索算法,探讨了如何建立环境模型、判断相邻栅格及障碍,以及优化种群搜索策略。通过实例展示了算法运行结果,并提及了MATLAB 2014a版本和相关研究。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞💞💞💞💞💞💥💥💥💥💥💥
在这里插入图片描述
✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进;
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式

⛳️座右铭:行百里者,半于九十。
更多Matlab路径规划仿真内容点击👇
Matlab路径规划(进阶版)
付费专栏Matlab路径规划(初级版)

⛳️关注优快云海神之光,更多资源等你来!!

⛄一、简介

路径规划是实现移动机器人自主导航的关键技术,是指在有障碍物的环境中,按照一定的评价标准(如距离、时间、能耗等),寻找到一条从起始点到目标点的无碰撞路径,这里选取最短距离路径规划的评价标准,即最短路径规划问题。

1.路径规划数学模型的建立
将移动机器人周围环境用一组数据进行抽象表达,建立二维或三维的环境模型,得到移动机器人能够理解分析的环境数据,是机器人路径规划的基本前提。我这里用的是栅格法,其原理是将周围环境看成一个二维平面,将平面分成一个个等面积大小的具有二值信息的栅格,每个栅格中存储着周围环境信息量,下图我给出了一个栅格法地图,方便大家更好的理解栅格地图。这里设计的栅格地图为一个20×20的地形矩阵,黑色的地方表示有障碍,白色的地方表示没有障碍。
在这里插入图片描述
图1 栅格法地图
在用栅格法建立环境模型时,为了将环境信息转换成移动机器人可以识别的数据,一般采用序号法标记环境地图信息,即将栅格地图中一个个栅格从序号1依次累加直到标记到最后一个栅格。如图2所示。
在这里插入图片描述
在这里插入图片描述
图3 八叉树搜索策略
那么,怎么判断一个栅格点是否为另一个栅格点的相邻栅格点呢,另外,又怎么判断是否为有障碍栅格呢。这就需建立矩阵D,记录每个栅格点至其相邻栅格点的代价值。本例中栅格地图有20×20个栅格点,则D的大小为400×400,其中列是起点栅格,行是局部终点栅格,各栅格点至其各相邻无障碍栅格点的代价值非零,而有障碍栅格及非相邻栅格设为0。

⛄二、部分源代码

clc
clear
close all
tic
%% 地图
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0;
0 1 1 1 0 0 1 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
1 1 1 1 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1 0;
1 1 1 1 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 1 1 0 1 1 1 0 0 0 0 0 1 1 0;
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0;
0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 0 0 0 0 0;
0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0;];
for i=1:20/2
for j=1:20
m=G(i,j);
n=G(21-i,j);
G(i,j)=n;
G(21-i,j)=m;
end
end
%%
S = [1 1];
E = [20 20];
G0 = G;
G = G0(S(1):E(1),S(2):E(2));
[Xmax,dimensions] = size(G);
dimensions = dimensions - 2;

%% 参数设置
max_gen = 200; % 最大迭代次数
num_polution = 50; % 种群数量
soft_value = 0.8; %安全值
recover_Percent = 0.3; %%发现者比例
scout_Percent = 0.2; %%侦查者比例
recover_Num = round( num_polution * recover_Percent ); % %发现者
scout_Num = round(num_polution * scout_Percent); %%侦查者数量
X_min = 1;

%% 初始化
X = zeros(num_polution,dimensions);
for i = 1:num_polution
for j = 1:dimensions
column = G(:,j+1); % 地图的一列
id = find(column == 0); % 该列自由栅格的位置
X(i,j) = id(randi(length(id))); % 随机选择一个自由栅格
id = [];
end
fit( i ) = fitness(X( i, : ),G);%%%行向量
end
fit_person_best = fit; % 个体最优适应度
person_best = X; % 个体最优位置
[fit_global_best, best_person_Index] = min( fit ); % 全局最优适应度
global_best = X(best_person_Index, : ); % 全局最优位置
[fit_max,B]=max(fit);
worse_person= X(B,:);
%%
for gene = 1:max_gen
gene
[ans1,sort_Index] = sort(fit); %适应值度从小到大排序
[fit_max,B] = max(fit);
worse_person = X(B,:); %找出适应度最差的个体
[~,Index] = sort(fit_person_best);
r2 = rand(1);
if r2 < soft_value

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    for i = 1:recover_Num                                                  
        r1 = rand(1);  
        X(Index(i),:) = person_best(Index(i),:)*exp(-(i)/(r1*max_gen));         %%%%%发现者广泛进行搜索操作
        X(Index(i),:) = Bounds(X(Index(i),:), X_min,Xmax);                      %%%%输出整数路径
        fit(Index(i)) = fitness(X(Index(i),:),G);
    end
else
        X(Index(i),:) = person_best(Index(i),:) + randn(1)*ones(1,dimensions);  %%%%%%%飞往其他地方觅食
        X(Index(i),:) = Bounds(X(Index(i),:),X_min,Xmax);    
        fit(Index(i)) = fitness(X(Index(i),:),G);
end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%发现者%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[fit_MMin,best_best] = min(fit);
best_best_bt = X(best_best,:);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i = (recover_Num+1):num_polution
A = floor(rand(1,dimensions)2)2-1; %%%%%%%%-1到1的随机数
if(i>(num_polution/2))
X(Index(i)😅 = randn(1)exp((worse_person-person_best(Index(i)😅)/(i)^2);%%%%%%%适应度较低的个体没有获得食物,将飞往其他地方随机范围
else
X(Index(i)😅 = best_best_bt+(abs((person_best(Index(i)😅-best_best_bt)))
(A’
(A
A’)^(-1))ones(1,dimensions); %%%%%%%中等适应度值的个体更新位置
end
X(Index(i)😅 = Bounds(X(Index(i)😅,X_min,Xmax);
fit(Index(i)) = fitness(X(Index(i)😅,G);
end
p_1 = randperm(numel(sort_Index));
p_2 = sort_Index(p_1(1:scout_Num));
for j = 1:length(p_2)
if(fit_person_best(Index(p_2(j)))>(fit_global_best))
X(Index(p_2(j))😅 = global_best+(randn(1,dimensions)).
(abs((person_best(Index( p_2(j))😅 -global_best)));%%%%%%%%意识到危险的麻雀向种群适应度最高的个体靠拢
else
X(Index(p_2(j))😅 = person_best(Index(p_2(j)),:)+(2rand(1)-1)(person_best(Index(p_2(j))😅-worse_person)/( fit_person_best(Index(p_2(j)))-fit_max+1e-50);
end
X(Index(j)😅 = Bounds(X(Index(j)😅, X_min, Xmax);
fit(Index(j)) = fitness(X(Index(j)😅,G);
end
for i=1:num_polution
X(i,:) = Bounds(X(i,:),X_min,Xmax);
end
% 更新个体最优值和全局最优值
for i = 1:num_polution

    end
    if(fit_person_best(i) < fit_global_best)
        fit_global_best = fit_person_best(i);
        global_best = person_best(i,:);
    end
end
global_best = LocalSearch(global_best,Xmax,G);%%%%%把全局最优解进行局部搜索,提高全局最优解适应度值
fit_global_best = fitness(global_best,G);
final_goal(gene,1)=fit_global_best;

end
function fx = fitness(x,G)
S = [1 1]; % 新地图的起点
E = size(G); % 新地图的终点
route = [S(1) x E(1)];
dim = length(route);
nB = 0; % 粒子路径是否经过障碍的数目
route=round(route);
for j = 2 : dim-1
if G(route(j),j) == 1
nB = nB + 1;
end
end
if nB == 0 %
path=generateContinuousRoute(route,G); % 中点邻域搜索
% path=shortenRoute(path);
path=GenerateSmoothPath(path,G);
path=GenerateSmoothPath(path,G);
fx = 0;
for i = 1:size(path,1)-1
fx = fx + sqrt((path(i+1,1)-path(i,1))^2 + (path(i+1,2)-path(i,2))^2);
end
else
fx = E(1)*E(2) * nB;
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]魏晓鸽,赵冠军.基于改进麻雀搜索算法的疏散路径规划[J].消防科学与技术. 2022,41(02)

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 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海神之光

有机会获得赠送范围1份代码

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值