IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 图论、图搜索算法 -> 正文阅读

[数据结构与算法]图论、图搜索算法

基础概念

配置空间、工作空间

  • 机器人配置(Robot Configuration):对机器人上所有点的位姿描述
  • 机器人自由度(Robot Degree Of Freedom, DOF):描述机器人路径规划的最少坐标数量 n n n
  • 机器人配置空间(Robot Configuration Space, C-Space):包含机器人所有可能位姿的 n n n维空间
  • 机器人位姿在配置空间中假定为一个点
  • 机器人工作空间(Robot Workspace):机器人实际工作的复杂环境

障碍物、运动规划

机器人具有不同的形状、尺寸大小,障碍物(Obstacle)的碰撞检测需要了解机器人的形状、大小等属性,较为复杂:

在这里插入图片描述

故而,一般在配置空间中做机器人的路径规划问题。已知机器人位姿在配置空间C-space中假定为一个点,例如欧氏空间下的机器人位姿可使用 ? 3 × 3 ∈ S O ( 3 ) \Re^{3\times3}\in SO(3) ?3×3SO(3)进行表示。则可将障碍物进行膨胀得到配置空间中的障碍物(C-Obstacle),若机器人所在点不落在C-Obstacle范围内,则判定机器人处于自由状态下,不会被碰撞:C-Free。

在这里插入图片描述

配置空间由障碍物及自由空间组成: ( C ? S p a c e ) = ( C ? O b s t a c l e ) ∪ ( C ? F r e e ) (C-Space)=(C-Obstacle)\cup(C-Free) (C?Space)=(C?Obstacle)(C?Free)

移动机器人的运动规划是在机器人的起点 q s t a r t q_{start} qstart?到机器人的目标点 q g o a l q_{goal} qgoal?之间,处于 C ? F r e e C-Free C?Free空间中的规划。

图搜索(Graph Search Basis)

图(Graphs)

图是一种由节点(Nodes)和边(Edges)构成的抽象网络,网络中各个节点由边进行连接,表明两节点存在关系。

在这里插入图片描述

节点(Node)

节点表示某个事物或对象,如上图中各个带字母的点。

边(Edge)

边表示事物与事物间的逻辑关系,如上图中两节点间的绿线。

同构(Isomorphism)

同构的两张图具有相同的节点及节点间连接的边,同构图仅存在画法的不同,但包含的逻辑关系不变。

在这里插入图片描述

有向图(Directed Graph)、无向图(Undirected Graph)

无向图的边没有方向,而有向图的边具有方向性。

在这里插入图片描述

如上图,有向图的方向如下: D → A → G D\to A\to G DAG D → C → E D\to C\to E DCE B → A → G B\to A\to G BAG B → C → E B\to C\to E BCE B → F → E B\to F\to E BFE

权重(Weight)

图上的边具有权重值,每条边的权重可以不同,表示由一个节点至另一个节点的代价值。如下图由节点 A A A到节点 G G G的权重值为4。

在这里插入图片描述

路径(Path)、最优路径(Shortest Path)

图上任取两点作为起点与目标点,由起点到目标点,不经过重复节点和边的路线称为路径。由起点到目标点最短的路径称为最优路径,在选择最优路径时往往需要考虑边的权值。

图搜索(Search-based Method )

对图结构进行搜索,从起始节点 S S S到目标节点 G G G,将生成一个搜索树:

在这里插入图片描述

通常,构建一个完整的搜索树结构,所需要的代价很高。图搜索算法的基本逻辑如下:
1 : 维 护 一 个 用 于 存 储 所 有 被 访 问 节 点 的 容 器 2 : 容 器 内 初 始 值 为 起 点 X s 3 : 开 始 循 环 L o o p 4 : 访 问 节 点 : 根 据 预 先 定 义 的 评 分 函 数 ( S c o r e ? F u n c t i o n ) 从 容 器 中 取 出 一 个 节 点 5 : 扩 展 节 点 : 获 得 该 节 点 的 所 有 邻 居 节 点 6 : 置 入 节 点 : 将 获 得 的 邻 居 节 点 置 入 容 器 7 : 结 束 循 环 E n d \begin{aligned} &1:维护一个用于存储所有被访问节点的容器\\ &2:容器内初始值为起点X_s\\ &3:开始循环Loop\\ &4:\qquad访问节点:根据预先定义的评分函数(Score\:Function)从容器中取出一个节点\\ &5:\qquad扩展节点:获得该节点的所有邻居节点\\ &6:\qquad置入节点:将获得的邻居节点置入容器\\ &7:结束循环End \end{aligned} ?1:访2:Xs?3:Loop4:访ScoreFunction5:6:7:End?
循环结束条件一般置为抵达目标节点,或容器中所有节点被弹出,容器为空。

广度优先搜索(Breadth First Search, BFS)

广度优先算法基于队列(Queue)进行,遵从于先进先出的原则进行:

在这里插入图片描述

举例说明如下:

在这里插入图片描述

广度优先搜索搜先从起点节点 s s s开始,首先弹出节点 s s s,得到三个邻居节点 d 、 e 、 p d、e、p dep并置入容器中;随后弹出其中一个节点 p p p,得到其邻居节点 q q q置入容器;其次,再弹出一个节点 e e e并将其邻居节点 h 、 r h、r hr置入容器;周而复始,弹出 d d d并将其邻居节点 b 、 c 、 e b、c、e bce置入容器……知道搜索到目标为止。

应注意,对于邻居节点置入容器的顺序需要被确立,如从左到右置入、顺时针置入等方式。

深度优先搜索(Depth First Search, DFS)

深度优先搜索基于堆栈(Stack)进行,遵从于后进先出原则进行:

在这里插入图片描述

举例说明如下:

在这里插入图片描述

首先,从起点节点 s s s开始搜索,弹出节点 s s s后,得到邻居节点 d 、 e 、 p d、e、p dep并将其置入容器;随后,弹出节点 d d d得到其邻居节点 b 、 c 、 e b、c、e bce置入容器;周而复始,弹出 b b b得到邻居节点 a a a置入容器后,发现对 a a a进行搜索无邻居节点,故而再一次弹出节点 c c c得到其邻居节点 a a a,同样无邻居节点并再次弹出 e e e……直到抵达目标节点 G G G时离开循环。

同样应注意,对于邻居节点置入容器的顺序需要被确立。

效果对比

如下图所示,左侧为BFS右侧为DFS。一般深度优先搜索所得并非最短路径,故而实际在最优路径规划中,采用BFS进行:

在这里插入图片描述

贪心算法(Greedy Best First Search)

BFS和DFS算法弹出的下一个节点顺序按照先入先出、后入先出的规则进行,而贪心算法则通过人为指定的规则进行弹出对应节点,称为启发(heuristic)

启发(heuristic)

一个heuristic被定义为:当前点到目标点距离的猜测(Guess),此距离忽略地图中的障碍物,可采用欧氏距离(Euclidean Distance)或曼哈顿距离(Manhattan Distance)进行猜测。

在这里插入图片描述

一个heuristic应该易于计算,同时它将给予我们搜索图的方向。

效果对比

在理想环境中,不存在障碍物。与BFS算法相比,贪心算法能够在更短时间内找到最短路径(下图一)。而在效果上,两者规划得到的最优路径相同(下图二):
在这里插入图片描述

在这里插入图片描述

然而在实际地图环境下,存在大量的障碍物。此时,虽然贪心算法依旧能够较快得到规划路径(下图一),但是所得的路径并非实际上的最优路径(下图二):
在这里插入图片描述
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:22:22  更:2022-02-16 13:24:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:28:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码