资源简介
A*算法是从起始点开始向目标点搜索,而双向A*是在A*的基础上由起始点和目标点同时搜索,当一方检测到另一方的已检查节点时,搜索结束,在搜索时间效率上,双向A*更快。
代码片段和文件信息
function bidirectional_ASTAR
clc;
clear;
%% 初始化界面
n = 11; % 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);
field = ones(n);
startposind =10; %sub2ind用来将行列坐标转换为线性坐标,这里是必要的,因为如果把startposind设置成[xy]的形式,访问field([xy])的时候
goalposind =12; %它并不是访问x行y列元素,而是访问线性坐标为x和y的两个元素
% field(ceil(n^2.*rand(floor(n*n*wallpercent)1) )) = Inf;
field(1:5 7) = 2;
field(81:3) = 2;
field(2:53:5)=2;
field(810)=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);
fieldpointers1 = zeros(n);
global setOpenCosts;
global setOpenCosts1;
global setOpen;
global setOpen1;
global setOpenHeuristics;
global setOpenHeuristics1;
setOpen = (startposind); setOpenCosts = (0); setOpenHeuristics = (Inf);
setClosed = []; setClosedCosts = [];%初始化起点的open表和close表
setOpen1 = (goalposind); setOpenCosts1 = (0); setOpenHeuristics1 = (Inf);
setClosed1 = []; setClosedCosts1 = [];%初始化目标点的open表和close表
[goalpos(1) goalpos(2)] = ind2sub([n n]goalposind); %获得目标点的行列坐标
[startpos(1) startpos(2)] = ind2sub([n n]startposind);
uicontrol(‘style‘‘pushbutton‘‘String‘‘RE-DO‘ ‘FontSize‘12 ...
‘Position‘ [10 10 60 40] ‘Callback‘‘bidirectional_ASTAR‘);
tic
while true %ismember(AB)返回与A同大小的矩阵,其中元素1表示A中相应位置的元素在B中也出现,0则是没有出现
field(startposind )=5;
field(goalposind )=7;
image(1.51.5field);
grid on;
axis image;
set(gca‘gridline‘‘-‘‘gridcolor‘‘r‘‘linewidth‘2);
set(gca‘xtick‘1:1:12‘ytick‘1:1:12);
drawnow;
if(max(ismember(setOpensetOpen1)))
break;
end;
[~ ii] = min(setOpenCosts + setOpenHeuristics); %从OPEN表中选择花费最低的点tempii是其下标(也就是标号索引)
[~ ii1] = min(setOpenCosts1 + setOpenHeuristics1);
field(setOpen(ii))=3;
field(setOpen1(ii1))=6;
[currentpos(1) currentpos(2)] = ind2sub([n n]setOpen(ii));
[currentpos1(1) currentpos1(2)] = ind2sub([n n]setOpen1(ii1));%获得以起点扩展的当前点的行列坐标,注意currentpos(1)是行坐标,currentpos(2)是列坐标
%% 获得当前点的邻居
[posindsposinds1costcost1heuristicheuristic1]=get_neighbors(niiii1currentpos(1)currentpos(2)currentpos1(1)currentpos1(2)goalpos(1)goalpos(2)startpos(1)startpos(2));
setClosed = [setClosed; setOpen(ii)]; %将temp插入CLOSE表中
setClosedCosts = [setClosedCosts; setOpenCost
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14485 2019-04-30 15:44 bidirectional_ASTAR.m
相关资源
- 清洁机器人路径规划matlab仿真程序
- 基于遗传算法的机器人路径规划matl
- 单机器人的多任务路径规划GUI
- 针对栅格路径规划的蚁群算法MATLAB
- 蚁群算法实现三维路径规划Matlab源码
- 路径规划算法MATLAB仿真合集
- 三种不同路径规划的仿真
- 基于栅格地图的蚁群算法路径规划
- 基于智能优化的机器人路径规划matl
- 自主移动机器人路径规划新方法含m
- 多机器人路径规划-matlab
- 多机器人路径及避障规划——Matlab
- 路径规划MATLAB版代码
- 基于matlab的机器人最优路径规划仿真
- 基于栅格地图的A-星算法路径规划
- 基于栅格地图的A星算法路径规划
- A*路径规划算法
- 多种蚁群算法在机器人路径规划中的
- 基于A-Star算法的机器人路径规划.rar
- 路径规划算法Matlab仿真更新
- 路径规划随机地图建立MATLAB源码
- 用A*算法路径规划, matlab程序
- RRT、RRT-Connect、LazyRRT、RRTextend、RRT*的
- 蚁群算法进行二维路径规划.zip
- 粒子群算法应用在路径规划matlab
- 蚁群算法路径规划避障MATLAB源程序
- 蚁群算法无人机路径规划
- A星算法的路径规划MATLAB实现
- 蚁群算法算法的路径规划MATLAB实现
- path-planning 路径规划d*算法
评论
共有 条评论