资源简介
Lazy_Theta_star是在 Theta_star上的进一步改进,Theta_star是当节点加入open表时和当前点的父节点进行比较g值是否更小,对一些不必要的节点计算浪费了时间,而Lazy_Theta_star则是在弹出open表后进行比较,减少了不必要点的计算。
代码片段和文件信息
function Lazy_Theta_star
clc;
clear;
%% 初始化界面
%load maze.mat map
n = 20; % field size n x n tiles 20*20的界面
%wallpercent = 0.3; % this percent of field is walls 15%的界面作为阻碍物(墙)
cmap = [1 1 1; ...% 1 - white - 空地
0 0 0; ...% 2 - black - 障碍
1 0 0; ...% 3 - red - 已搜索过的地方
0 0 1; ...% 4 - blue - 下次搜索备选中心
0 1 0; ...% 5 - green - 起始点
1 1 0;...% 6 - yellow - 到目 标点的路径
1 0 1];% 7 - - 目标点
colormap(cmap);
global field
field= ones(n);
startposind =22; %sub2ind用来将行列坐标转换为线性坐标,这里是必要的,因为如果把startposind设置成[xy]的形式,访问field([xy])的时候
goalposind =86; %它并不是访问x行y列元素,而是访问线性坐标为x和y的两个元素
%field(ceil(n^2.*rand(floor(n*n*wallpercent)1) )) =2;
field(1:5 7) = 2;
field(81:3) = 2;
field(3:51:5)=2;
field(54)=2;
% startposind = sub2ind([nn]ceil(n.*rand)ceil(n.*rand)); %sub2ind用来将行列坐标转换为线性坐标,这里是必要的,因为如果把startposind设置成[xy]的形式,访问field([xy])的时候
%goalposind = sub2ind([nn]ceil(n.*rand)ceil(n.*rand)); %它并不是访问x行y列元素,而是访问线性坐标为x和y的两个元素
field(startposind )=5;
field(goalposind )=7;
costchart = NaN*ones(n); %costchart用来存储各个点的实际代价,NaN代表不是数据(不明确的操作)
costchart(startposind) = 0; %起点的实际代价
fieldpointers = zeros(n); %fieldpointers用来存储节点的父节点
global setOpenCosts;
setOpen = (startposind); setOpenCosts = (0); setOpenHeuristics = (Inf);
setClosed = []; setClosedCosts = [];%初始化起点的open表和close表
[goalpos(1) goalpos(2)] = ind2sub([n n]goalposind);
% uicontrol(‘style‘‘pushbutton‘‘String‘‘RE-DO‘ ‘FontSize‘12 ...
% ‘Position‘ [10 10 60 40] ‘Callback‘‘ASTAR‘);
tic
while true %ismember(AB)返回与A同大小的矩阵,其中元素1表示A中相应位置的元素在B中也出现,0则是没有出现
field(startposind )=5;
field(goalposind )=7;
image(1.51.5field);
set(gca‘gridline‘‘-‘‘gridcolor‘‘y‘‘linewidth‘2‘GridAlpha‘0.5);
set(gca‘xtick‘1:1:21‘ytick‘1:1:21);
grid on;
axis image;
drawnow;
if(max(ismember(setClosedgoalposind)))
break;
end;
[~ ii] = min(setOpenCosts + setOpenHeuristics); %从OPEN表中选择花费最低的点tempii是其下标(也就是标号索引)
field(setOpen(ii))=3;
[currentpos(1) currentpos(2)] = ind2sub([n n]setOpen(ii));
if fieldpointers(setOpen(ii))~=0
if fieldpointers(fieldpointers(setOpen(ii)))~=0
trued=lineofsight(nfieldpointers(fieldpointers(setOpen(ii)))setOpen(ii));
if(trued)
id=find(setClosed==fieldpointers(fieldpointers(setOpen(ii))));
[parent_postion_xparent_position_y]=ind2sub([nn]setClosed(id));
if setOpenCosts(ii)>=setClosedCosts(id)+sqrt(power((parent_postion_x-currentpos(1))2)+power((parent_position_y-currentpos(2))2))
fieldpointers(setOpen(ii)) = fieldpointers(fieldpointers(setOpen(ii))) ; %将此点的方向存在对应的fieldpointers中
setOpenCosts(ii)=setClosedCosts(id)+sqrt(power((parent_postion_x-currentpos(1))2)+power((parent_position_y-currentpos(2))2));
end
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 11332 2019-04-28 15:06 Lazy_Theta_star.m
- 上一篇:遗传算法进行机器人路径规划代码
- 下一篇:基于MSP430F6638的数字钟代码
相关资源
- 遗传算法进行机器人路径规划代码
- BP神经网络的数据分类
- 支持向量数据描述算法svdd
- 样本连续的朴素贝叶斯代码
- PCA,KPCA LDA算法
- 利用感知器算法进行鸢尾花数据分类
- 平面改进RRT算法路径规划
- 低比特率图像压缩
- 灰色模型和BP神经网络模型在城市时用
- 遗传算法-偏最小二乘回归
- 基本粒子群算法
- 电动汽车有序充放电
- 鱼群算法寻优
- 基于蚁群算法的路径规划
- 基于蚁群算法的多机器人路径规划
- 枝切法实现相位解缠INSAR相位解缠
- 输电线路规划
- 灰色预测模型-介绍与运用
- 最后一公里EC配送程序源代码
- 此函数用FISTA算法解决压缩感知
- SCMA仿真程序中文注释
- 基于DWT的数字水印
- PCA代码汇总
- 编程实现NLMS_LMS对比.docx
- mimo 优化功率分配
- RRT 随机森林全局路径规划
- 基于s函数的电机建模与仿真
- 静脉识别程序
- Horn-Schunck 法实现的光流法
- 改进的细菌觅食优化算法用于双阈值
评论
共有 条评论