✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 个人主页:海神之光 代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击 Matlab图像处理(进阶版) 路径规划(Matlab) 神经网络预测与分类(Matlab) 优化求解(Matlab) 语音处理(Matlab) 信号处理(Matlab) 车间调度(Matlab)

⛄一、蚯蚓算法及栅格地图简介

1 蚯蚓算法 蚯蚓优化算法(Earthworm Optimisation Algorithm, EOA)是一种启发式算法,灵感来源于蚯蚓在自然界中的行为模式。蚯蚓优化算法主要模仿了蚯蚓在寻找食物和逃避天敌时的行为策略。以下是蚯蚓优化算法的几个关键特征和步骤: (1)搜索食物:蚯蚓通过伸缩身体在土壤中移动寻找食物。在算法中,这一行为被模拟为在解空间中搜索最优解。

(2)避免天敌:当蚯蚓感受到天敌的威胁时,它会迅速改变位置。这在算法中对应于避开局部最优解,寻找全局最优解。

(3)群体协作:蚯蚓在自然界中通过群体协作来提高生存机会。算法中的蚯蚓个体也会相互协作,共享信息,以达到更好的搜索效果。

(4)随机行为和局部搜索:蚯蚓在搜索食物时会表现出一定的随机行为,这有助于它们探索新的区域。在算法中,这被模拟为随机的搜索步骤,有助于跳出局部最优解。

(5)适应性:蚯蚓会根据环境变化调整其行为。在算法中,这意味着根据搜索过程中的反馈调整搜索策略,以适应问题的特性。

蚯蚓优化算法用于解决优化问题,如函数优化、工程设计优化等。它的优势在于能够有效避免陷入局部最优解,同时保持较好的全局搜索能力。此外,算法的群体协作特性有助于提高搜索效率和解的质量。

2 栅格地图 2.1 栅格法应用背景 路径规划时首先要获取环境信息, 建立环境地图, 合理的环境表示有利于建立规划方法和选择合适的搜索算法,最终实现较少的时间开销而规划出较为满意的路径。一般使用栅格法在静态环境下建立环境地图。 2.2 栅格法实质 将AGV的工作环境进行单元分割, 将其用大小相等的方块表示出来,这样栅格大小的选取是影响规划算法性能的一个很重要的因素。栅格较小的话,由栅格地图所表示的环境信息将会非常清晰,但由于需要存储较多的信息,会增大存储开销,同时干扰信号也会随之增加,规划速度会相应降低,实时性得不到保证;反之,由于信息存储量少,抗干扰能力有所增强,规划速随之增快,但环境信息划分会变得较为模糊,不利于有效路径的规划。在描述环境信息时障碍物所在区域在栅格地图中呈现为黑色,地图矩阵中标为1,可自由通行区域在栅格地图中呈现为白色,地图矩阵中标为0。路径规划的目的就是在建立好的环境地图中找到一条最优的可通行路径,所以使用栅格法建立环境地图时,栅格大小的合理设定非常关键。 2.3 10乘10的静态环境地图 10乘10的静态环境地图代码

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立环境地图%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function DrawMap(map)

n = size(map);

step = 1;

a = 0 : step :n(1);

b = 0 : step :n(2);

figure(1)

axis([0 n(2) 0 n(1)]); %设置地图横纵尺寸

set(gca,'xtick',b,'ytick',a,'GridLineStyle','-',...

'xGrid','on','yGrid','on');

hold on

r = 1;

for(i=1:n(1)) %设置障碍物的左下角点的x,y坐标

for(j=1:n(2))

if(map(i,j)==1)

p(r,1)=j-1;

p(r,2)=i-1;

fill([p(r,1) p(r,1) + step p(r,1) + step p(r,1)],...

[p(r,2) p(r,2) p(r,2) + step p(r,2) + step ],'k');

r=r+1;

hold on

end

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%栅格数字标识%%%%%%%%%%%%%%%%%%%%%%%%%%%%

