MATLAB实现基于蚁群算法的机器人路径规划 含有一个m格式源文件,一份word格式基于蚁群算法的路径规划内容为算法理论、求解步骤和MATLAB程序源码,总容量是99k。宝贝是全天自动发货,无需咨询,直接购买即可,下单后7分钟内自动发百度网盘连接和提取码给您哦
1、问题描述:
移动机器人路径规划是机器人学的一个重要研究领域。它要求机器人在依据某个或某些优化原则(如最小能量消耗,最短行走路线,最短行走时间等),在其工作空间中找到一条从起始状态到目标状态的可避免障碍物的最优路径。机器人路径规划问题可以建模为一个有约束的优化问题,都要完成路径规划、定位和避障等任务。
2 算法理论:
蚁群算法(Ant Colony Algorithm, ACA),最初是由意大利学者Dorigo M. 博士于1991 年首次提出,其基本质是一个复杂的智能系统,且具有较强的鲁棒性,优良的分布式计算机制等优点。该算法经过十多年的发展,已被大多数的科学家应用于各种问题的研究,如旅行商问题,二次规划问题,生产调度问题等。但是算法本身性能的评价等算法理论研究方面进展较慢。
Dorigo 提出了精英蚂蚁模型(EAS),在这一模型中信息素更新按照得到当前最优解的蚂蚁所构造的解来进行的,但这样的策略在使问题收敛变慢,并不能取得较好的效果。近年Dorigo 博士又给出改进模型(ACS),文中改进了转移概率模型,并应用了全局搜索与局部搜索策略,来使得进行深度搜索。Stutzle 与 Hoos 给出了最大-最小蚂蚁系统(MAX-MINAS),所谓最大-最小即为信息素设定上限与下限,设定上限避免搜索陷入局部最优,设定下限鼓励深度搜索。蚂蚁作为一个生物个体其自身的能力是十分有限的,例如蚂蚁个体是没有视野的,蚂蚁个体自身也是那么微小,但是由这些能力有限的蚂蚁组成的蚁群却可以做出超越个体的蚂蚁百倍甚至千倍的能力。蚂蚁通过个体之间的信息交互实现群体内部的某种机制使使得它们具有了群体智能,可以做到蚂蚁个体无法做到的事情。生物学家的长时观察发现,蚂蚁是 通过分泌信息素进行信息交流的。
下面主要介绍蚁群通过信息素的交互找到最短路径ABCDE 与 ABHDE,其中A、B、DE,间有两条路径 AB=CD=0.5,并,假路线上信息浓度为0,并且,假设路上信息浓度相同,单位时间内所走的长度为1,每个单位时间内走过路径上留下的信息素的数量相同。当t=0时,设A点发出30只蚂蚁到该结点发。当t=1,从A点出发的蚂蚁走到B点时,由于两条路径 BH 与 BC 上信息素浓度相同,所以蚂蚁以相同的概率选择 BH 与 BC。这样就有15 只蚂蚁选择走 BH,有 15 只蚂蚁选择走 BC。同样地,从E点出发的蚂蚁走到D点,分别有15 只蚂蚁选择走 BH 和 DC。当t=2 时,选择 BC 与 DC 的蚂蚁分别走过了BCD 和DCB,而选择 BH 与 DH 的蚂蚁都走到了 H 点。所有的蚂蚁都在所走过的路上留下了相同浓度的信息素,那么路径BCD 上的信息素的浓度是路径 BHD 上信息素浓度的两倍,这样若再有蚂蚁选择走BC 和 BH 时,或选择走 DC 与 DH 时,都会以较大的概率选择信息素浓度高的一边。这 样样的过程反复进行下去,最短的路径上走过的蚂蚁较多,留下下的信息素也越多,蚁群就这样
(2)输入初始的信息素矩阵,选择初始起点和终点并设置各种参数。在此计算中,我们设置所有位置的初始信息素相等。
(3)选择从初始点下一步可以到达的节点,根据每个节点的 信息素求出前往每个节点的概率,并利用轮盘算法选取下一步的初始点。
$$
p_{ij}^k =
egin{cases}
frac{ au_{ij}^{alpha} cdot eta_{ij}^{eta}}{sum_{k in (N-tab_u)} au_{ik}^{alpha} cdot eta_{ik}^{eta}} & ext{if } j in {N – tab_u} \
0 & ext{otherwise}
end{cases}
$$
其中$ au_{ij} (t)$为解析图中弧$(i,j)$上信息素的浓度。$eta_{ij}$为与弧$(i,j)$相关联的启发式信息。$alpha$,$eta$分别为$ au_{ij} (t)$,$eta_{ij}$的权重参数。
(4)更新路径,以及路径长度。
(5)重复(3)(4)过程,直到蚂蚁到达终点或者无路可走。
(6)重复(3)(4)(5),直到某一代$ extit{m}$只蚂蚁迭代结果结束。
(7)更新信息素矩阵,其中没有到达的蚂蚁不计算在内。
$ au_{ij}(t+1)=(1-
ho) au_{ij}(t)+Delta au_{ij}(t)$
其中$
ho$为信息素挥发系数。$ extit{Q}$为信息量增加强度。
(8)重复(3)-(7),直至$ extit{n}$代蚂蚁迭代结束。
4 运行结果(图、表等)
将上述矩阵输入到程序中,画出最短路径的路线,并且输入每一轮迭代的最短路径。查看程序的收敛效果,在程序中设置$ extit{plotif}$=1 则输出收敛和最短路径图,在程序中设置$ extit{plotif}$=2则输出每一代蚂蚁的路径图。
MM=size(G,1); %G 地形图为 0-1 矩阵,如果为1表示障碍物
Tau=ones(MM*MM,MM*MM); % Tau 初始信息素矩阵(认为前面的觅食活动中残留的信息素)
Tau=8.*Tau;
%K 迭代次数(指蚂蚁出动多少波)
K=100;
M=50; %M 蚂蚁个数(每一波蚂蚁有多少个)
S=1; %S 起始点(最短路径的起始点)
E=MM*MM; %E 终点(最短路径的终点)
Alpha=1; % Alpha 表示信息素重要程度的参数
Beta=7; % Beta 表示启发式信息重要程度的参数,曾库
Rho=0.3; % Rho 信息素挥发系数,
Q=1; % Q 信息素增加强度系数
mink=inf;
minkl=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);%启发式信息,取为至目标点的直线距离的倒数。
%下面构造启发式信息矩阵
hold on
end
hold on
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],[0.8,0.8,0.8]);
hold on
end
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],[0.2,0.2,0.2]);
hold on
end











