更全的杂志信息网

应急资源配送中Dijkstra改进算法的研究

更新时间:2016-07-05

0 引言

Dijkstra算法是解决路径规划问题的核心算法。路径规划是指在行驶前或者行驶过程中向驾驶员提供参考行驶路线的过程,是车辆定位与导航系统的基本功能之一。路径规划过程中有着不同的优化标准,如最短距离、最少行驶时间及最大运载量[1]。但无论使用何种标准,路径规划最终都可以归类为在特定道路网络中以搜索总代价最小为目的的目标路径问题,所以最短路径问题正是网络分析中最关键、最重要的问题[2]

随着信息技术的发展,最短路径问题在交通、地理、物流、道路规划及网络布局等实际生活中日益凸显出其重要性[3]。在解决最短路径问题的算法中,比较流行且具代表性的算法就是Dijkstra算法及其改进算法[4]。本文将针对传统的Dijkstra算法所面临的多节点数和多边数网络模型的应用局限性,主要讨论Dijkstra算法的改进算法。

1 经典的Dijkstra算法

1.1 Dijkstra算法的基本思想

Dijkstra算法是典型的单源点最短路径算法,是由荷兰计算机科学家E.W.Dijkstra在1959年提出的[5]。Dijkstra算法的主要特点是以起始点为中心,向与之直接相连的点层层扩展,每次以距离最小化为判定标准,直到扩展到终点得到最短距离。

在抽象为图论的意义之下,用Dijkstra算法计算图中的最短路径时,需要指定起点s(即从顶点s开始计算)。另外需要加入两个集合SU的运算,S集合用来记录已经求出最短路径的顶点以及起点与其他各顶点之间的暂时最短路径,U集合用来记录还未求出最短路径的顶点以及起点与其他各顶点之间的距离。

初始时,S中只有起点sU中包括除起点s之外的所有顶点,且U中各顶点的路径是“起点s到该顶点的路径”。从U中遍历出路径最短的顶点,并将该顶点加到S中;更新U中各顶点对应的路径。然后循环上述过程,直到遍历完所有顶点,最终得到的路径长度即为起点s到所有顶点的最短路径长度。

1.2 Dijkstra算法的操作步骤

1) 初始化:S集合中只含有起点sU集合中含有除s之外的其他所有顶点,且各顶点距离标识为“起点s到该顶点的距离”,不直接相连标识为无穷大。即S{}=sU{}=其他顶点,ds=0。源点标号为s,而其他点尚未处理。

2.3.1 实验数据

2.3.2 实验过程

(1)

3) 更新集合U中起点s到所有其他各顶点的距离。更新原因是由于前一步已经确定了k是最短路径中的顶点,而前一顶点经过顶点k到达下一顶点的路径长度比直接到达下一顶点的路径长度小,这一可能性是存在的,那么就需要再次进行最短距离更新,以距离最小化为判定标准。即:

dsv =min[dsv,dsk+dkv]。

(2)

4) 重复步骤2)和3),直到遍历完所有顶点,那么最终S集合包含所有顶点,U集合为空。S集合中的距离即为源点s到各顶点的最短距离。

1.3 Dijkstra算法应用举例

下面用具体实例阐述Dijkstra算法在路径规划中的应用。如图1所示,点与连线是对实际交通道路网络拓扑部分结构的模拟,其中A至F各点代表各交通十字路口,点与点之间的连线代表各条道路。利用Dijkstra算法,求出点A到F的最短路径。

图1 路径规划仿真地图 Fig.1 Simulation map of path planning

根据Dijkstra算法的实现步骤,其计算过程可归纳为表1所示。

从表1可以看出,从A到F的最短路径为A-B-C-E-D-F,且顶点A到顶点F的距离为d(A,F)=1+2+1+3+2=9。并且在求出顶点A到F的最短路径过程中,从顶点A到其他各顶点的最短路径也相应求出[6]

表1 A-F最短路径计算表 Table 1 The shortest path calculation table for A-F

序号ABCDEF1014∞∞∞21/A386∞33/B84∞474/C1057/E969/D

2 Dijkstra算法的不足及改进策略

2.1 最优存储结构的选取

对于网络数据的存储方式,有两种存储结构可以选取:邻接矩阵和邻接表。图论中对于网络数据的存储采用的是邻接矩阵的方法[7]

知识分子的概念在不同时期有不同的扩展和内涵。通常,知识分子被认为是精神或脑力劳动者,他们具有高水平的文化专业知识,从广义上讲,高层次人才是指接受过正规教育、知识相对较多、具有一定创新能力的社会群体。本文研究的对象是指具有博士学位或高级职称及以上的专业技术人员。