x_text = 1:1:n(1)*n(2); %产生所需数值.

for i = 1:1:n(1)*n(2)

[row,col] = ind2sub([n(2),n(1)],i);

text(row-0.9,col-0.5,num2str(x_text(i)),'FontSize',8,'Color','0.7 0.7 0.7');

end

hold on

axis square

建立环境矩阵,1代表黑色栅格,0代表白色栅格,调用以上程序,即可得到上述环境地图。

map=[0 0 0 1 0 0 1 0 0 0;

1 0 0 0 0 1 1 0 0 0;

0 0 1 0 0 0 1 1 0 0;

0 0 0 0 0 0 0 0 0 0;

0 0 0 0 0 1 0 0 1 0;

1 0 0 0 0 1 1 0 0 0;

0 0 0 1 0 0 0 0 0 0;

1 1 1 0 0 0 1 0 0 0;

0 0 0 0 0 1 1 0 0 0;

0 0 0 0 0 1 1 0 0 0;];

DrawMap(map); %得到环境地图

2.4 栅格地图中障碍栅格处路径约束 移动体栅格环境中多采用八方向的移动方式,此移动方式在完全可通行区域不存在运行安全问题,当 移动体周围存在障碍栅格时此移动方式可能会发生与障碍物栅格的碰撞问题,为解决此问题加入约束 条件,当在分别与障碍物栅格水平方向和垂直方向的可行栅格两栅格之间通行时,禁止移动体采用对 角式移动方式。 约束条件的加入,实质是改变栅格地图的邻接矩阵,将障碍栅格(数字为“1”的矩阵元素)的对角栅格 设为不可达, 即将对角栅格的距离值改为无穷大。其实现MATLAB代码如下: 代码:

%约束移动体在障碍栅格对角运动

%通过优化邻接矩阵实现

%%%%%%%%%%%%%%%%%% 约束移动体移动方式 %%%%%%%%%%%%%%%%%

function W=OPW(map,W)

% map 地图矩阵 % W 邻接矩阵

n = size(map);

num = n(1)*n(2);

for(j=1:n(1))

for(z=1:n(2))

if(map(j,z)==1)

if(j==1) %若障碍物在第一行

if(z==1) %若障碍物为第一行的第一个

W(j+1,j+n(2)*j)=Inf;

W(j+n(2)*j,j+1)=Inf;

else

if(z==n(2)) %若障碍物为第一行的最后一个

W(n(2)-1,n(2)+n(1)*j)=Inf;

W(n(2)+n(1)*j,n(2)-1)=Inf;

else %若障碍物为第一行的其他

W(z-1,z+j*n(2))=Inf;

W(z+j*n(2),z-1)=Inf;

W(z+1,z+j*n(2))=Inf;

W(z+j*n(2),z+1)=Inf;

end

end

end

if(j==n(1)) %若障碍物在最后一行

if(z==1) %若障碍物为最后一行的第一个

W(z+n(2)*(j-2),z+n(2)*(j-1)+1)=Inf;

W(z+n(2)*(j-1)+1,z+n(2)*(j-2))=Inf;

else

if(z==n(2)) %若障碍物为最后一行的最后一个

W(n(1)*n(2)-1,(n(1)-1)*n(2))=Inf;

W((n(1)-1)*n(2),n(1)*n(2)-1)=Inf;

else %若障碍物为最后一行的其他

W((j-2)*n(2)+z,(j-1)*n(2)+z-1)=Inf;

W((j-1)*n(2)+z-1,(j-2)*n(2)+z)=Inf;

W((j-2)*n(2)+z,(j-1)*n(2)+z+1)=Inf;

W((j-1)*n(2)+z+1,(j-2)*n(2)+z)=Inf;

end

end

end

if(z==1)

if(j~=1&&j~=n(1)) %若障碍物在第一列非边缘位置

W(z+(j-2)*n(2),z+1+(j-1)*n(2))=Inf;

