1 算法介绍

A*搜寻算法俗称A星算法。这是一种在图形平面上,有多个节点的路径,求出最低通过成本的算法。常用于游戏中的NPC的移动计算,或线上游戏的BOT的移动计算上。(拷自百度百科)是常用搜索算法中,能够以最短时间来求得最短路径的一种启发式搜索算法。兼具广搜和深搜的优点,那么比较起广搜和深搜这些盲目搜索,A*有什么特点呢?A*搜索的效率就在于:以深搜的形式来扩展已知结点中的最优结点,而最优结点的定位又类似于广搜。

估计大家现在也不知道我在乱七八糟说些什么。下面正式开始介绍A*算法。

在构建A*搜索函数主体之前,我们需要一个估价函数( f ),来评估通过当前到目标状态的代价(大家可以理解为,通过这条路走到目的地有多长的路程)

其中  f(估价函数值) = actual(已消耗的实际代价)+ estimate(还可能再消耗的预估代价)actual 无需多说,便是从搜索起始结点到当前扩展结点的代价(距离)总和; estimate 的确定,需要用到曼哈顿距离(Manhattan Distance),   在简单的二维地图中,我们可以认为,上下左右4个方向上的代价为10,而斜向的4个方向的代价为14(√(200) 的近似值 [1] )

而在 8 连通图 中

在A*搜索所使用到的结点的结构:

xy              坐标值(也是结点唯一性的标识)[2]
        actual          上面提到的“真实值”
        estimate      预估值
        father          父结点地址(也可以是 父结点的坐标值 或 被拓展的方向 )

在此补充一下结点状态
        活结点:尚未扩展的结点
        死结点:已扩展完的结点
        扩展结点:当前正在扩展的结点

下面给出A*算法的主步骤

(1)将 targetNode(目标结点)放入 open 表,actual = 0; estimate = Esitimate( &startNode, &targetNode )。[3]

(2)进入循环,重复下列过程;如果 open 表为空,则搜索失败,既:target 与 Start 之间不存在通路。

(3)遍历 open 表,将最小的 f 值(actual + Esitimate)选为 bestNode,并从 open 表中删除,放入 close 表。

(4)判断 bestNode 是否为 startNode ,若是,则成功搜索到了最短路径。

(5)若不是,开始遍历 8个方向,扩展 bestNode。

(a)根据方向和 bestNode 的坐标计算子结点坐标,子结点的 actual = bestNode 的 actual + 10(上向左右)或 14(斜向),
                    estimate = Estimate( &子结点, &startNode ),father = bestNode。
            (b)判断 bestNode 的子结点 是否在 close 表中,若是,loop (5)。
            (c)若不是,判断子结点是否在 open 表中,若是,开始(i),否则执行(d);

(i) 再判断 open 表中记录的结点的 actual 值是否大于 当前子结点的 actual 值(新旧路径代价比较);
                        (ii)若是,令 open 表中记录的结点的 actual = 当前子结点的 actual,令 open 表中记录的结点的 father 指向bestNode。loop (5)。
            (d)否则(子结点既不在 open 表中,又不在 close 表中),将子结点记入 open 表,loop(5)。

(6)loop (2)

2 部分代码

