✅作者简介:热爱科研的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<ST)
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)<lb)
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.