最短路径算法在物流运输中的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本科生毕业设计(论文)
题目:线性表的设计和实现
学生姓名: 张三
学号: 201107011153
院系:基础科学学院信息技术系
专业年级: 2012级信息与计算科学专业
指导教师:李四
年月日
注:1.论文封面单独打印一张纸;中英文摘要正反
打印一张纸;目录、正文、参考文献、致谢、附录
摘要
随着现代物流业的发展,如何优化和配置物流的运输路径成为了一个热点的问题。
其中,最具代表性的问题就是如何在一个道路网络中选择两点之间的合适路径,使其距离最短.为了解决这个问题,本文介绍了两种最常用的最短路径求解方法-—DIJKSTRA 算法与FLOYD算法,分析了它们的适用范围以及时间复杂度。
最后,对一个具体的航空公司物流配送问题进行了求解,得到了理论最优路径.
关键词:最短路径问题;DIJKSTRA算法;物流运输
ABSTRACT
With the development of modern logistics industry,how to optimize and configure the transport path of logistics has become a hot issue。
Among them,the most representative problem is how to select the appropriate path between two points in a road network to minimize the distance. In order to solve this problem,this paper introduces two most common shortest path solutions - —Dijkstra algorithm and Floyd algorithm, and analyzes their application range and time complexity. Finally,a specific airline logistics distribution problem is solved,and the theoretical optimal path is obtained.
Keywords:Minimum path problem;Dijkstra algorithm;Logistics transportation
目录
第一章引言 (1)
1.1研究背景 (1)
1.2研究现状 (1)
1。
2。
1 最短路径算法研究现状 (1)
1。
2.2 最短路径算法分类 (2)
第二章最短路径问题的基本理论知识 (3)
2.1最短路问题的定义 (3)
2.2最短路问题的D IJKSTRA算法 (3)
2.2。
1 Dijkstra算法的局限性 (3)
2.2。
2 Dijkstra算法求解步骤 (3)
2.2。
3 Dijkstra算法的时间复杂度 (4)
2。
2。
4 简单案例分析 (4)
2。
3最短路问题的F LOYD算法 (5)
2.3.1算法定义 (5)
2.3.2 算法思想原理 (5)
2.3。
3 算法过程描述 (6)
2.3.4 算法适用范围 (6)
2。
3.5 算法简单实例 (6)
第三章实际案例分析 (7)
3.1问题描述 (7)
3.1.1 问题的背景及假设 (7)
3.1。
2 符号说明 (7)
3.2模型的建立与求解 (8)
3.2.1 模型一 (8)
3.2。
2 模型二 (10)
第四章总结 (15)
4.1优点 (15)
4.2缺点 (15)
参考文献 (16)
致谢 (17)
附录 (18)
附录A实际案例背景数据 (18)
第一章引言
1.1 研究背景
在现实生活中中,我们经常会遇到图类问题,图是一种有顶点和边组成,顶点代表对象,在示意图中我们经常使用点或者原来表示,边表示的是两个对象之间的连接关系,在示意图中,我们使用连接两点G点直接按的下端来表示。
顶点的集合是V,边的集合是E的图记为G[V,E],连接两点u和v的边用e(u,v)表示.最短问题是图论中的基础问题,也是解决图类问题的有效办法之一,在数学建模中会经常遇到,通常会把一个实际问题抽象成一个图,然后来进行求的接任意两点之间的最短距离。
因此掌握最短路问题具有很重要的意义。
1.2 研究现状
本节主要讨论两个方面的问题,首先简要回顾最短路径算法研究现状,然后概要总结最短路径算法分类。
1.2。
1 最短路径算法研究现状
最短路径问题一直是计算机科学、运筹学、地理信息科学等学科领域的研究热点.国内外大量专家学者对此问题进行了深入研究。
经典的图论与不断发展完善的计算机数据结构及算法的有效结合使得新的最短路径算法不断涌现。
常用的路径规划方法有:平行最短路径搜索算法,蚁群算法,基于矩阵负载平衡的启发算法,EBSP*算法和Dijkstra算法等。
创门在空间复杂度、时间复杂度、易实现性及应用范围等方面各具特色但是因为Dijkstra算法可以给出最可靠的最短路径,并且容易实现,所以备受青睐和并被广泛应用。
经典的Dijkstra算法的时间复杂度为,直接应用到大规模城市路网时,最短路径查询时间难以令人接受,专家学者纷纷开展Dij kstra优化算法研究,概括起来,以往研究者主要是从5个方面对最短路径算法进行性能优化:(1)基于数据存储结构的优化,以空间换取时间;( 2 )基于路网规模控制的优化;(3)基于搜索策略的优化;( 4 )优先级队列结构的优化;( 5 )基于双向搜索的并行计算优化。
1.2。
2 最短路径算法分类
由于问题类型、网络特性的不同,最短路径算法也表现出多样性。
(1)按照最短路径问题分类,最短路径问题通常可分为2个基本类型:一是单源最短路径问题,即查找某一源点到其余各点的最短路径;另一类是查找某个节点对之间的最短路径.
最短路径问题具体可细分为以下几种,单源最短路径问题,单对节点间最短路径、所有节点间最短路径、k则最短路径、实时最短路径、指定必经节点的最短路径以及前N条最短路径问题等,本文的研究范畴属于单对节点间最短路径问题。
(2)按照网络类型和表示方法分类,网络可以分为稀疏网络和非稀疏网络,常用的表示方法有邻接矩阵和邻接表。
邻接矩阵方法能够在时间内查询到任意两个节点之间是否有一条边,它的空间复杂度为。
现实生活中网络节点往往很多,动辄上万,而且是稀疏网络居多,比如城市路网,所以用邻接矩阵表示既不现实,又浪费空间。
邻接表是另一种存储网络拓扑的数据结构,它是一种链式存储结构,对于交通网络等稀疏图,采用邻接表数据结构存储网络拓扑数据空间复杂度仅
为,不存在存储空间的浪费。
邻接表数据结构已被证明是网络表达中最有
效率的数据结构,在最短路径算法中得到了广泛应用。
第二章 最短路径问题的基本理论知识
2。
1 最短路问题的定义
最短路问题(short —path problem):若网络中的每条边都有一个数值(长度、成本、时间等),则找出两节点,(通常是源节点和目标节点)之间总权和最小的路径就是最短路问题。
最短路问题是网络理论解决的典型问题之一,可用来解决管道铺设,线路安装,厂区布局和设备更新等实际问题。
2.2 最短路问题的Dijkstra 算法
2。
2.1 Dijkstra 算法的局限性
在了解和使用某种算法之前,我们先要明白这种算法有怎样的局限性.只有深入理解来每一种算法的局限性,才能根据具体的问题选择合适的算法来求解。
Dijkstra 算法最大的局限性在于不能够处理带有负边的图,即图中任意两点之间的权值必须非负。
如果某张图中存在长度为负数的边,那么Dijkstra 算法将不再适用,需要寻找其他算法求解.
2。
2。
2 Dijkstra 算法求解步骤
(1) 先给图中的点进行编号,确定起点的编号.
(2) 得到图的构成,写出图的矩阵
0000(,)
(,)(,)(,)n n n n u u u u G u u u u
=
(3) 根据要求求出发点S 到终点E 的最短距离,那么需要从当前没被访问过的结点集合unvist={u | u {1,2,3...}}n ∈中找到一个距离已经标记的点的集合中
vist={u | u {1,2,3...}}n ∈的最短距离,得到这个顶点;
(4) 利用这个顶点来松弛其它和它相连的顶点距离S 的值
(5) 重复步骤(2)和(3),直到再也没有点可以用来松弛其它点,这样我们就得到了由起点S 到其它任意点的最短距离。
2.2.3 Dijkstra算法的时间复杂度
我们可以用大符号将Dijkstra算法的时间复杂度表示成边数m与顶点数n 的函数。
Dijkstra算法最简单的实现方法是用一个链表或者数组来存储所有顶点的集合Q,因此搜索Q中最小元素的运算(Extract—Min(Q))只需要线性搜索Q中的所有元素,据此我们可以知道算法的时间复杂度是。
对于边数少于n2稀疏图而言,我们可以用邻接表来更有效的实现Dijkstra算法.为了达到这一目的,需要将一个二叉堆或者斐波纳契堆用作优先队列来寻找最小
2.2。
4 简单案例分析
给出对应的结点之间的关系(表2—1为对应的结点之间的关系)
长度 A B C D E
A 0 2 15 10 10
B 2 0 11 1 5
C 15 11 1 20 7
D 10 10 20 0 3
E 10 5 7 3 0
表2-1
需要注意的是,其中(A,B)= 2 表示结点A到B 的长度为2
第一步:进行编号,假定A点即为起点.
第二步:得到图
02151010
201115
G
15110207
1012003
105730
第三步:首先从起点A开始找到距离A最近的点,那就是A点了;
第四步:把A 点标记到已经用过的的集合
用A 来更新其它点到起点的距离得到的集合
dist = 02151010A B C D E
表示起点到B,C,D,E 的距离分别为2,15,10,10
第五步:重复上述步骤:得到
{,}vist A B =,{,,}unvist C D E =,dist = 021337A B C D E
继续重复上述步骤,最后的到{,,,,}vist A B C D E =,unvist =∅,得到的
dist = 021336A B C D E
,
即最短路求解完毕。
2。
3 最短路问题的Floyd 算法
2。
3。
1算法定义
除了Dijkstra 算法,另外一种简单的最短路算法是floyd 算法,它也经常被用于解决含有有向图或者是负权的最短路径问题,并且能够用于计算有向图的传递闭包。
该算法的时间复杂度为,空间复杂度为。
2.3.2 算法思想原理
Floyd 算法是非常常见的使用动态规划来寻找最优路径的算法.如果我们用简单的语言解释,总体要实现的目标是找到从点i 到点j 的最短路径。
如果我们换一个角度,从动态规划的角度观察,那就必须得要对这个目标进行一个重新的诠释。
从任意节点i 到任意节点j 的最短路径不外乎2种可能,1是直接从i 到j ,2是从i 经过若干个节点k 到j 。
所以,我们假设Dis (i ,j)为节点u 到节点v 的最短路径的距离,对于每一个节点k ,我们检查是否成立,如果成立,证
明从i 到k 再到j 的路径比i 直接到j 的路径短,我们便设置
,这样一来,当我们遍历完所有节点k,Dis(i ,j )中记录的
便是i 到j 的最短路径的距离.
2。
3.3 算法过程描述
(1)从任意一条单边路径开始。
所有两点之间的距离是边的权,如果两点之间没有边相连,则权为无穷大.
(2)对于每一对顶点u和v,看看是否存在一个顶点w使得从u到w再到v比己知的路径更短,如果是的话需要更新它.
2.3。
4 算法适用范围
⑴无向图最短路问题;
⑵稠密图效果最佳;
⑶边权可正可负。
2.3.5 算法简单实例
图3—2 无向图
根据图3—2,用Floyd算法找出任意两点的最短路径步骤如下表3-2:
distk[1]distk[2] distk[3] MIN A-〉B 1 3 7 1
A->C 1 3 5 * 1
A—>D 3 3 5 3
B—>C 2 2 6 2
B—>D * 4 4 * 4
C->D 2 4 6 2
表3—2 Floyd算法步骤流程
第三章实际案例分析
3。
1 问题描述
3。
1.1 问题的背景及假设
网上购物一直是常见的消费方式,其依托于物流业逐渐蓬勃发展,每个送货人员都需要以最快的速度送货,而且往往会发送多个地方,所以有必要设计耗时最小的路线。
现在考虑一个快递公司,总部在地图上的O点,派送人员需要将货物发往城市很多,如何设计交货方案,以便花费最少的时间。
物流地图如图1所示,下表中显示了每个点的信息,假设托运人只能沿着这些连接的线行进,而不采取任何其他路线。
(1)最大承载能力为50公斤,货量最大为1立方米。
(2)调度员的平均速度为24公里/小时。
假设每件货物要交出需要3分钟,为了简单起见,在同一地点有几件商品,这些货物只需每3分钟一次交割即可.
现在派送者将向50个地点发送100件货物。
问题要求如下:
1. 假设货物从1到30到指定地点并返回.设计最快的路线和方式来求出结果。
要求标记送货线路。
2. 假设送货人员从上午8点开始交货,1到30天货物交货时间不能超过规定的时间,请设计最快的路线和方式。
要求标记送货线.
具体数据请参见附录。
3.1.2 符号说明
M所载货物的质量总和;
i
V所载货物的体积总和;
i
m第i件货物的质量;
i
v第i件货物的体积;
i
d从i点到j点的距离权值;
ij
B任意两节点之间最短路径距离矩阵;
ij
3。
2 模型的建立与求解
3.2。
1 模型一
我们首先对题中所给的数据进行汇总分析,得出3030
1
i M mi =48。
5公斤,
V 30=
301
i i v =0.88立方米,所以均未超出送货员的载重,所以送货员可以一次性将货物送
完。
而题中数据显示送货员需到达的节点数位22个(包括出发点O )如下表
0 13 14 16 17 18 21 23 24 26 27 31
32
34
36
38
39
40
42
43
45
49
表3—1 节点数
利用程序用Floyd 算法我们可以得出任意两点之间最短路径的距离矩阵ij B 其中(i ,j=1…22),
(1)先根据题目数据给初始矩阵(,)B i j 赋值,其中没有给出距离的赋inf ,以便于更新。
(2)进行迭代计算。
对任意两点(,)i j ,若存在k ,使(,)
(,)(,)B i k B k j B i j ,则更新
(,)(,)(,)B i j B i k B k j .
(3)直到所有点的距离不再更新停止计算.则得到最短路距离矩阵 (,)B i j 。
由旅行售货员问题(TSP )建立矩阵()n n d ⨯,
;其中()i j d ⨯表示点i 到点j 的距离权值。
d 为对称
矩阵,令()i i d ⨯=0.现求节点0到各节点再到节点0的最短距离,要求各线路上的权值最小。
设立变量()i j x ⨯, 其关系如下:
当节点i 和节点j 连通,ij x =1;当节点i 和节点j 不连通,ij x =0;目标函数为寻找一条从起点0到各节点再到节点0的最短距离,要求各线路上的权值和最小,故目标函数为:最短路径
1
1
min j n n
ij ij i d z
x (3-1)
(1) 对起始点0至少有一条路径出去,故有
12
1n j j x (3—2)
(2) 对其余各节点,恰有一条路径进去,故有
11n ki k k i
x (3—3)
(3) 所有节点不出现闭合回路,约束为()()()1i j ij n
nx u u ;
总的线性规划模型为:
1
1
min j n n
ij ij i d z
x (3-4)
(1)
12
1n j j x
(2)
1
1,2,3,...,n
ki k k i
i n x
约束条件s 。
t 。
(3) 1,,1,2,...,i
j
ij
u u nx n i j
n
(4) 01ij
x 或
利用lingo 软件编程算出在各约束条件下的最短路径距离、最短路径所经过的各节点的顺序得:
最短距离 。
最短时间
各节点行进路线为:
0→26→27→39→36→38→43→42→49→45→40→34→24→13→18→14→16→32→23→17→21→0
图3-1 节点路线表
3。
2.2 模型二
问题2题目增加了时间约束,所以我们需要在模型一的基础上进行改进。
送货员从早上8:00出发,需要分别在9:00、9:30、10:15、12:00之前件货物送到各指定点.根据“时间要求越早,先送的原则",将22个节点按时间限制划分为四个区域,然后分阶段依次解决各区域的最短路径,得出各出发点和各终点.从而得出总距离最短路径。
首先我们在图中描出各节点坐标,找到各节点位置。
如下图:
图3-2 节点位置表
阶段1:要求9:00送到:
限制在此时间段的节点为三个:13、18、24,送货员8:00从O点出发,需选择最短路径在9:00之前将货物送达.根据各节点之间的距离和上图,我们很容易得出此段最短路径出发点为18,终点为24,从而路线为18→13→24,再根据示以及问题1所得数据,确定最优线路为18→13→19→24。
最后验证结果:根据路径我们算得此路径距离:
2182。
0289+3113。
4627+5704。
3372=10999。
83 m。
从而得出此段用去的时间=10999.83*3/20=27。
50min〈60min,从而可以知道按此路径送货员能按时将货物送到.
阶段2:要求9:30送到:
根据题中信息知,限制在此时间的点为:31,34,40,45。
同上阶段相同,结合数据和上图分析的出发点为31,终点为45,从而我们可以得到两种行程路线:31→34→40→45或31→40→34→45。
需要对两条路线进行对比优化.
两种路线的行程总路程如下:
路线1 24-31 31—34 34—40 40—45
路程(m) 1780.1475 2324。
7473 1630.782 3217。
0056
路线2 24—31 31—40 40—34 34—45
路程(m)1780。
1475 3954。
9293 1630。
782 4847。
7876
表3—2 行程路线表
对比两组数据,可以选定线路1为最佳方案。
按此路径行进距离=1780。
1475+3954.9293+1630。
782+4847。
7876=12213。
6464米。
得出耗时=12213。
6464*3/20=30.53min〈30min+60min-27.50min。
即得出满足时间要求.
阶段3:要求10:15送到:
此时间要求共有四个指定地点:49,42,43,38.
分析可得起点为42,终点为38,从而得到两种送货路线:42→49→43→38或
42→43→49→38。
两种路线的总路程如下:
路线1 45—42 42—49 49—43 43—38
各段路程(m)2351.7228 1971。
3764 2889.0501 2618.4442
路线2 45-42 42—43 43—49 49—38
各段路程(m)2351。
7228 917.6737 2889。
0501 5507。
4943
表3—3 总路程表
分析比较两组数据,可以选定线路1为最佳方案.
同上对数据进行验证:
按此路径行进距离=2351.7228+1971。
3764+2889。
0501+2618。
4442=9830。
5935米
得出耗时=9830.5935*3/20=24.58min<45min.
即能够按时件货物送到。
阶段4:要求12:00到达:
此时间段共有十个指定地点:26,21,14,17,23,32,39,36,27,16.分析可确定
36为起点。
起点确定终点不确定。
对此我们进行迭代算法:即从出发点开始,找出到出发点的最近距离的一个点,然后依次迭代计算,再以找出的点为出发点,找出到该点的最短距离的点,如此进行下去,则可以找出一条较短的行进路线。
首先以36为起点,具体计算过程如下:
点36 到其他点的距离(单位:m)如下:
36 27 21 39 32 17 26 23 14 16
距离2203。
917 2880.178 3983。
84 4061。
144 4704.089 4808.696 5373.013 6176。
911 7470。
654
表3-4 点36距离表
所以确定27为第二次所到地点。
点27到其他点的距离(单位:m)如下:
27 39 26 21 32 17 23 14 16
距离1779.923 2604。
781 4796。
521 6265。
06 6620。
432 7576。
93 8093。
254 9674。
571
表3—5 点27距离表
所以确定39为第三次所到地点。
由线路图可知,离开39后需要回到27,才能送货到其它地点,则再根据上述表格选取除39外距离27最近的地点的,即是第四次所到地点,易知26为第四次所到地点(途经31)。
点26到其他点的距离(单位:m)如下:
26 21 17 14 23 32 16
距
2191。
74 4015.651 5488。
473 5790.165 7102。
034 7887。
806 离
表3—6 点26距离表
可得21为第五次所到地点。
点21到其他点的Euclid距离(单位:m)如下:
21 17 14 23 32 16
距离1823.911 3296。
733 3598.425 4910。
294 5696.066
表3-7 点21距离表
可得17为第五次所到地点。
点17到其他点的Euclid距离(单位:m)如下:
17 23 14 32 16
距离1774。
514 9215。
723 3086。
383 3872。
156
表3—8 点17距离表
理论上讲应该选取点23,但根据线路图以及剩余送货的地点,综合考虑后选取次优解即14为第六次送货地点。
点14到其他点的Euclid距离(单位:m)如下:
14 16 23 32
距离2607。
681 3970.237 5282.106
表3—9 点14距离表
可得16为第七次所到地点。
点16到其他点的距离(单位:m)如下:
16 23 32
距离2097.6 3409。
5
表3—10 点17距离表
可得23为第八次所到地点,32为终点。
由以上结果可得最佳送货路线如下:
36→27→39→(27)→(31)→26→21→17→14→16→23→32
在图中标出路线:
图3-3 路线表
所以综上考虑将各阶段的路径连接起来形成的最终最短路径为:
0→18→13→19→24→31→34→40→45→42→49→43→38→36→27→39→27→31→26→21→17→14→18→23→32。
得出最短路径距离minZ=54629。
65m
时间minT=2.276h
第四章总结
4。
1 优点
对于题中各数据的处理,采用的工具、方法比较先进,各种计算方法精确,误差较小。
在解决问题时,我们把原图变为完全图,利用全局线性规划法充分发挥lingo软件包求最优解功能。
并且成功地对0—1变量进行了使用和约束,简化了模型建立难度,同时给出了在各种约束条件下的最短路径的计算方法,具有较强的实用性和通用性,在日上生活中经常可以用到。
4.2 缺点
由于数据较多,难以对模型结果进行验证,只能一步一步的对模型进行优化。
参考文献
[1]朱道立. 运筹学[M]。
高等教育出版社,2006。
[2]周建兴. MATLAB从入门到精通。
第2版[M]。
人民邮电出版社,2012。
[3]徐立华。
求解最短路问题的一个计算机算法[J]. 系统工程,1989(5):46—51. [4] 林澜, 闫春钢, 蒋昌俊,等. 动态网络最短路问题的复杂性与近似算法[J]. 计算机学报,2007,30(4):608—614。
[5] 牛学勤, 王炜。
基于最短路搜索的多路径公交客流分配模型研究靠[J]. 东南大学学报(自然科学版),2002, 32(6):917—919.
[6] 马良河,刘信斌, 廖大庆. 城市公交线路网络图的最短路与乘车路线问题[J]。
数学的实践与认识,2004,34(6):38—44.
[7] 魏航,李军, 刘凝子. 一种求解时变网络下多式联运最短路的算法[J]。
中国管理科学,2006, 14(4):56-63.
[8]张运河, 林柏梁,梁栋,等. 优化多式联运问题的一种广义最短路方法研究[J]。
铁道学报,2006, 28(4):22—26.
[9] 李帮义,姚恩瑜。
最短路网络及应用[J]. 系统工程理论与实践,2000, 20(6):104-107。
[10] 龙光正,杨建军. 改进的最短路算法[J]。
系统工程与电子技术,2002, 24(6):106-108.
[11]周经伦, 吴唤群. 受顶点数限制的最短路问题及其算法[J]. 系统工程,1996(5):37-44。
[12]贺国先。
集装箱公铁联运的费用加权最短路计算机算法[J]。
铁道学报, 2006,28(1):1—5.
致 谢
大学四年的学习生活即将结束,在此,我要感谢所有曾经教导过我的老师和关心过我的同学,他们在我成长过程中给予了我很大的帮助.本文能够成功的完成,要特别感谢我的导师XXX
教授的关怀和教导。
附录
附录A 实际案例背景数据
0200040006000800010000120001400016000
图1 快递公司送货地点示意图
O点为快递公司地点,O点坐标(11000,8250),单位:米
表3 相互到达信息。