文章目录

  • 1. 按
  • 2. 介绍
  • 3. matlab实现
    • 3.1. 代码
    • 3.2. 效果

1. 按

  • 网上有发的这个算法的错误版的,不知道发的意义何在,是在误人子弟吗???在此对其行为表示强烈的谴责。
    错误版的链接:https://www.toutiao.com/a6723801770738336264
  • 还有个说的是无错的(具体是不是还不知道),但需要VIP才能看,不知道发出来的意义何在?不想让别人看可以设为私密,在此对其行为表示强烈的不满。
    需要VIP才能看全文的文章链接:https://blog.csdn.net/weixin_42288047/article/details/90270347

2. 介绍

  • 基于蚁群算法的机器人路径规划算法。
    使用网格离散化的方法对带有障碍物的环境建模,使用邻接矩阵存储该环境,使得问题转化为蚁群算法寻找最短路径。
  • 蚁群算法(ACO)最短路径规划
    蚁群算法最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。
    蚁群算法根据模拟蚂蚁寻找食物的最短路径行为来设计的仿生算法,因此一般而言,蚁群算法用来解决最短路径问题,并真的在旅行商问题(TSP,一个寻找最短路径的问题)上取得了比较好的成效。目前,也已渐渐应用到其他领域中去,在图着色问题、车辆调度问题、集成电路设计、通讯网络、数据聚类分析等方面都有所应用。
  • 具体概述及通用MATLAB代码请见:http://www.omegaxyz.com/2018/01/26/aco
  • G2D及多出口情况参考:http://www.omegaxyz.com/2019/01/28/aco_routes2

3. matlab实现

3.1. 代码

下面是蚁群算法机器人最短路径规划问题的MATLAB代码
(1代表障碍物)