% 'test_DeSCI.m' tests 'decompress snapshot compressive imaging (DeSCI)' algorithm for video reconstruction in
% 'coded aperture compressive temporal imaging (CACTI)'% Reference
%   [1] M. Qiao, Z. Meng, J. Ma, X. Yuan, Deep learning for video compressive
%       sensing, APL Photonics 5, 030801 (2020).
%   [2] Y. Liu, X. Yuan, J. Suo, D.J. Brady, and Q. Dai, Rank Minimization
%       for Snapshot Compressive Imaging, IEEE Trans. Pattern Anal. Mach.
%       Intell. (TPAMI), DOI:10.1109/TPAMI.2018.2873587, 2018.% Contact
%   Xin Yuan, Bell Labs, xyuan@bell-labs.com
%   Mu Qiao, New Jersey Institute of Technology, muqiao@njit.edu
%   Update Mar 13, 2020.%% [0] environment configuration
clear;
clc;
close alladdpath(genpath('./DeSCI_algorithm')); % algorithms
datasetdir = './dataset';                % dataset dictionarypara.dataname = 'meas_waterBalloon_cr_10';    % selected 2D measurement
para.cr = str2double(para.dataname(end-1:end));    % compression ratio of the selected measurement, i.e., number of video frames to be recovered from each single 2D measurement
para.numRec = 1;                              % number of measurement frames to be reconstructeddatapath = sprintf('%s/%s.mat',datasetdir,para.dataname);  % path of the selected 2D measurement%% [1] load datasetload(datapath);               % load measurement
load('./dataset/mask.mat');   % load maskmeas = meas(:,:,1:para.numRec);
meas = 1850*meas./max(meas(:));
mask  = double(mask(:,:,1:para.cr));[nrow,ncol,~] = size(meas);%% [2] ADMM-WNNM-TV
para.nframe =   para.numRec;
para.MAXB   = 255;
MAXB = para.MAXB;para.Mfunc  = @(z) A_xy(z,mask);
para.Mtfunc = @(z) At_xy_nonorm(z,mask);
para.Phisum = sum(mask.^2,3);
para.Phisum(para.Phisum==0) = 1;para.flag_iqa = false; % disable image quality assessments in iterations
para.acc = 1; % enable acceleration
para.flag_iqa = false; % disable image quality assessments in iterations
para.projmeth = 'admm_res'; % projection method
%  (GAP for noiseless or ADMM for noisy)
para.gamma  =    1; % regularization factor for noise suppression
para.denoiser = 'wnnm'; % WNNM denoising
para.wnnm_int_fwise = true; % enable GAP-WNNM integrated (with frame-wise denoising)
para.blockmatch_period = 20; % period of block matching
para.sigma   = [50 45 40]/MAXB; % noise deviation (to be estimated and adapted)
para.vrange   = 1; % range of the signal
para.maxiter = [50 50 50]; % first trial
para.patchsize = 24; % patch size
para.iternum = 1; % iteration number in WNNM
para.enparfor = true; % enable parfor
para.numworkers = 12;
if para.enparfor % if parfor is enabled, start parpool in advancemycluster = parcluster('local');delete(gcp('nocreate')); % delete current parpoolord = 0;while para.cr/2^ord > mycluster.NumWorkersord = ord+1;endpoolobj = parpool(mycluster,min(max(floor(para.cr/2^ord),1),para.numworkers));
end[vadmmwnnmtv,~,~,tadmmwnnm] = ...admmdenoise_cacti(mask,meas,[],[],para);%% [3] show results in figure% [3.0] rotate and crop
recon = vadmmwnnmtv;
recon_rotate = zeros(725,725,para.numRec*para.cr);for np=1:para.numRec*para.crrecon_rotate(:,:,np) = imrotate(recon(:,:,np),-135);
endrecon_rotate = recon_rotate(182:182+363,182:182+363,:);
recon_rotate = recon_rotate/max(recon_rotate(:));% [3.1] show results in figure
figure;
for i=1:para.numRec*para.crimshow(recon_rotate(:,:,i));pause(0.2);
end

3 仿真结果

4 参考文献

[1]王云常,戴朱祥,李涛.基于A星算法与人工势场法的无人机路径规划[J].扬州大学学报(自然科学版),2019,22(03):36-38+49.

5 代码下载