将图以邻接矩阵的形式存储时,可以用二维数组表示任意两点之间的连接情况。当两点为同一节点时,对应的数组值为0,反之则不为0。当需要对两点之间的权值进行操作时,比如道路的长度、资源的数量等,如果两点是直接连接的,则对应的矩阵值就是两点之间的权值大小;如果两点不直接相连,则对应的矩阵值为无穷大。这种表示方法简单、直接。矩阵以数组的方式表示时申请和释放都比较灵活方便。但在网络节点数较多的情况下,需要大量的存储空间,尤其是在网络比较稀疏的情况下,邻接矩阵会存储较多无穷大的非计算网络节点,也会造成一定的空间浪费[8]

将图以邻接表的形式存储时,存储空间大体相当于弧度表示法,灵活性比较强,并且存储空间较小。但在进行相应的节点操作时,程序的正确性不太容易把握,尤其在网络节点数量庞大时,操作性较差。

实验数据表明,在前期网络节点较少时,将同一种算法分别采用邻接表和邻接矩阵两种存储方式,其执行时间基本相同。随着网络节点数目的增多,邻接表不适用于节点数量多的劣势明显突出,实验时间明显增加;而邻接矩阵并没有明显表现出其存储空间浪费从而影响算法执行效率的问题,实验时间缓慢稳定地增加。

在大规模交通疏散中,各应急避难点以网络节点的形式按照某种存储方式存储在网络中。在应急避难点较多的情况下,对比实验结果数据,采用邻接矩阵的存储方式进行网络节点的存储,效果较好。

2.2 算法效率的改进策略

在Dijkstra算法的实现过程中可以看出,其中最主要的一个核心步骤就是从未选定为最短距离的网络节点中选择一个当前集合中权值最小的点,即距离源点最近的点[9]。这是一个循环比较的过程,如果中间不采取任何比较筛选策略,未标记的点将被逐一循环比较,在大数据量的网络节点的情况下,这无疑是制约计算速度的瓶颈。

2.2.1 添加网络节点的标记flag

int min=INF;

相关程序代码表示如下:

//flag[i]=true表示最短路径已成功获取

boolean[] flag=new boolean[mVexs.length];

此类题解答后有着浓厚的“回味性”:图形中还蕴藏着哪些有价值的信息点而没有被发现和揭示出来,它对下一问的解题思路有无铺垫和启发的作用;除此方法之外,还有无其他的方法,若有,这些方法之间在“质”上是否有着共同的“语言”.

//初始化

for (int i=0; i < mVexs.length; i++) {

//顶点i的最短路径还未获取

秦川还在睡觉,戴菲儿离开豪宅。几年里她头一次离开豪宅,外面的一切对她来说,已经太过陌生。其实她在外面呆过的时间非常短暂——从走下流水线,到进入豪宅,不过两个多月的时间。她不该属于阳光、微风、田野、开满鲜花的小径、车水马龙的街道、电话声此起彼伏的办公室,温暖并且封闭的卧室才是充气娃娃来到世间的唯一目的。

2.2.2 添加最小路径变量min

//顶点i的前驱节点为0

As can be seen, the spectrum has characteristic peaks of ZnS in addition to the silicon substrate peak (Si–Ka)[26]. A quantitative analysis of the spectrum (Table 2) reveals that the films are almost stoichiometric (slight excess of sulfur).

prev[i]=0;

//顶点i到源点的最短路径为矩阵首行

dist[i]=mMatrix[vs][i];

}

// 对“顶点vs”自身进行初始化

flag[vs]=true;

dist[vs]=0;

flag[i]=false;

采用整型变量min对未确定最短距离的网络节点的值作标记,通过比较选出最小距离。初始化定义整型变量min为最大值,伴随着数组的遍历,min的值会越来越小。在判别时,必须满足flag值为false并且min的值小于当前min,才会对该网络节点重新赋值并记录下当前节点的标记号,否则直接跳过。这种比较方法实现了每次搜索仅需一次循环便可找到未标记网络节点的最小权值。

相关程序代码表示如下:

// 对“顶点vs”自身进行初始化

面对着飞速发展的科学技术以及不断变化的生活环境和社会需求,再加上某些非物质文化遗产的传承方式和传承过程又极其繁琐和复杂,大多数人们对于保护传统文明和艺术技能基本毫无兴致。目前我国传承人普遍面临以下情形:传承人老龄化严重,缺乏继承人。

flag[vs]=true;