W(z+1+(j-1)*n(2),z+(j-2)*n(2))=Inf;

W(z+1+(j-1)*n(2),z+j*n(2))=Inf;

W(z+j*n(2),z+1+(j-1)*n(2))=Inf;

end

end

if(z==n(2))

if(j~=1&&j~=n(1)) %若障碍物在最后一列非边缘位置

W((j+1)*n(2),j*n(2)-1)=Inf;

W(j*n(2)-1,(j+1)*n(2))=Inf;

W(j*n(2)-1,(j-1)*n(2))=Inf;

W((j-1)*n(2),j*n(2)-1)=Inf;

end

end

if(j~=1&&j~=n(1)&&z~=1&&z~=n(2)) %若障碍物在非边缘位置

W(z+(j-1)*n(2)-1,z+j*n(2))=Inf;

W(z+j*n(2),z+(j-1)*n(2)-1)=Inf;

W(z+j*n(2),z+(j-1)*n(2)+1)=Inf;

W(z+(j-1)*n(2)+1,z+j*n(2))=Inf;

W(z+(j-1)*n(2)-1,z+(j-2)*n(2))=Inf;

W(z+(j-2)*n(2),z+(j-1)*n(2)-1)=Inf;

W(z+(j-2)*n(2),z+(j-1)*n(2)+1)=Inf;

W(z+(j-1)*n(2)+1,z+(j-2)*n(2))=Inf;

end

end

end

end

end

2.5 栅格法案例 下面以Djkstra算法为例, 其实现如下:

map=[0 0 0 1 0 0 1 0 0 0;

1 0 0 0 0 1 1 0 0 0;

0 0 1 0 0 0 1 1 0 0;

0 0 0 0 0 0 0 0 0 0;

0 0 0 0 0 1 0 0 1 0;

1 0 0 0 0 1 1 0 0 0;

0 0 0 1 0 0 0 0 0 0;

1 1 1 0 0 0 1 0 0 0;

0 0 0 0 0 1 1 0 0 0;

0 0 0 0 0 1 1 0 0 0;];

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%建立环境矩阵map%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

DrawMap(map); %得到环境地图

W=G2D(map); %得到环境地图的邻接矩阵

W(W==0)=Inf; %邻接矩阵数值处理

W=OPW(map,W); %优化邻接矩阵

[distance,path]=dijkstra(W,1,100);%设置起始栅格,得到最短路径距离以及栅格路径

[x,y]=Get_xy(distance,path,map); %得到栅格相应的x,y坐标

Plot(distance,x,y); %画出路径

运行结果如下: 其中函数程序: DrawMap(map) 详见建立栅格地图 W=G2D(map) ; 详见建立邻接矩阵 [distance, path] =dijkstra(W, 1, 100) 详见Djk stra算法 [x, y] =Get_xy(distance, path, map) ; Plot(distance, x, y) ;

⛄二、部分源代码

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 1 1 0 1 1 0 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 1 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; X_min = 1; %% 参数设置 max_gen = 200; % 最大迭代次数 num_polution = 50; % 种群数量 fboj=@(x)fitness(x,G,X_min,Xmax);

⛄三、运行结果

⛄四、matlab版本及参考文献

1 matlab版本 2014a

2 参考文献 [1]陈云霁,范道生,刘新宇. “基于正弦余弦算法的自主导航机器人路径规划研究.” 自动化学报,2012年,38(8): 1465-1474. [2]陈云霁,范道生,刘新宇. “基于正弦余弦算法的机器人路径规划实验研究.” 科技通报,2011年,27(11): 68-71. [3]张银红,杨琳. “基于正弦余弦算法的栅格地图机器人路径规划研究.” 计算机技术与发展,2012年,22(7): 12-15. [4]刘江波,吴天一. 《栅格地图机器人路径规划算法及其应用》. 清华大学出版社,2016年.

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 雷达方面 卡尔曼滤波跟踪、航迹关联、航迹融合

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: