物流配送管理中路径优化问题分析

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

摘要:经典的优化理论大多是在已知条件不变的基础上给出最优方案(即最优解),其最优性在条件发生变化时就会失去其最优性。本文提出的局内最短路问题,就是在已知条件不断变化的条件下,如何来快速的计算出此时的最优路径,文章设计了解决该问题的一个逆向标号算法,将它与传统算法进行了比较和分析,并针对实际中的物流配送管理中路径优化问题,按照不同的算法分别进行了详细的阐述与分析。

一、引言

现实生活中的许多论文发表经济现象通常都具有非常强的动态特征,人们对于这些现象一般是先进行数学上的抽象,然后用静态或统计的方法来加以研究和处理。从优化的理论和方法上看,经典的优化理论大多是站在旁观者的立场上看问题,即首先确定已知条件,然后在假设这些已知条件不变的基础上给出最优方案(即最优解)。条件一旦发生变化,这种方法所给出的最优方案就会失去其最优性。在变化的不确定因素对所考虑的问题影响很大的时候,经典的优化方法有:一是将可变化的因素随机化,寻求平均意义上的最优方案,二是考虑可变化因素的最坏情形,寻求最坏情形达到最优的方案。这两种处理方法对变化因素的一个特例都可能给出离实际最优解相距甚远的解,这显然是难以满足实际的要求的。那么是否存在一种方法,它在变化因素的每一个特例中都能给出一个方案,使得这一方案所得到的解离最优方案给出的解总在一定的比例之内呢?

近年来兴起的局内问题与竞争算法的研究结果在一定意义上给如上问题一个肯定的答案。其实本文所提出的逆向标号算法就是对应局内最短路问题的一个竞争算法,从本质上来说它是一种贪婪算法,在不知将来情况的条件下,求出当前状态下的最优解。[1]本文所考虑问题的实际背景是一个物流配送公司对其运输车辆的调度。假设物流公司需要用货车把货物从初始点O(Origin)运送到目的点D(Destination)。从日常来看,物流公司完全可以通过将整个城市交通网络看成一个平面图来进行运算,找到一条从O到D的最短路径以减少运输费用和节省运输时间。现考虑如下一个问题:如果当运输车辆沿着最短路径行驶到最短路径上的一点A,发现前方路径上的B点由于车辆拥塞而不能通过,车辆必须改道行驶,而此时物流配送公司应如何应对来保证其花费最低。问题推展开去,如果不是单个堵塞点,而是一个堵塞点序列,那物流配送公司又将如何来设计其最短路算法来在最短的时间内求出已知条件发生变化后的最优路径,从而有效的调度其运输车。本文首先建立了物流配送公司动态最短路的数学模型,相比较给出了求本文所提出的动态最短路问题的传统算法和作者提出的逆向标号算法,并分析了各自的算法复杂度。

二、数学模型假设城市交通网络是一个平面图,记为G,各个交通路口对应于图G上的各个顶点,令G=(G,V)为一边加权无向图,其中V为顶点的集合,E为边的集合,|G|=n,对于一般平面图上的三点之间,一定满足三角不等式,即任意三角形的两边之和一定不小于另外一边。对于本文要讨论的城市交通网络来说,即,任意三个结点之间的距离一定满足三角不等式。我们用O来表示运输的起始点,D表示运输的目的点。SP表示在没有路口堵塞情况下的最短路径,W(SP)表示沿着最短路径所要花费的运输费用。以下的讨论都是基于如下的基本假设:第一,去掉堵塞点后图G仍是连通的。第二,只有当运输车走到前一点后,才能发现后面的一点发生堵塞而不能通过。

三、算法分析

对于本文的上述问题,有两种算法一(传统算法)和二(逆向标号算法)可以满足要求,但两种算法在求动态最短路的过程中都将会用到Dijkstra算法[2],通过对Dijkstra算法的分析我们知道,Dijkstra算法采用了两个集合这样的数据结构来安排图的顶点,集合S表示已

经被标记点的集合,集合(G-S)表示未被标记点的集合,一个点的标号是这个点到源节点的最短距离,算法的主要思想是:从G-S集合中选取具有最小标号的点w,而后把w点放入S集合中。因为S集合就是已经被标记点的集合,然后再从G-S集合中将所有经过点w

而与源节点相通的v点的路径值T[v]统统作调整(如果存在某个点v,它的路径值大于已经被标记的点w的路径值与点v到点w的距离之和,那么就对所有与点v相通的点的路径值进行调整)。重复此过程直至所有的点全部进入S集合。从以上的分析我们可以看出,当进行完Dijkstra算法,所有的点都将会被标号。首先我们先给出本节将会用到的符号和定义。我们用WOA表示沿着最短路从O点到A点的距离,W(SPAD)表示沿着最优路径SPAD从A点到D点的距离。Wij表示从i点到j点边的权,T[v]表示的v点标号值。[3]

(一)算法一第一步,对于给定的平面图G,运用Dijkstr算法求出从起点O点到终点D点的最优路径SP。第二步,到达A点后,如果下一个顶点B发生车辆拥塞不能通车,计算子图G-{B}。第三步,在此运用Dijkstra算法求出此时从A点到D点的最优路径SPAD。第四步,WOA+W(SPAD)即为最后所花费的费用。根据点标号的定义和Dijkstra算法的主要思路,应该有如下引理成立。引理一:平面图的最短路径树中的一个点的标号只和它相邻标号的点有关。(二)算法二对于给定的平面图G,运用Dijkstra算法求出从O点到D点的最优路径SP。Dijkstra算法只给出了指定点到其余节点的距离,并未直接给出指定点到其余节点的最短路径,为此可以对上述算法稍加补充,论文发表增设一路径变量P(vi),用来存储最短路径树上点的信息。其初始值规定如下:第一,当从u点到vi点按照最优路径行走所需的路程不是无穷大时,P(vi)表示u点与vi之间的合集;第二,当从u点到vi点按照最优路径行走所需的路程为无穷大时,P(vi)为一空集。经过多次迭代和修改过程,最后得到的P(vi)和L(vi)即为指定点u到点vi的最短路径和距离。在运用Dijkstra算法求出从O点到D点的最短路径时用了一些技巧:我们反着来应用Dijkstra算法,以D点为起点,O 点为目的点进行运算,同时标记每点到D点的最短距离及其路径,T表示已经被标号点的集合。首先可以根据路径变量P(vi)存储的最短路径树上点的信息,将图中的点分成两个集合,G1表示需要重新标记的点的集合,G2表示不需重新被标记的点的集合。然后判断与A点相邻点的是否标记,如果没有,再次判断这些相邻点的相邻点是否被标记,这个判断一直到最后找到的相邻点都在G2中为止。然后从后向前依次进行标记。通过标记,计算与A相邻的所有点到A点的距离与该点到终点的最短距离之和的最小值,并用W表示该最小值,这样就可以求出最低费用和最优路径。

(三)算法复杂性分析对于算法一,第一步的Dijkstra算法时间复杂性为o(n2),对于第二步可以在常数时间内解决。同样第三步的时间复杂性为o(n2)。[4][5]对于算法二,第一步的Dijkstra算法时间复杂性为o(n2);而对于步骤二因为路径变量P(vi)存储的最短路径树上点的信息,所以我们能在o(n)时间内将图中的点分成集合G1和G2;对于步骤三因为平面图的假设,应有e=kn(k为常数)。在最坏的情况下步骤三也无需遍历完所有的边,所以步骤三在时间o(n)就可以完成;而步骤四可以在常数时间内解决。

四、案例分析

我们考虑一个实际的配送案例:某物流配送公司按照客户的要求从A城市运送一批生鲜到B 城市,有一条已知的最方便快捷的路径SP,选择SP这条路径的成本是W(SP)。配送员从A城市出发,沿着SP这条道路行进,但是在走到某个中间城市V时,出现了由于洪水造成的道路堵塞。这时,配送员有两个选择,一种选择是等待直到道路修好,一种选择是找到另外一条路继续前行。而由于生鲜这些食品的保质期有限,一定要保证在尽可能短的时间内到达目的地。因而配送员如果选择等待的话,就会造成食品过期的问题。于是配送员选择重新挑选路径继续前行。此时,配送员面临的问题就是如何重新选择道路,才能保证及时到达目

相关文档
最新文档