function main()
G=[0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0; 0 1 1 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 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 1 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 0; 1 1 1 1 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0; 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 0; 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0; 0 0 0 0 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;];
MM=size(G,1);                         % G 地形图为01矩阵,如果为1表示障碍物
Tau=ones(MM*MM,MM*MM);        % Tau 初始信息素矩阵
Tau=8.*Tau;
K=100;                            %迭代次数(指蚂蚁出动多少波)
M=50;                             %蚂蚁个数
S=1 ;                             %最短路径的起始点
E=MM*MM;                        %最短路径的目的点
Alpha=1;                          % Alpha 表征信息素重要程度的参数
Beta=7;                           % Beta 表征启发式因子重要程度的参数
Rho=0.3 ;                             % Rho 信息素蒸发系数
Q=1;                               % Q 信息素增加强度系数
minkl=inf;
mink=0;
minl=0;
D=G2D(G);
N=size(D,1);               %N表示问题的规模(象素个数)a=1;                     %小方格象素的边长Ex=a*(mod(E,MM)-0.5);    %终止点横坐标if Ex==-0.5
Ex=MM-0.5;
end
Ey=a*(MM+0.5-ceil(E/MM)); %终止点纵坐标Eta=zeros(N);             %启发式信息,取为至目标点的直线距离的倒数%以下启发式信息矩阵for i=1:N ix=a*(mod(i,MM)-0.5); if ix==-0.5 ix=MM-0.5; end
iy=a*(MM+0.5-ceil(i/MM));  if i~=E Eta(i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5; else Eta(i)=100; end
end
ROUTES=cell(K,M);     %用细胞结构存储每一代的每一只蚂蚁的爬行路线
PL=zeros(K,M);         %用矩阵存储每一代的每一只蚂蚁的爬行路线长度%启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁
for k=1:K
for m=1:M
%状态初始化
W=S;                  %当前节点初始化为起始点
Path=S;                %爬行路线初始化
PLkm=0;               %爬行路线长度初始化
TABUkm=ones(N);       %禁忌表初始化
TABUkm(S)=0;          %已经在初始点了,因此要排除
DD=D;                 %邻接矩阵初始化
%下一步可以前往的节点
DW=DD(W,:);
DW1=find(DW);
for j=1:length(DW1) if TABUkm(DW1(j))==0 DW(DW1(j))=0; end
end
LJD=find(DW);
Len_LJD=length(LJD);%可选节点的个数
%蚂蚁未遇到食物或者陷入死胡同或者觅食停止
while W~=E&&Len_LJD>=1
%转轮赌法选择下一步怎么走
PP=zeros(Len_LJD);
for i=1:Len_LJD PP(i)=(Tau(W,LJD(i))^Alpha)*((Eta(LJD(i)))^Beta);
end
sumpp=sum(PP);
PP=PP/sumpp;%建立概率分布
Pcum(1)=PP(1); for i=2:Len_LJD Pcum(i)=Pcum(i-1)+PP(i); end
Select=find(Pcum>=rand);
to_visit=LJD(Select(1));
%状态更新和记录
Path=[Path,to_visit];               %路径增加
PLkm=PLkm+DD(W,to_visit);    %路径长度增加
W=to_visit;                   %蚂蚁移到下一个节点for kk=1:N if TABUkm(kk)==0 DD(W,kk)=0; DD(kk,W)=0; end end
TABUkm(W)=0;               %已访问过的节点从禁忌表中删除DW=DD(W,:);
DW1=find(DW);
for j=1:length(DW1) if TABUkm(DW1(j))==0 DW(j)=0; end end
LJD=find(DW);
Len_LJD=length(LJD);%可选节点的个数end
%记下每一代每一只蚂蚁的觅食路线和路线长度ROUTES{k,m}=Path; if Path(end)==E PL(k,m)=PLkm; if PLkm<minkl mink=k;minl=m;minkl=PLkm; end else PL(k,m)=0; end
end
%更新信息素
Delta_Tau=zeros(N,N);%更新量初始化for m=1:M if PL(k,m)  ROUT=ROUTES{k,m}; TS=length(ROUT)-1;%跳数PL_km=PL(k,m); for s=1:TS x=ROUT(s); y=ROUT(s+1); Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km; Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km; end end end
Tau=(1-Rho).*Tau+Delta_Tau;%信息素挥发一部分,新增加一部分end
%绘图
plotif=1;%是否绘图的控制参数if plotif==1 %绘收敛曲线minPL=zeros(K); for i=1:K PLK=PL(i,:); Nonzero=find(PLK); PLKPLK=PLK(Nonzero); minPL(i)=min(PLKPLK); end
figure(1)
plot(minPL);
hold on
grid on
title('收敛曲线变化趋势');
xlabel('迭代次数');
ylabel('最小路径长度'); %绘爬行图
figure(2)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on
title('机器人运动轨迹');
xlabel('坐标x');
ylabel('坐标y');
ROUT=ROUTES{mink,minl};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
end
plotif2=0;%绘各代蚂蚁爬行图
if plotif2==1
figure(3)
axis([0,MM,0,MM])
for i=1:MM
for j=1:MM
if G(i,j)==1
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1=j-1;y1=MM-i;
x2=j;y2=MM-i;
x3=j;y3=MM-i+1;
x4=j-1;y4=MM-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
for k=1:K
PLK=PL(k,:);
minPLK=min(PLK);
pos=find(PLK==minPLK);
m=pos(1);
ROUT=ROUTES{k,m};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),MM)-0.5);
if Rx(ii)==-0.5
Rx(ii)=MM-0.5;
end
Ry(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));
end
plot(Rx,Ry)
hold on
end
end
function D=G2D(G)
l=size(G,1);
D=zeros(l*l,l*l);
for i=1:l for j=1:l if G(i,j)==0 for m=1:l for n=1:l if G(m,n)==0 im=abs(i-m);jn=abs(j-n); if im+jn==1||(im==1&&jn==1) D((i-1)*l+j,(m-1)*l+n)=(im+jn)^0.5; end end end end end end
end

3.2. 效果

  • 收敛曲线变化趋势
  • 机器人运动轨迹

