【路径规划】基于麻雀算法求解栅格地图路径规划及避障含Matlab源码
✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
🍎个人主页:Matlab科研工作室
🍊个人信条:格物致知。
更多Matlab仿真内容点击👇
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
⛄ 内容介绍
智能机器人只有具备自主移动能力才能实现应用价值.路径规划用于决策机器人在环境中如何行走的问题,是实现机器人智能化的关键技术.为提高机器人路径规划,对未知环境的实时性,适应性和优化性要求越来越高.自主移动机器人是集环境感知,动态策略与规划,行为控制与执行等多功能于一体的综合系统.近几年,移动机器人技术在工业,农业,医学,航天航空等许多领域发挥了重要作用.其中智能避障更是研究领域的难点和热点,智能避障是能够根据采集障碍物的状体信息,按照一定的方法进行有效的避障,最后到达终点.
1 麻雀搜索算法原理
麻雀搜索算法是一种新型的群智能优化算法, 在 2020 年由 Xue 等 [15] 提出,主要是受麻雀的觅食 和反哺食行为启发,具有寻优能力强、收敛速度快的特点。麻雀搜索算法将整个麻雀种群分为三类,即寻找食物的生产者,抢夺食物的加入者和发现危险的警戒者 。生产者和加入者可以相互转化,但各自在 种群中的占比不会发生变化。在模拟实验中,需要使用虚拟麻雀进行食物的 寻找,与其他寻优算法相同,麻雀搜索算法首先需要对麻雀种群与适应度值进行初始化,麻雀种群可 初始化为如下形式,表达式为式(3)

中:n为麻雀的数量;d为要优化的变量的维度即独立参数的数目;xnd为第n只麻雀第d维度的值。由此,总体麻雀适应度值表征形式为

式(4)中:f(x)为个体适应度值。适应度值较好的麻雀(即生产者)在搜索中会优先获得食物并指引群体的觅食方向与范围,与此同时,生产者会具有更大的觅食搜索范围。生产者在觅食过程中,位置不断发生移动,而在遇到捕食者时,移动规则又会发生改变,即

式(5)中:t为当前迭代次数;j∈{1,2,…,d};xit,j为迭代第t次时,第i个麻雀的第j个维度的值;α∈(0,1],为随机数;iter_max为迭代次数最多的常数;R2∈[0,1],为报警值;ST∈[0,1],为安全阈值;Q为服从正态分布的随机数;L为1×d阶矩阵(元素全为1)。R2<ST时,代表该区域安全,无捕食者出没,生产者会出现大范围觅食行为;R2≥ST时,表示一些麻雀发现了捕食者并发出警告,所有麻雀迅速飞入安全区域。而对加入者而言,在觅食过程中,一旦生产者找到了好的食物源,加入者必会知晓,并飞向它的附近抢食,同时,也有加入者会时刻监视生产者,随时准备争抢食物。由此加入者的位置更新规则为

式(6)中:xp为生产者占据的最佳位置;xworst为全局最差位置;A为1×d阶矩阵,每个元素随机为1或-1;A†=AT(AAT)-1。当i>时,表示适应性较差的第i个加入者抢夺食物失败,为了更好地获得食物避免挨饿只能飞往其他地区进行觅食。总体而言,假设意识到危险的麻雀(即警戒者)占10%~20%。初始位置则随机产生,规则为

