clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng('default')
load map.mat
% 定义变量及参数含义
% G 环境图,是一个01矩阵,其中1代表障碍物
% 输出参数定义
% Route 存储每次迭代中每只蚂蚁所走过的路径
% paths 存储每次迭代中每只蚂蚁所走过的路径长度
% Tau 输出更新后的新信息素矩阵
% 设置迭代次数、蚂蚁数量等参数
% Tau 初始信息素矩阵
Tau = ones(1024,1024);
% K 迭代次数
K = 200;
% M 每次迭代中的蚂蚁数量
M = 30;
% S 起始点
S = 34;
% E 目标点
E = 958;
% Alpha 信息素重要性参数
Alpha = 1;
% Beta 可见度重要性参数
Beta = 15;
% Rho 信息素挥发率
Rho = 0.95;
% Q 信息素增强因子
Q = 1;
% 计算邻接矩阵D
D = func_map(G);
% 获取问题规模(像素数)
Rd = size(D,1);
% 获取环境实际尺寸(像素数)
Rg = size(G,1);
% 定义像素边长
a = 1;
% 计算目标点坐标(像素位置)
Ex = a*(mod(E,Rg)-0.5);
if Ex==-0.5
Ex=Rg-0.5;
end
Ey = a*(Rg+0.5-ceil(E/Rg));
% 初始化信息素强度矩阵Eta
Eta = zeros(1,Rd);
% 构造Eta初始化矩阵
for i=1:Rd
ix=a*(mod(i,Rg)-0.5);
if ix==-0.5
ix=Rg-0.5;
end
iy=a*(Rg+0.5-ceil(i/Rg));
if i~=E
Eta(1,i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;
else
Eta(1,i)=100;
end
end
% 初始化路径存储单元格数组ROUTES和路径长度矩阵PL
Route = cell(K,M);
paths = zeros(K,M);
%进入迭代过程(k次迭代,每次m只蚂蚁)
for k=1:K
k
for m=1:M
%第一步:状态初始化
W = S;% 当前点设为起始点
Path = S;% 初始化已走路径
PLkm = 0;% 初始化当前路径长度
tabus = ones(1,Rd);% 初始化禁忌表
tabus(S) = 0;% 去掉起始点的禁忌标识
Dtmp = D;% 初始化邻接矩阵副本
%第二步:选择可前进的节点
% 获取当前点可达的所有节点距离
DW=Dtmp(W,:);
DW1=find(DW<inf);
% 将禁忌表中不可达节点的距离设为无穷大
for j=1:length(DW1)
if tabus(DW1(j))==0
DW(j)=inf;
end
end
% 获取可行节点集合
LJD=find(DW<inf);
% 计算可行节点数量
Len_LJD=length(LJD);
% 蚁群停止条件:抵达目标点或无法前行
while W~=E&&Len_LJD>=1
%第三步:根据信息素和可见度选择下一步节点
PP=zeros(1,Len_LJD);
for i=1:Len_LJD
PP(i)=(Tau(W,LJD(i))^Alpha)*(Eta(LJD(i))^Beta);
end
% 构造概率分布
PP=PP/(sum(PP));
% 计算累计概率分布
Pcum=cumsum(PP);
% 依据概率选取下一个节点
Select=find(Pcum>=rand);
to_visit=LJD(Select(1));
%第四步:状态更新与记录
Path=[Path,to_visit];%更新路径
PLkm=PLkm+Dtmp(W,to_visit);%更新路径长度
W=to_visit;%移动到下一个点
for kk=1:Rd
if tabus(kk)==0
Dtmp(W,kk)=inf;
Dtmp(kk,W)=inf;
end
end
tabus(W)=0;%更新禁忌表,移除已访问节点
DW=Dtmp(W,:);%更新DW矩阵
DW1=find(DW<inf);
for j=1:length(DW1)
if tabus(DW1(j))==0
DW(j)=inf;
end
end%更新可行节点集合
LJD=find(DW<inf);
Len_LJD=length(LJD);
end
%第五步:记录本次迭代中蚂蚁的路径及其长度
%如果到达了目标点,则记录实际路径长度;否则记为无穷大
Route{k,m}=Path;
if Path(end)==E
paths(k,m)=PLkm;
else
paths(k,m)=inf;
end
end
%第六步:更新信息素矩阵
Delta_Tau=zeros(Rd,Rd);% 初始化信息素增量矩阵
for m=1:M
if paths(k,m)<inf% 若蚂蚁找到有效路径
ROUT=Route{k,m};
TS=length(ROUT)-1;% 路径中点的数量
PL_km=paths(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
meanPL=zeros(1,K);
minPL=zeros(1,K);
for i=1:K
PLK=paths(i,:);
Nonzero=find(PLK<inf);
PLKPLK=PLK(Nonzero);
meanPL(i)=mean(PLKPLK);
minPL(i)=min(PLKPLK);
end
figure(1)
plot(minPL,'r');
hold on
plot(meanPL,'b');
grid on
title('收敛曲线(平均路径长度和最短路径长度)');
xlabel('迭代次数');
ylabel('路径长度');
% 绘制蚂蚁行走路径图
figure(2)
axis([0,Rg,0,Rg])
for i=1:Rg
for j=1:Rg
if G(i,j)==1% 绘制障碍物区域
x1=j-1;y1=Rg-i;
x2=j;y2=Rg-i;
x3=j;y3=Rg-i+1;
x4=j-1;y4=Rg-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);
hold on
else% 绘制无障碍区域
x1=j-1;y1=Rg-i;
x2=j;y2=Rg-i;
x3=j;y3=Rg-i+1;
x4=j-1;y4=Rg-i+1;
fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);
hold on
end
end
end
hold on% 绘制最后一次迭代中最佳蚂蚁路径
ROUT=Route{K,M};
LENROUT=length(ROUT);
Rx=ROUT;
Ry=ROUT;
for ii=1:LENROUT
Rx(ii)=a*(mod(ROUT(ii),Rg)-0.5);
if Rx(ii)==-0.5
Rx(ii)=Rg-0.5;
end
Ry(ii)=a*(Rg+0.5-ceil(ROUT(ii)/Rg));
end
plot(Rx,Ry,'r','linewidth',2)
title('最短路径');
axis([0,Rg,0,Rg]);
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
1.版本:matlab2022A。 2.包含:程序,中文注释,参考文献,仿真操作步骤(使用windows media player播放)。 3.领域:路径规划 4.仿真效果:仿真效果可以参考博客同名文章《基于ACO蚁群优化的障碍物路径规划算法matlab仿真》 5.内容:基于ACO蚁群优化的障碍物路径规划算法matlab仿真。蚁群优化(Ant Colony Optimization, ACO)是一种受到自然界中蚂蚁群体行为启发的优化算法,常用于解决复杂的组合优化问题,如图论中的旅行商问题(TSP)、车辆路径规划、网络路由等问题,当然也适用于带有障碍物的路径规划场景。 6.注意事项:注意MATLAB左侧当前文件夹路径,必须是程序所在文件夹位置,具体可以参考视频录。
资源推荐
资源详情
资源评论
收起资源包目录
基于ACO蚁群优化的障碍物路径规划算法matlab仿真.rar (7个子文件)
2.jpg 76KB
1.jpg 30KB
操作步骤.mp4 2.69MB
参考文献.rar 1.33MB
code
map.mat 254B
func_map.m 3KB
Runme.m 6KB
共 7 条
- 1
资源评论
- lotusmorning2024-08-03答主很用心,有使用视频
- weixin_569847152024-05-31非常有用的资源,有一定的参考价值,受益匪浅,值得下载。
fpga和matlab
- 粉丝: 17w+
- 资源: 2627
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功