【 无错版】基于蚁群算法的机器人路径规划matlab程序代码实现相关推荐

  1. matlab蚁群算法 路径规划,基于蚁群算法的机器人路径规划MATLAB源码

    基于蚁群算法的机器人路径规划MA TLAB源码 使用网格离散化的方法对带有障碍物的环境建模,使用邻接矩阵存储该环境,使得问题转化为蚁群算法寻找最短路径. function [ROUTES,PL,Tau ...

  2. 【路径规划】基于蚁群算法求解运钞车路径规划VRPSD问题matlab代码

    1 简介 近年来,国内各大城市陆续建立了专业的金融押运企业,为银行网点的现钞运送提供服务.为了实现运钞智能化,降低银行运营成本,需要对银行现钞运送车辆路径规划提供决策支持.而银行运钞车路线规划问题是车 ...

  3. ​【路径规划】基于蚁群算法求解多式联运路径规划问题matlab源码

    1 简介 随着国际贸易的不断发展和国内外物品流通的速度不断加快,多式联运作为一种先进的运输组织形式不断发展.在运输过程中,合理的路径选择和运输模式选择对多式联运的经营者会带来卓有成效的经济效益,而其中 ...

  4. 【路径规划】基于蚁群算法求解公交车路径规划问题matlab源码

    一.简介 1 蚁群算法(ant colony algorithm,ACA)起源和发展历程\ Marco Dorigo等人在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交 ...

  5. 【路径规划】基于蚁群算法实现多式联运路径规划问题matlab源码

    2.蚁群算法基本原理 2.1 算法综述 对于VRP问题,求解算法大致可分为精确算法和人工智能算法两大类.精确性算法基于严格的数学手段,在可以求解的情况下,解的质量较好.但是由于算法严格,运算量大,特别 ...

  6. MATLAB实战系列(六)-基于蚁群算法的三维路径规划算法思路浅析

    首先以一个问题为例引入今天所讲的三维路径规划,在21 km * 21 km的一片海域中搜索从起点到终点,并且避开所有障碍物的路径.起点坐标为(1,10,800),终点坐标为(21,8,1200),示意 ...

  7. 【路径规划】基于果蝇优化算法实现机器人路径规划matlab源码

    一.简介 果蝇优化算法(FOA)是一种基于果蝇觅食行为推演出寻求全局优化的新方法.果蝇本身在感官知觉上优于其他物种,尤其是嗅觉和视觉上.果蝇的嗅觉器官能很好的搜集漂浮在空气中的各种气味,甚至能够嗅到4 ...

  8. matlab三维路径规划,【路径规划】基于A星算法的三维路径规划matlab源码

    %% 该函数用于演示基于A_Star算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 starttime=cputime; load HeightData z ...

  9. 【路径规划】基于matlab蚁群算法栅格地图路径规划及避障【含Matlab源码 2088期】

    一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自适 ...

最新文章

  1. CornerNet:实现demo、可视化heatmap、测试各类别精度
  2. ORA-28547:连接服务器失败,可能是Oracle Net管理错误
  3. jvm性能调优 - 10白话年轻代数据晋升老年代规则及老年代回收算法
  4. STL源码剖析---红黑树原理详解下
  5. .NET Core TDD 前传: 编写易于测试的代码 -- 全局状态
  6. 使用pip安装virtualenv时出现问题
  7. Python学习之旅:用Python制作一个打字训练小工具
  8. [Java] 蓝桥杯ADV-193 算法提高 盾神与条状项链
  9. Visual Studio 2008添加ActiveX控件测试容器(windows 7可用)
  10. VS解决方案目录和工程目录
  11. Centos7系列各版本镜像合集下载
  12. 计算机无法进入操作系统怎么办,老司机教你电脑开机无法进入系统怎么办
  13. 王家林人工智能AI 第七节课:四种性能优化Matrix编写AI框架实战(Gradient Descent的陷阱、及几种常见的性能优化方式实战)老师微信13928463918
  14. [WinError 193] %1 不是有效的 Win32 应用程序问题解决
  15. 华为消费者云的ServiceComb 微服务之旅
  16. 室内设计师面试技巧有哪些?
  17. Flashback Oracle文档阅读
  18. 搭建小程序(python)
  19. Qt/C++ 压缩/解压缩库—QuaZip
  20. 【火星备份软件】多样化备份方式

热门文章

  1. request_irq和free_irq的使用
  2. 我也要一个~ liyue429@gmail.com 谢谢博主!
  3. 流量治理最大的痛点-资源利用率上不去
  4. promise setTimeout setInterval 执行顺序
  5. 心理学 教你怎么去看懂人心,100条格言要记牢
  6. 【医学图像处理】CT成像技术之CT伪影
  7. Gerber 文件的生成
  8. 推荐:顶尖选手算法竞赛答辩视频分享
  9. 数据装载命令Load
  10. RPC基础之负载均衡算法一文全搞懂