【无人机】基于A星算法实现三维栅格地图路径规划matlab代码相关推荐

  1. 【路径规划】基于蚁群算法求解机器人栅格地图路径规划matlab代码

    1 简介 通过栅格法建立栅格地图作为机器人路径规划的工作环境,采用蚁群算法作为机器人路径搜索的规则.将所有机器人放置于初始位置.经过NC次无碰撞迭代运动找到最优路径.到达目标位置.为防止机器人在路径搜 ...

  2. 【路径规划】基于灰狼算法实现机器人栅格地图路径规划matlab源码

    1 模型简介 1.1 灰狼算法介绍 1.2 栅格地图介绍 栅格地图有两种表示方法,直角坐标系法和序号法,序号法比直角坐标法节省内存 室内环境栅格法建模步骤 1.栅格粒大小的选取 栅格的大小是个关键因素 ...

  3. 【路径规划】基于和声算法改进灰狼算法实现机器人栅格地图路径规划matlab源码

    1 简介 1.1 和声搜索算法介绍 和声搜索(Harmony Search, HS)算法是一种新颖的智能优化算法.类似于遗传算法对生物进化的模仿.模拟退火算法对物理退火的模拟以及粒子群优化算法对鸟群的 ...

  4. 3.蚁群算法求解格栅地图路径规划matlab代码

    往期: 1.Dijkstra算法求解格栅地图路径matlab代码_墨叔叔的博客-CSDN博客 2.A*搜索算法原理及matlab代码_墨叔叔的博客-CSDN博客 一.蚁群算法原理 原理:蚁群系统(An ...

  5. 【路径规划】基于和声算法改进灰狼算法实现机器人栅格地图路径规划

    一.和声搜索算法介绍 和声搜索(Harmony Search, HS)算法是一种新颖的智能优化算法.类似于遗传算法对生物进化的模仿.模拟退火算法对物理退火的模拟以及粒子群优化算法对鸟群的模仿等,和声算 ...

  6. 【路径规划】基于A星算法实现机器人走迷宫路径规划含Matlab源码

    1 简介 2 部分代码 %% load mapclear;ImpRgb = imread('maze.png');Imp = rgb2gray(ImpRgb);Imp = im2bw(Imp)*255 ...

  7. matlab读取八叉树,基于八叉树表示的三维栅格地图路径规划系统及方法技术方案...

    [技术实现步骤摘要] 基于八叉树表示的三维栅格地图路径规划系统及方法 本专利技术涉及地图路径规划技术,具体涉及基于八叉树表示的三维栅格地图路径规划系统及方法. 技术介绍 随着各项性能的提高,服务机器人 ...

  8. matlab三维路径规划,【路径规划】基于A星算法的三维路径规划matlab源码

    %% 该函数用于演示基于A_Star算法的三维路径规划算法 %% 清空环境 clc clear %% 数据初始化 %下载数据 starttime=cputime; load HeightData z ...

  9. 【Matlab路径规划】A_star算法机器人栅格地图路径规划【含源码 116期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]A_star算法机器人栅格地图路径规划[含源码 116期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

最新文章

  1. engineering likes?
  2. DCMTK:OFnumeric_limits的单元测试
  3. 关于Unity实现AR功能(四)设置相机的对焦
  4. python打印网页成pdf_vue中将网页打印成pdf
  5. B站这套教程火了,火速搬运!限时删除~
  6. python数据框的横向贾总_[Spark][Python]DataFrame的左右连接例子
  7. gpu显存(全局内存)在使用时数据对齐的问题
  8. php设计模式 -- 迭代器模式
  9. Stack Overflow首席大神,他回答了超过3万个问题
  10. 如何在PHP7中安装mysql的扩展
  11. 工业交换机芯片选择需要注意什么事项呢?
  12. openbravo erp介绍(一)
  13. 3.9 Primitive Obsession 基本类型偏执
  14. Windows 用 CMD 打开 WAMP5 的MySQL数据库
  15. android SDK introduce
  16. 在html中怎样写年月日的代码,注册时选择出生年月日的html+JS
  17. 63套js ,html .css效果页面(点个小星星免费下载)
  18. 3.Jenkins入门基础使用与Maven+SonarQube集成配置与实践
  19. c语言通过epoll来实现http协议的web服务器
  20. Covert Communication in Mobile Applications 手机应用中的隐秘通信

热门文章

  1. InVEST模型 | 02 InVEST模型Python安装
  2. Excel IF 函数多条件判断
  3. h3cse 370 考试概要
  4. ArcGIS desktop——“热力图”实现方法比较
  5. Afreechart很强大的图表库,支持股票曲线图,饼图,曲线
  6. .net mvc lambda表达式Contains方法
  7. 0基础如何复习计算机408
  8. Vivado时序分析
  9. 如何将万能地图下载器下载的卫星地图加载到Autodesk InfraWorks 360内进行道路规划设计
  10. 千字详解:“Java性能调优六大工具”之JConsole工具