2.3.1 注意红色文献的甄别和取舍。个别在地方革命历史上有突出影响与成就,值得后世进行专题研究的地方人士,可根据其与地方红色政权的关联度,将其全部著作、手稿、日记、书信,以及他人对其生平、著作进行专题研究的成果,都作为红色文献处理。

for (int i=1; i < mVexs.length; i++){

// 遍历mVexs.length-1次;每次找出一个顶点的最短路径。

int k=0;

dist[vs]=0;

//寻找当前最小的路径;

//在未获取最短路径的顶点中,找到离vs最近的顶点(k)。

采用布尔值类型的数组flag对算法过程中的节点做标记。如果网络节点已经选定为最短距离节点,则标记为true,否则标记为false。初始化时,将所有网络节点的值都标记为false,算法过程中逐一选定修改,最终执行完所有(节点数减1次)循环后,所有节点都被选定完毕,其对应flag值都应当标记为true。对未选定的节点进行权值最小筛选时,只要筛选flag值为false的节点即可。

for (int j=0; j < mVexs.length; j++) {

if (flag[j]==false && dist[j] < min) {

对上述问题,可以通过如下的加权求和的办法修正校验.设UPC加权求和的权数为(ω1,ω2,…,ω12)=(3,1,3,1,3,1,3,1,3,1,3,1),可以算得商品项目代码0 8 9 6 0 0 1 2 4 5 6的加权和为

min=dist[j];

k=j;

在1平方分米表象的建立中,教师引导学生利用手势做成大致1平方分米的小正方形,让学生带着这个随身携带的平方分米去寻找生活中的表象;1平方米表象的建立中,引导学生在一张1平方米的白纸站一站,数数能站的人数。通过实践、操作、游戏等活动,建构面积单位的模型。

}

}

// 标记“顶点k”为已经获取到最短路径

Application of Closed Y-Δ Transformation in Starting a Large Marine Motor……………WANG Zhengjia, WANG Baoming(2·55)

flag[k]=true;

目前,中国的有效灌溉面积已达到0.6亿hm2,约占全世界灌溉面积的20%。灌溉面积占全国耕地面积的49.6%,灌区生产的粮食占全国粮食总产量的75%。这正是中国以占世界6%的水资源和9%的耕地解决了占世界21%人口的粮食问题的重要基础。

}

2.3 基于真实交通道路数据的相关实验

2) 检验U中其他所有点到s的距离,并选出距离最小的一个点k,并将顶点k加入到集合S中,同时从集合U中删除顶点k。即:

硬膜外镇痛近年来也逐渐受到重视,特别对胸部和腹部大手术患者以及伴有心血管、呼吸系统或长时间肠梗阻风险的患者,应用硬膜外镇痛可显著提高患者术后镇痛效果,避免或明显减少阿片类药物的用量,并能降低围术期相关并发症的发生率,改善患者远期预后[8-9]。因此,应重新认识并重视硬膜外技术在围术期管理的重要作用。

实验以北京市电子道路数据为基础数据,数据保存在shapfile格式的文件中。通过解析文件内容,读取道路相关数据,包括道路ID、形状、宽度、方向、名称、起始节点ID、终止节点ID和长度等。电子道路数据总计87 855条,解析后按照ID依次排列于TXT文件中,解析结果如图2所示。北京市道路交通电子地图如图3所示。

图2 地图道路数据解析结果 Fig.2 Analysis results of map road data

图3 北京市道路交通电子地图 Fig.3 Electronic map of road traffic in Beijing

dsk=min[dsj]。

以一条道路的起始节点作为整个实验道路数据节点中的起始节点,再以这条道路的终止节点作为后一条或几条道路的起始节点,通过层层扩展,建立真实道路的网络拓扑结构。

通过仅改变道路网络拓扑的复杂度的方法,即只改变道路节点数量,将选出的道路节点按照阿拉伯数字顺序依次编号,以当前道路节点到其他所有道路节点的最短距离为例,最后对Dijkstra算法运行时长进行比较,进行相关实验。

首先当道路网络拓扑图中节点数量为50和100的情况下,实验结果如图4所示。左侧是以邻接表形式存储数据的Dijkstra算法实验结果,节点数为50时算法运行时长为63 ms,节点数为100时算法运行时长为80 ms;右侧是以矩阵形式存储数据的Dijkstra算法实验结果,可以看出在节点数量为50和100的情况下,算法运行时长均与左侧结果相同。

图4 节点数为50和100时算法运行实验结果 Fig.4 Experimental results of the algorithm running with 50 and 100 nodes

