




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
最短路问题及相关算法介绍吕长虹华东师范大学数学系Email:chlu@1A最短路问题及相关算法介绍吕长虹1AQuestionone:每天开车去上班,应该走那条使得达到公司的费用最低、时间最少呢,如何选择最优的路径呢?2AQuestionone:2AQuestiontwo:在城市规划自己电网架设中,怎么设计才能使其耗费的资金最少?3AQuestiontwo:3A其实都涉及到一个相同的问题:最短路问题!4A4A最短路问路径不仅仅是一般地理意义上的距离最短,还可以延伸到其他度量,如时间、费用、线路容量等,相应的最短路问题就转化诶最快路径问题、最低费用问题。最短路径问题也是资源分配,线路设计及分析等优化问题的基础。5A最短路问路径不仅仅是一般地理意义上的距离最短,还可以延伸到其
图论中的最短路问题(shortestrouteproblem)是组合数学和图论中核心问题之一,是许多更深层次算法的基础。6A图论中的最短路问题(shortestrouteprob图的定义:图是一种由“顶点”组成的抽象网络,网络中的各顶点可以通过“边”实现彼此的连接,表示两顶点有关联。图一般用G来表示,其顶点集为V,边集为E,简述为G=(V,E)。右图就是图论中一个节点的图结构,一共有10个顶点,15条边。Petersen图7A图的定义:图一般用G来表示,其顶点集为V,边集为E,简述为G最短路问题就是在指定的网络中两个节点间寻找一条距离最小的路。网络就是用节点和边联结构成的图,如铁路网、公路网等。下图就是我们将一个实际区域结构,图结构化的结果。8A最短路问题就是在指定的网络中两个节点间寻找一条距离最小的路。两种常见最短路问题:1、单源最短路问题::求某一个到其余个点的最短路问题?----dijkstra算法2、多源最短路问题:求任意两点之间最短路问题?----Floyd算法9A两种常见最短路问题:9ADijkstra算法更是被称为统治世界的十大算法之一。10ADijkstra算法更是被称为统治世界的十大算法之一。10A最短路算法一个经典应用:导航我们在百度地图上寻找驾车路径时,显然就是要寻找一条物理距离最短或者行驶时间最短的路线。那我们能否通过算法设计一个属于我们的导航呢?Dijkstra算法就可以帮助我们做到这一点!11A最短路算法一个经典应用:导航11A问题简述现有在无向图G=(V,E),V为各顶点的集合,E边集合,W为每条路径的权值,满足权值大于零。需要求得从某个起始点v,到其余各点的最短路径。12A问题简述现有在无向图G=(V,E),VDijkstra算法算法描述13ADijkstra算法算法描述13ADijkstra算法描述把图中顶点集合V分成两组第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条到其余顶点的最短路径,就将加入到集合S中,直到全部顶点都加入到S中,算法就结束了)第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中。在加入的过程中,总保持从源点v到S中各顶点的最短路径长度不大于从源点v到U中任何顶点的最短路径长度。此外,每个顶点对应一个距离,S中的顶点的距离就是从v到此顶点的最短路径长度,U中的顶点的距离,是从v到此顶点只包括S中的顶点为中间顶点的当前最短路径长度。14ADijkstra算法描述把图中顶点集合V分成两组14ADijkstra算法步骤从U中选取一个距离v最小的顶点k,把k,加入S中(该选定的距离就是v到k的最短路径长度)。二重复步骤二和三直到所有顶点都包含在S中。四以k为新考虑的中间点,修改U中各顶点的距离;若从源点v到顶点u的距离(经过顶点k)比原来距离(不经过顶点k)短,则修改顶点u的距离值,修改后的距离值的顶点k的距离加上边上的权。三初始时,S只包含源点,即S={v},v的距离为0。U包含除v外的其他顶点,即:U={其余顶点},若v与U中顶点u有边,则<u,v>正常有权值,若u不是v的出边邻接点,则<u,v>权值为∞。一15ADijkstra算法步骤从U中选取一个距离v最小的顶点k,把算法的描述上看去相当复杂,我们给出下面例子来具体说明整个算法的运行流程!16A算法的描述上看去相当复杂,我们给出下面例子来具体说明整个算法首先我们要有如下概念:假设P:v→km是从顶点v到km的一条最短路径,那对这条路径上任意其他一点ki,都有P上关于v→ki的子路径为v到点ki的最短路径。即最短路径的子路径仍然是最短路径,最短路算法本质上上基于这种思想展开的。17A首先我们要有如下概念:17A经典例子18A经典例子18A
我们取源点为V1,即求V1到其余个点的最短距离。19A
我们取源点为V1,即求V1到其余个点的最短距离。19ASTEP1:开始阶段S={V1},U={V2,V3,V4,V5,V6},W=(wij)6×6为权值矩阵。向量D来记录每一步之后V1与其余各点之间的最短距离。初始阶段D=(0,7,9,∞,∞,14)。20ASTEP1:开始阶段S={V1},U={V2,V3,V4,VSTEP2:将与V1距离最小的点V2放入S中,S={V1,V2},U={V3,V4,V5,V6},此时我们确定V1到V2之间的最短距离为7。计算V1与U中各点距离【必须最短路经过V2】,再与向量D中比较取较小值作为新的D中取值。S13=W23+D12=10+7=17S14=W24+D12=15+7=22D13=min{S13,D13}=min{17,9}=9,不变。D14=min{S14,D14}=min{22,∞}=22,变小。此时D=(0,7,9,22,∞,14)21ASTEP2:将与V1距离最小的点V2放入S中,S={V1,VSTEP3:将与V1距离最小的点V3放入S中,S={V1,V2,V3},U={V4,V5,V6},此时我们确定V1到V3之间的最短距离为9。计算V1与U中各点距离【必须最短路经过V3】,再与向量D中比较取较小值作为新的D中取值。S14=W34+D13=11+9=20S16=W36+D13=2+9=11D14=min{S14,D14}=min{20,22}=20,变小。D16=min{S16,D16}=min{11,14}=11,变小。此时D=(0,7,9,20,∞,11)22ASTEP3:将与V1距离最小的点V3放入S中,S={V1,VSTEP4:将U中与V1距离最小的点V6放入S中,S={V1,V2,V3,V6},U={V4,V5},此时我们确定V1到V6之间的最短距离为11。计算V1与U中各点距离【必须最短路经过V6】,再与向量D中比较取较小值作为新的D中取值。S15=W65+D1=11+9=20D15=min{S15,D15}=min{20,∞}=20,变小。此时D=(0,7,9,20,20,11)23ASTEP4:将U中与V1距离最小的点V6放入S中,S={V1STEP5:此时U中与V1距离最小的点为V4和V5放入S中,S={V1,V2,V3,V4,V5,V6},U={},此时我们确定V1到V4之间的最短距离为20,V1到V5之间的最短距离也为20。所有的点都在S中,算法终止!此时D=(0,7,9,20,20,11),就是V1到其余各个点的最短距离向量。24ASTEP5:此时U中与V1距离最小的点为V4和V5放入S中,优点缺点优点优点缺点缺点效率低,需要遍历所有点(特别是有时候不需要最优解)、运算中占用空间大缺点算法简明易懂、并且一定能得到最优解优点Dijkstra算法可能不是最优先使用的方法,因为算法的运算速度效率,往往要比精确度更加重要实际运用25A优点缺点优点优点缺点缺点效率低,需要遍历所有点(这样利用Dijkstra算法设计一个属于我们自己的导航系统啦。但似乎在实际运行时效果并不理想!26A这样利用Dijkstra算法设计一个属于我们自己的导航系统啦虽然算法本身就是最短路径,但路面交通变化复杂,由于路面施工导致道路封锁,同时还存在路堵、车祸等现象,导致算法输出的最优路径,实际上并不是我们想要的最优路径。27A虽然算法本身就是最短路径,但路面交通变化复杂,由于路面施工导路面道路封锁、路堵、车祸等现象,本质上可以理解为这条道路被封堵住了,即有一个障碍物出现在此处,阻碍我们继续前进了!28A路面道路封锁、路堵、车祸等现象,本质上可以理解为这条道路被封这时候我们Dijkstra算法就失效了!有同学会问:去掉这条堵住的线段不就可以了?这样仍然可以用Dijkstra算法求解。事实上这是一种可行的思路,但如果这样操作每天我的导航系统就要花大量时间去进行线段删减、增加工作。系统维护成本增加!29A这时候我们Dijkstra算法就失效了!29AA*算法就是解决这类问题的一个有效算法。A*算法可以理解成Dijkstra算法+最佳优先搜索!30AA*算法就是解决这类问题的一个有效算法。30A最佳优先搜索简介
这个算法的运算流程跟Dijkstra的流程类似,只不过它考察的是选取点到终点的距离,并且这个距离的权值是评估出来的,这也就是启发式的思想。举例说明,如果说目标的终点在北面,那么越靠近北面的点权值就越小,那么算法在搜索过程中,所加入点集的点就会倾向于北面,因此不用搜索全图东南西北,更多的是搜索北面的点,速度来说会优于Dijkstra算法很多。31A最佳优先搜索简介这个算法的运算流程跟DijA*算法描述A*算法将两种算法结合起来,最为关键的就是它判断权值大小的函数f(n)。它定义f(n)=g(n)+h(n)。其中,g(n)为起始点到任意节点n的权值,在路径搜索中,也就是说到n点需要付出的代价,换句话说,之前所叙述的Dijkstra算法。h(n)表达的是从节点n到终点的估计权值,也就是前面所陈述的最佳优先搜索。
从中可以看到,当h(n)=0的时候,这个算法就是Dijkstra算法,而当个g(n)=0的时候,这个算法就是最佳优先算法。h(n)的值占比越大,这个A*算法的启发度越高,也就越不精确,但运算很快。相对的g(n)的占比高时,这个算法更趋向于将全局的节点都加进点集进行对比,从而可以给出较优的解,但算法速度会变慢。32AA*算法描述A*算法将两种算法结合起来,算法过程1.设定三个集合closelist,openlist,parentnode,其中,closelist中记录已经搜寻过的点,openlist中记录等待搜寻的点,parentnode则是用来记录搜寻的路径,最后回推找到结果路径;2.将起始点放入openlist,此时closelist与parentnode为空集;3.在openlist中选一个f(n)值最小的点作为当前的节点;4.将其从openlist中移除,添加到closelist中;5.如果当前节点为终点,那么搜索结束;6.搜索当前节点的相邻节点;7.如果相邻节点不在openlist中,就将它添加到openlist中,并将当前点设为parentnode;8.如果当前节点已经在openlist中,那么重新计算g值,如果g值小于当前节点的g值,那么更新这个值并且更新parentnode;9.如果当前节点在closelist中或者无法通过,那么就不处理它;10.如果openlist没有终点或所在水平线两侧的相邻点,那么跳转到3步骤;如果有终点或所在水平线两侧的相邻点中的任何一个,则将其设为终点并结束完成当前任务规划。33A算法过程1.设定三个集合closelist,open经典例子我们需要从绿色格子搜寻路径到红色格子,我们假定横向、纵向移动的权值为10,对角线移动权值为14。格子的左上角是f(n),左下角为g(n),右下角为h(n)的值此处使用
Manhattan
方法估计h取值,计算从当前方格横向或纵向移动到达目标所经过的方格数,忽略对角移动,然后把总数乘以
10
。说明:对于障碍物存在的地方,我们认为无法通过,即不能经过任何和障碍有关的地方,甚至是单个点。所以对角线也无法走!34A经典例子我们需要从绿色格子搜寻路径到红色格子,我们假定横向、初始搜索过程:1、起点
A
开始,openlist={A};2、查看与起点
A
相邻的方格
(
忽略其中墙壁所占领的方格
)
,把其中可走的方格也加入到
openlist
中,此时openlist={A、A1,A2,A3,A4,A5,A6,A7,A8};3、设置这些新加入点的父亲为A;4、更新openlist和closelist,openlist={A1,A2,A3,A4,A5,A6,A7,A8},closelist={A};5、计算每个新加入openlist点的F,G,H值,并标注在相应位置;AA1A2A3A4A5A6A7A835A初始搜索过程:1、起点
A
开始,openlist={A}下一步搜索的方格1、从
openlist
中选择
F
值最小的
(
方格
)
节点A1;2、更新openlist和closelist,openlist={A2,A3,A4,A5,A6,A7,A8},closelist={A,A1};3、检查所有与它相邻的方格,忽略其中在
closelist
中或是不可走的方格
,如果方格不在openlsit
中,则把它们加入到
openlist[对于A1点来说并没有新的点要加入到openlist];4、检查原先openlist中点A2,A3,A7,A8在通过A1到达的G值是否更小?显然没有,所以不做任何变化!AA1A2A3A4A5A6A7A836A下一步搜索的方格1、从
openlist
中选择
F
值最下一步搜索的方格1、从
openlist
中选择
F
值最小的
(
方格
)
节点A2;[A2和A8取值一样,随机选择一个都可以。]2、更新openlist和closelist,openlist={A3,A4,A5,A6,A7,A8},closelist={A,A1,A2};3、检查所有与它相邻的方格,忽略其中在
closelist
中或是不可走的方格
,如果方格不在openlsit
中,则把它们加入到
openlist,openlist={A3,A4,A5,A6,A7,A8,A9,A10};4、新加入点A9,A10的父亲节点设为A2,并计算相应F,G,H值;5、检查原先在openlist中的点A1,A3通过A2到达的G值是否更小?显然没有,所以对这两个点不做任何变化!AA1A2A3A4A5A6A7A8A10A937A下一步搜索的方格1、从
openlist
中选择
F
值最最后搜索的方格不断重复这个过程,直到把终点也加入到了
openlist
中。最终结束时如右图所示,这样我们就获得了绕过障碍物到达目的地的最短路。38A最后搜索的方格不断重复这个过程,直到把终点也加入到了
ope这样我们的智能导航系统就设计完毕啦!39A这样我们的智能导航系统就设计完毕啦!39A此时我们设计的导航系统已经可以投入生产使用啦!跟进一步,假如我的障碍物也会移动怎么办?40A此时我们设计的导航系统已经可以投入生产使用啦!40AA*算法能够解决有固定障碍物的路径规划问题,并且能很快地给出解,但是当障碍物是移动的时候,我们又应该如何对算法进行改从而给出解呢?一个典型问题:AGV小车线路规划!41AA*算法能够解决有固定障碍物的路径规划问题,并且能很快地给智能码头:AGVAGV中文名:自动导引小车是自动化码头水平运输系统中用于搬运集装箱的搬运设备。其主要职责:就是在规定的时间窗口范围内完成堆场和岸桥之间实现集装箱的传送。42A智能码头:AGVAGV中文名:自动导引小车42A智能码头:AGV43A智能码头:AGV43A智能码头:AGV整个码头同一时刻运行的AGV
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 无锡科技职业学院《职业卫生学》2023-2024学年第一学期期末试卷
- 新疆财经大学《医学人文含医患沟通医学心理学医学伦理学》2023-2024学年第二学期期末试卷
- 贵州民族大学《工程荷载与可靠度设计方法》2023-2024学年第二学期期末试卷
- 上海济光职业技术学院《工业网络与组态技术》2023-2024学年第二学期期末试卷
- 沈阳理工大学《中国古代戏曲研究》2023-2024学年第一学期期末试卷
- 天津铁道职业技术学院《体育场地与设施》2023-2024学年第二学期期末试卷
- 民办合肥财经职业学院《科技应用英语》2023-2024学年第二学期期末试卷
- 南京城市职业学院《声乐四》2023-2024学年第一学期期末试卷
- 惠州经济职业技术学院《生物制药技术》2023-2024学年第二学期期末试卷
- 国际土木工程招投标合同
- 2024年上海杨浦区社区工作者笔试真题
- 2025年1月浙江省高考物理试卷(含答案)
- 青岛市2025年高三语文一模作文题目解析及范文:成见与主见
- (二模)晋中市2025年高三高考二模 语文试卷(含A+B卷答案详解)
- 2025年员工职业道德试题及答案
- 2020年1月浙江省普通高校招生选考科目考试政治试题及答案
- 2025山东能源集团中级人才库选拔自考难、易点模拟试卷(共500题附带答案详解)
- 70岁老年人三力测试能力考试题库及答案
- 慢性心功能不全护理查房
- 《中华人民共和国会计法》知识培训
- (二调)武汉市2025届高中毕业生二月调研考试 英语试卷(含标准答案)+听力音频
评论
0/150
提交评论