%% 该函数用于演示基于蚁群算法的三维路径规划算法
%% 清空环境
clc
clear
%% 数据初始化
%下载数据
load HeightData HeightData
%网格划分
LevelGrid=10;
PortGrid=21;
%起点终点网格点
starty=10;starth=4;
endy=8;endh=6;
% endy=8;endh=5;
m=1;
%算法参数
PopNumber=10; %种群个数
BestFitness=[]; %最佳个体
%初始信息素
pheromone=ones(21,21,21);
%% 初始搜索路径
[path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,pheromone, ...
HeightData,starty,starth,endy,endh);
fitness=CacuFit(path); %适应度计算
[bestfitness,bestindex]=min(fitness); %最佳适应度
bestpath=path(bestindex,:); %最佳路径
BestFitness=[BestFitness;bestfitness]; %适应度值记录
%% 信息素更新
rou=0.2;
cfit=100/bestfitness;
for i=2:PortGrid-1
pheromone(i,bestpath(i*2-1),bestpath(i*2))= ...
(1-rou)*pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
end
%% 循环寻找最优路径
for kk=1:300
%% 路径搜索
[path,pheromone]=searchpath(PopNumber,LevelGrid,PortGrid,...
pheromone,HeightData,starty,starth,endy,endh);
%% 适应度值计算更新
fitness=CacuFit(path);
[newbestfitness,newbestindex]=min(fitness);
if newbestfitness<bestfitness
bestfitness=newbestfitness;
bestpath=path(newbestindex,:);
end
BestFitness=[BestFitness;bestfitness];
%% 更新信息素
cfit=100/bestfitness;
for i=2:PortGrid-1
pheromone(i,bestpath(i*2-1),bestpath(i*2))=(1-rou)* ...
pheromone(i,bestpath(i*2-1),bestpath(i*2))+rou*cfit;
end
end
%% 最佳路径
for i=1:21
a(i,1)=bestpath(i*2-1);
a(i,2)=bestpath(i*2);
end
figure(1)
x=1:21;
y=1:21;
[x1,y1]=meshgrid(x,y);
mesh(x1,y1,HeightData)
axis([1,21,1,21,0,2000])
hold on
k=1:21;
plot3(k(1)',a(1,1)',a(1,2)'*200,'--o','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)
plot3(k(21)',a(21,1)',a(21,2)'*200,'--o','LineWidth',2,...
'MarkerEdgeColor','k',...
'MarkerFaceColor','g',...
'MarkerSize',10)
text(k(1)',a(1,1)',a(1,2)'*200,'S');
text(k(21)',a(21,1)',a(21,2)'*200,'T');
xlabel('km','fontsize',12);
ylabel('km','fontsize',12);
zlabel('m','fontsize',12);
title('三维路径规划空间','fontsize',12)
set(gcf, 'Renderer', 'ZBuffer')
hold on
plot3(k',a(:,1)',a(:,2)'*200,'--o')
%% 适应度变化
figure(2)
plot(BestFitness)
title('最佳个体适应度变化趋势')
xlabel('迭代次数')
ylabel('适应度值')
没有合适的资源?快使用搜索试试~ 我知道了~
蚁群算法求解三维路径规划问题(附MATLAB代码)
共5个文件
m:4个
mat:1个
需积分: 2 7 下载量 196 浏览量
2023-03-20
21:10:12
上传
评论 2
收藏 7KB ZIP 举报
温馨提示
我们在蚁群算法通俗讲解(附MATLAB代码)和基于蚁群的二维路径规划算法(附MATLAB代码)这两篇推文中讲解到蚁群算法的精髓就是信息素,接下来围绕着缩小搜索空间、转移至下一点概率、信息素更新这三个方面详细进行讲解。 01 | 缩小搜索空间 在进行环境建模时,我们已经把整个搜索空间离散为一系列的三维离散点,这些离散点为蚁群算法需要搜索的节点。我们先回到图3,假设用22个等间距切面沿着边AB把空间ABCD-A1B1C1D1进行等分。因为边AB长度为21km,所以切面之间的间距为1km。 因此,从起点(1,10,800)到终点(21,8,1200)寻找一条路径的过程实际上可分解为在第2~20的切面上寻找另外的19个点。那么这19个点如何确定呢? 首先我们需要明确每个切面上的所有离散点是否都被考虑为转移点?答案是否定的。因为如果一个切面上的所有离散点都被考虑的话,会极大增加算法的求解时间。 因此,我们需要根据上一点的坐标(x1,y1,z1)来缩小下一切面中被考虑的离散点数量。缩小方式如下,我们认为机器人在y方向和z方向上移动的范围有限,即机器人在y方向移动范围为Δy,在z方向移动范
资源推荐
资源详情
资源评论
收起资源包目录
基于蚁群算法的三维路径规划算法.zip (5个子文件)
基于蚁群算法的三维路径规划算法
searchpath.m 2KB
main.m 3KB
CacuQfz.m 617B
HeightData.mat 697B
CacuFit.m 373B
共 5 条
- 1
资源评论
希望早日退休的程序猿
- 粉丝: 300
- 资源: 51
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功