逐渐增加道路网络拓扑中的节点数量,在节点数量为300、500和1 000时再次进行对比试验,实验结果如图5所示。左侧依然是以邻接表形式存储数据的Dijkstra算法实验结果,右侧是以矩阵形式存储数据的Dijkstra算法实验结果,可以发现在数据量逐渐增大的情况下,以邻接表形式存储数据明显不如矩阵形式使得算法的运行效率高。

图6 城市道路及应急资源储备点分布 Fig.6 Distribution of urban roads and emergency resource reserve sites

图5 节点数为300、500和1 000时算法运行实验结果 Fig.5 Experimental results of the algorithm running with 300,500 and 1 000 nodes

3 Dijkstra算法在路径规划中的应用

随着城市规模的不断扩大以及城市人口的高度密集,城市交通情况日益严峻,道路交通网络日益脆弱。尤其是伴随着很多交通事故和紧急事件的发生,大面积交通拥堵和交通瘫痪时常发生,因此应急资源配送以及最短路径寻优工作迫在眉睫[10]

专门针对大规模事故灾害的应急资源储备点一般分布在整个城区,仿真数据如图6所示,以北京市交通电子道路地图为例,显示GIS系统中道路及应急资源储备点分布情况,其中应急资源储备点用红色元素标识。一旦城区某处或多处发生大规模灾害事故,在应急资源配送过程中,往往会面临从多个储备点向一个事故点的资源配送问题,如何才能找到距离最近的应急资源储备点显得格外重要。

Dijkstra算法在GIS系统中路径规划方面的应用很好地解决了这一问题。城市灾害事故发生时,首先确立应急资源配送目的节点的坐标位置(XY),然后通过目的节点坐标的确立,运用Dijkstra算法进行路径规划,得到距离当前灾害事故发生点最近的一个或几个应急资源储备节点的坐标。如图7所示,确定距离灾害事故发生节点最近的3个应急资源储备节点。

2005年至2016年上半年,李凌先后在双峰县检察院公诉科、民事行政监察科和侦查监督科工作,并且先后被任命为公诉科副科长、侦查监督科副科长。在检察院工作的11年间,李凌主办了1000余起案件,还成功主诉了一系列重、特大案件,多次立功受奖。

图7 距离最近的应急资源储备点的选取 Fig.7 The nearest site selection of emergency resource reserve

4 结束语

本文在传统Dijkstra算法的基础上,对该算法在存储结构和算法逻辑过程两个方面进行了改进。通过以网络节点数据量为自变量,算法的执行时间为因变量的相关编程实验,结果证明改进后的Dijkstra算法可以有效减少节点的计算量,执行效率相比之前有了明显的提高,在路径规划方面尤其是在应急资源配送的应用中有着很好的前景。基于Dijkstra算法的最短路径算法在物流管理、交通疏散等其他背景的应用中效果依然显著,这也是本文今后的研究方向。

根据PDCA循环中所包含的基本内容,对患者展开问卷调查,使其对相关护理人员的工作进行满意度的评价,对相关护理人员的得分进行统计。

[参考文献]

[1] 苏永云,晏克非,黄翔,等.车辆导航系统的动态最优路径搜索方法研究[J].系统工程,2000, 18 (4):32-37.

[2] 乐阳, 龚健雅. Dijkstra最短路径算法的一种高效率实现[J]. 武汉测绘科技大学学报, 1999, 24(3): 209-212.

[3] 彭定旭, 冀肖榆. Dijkstra算法的java实现方式及优化[J]. 黑龙江科技信息, 2017(4): 166-167.

[4] 龚杰辉,白玲,高健美. 最短路径算法的改进及其实现方法[J]. 解放军测绘学院学报, 1998,15(2):121-124.

[5] 段汝东, 侯至群, 朱大明. 基于Java的Dijkstra最短路径算法实现[J].价值工程, 2016, 35(21): 208-210.

[6] 李擎,宋顶立,张双江,等.两种改进的最优路径规划算法[J].北京科技大学学报, 2005, 27 (3):367-370.

[7] 孟庆伟, 张冬姣. 基于Dijkstra最短路径算法的优化及应用研究[J]. 电子商务, 2014(12): 60-61.

[8] 白洪涛, 孙吉贵, 焦洋,等. 网络优化算法的实现与比较[J]. 吉林大学学报(信息科学版), 2002, 20(2): 59-69.

[9] 乐阳. 网络分析模型在GIS中的实现与应用[D]. 武汉:武汉测绘科技大学, 1999.

[10] 张钰. 城市交通紧急疏散管理方法及应用研究[D]. 武汉:武汉理工大学, 2006.

石晓达,孙连英,葛娜,赵平,李子元
《北京联合大学学报》2018年第2期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号