图论、图搜索算法
对图结构Graph、深度优先搜索DFS、广度优先搜索BFS进行介绍,同时记录贪心算法的特点
基础概念
配置空间、工作空间
- 机器人配置(Robot Configuration):对机器人上所有点的位姿描述
- 机器人自由度(Robot Degree Of Freedom, DOF):描述机器人路径规划的最少坐标数量nnn。
- 机器人配置空间(Robot Configuration Space, C-Space):包含机器人所有可能位姿的nnn维空间
- 机器人位姿在配置空间中假定为一个点
- 机器人工作空间(Robot Workspace):机器人实际工作的复杂环境
障碍物、运动规划
机器人具有不同的形状、尺寸大小,障碍物(Obstacle)的碰撞检测需要了解机器人的形状、大小等属性,较为复杂:
故而,一般在配置空间中做机器人的路径规划问题。已知机器人位姿在配置空间C-space中假定为一个点,例如欧氏空间下的机器人位姿可使用ℜ3×3∈SO(3)\Re^{3\times3}\in SO(3)ℜ3×3∈SO(3)进行表示。则可将障碍物进行膨胀得到配置空间中的障碍物(C-Obstacle),若机器人所在点不落在C-Obstacle范围内,则判定机器人处于自由状态下,不会被碰撞:C-Free。
配置空间由障碍物及自由空间组成:(C−Space)=(C−Obstacle)∪(C−Free)(C-Space)=(C-Obstacle)\cup(C-Free)(C−Space)=(C−Obstacle)∪(C−Free)
移动机器人的运动规划是在机器人的起点qstartq_{start}qstart到机器人的目标点qgoalq_{goal}qgoal之间,处于C−FreeC-FreeC−Free空间中的规划。
图搜索(Graph Search Basis)
图(Graphs)
图是一种由节点(Nodes)和边(Edges)构成的抽象网络,网络中各个节点由边进行连接,表明两节点存在关系。
节点(Node)
节点表示某个事物或对象,如上图中各个带字母的点。
边(Edge)
边表示事物与事物间的逻辑关系,如上图中两节点间的绿线。
同构(Isomorphism)
同构的两张图具有相同的节点及节点间连接的边,同构图仅存在画法的不同,但包含的逻辑关系不变。
有向图(Directed Graph)、无向图(Undirected Graph)
无向图的边没有方向,而有向图的边具有方向性。
如上图,有向图的方向如下:D→A→GD\to A\to GD→A→G、D→C→ED\to C\to ED→C→E、B→A→GB\to A\to GB→A→G、B→C→EB\to C\to EB→C→E、B→F→EB\to F\to EB→F→E
权重(Weight)
图上的边具有权重值,每条边的权重可以不同,表示由一个节点至另一个节点的代价值。如下图由节点AAA到节点GGG的权重值为4。
路径(Path)、最优路径(Shortest Path)
图上任取两点作为起点与目标点,由起点到目标点,不经过重复节点和边的路线称为路径。由起点到目标点最短的路径称为最优路径,在选择最优路径时往往需要考虑边的权值。
图搜索(Search-based Method )
对图结构进行搜索,从起始节点SSS到目标节点GGG,将生成一个搜索树:
通常,构建一个完整的搜索树结构,所需要的代价很高。图搜索算法的基本逻辑如下:
1:维护一个用于存储所有被访问节点的容器2:容器内初始值为起点Xs3:开始循环Loop4:访问节点:根据预先定义的评分函数(Score Function)从容器中取出一个节点5:扩展节点:获得该节点的所有邻居节点6:置入节点:将获得的邻居节点置入容器7:结束循环End \begin{aligned} &1:维护一个用于存储所有被访问节点的容器\\ &2:容器内初始值为起点X_s\\ &3:开始循环Loop\\ &4:\qquad访问节点:根据预先定义的评分函数(Score\:Function)从容器中取出一个节点\\ &5:\qquad扩展节点:获得该节点的所有邻居节点\\ &6:\qquad置入节点:将获得的邻居节点置入容器\\ &7:结束循环End \end{aligned} 1:维护一个用于存储所有被访问节点的容器2:容器内初始值为起点Xs3:开始循环Loop4:访问节点:根据预先定义的评分函数(ScoreFunction)从容器中取出一个节点5:扩展节点:获得该节点的所有邻居节点6:置入节点:将获得的邻居节点置入容器7:结束循环End
循环结束条件一般置为抵达目标节点,或容器中所有节点被弹出,容器为空。
广度优先搜索(Breadth First Search, BFS)
广度优先算法基于队列(Queue)进行,遵从于先进先出的原则进行:
举例说明如下:
广度优先搜索搜先从起点节点sss开始,首先弹出节点sss,得到三个邻居节点d、e、pd、e、pd、e、p并置入容器中;随后弹出其中一个节点ppp,得到其邻居节点qqq置入容器;其次,再弹出一个节点eee并将其邻居节点h、rh、rh、r置入容器;周而复始,弹出ddd并将其邻居节点b、c、eb、c、eb、c、e置入容器……知道搜索到目标为止。
应注意,对于邻居节点置入容器的顺序需要被确立,如从左到右置入、顺时针置入等方式。
深度优先搜索(Depth First Search, DFS)
深度优先搜索基于堆栈(Stack)进行,遵从于后进先出原则进行:
举例说明如下:
首先,从起点节点sss开始搜索,弹出节点sss后,得到邻居节点d、e、pd、e、pd、e、p并将其置入容器;随后,弹出节点ddd得到其邻居节点b、c、eb、c、eb、c、e置入容器;周而复始,弹出bbb得到邻居节点aaa置入容器后,发现对aaa进行搜索无邻居节点,故而再一次弹出节点ccc得到其邻居节点aaa,同样无邻居节点并再次弹出eee……直到抵达目标节点GGG时离开循环。
同样应注意,对于邻居节点置入容器的顺序需要被确立。
效果对比
如下图所示,左侧为BFS右侧为DFS。一般深度优先搜索所得并非最短路径,故而实际在最优路径规划中,采用BFS进行:
贪心算法(Greedy Best First Search)
BFS和DFS算法弹出的下一个节点顺序按照先入先出、后入先出的规则进行,而贪心算法则通过人为指定的规则进行弹出对应节点,称为启发(heuristic)
启发(heuristic)
一个heuristic被定义为:当前点到目标点距离的猜测(Guess),此距离忽略地图中的障碍物,可采用欧氏距离(Euclidean Distance)或曼哈顿距离(Manhattan Distance)进行猜测。
一个heuristic应该易于计算,同时它将给予我们搜索图的方向。
效果对比
在理想环境中,不存在障碍物。与BFS算法相比,贪心算法能够在更短时间内找到最短路径(下图一)。而在效果上,两者规划得到的最优路径相同(下图二):
然而在实际地图环境下,存在大量的障碍物。此时,虽然贪心算法依旧能够较快得到规划路径(下图一),但是所得的路径并非实际上的最优路径(下图二):

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)