%% 改进为蚁群算法
%% 参数初始化
clear all;
close all;
clc;
%生成路径矩阵
% D = [ 0 0 0 0 0 0 0 0 0;
% 0 1 1 0 0 0 0 0 0;
% 0 1 1 0 0 0 0 1 1;
% 0 0 0 0 1 0 0 1 1;
% 0 0 0 1 1 0 0 1 1;
% 1 1 0 1 0 0 0 0 0;
% 1 1 0 0 0 0 1 1 0;
% 0 0 0 1 1 0 1 1 0;
% 0 0 0 1 1 0 0 0 0;
% ];
D=[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;];
[px,py] = size(D);
%画出路径图
figure(1)
axis([0,px,0,py]);
for i=1:px
for j=1:py
if D(i,j) == 1
x1 = j-1; y1 = px-i+1;
x2 = j; y2 = px-i+1;
x3 = j; y3 = px-i;
x4 = j-1; y4 = px-i;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else
x1 = j-1; y1 = px-i+1;
x2 = j; y2 = px-i+1;
x3 = j; y3 = px-i;
x4 = j-1; y4 = px-i;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on
N = px*py;
S = 1; %初始化位置
E = N; %终点位置
Path = 1:N;
[xx,yy] = Zuobiao(Path,px,py);
for i=1:N
a = num2str(i);
text(xx(i)+0.1,yy(i)+0.1,a);
end
Jie = Linjie(D);%生成临接矩阵
Dis = Distance(N,D); %生成N*N的距离矩阵
Gen =200; %迭代次数
M = 100; %遗传种群大小
BestPath = cell(Gen,M);%路径存储
TheDis = zeros(Gen,M);%路程距离存储
Tau = ones(N,N);
Tau = Tau.*4; %信息素
a = 1;%信息素因子
b = 6;%启发因子
Q = 1;
p = 0.3;
Eau = 10*Eauu(N,E,px,py);%启发函数(为距离的倒数)
%% 迭代
for gen=1:Gen
for ant=1:M
Path = []; %存储路径矩阵
Start = S; %初始化路径
while Start ~= 0
Path = [Path,Start];
Ban = 1:N; %路径禁忌表
for k=1:N %求出下一步可行之路
if Jie(Start,k) == 0
Ban(k) = 0;
end
end
for k=1:length(Path)%%不走回头路
Ban(Path(k)) = 0;
end
Index = find(Ban);
for t=1:(length(Index))
[xx1,yy1] = ZZ(Start,px,py);
[xx2,yy2] = ZZ(Ban(Index(t)),px,py);
if yy2 < yy1
Ban(Index(t)) = 0;
end
end
if Path(end) == E
break;
end
%进入死胡同中断
Index = find(Ban);
if (length(Index)) == 0 %%判断是否结束
break;
end
Can = Ban(Index);
fitn = zeros(1,length(Can));
for k=1:length(Can)
fitn(k) = ((Tau(Start,Can(k)))^a) * ((Eau(Can(k)))^b) ;%启发函数诱导路径寻找
end
fitness = cumsum(fitn./(sum(fitn)));
Pot = find(rand < fitness);
Pot = Pot(1);
Start = Can(Pot);
end
BestPath{gen,ant} = Path;
if Path(end) == E
for k = 1:length(Path)-1
TheDis(gen,ant) = TheDis(gen,ant) + Dis(k,k+1);
end
else
TheDis(gen,ant) = TheDis(gen,ant) + Inf;
end
end
%% 更新信息素
Lin_Tau = zeros(N,N);
for m=1:M
if TheDis(gen,m) < N*N
Lin_Path = BestPath{gen,m};
Len = length(Lin_Path);
for k=1:Len-1
Lin_Tau(Lin_Path(k),Lin_Path(k+1)) = Lin_Tau(Lin_Path(k),Lin_Path(k+1)) + ...
Q/(TheDis(gen,m));
Lin_Tau(Lin_Path(k+1),Lin_Path(k)) = Lin_Tau(Lin_Path(k+1),Lin_Path(k)) + ...
Q/(TheDis(gen,m));
end
end
end
Tau = Tau.*(1-p) + Lin_Tau;
end
%% 画出路径图
Min = Inf;
for i=1:Gen
for j=1:M
if Min > TheDis(i,j)
Min = TheDis(i,j);
Index = [];
Index = [i,j];
end
end
end
Path = BestPath{Index(1),Index(2)};
[x,y] = Zuobiao(Path,px,py);
plot(x,y,'r-');
disp(num2str(Min));
没有合适的资源?快使用搜索试试~ 我知道了~
【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 2783期】.zip
共7个文件
m:6个
jpg:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 117 浏览量
2023-07-03
21:27:25
上传
评论 1
收藏 107KB ZIP 举报
温馨提示
代码下载:完整代码,可直接运行 ;运行版本:2014a或2019b;若运行有问题,可私信博主; 博主优势:精通Matlab各领域,且各项目代码较全,可供指导交流。 座右铭:行百里者,半于九十。 1 第一步:海神之光博主主页https://blog.csdn.net/TIQCmatlab?type=blog 2 第二步:搜索相关内容,回车或者点击;然后就出现您需要的文章: 3 Matlab软件下载 与善其事,必先利其器。学习matlab,必须要先下载好matlab软件。 下载链接:Matlab R2020a版安装下载详细操作步骤【Matlab 140期】 4 Matlab基础教程 我们在学习matlab时,如果前面所学知识有部分遗忘,可以及时翻阅课本加深记忆。因此,虽然现在互联网已经非常的发达,但是有一本纸质版的图书也是非常有必要的。 5 学会使用互联网查找知识 现在的互联网非常强大,只靠一本纸质书籍是远远不够的。我们还要学会在网上找一些matlab相关的基础知识进行学习。 6及时进行练习,以免眼高手低 matlab软件要及时的使用起来。我们在学习基础知识时,肯定会遇到很多的小的例子。即使我们对这些例子都能理解也要多使用matlab软件进行验证,看看我们敲出来代码是否也能正常运行。 7 遇到问题及时向博主求助 作为初学者,遇见不会的问题是非常正常的事情。海神之光擅长领域擅长路径规划、优化求解、神经网络预测、图像处理、语音处理等多种领域Matlab仿真,具体代码仿真 私信博主。
资源推荐
资源详情
资源评论
收起资源包目录
【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 2783期】.zip (7个子文件)
【路径规划】基于matlab蚁群算法机器人栅格地图最短路径规划【含Matlab源码 2783期】
RobotRun3.m 5KB
Eauu.m 228B
Distance.m 380B
运行结果.jpg 109KB
Linjie.m 454B
ZZ.m 132B
Zuobiao.m 225B
共 7 条
- 1
资源评论
- m0_719082582023-08-24资源很实用,内容详细,值得借鉴的内容很多,感谢分享。
海神之光
- 粉丝: 3w+
- 资源: 2091
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功