全局路径规划算法—A*算法—学习笔记

本文详细介绍了A*算法,一种结合了贪心和Dijkstra算法的搜索策略,用于解决路径规划问题。算法利用f(n)=g(n)+h(n)评价路径优劣,通过openList和closeList管理搜索过程,以及预处理如地图栅格化来提高效率。
摘要由CSDN通过智能技术生成

A*算法结合了贪心算法(深度优先)和Dijkstra算法(广 度优先),是一种启发式搜索算法

贪心算法存在可能搜索不到目标结点的情况,非最优路径

Dijkstra算法是最优路径

深度优先:以当前搜索到的最小路径作为目标路径继续往下搜索

广度优先:对搜索空间内的每一个点进行搜索

路径优劣评价公式为: f(n)=g(n)+h(n)。 

f(n) 是从初始状态经由状态n到目标状态的代价估计,

g(n) 是在状态空间中从初始状态到状态n的实际代价,

h(n) 是从状态n到目标状态的最佳路径的估计代价。

使用了两个状态表,分别称为openList表和closeList表。(类似于Dijkstra算法中的U和S

openList表由待考察的节点组成,

closeList表由已经考察 过的节点组成。

预处理

1.地图栅格化

2.定义两个列表集合

3.更新集合直至找到目标节点

从openList中选择 f值最小的 ( 方格 ) 节点I,从 openList 里取出,放到 closeList 中,并把它作为新的父节点 。检查所有与它相邻的子节点,忽略障碍物不可走节点、 忽略已经存在于closeList的节点;如果方格不在openList 中,则把它们加入到 openList中。 

4.完成路径搜索,结束算法

%% 进入循环
flag = 1;
while flag   
    
    % 找出父节点的忽略closeList的子节点
    child_nodes = child_nodes_cal(parent_node,  m, n, obs, closeList); 
    
    % 判断这些子节点是否在openList中,若在,则比较更新;没在则追加到openList中
    for i = 1:size(child_nodes,1)
        child_node = child_nodes(i,:);
        [in_flag,openList_idx] = ismember(child_node, openList, 'rows');
        g = openList_cost(min_idx, 1) + norm(parent_node - child_node);
        h = abs(child_node(1) - target_node(1)) + abs(child_node(2) - target_node(2));
        f = g+h;
        
        if in_flag   % 若在,比较更新g和f        
            if g < openList_cost(openList_idx,1)
                openList_cost(openList_idx, 1) = g;
                openList_cost(openList_idx, 3) = f;
                openList_path{openList_idx,2} = [openList_path{min_idx,2}; child_node];
            end
        else         % 若不在,追加到openList
            openList(end+1,:) = child_node;
            openList_cost(end+1, :) = [g, h, f];
            openList_path{end+1, 1} = child_node;
            openList_path{end, 2} = [openList_path{min_idx,2}; child_node];
        end
    end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值