• 大小: 4KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: matlab  路径规划  

资源简介

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

评论

共有 条评论