式(7)中:λ为步长控制函数,是一个均值为0,方差为1的正态分布随机数;fi为当前麻雀适应值;fg为全局最好适应值;fw为全局最差适应值;k为麻雀移动方向;xbest为全局最优位置;ε为最小常数,避免除数为零。当fi>fg时,警戒者位于种群边缘,意识到危险后向中央安全区靠近;当fi=fg时,则是处于种群中央的麻雀意识到了危险,为躲避危险,则向其他麻雀身边靠拢。
⛄ 部分代码
%_________________________________________________________________________%
% 原始麻雀优化算法SSA %
%_________________________________________________________________________%
function [Best_pos,Best_score,curve]=SSA(pop,Max_iter,lb,ub,dim,fobj)
ST = 0.6; % 预警值
PD = 0.7; % 发现者的比列,剩下的是加入者
SD = 0.2; % 意识到有危险麻雀的比重
PDNumber = round(pop*PD); % 发现者数量
SDNumber = round(pop*SD); % 意识到有危险麻雀数量
% 种群初始化
X0=initialization(pop,dim,ub,lb);
X = X0;
% 计算初始适应度值
fitness = zeros(1,pop);
for i = 1:pop
fitness(i) = fobj(X(i,:));
end
[fitness, index]= sort(fitness); % 排序
BestF = fitness(1);
WorstF = fitness(end);
GBestF = fitness(1); % 全局最优适应度值
for i = 1:pop
X(i,:) = X0(index(i),:);
end
curve=zeros(1,Max_iter);
GBestX = X(1,:); % 全局最优位置
X_new = X;
for i = 1: Max_iter
BestF = fitness(1);
WorstF = fitness(end);
R2 = rand(1);
for j = 1:PDNumber
if(R2 X_new(j,:) = X(j,:).*exp(-j/(rand(1)*Max_iter)); else X_new(j,:) = X(j,:) + randn()*ones(1,dim); end end for j = PDNumber+1:pop % if(j>(pop/2)) if(j>(pop - PDNumber)/2 + PDNumber) X_new(j,:)= randn().*exp((X(end,:) - X(j,:))/j^2); else % 产生-1,1的随机数 A = ones(1,dim); for a = 1:dim if(rand()>0.5) A = -1; end end AA = A'*inv(A*A'); X_new(j,:)= X(1,:) + abs(X(j,:) - X(1,:)).*AA'; end end Temp = randperm(pop); SDchooseIndex = Temp(1:SDNumber); for j = 1:SDNumber if(fitness(SDchooseIndex(j))>BestF) X_new(SDchooseIndex(j),:) = X(1,:) + randn().*abs(X(SDchooseIndex(j),:) - X(1,:)); elseif(fitness(SDchooseIndex(j))== BestF) K = 2*rand() -1; X_new(SDchooseIndex(j),:) = X(SDchooseIndex(j),:) + K.*(abs( X(SDchooseIndex(j),:) - X(end,:))./(fitness(SDchooseIndex(j)) - fitness(end) + 10^-8)); end end % 边界控制 for j = 1:pop for a = 1: dim X_new(j,a)=round(X_new(j,a)); if(X_new(j,a)>ub) X_new(j,a) =ub; end if(X_new(j,a) X_new(j,a) =lb; end end end % 更新位置 for j=1:pop fitness_new(j) = fobj(X_new(j,:)); end for j = 1:pop if(fitness_new(j) < GBestF) GBestF = fitness_new(j); GBestX = X_new(j,:); end end X = X_new; fitness = fitness_new; % 排序更新 [fitness, index]= sort(fitness); % 排序 BestF = fitness(1); WorstF = fitness(end); for j = 1:pop X(j,:) = X(index(j),:); end curve(i) = GBestF; end Best_pos =GBestX; Best_score = curve(end); end [1] 朱宝艳, 李彩虹, 宋莉,等. 基于栅格的可视图建模的移动机器人全局路径规划A*搜索算法[J]. 2017. [2] 张永妮. 智能机器人避障路径规划算法研究[J]. 中小企业管理与科技, 2016(4):2. [3] 衣文秀. 基于图像识别技术的机器人路径规划研究与实现[D]. 沈阳师范大学, 2014. [4] 沈孝龙, 王吉芳, 郭子昇. 基于改进麻雀搜索算法的机械臂路径规划[J]. 组合机床与自动化加工技术, 2023(1):6. ❤️部分理论引用网络文献,若有侵权联系博主删除 ❤️ 关注我领取海量matlab电子书和数学建模资料
⛄ 运行结果


⛄ 参考文献
⛳️ 代码获取关注我
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
