物流配送中的最优路径规划模拟 软件说明书
学校:武汉轻工大学 院系:数学与计算机学院 专业:信息与计算科学 指导教师:王防修 小组名称:一苹微歌 小组成员:胡鹏 程新强 彭肖飞
日期:_____年______月_____日 目录 1引言-----------------------------------------------------1 2算法思路-------------------------------------------------2 3总体设计------------------------------------------------15 4系统出错处理设计----------------------------------------17 5客户数据生成模块设计说明--------------------------------18 6行车路径最短模块设计说明--------------------------------18 7行车时间最短模块设计说明--------------------------------19 8解决堵车问题模块设计说明--------------------------------20 9未解决的问题--------------------------------------------21 10参考资料-----------------------------------------------21 - 1 -
1引言 1.1编写目的 在B2C农产品电子商务物流配送时,物流车装载当日需要配送的货品从仓库出发,按照事先规划好的最优配送路径为每一个客户进行配送,最后返回仓库。物流配送模拟系统就是在配送之前需要根据客户的配送地址间线路间距、经验路况做分析计算出一条最优配送路径。在配送过程中,如果某路段堵车,物流配送模拟系统需要动态调整配送路线。 1.2背景说明 设计一个物流配送中的最优路径规划模拟软件,解决物流配送过程中路程最短,时间最短以及堵车后重新规划等问题,并在软件的界面上模拟车辆的运行。随着市场经济的发展和物流技术专业化水平的提高,物流配送业得到了迅猛发展。配送路径的选择是否合理,对加快配送速度、提高服务质量、降低配送成本及增加经济效益都有较大影响。配送路径的优化问题是物流配送系统的一个主要问题,物流配送路径的优化就是以最低的运营成本,最快捷的响应速度、最短的配送运输时间,把货物运至用户手中,而后两个指标与第一个指标之间存在着一定的制约关系,无法达到全体的最优,因此严格地讲,这是一个多目标的优化问题。 1.3定义 T S P(Traveling Salesman Problem):旅行商问题 Backtrack:回溯 - 2 -
GA(Genetic Algorithm):遗传算法 SA(Simulated Annealing):模拟退火算法 2算法思路 2.1回溯算法 2.1.1回溯法的定义 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 2.1.2 回溯法的描述 可用回溯法求解的问题P,通常要能表达为:对于已知的由n元组),...,,(21nXXX组成的一个状态空间E={),...,,(21nXXX∣iX
∈iS ,i=1,2,„,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。其中iS是分量iX的定义域,且 |iS| 有限,i=1,2,„,n。我们称E中满足D的全部约束条件的任一n元组为问题P的一个解。解问题P的最朴素的方法就是枚举法,即对E中的所有n元组逐一地检测其是否满足D的全部约束,若满足,则为问题P的一个解。但显然,其计算量是相当大的。 我们发现,对于许多问题,所给定的约束集D具有完备性,即i元组),...,,(21iXXX满足D中仅涉及到1X,2X,„,iX的所有约束意味着j元组(1X,2X,„,jX)一定也满足D中 - 3 -
仅涉及到1X,2X,„,jX的所有约束,i =1,2,„,n。换句话说,只要存在0≤j≤n-1,使得(1X,2X,„,jX)违反D中仅涉及到1X,2X,„,jX的约束之一,则以(1X,2X,„,jX)为前缀的任何n元组(1X,2X,„,jX,1jX,„,nX)
一定也违反D中仅涉及到1X,2X,„,iX的一个约束,因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(1X,2X,„,jX)违反D中仅涉及1X,2X,„,jX的一个约束,就可以肯定,以(1X,2X,„,jX)为前缀的任何n元组(1X,2X,„,jX,1jX,„,nX)都不会是问题P的解,因而就不必去搜索它们、检测它们。回溯法正是针对这类问题,利用这类问题的上述性质而提出来的比枚举法效率更高的算法。 回溯法首先将问题P的n元组的状态空间E表示成一棵高为n的带权有序树T,把在E中求问题P的所有解转化为在T中搜索问题P的所有解。树T类似于检索树,它可以这样构造: 设iS中的元素可排成iX(1),iX(2),„,iX(im-1),|iS| =im,i=1,2,„,n。从根开始,让T的第I层的每一个结点都有im个儿子。这im个儿子到它们的双亲的边,按从左到右的次序,分别带权1iX(1) ,1iX(2) ,„,1iX(im) ,i=0,1,2,„,n-1。照这种构造方式,E中的一个n元组),...,,(21nXXX
对应于T中的一个叶子结点,T的根到这个叶子结点的路径 - 4 -
上依次的n条边的权分别为nXXX,...,,21,反之亦然。另外,对于任意的0≤i≤n-1,E中n元组),...,,(21nXXX的一个前缀I元组),...,,(21iXXX对应于T中的一个非叶子结点,T的根到这个非叶子结点的路径上依次的I条边的权分别为iXXX,...,,21,反之亦然。特别,E中的任意一个n元组的空前缀(),对应于T的根。 因而,在E中寻找问题P的一个解等价于在T中搜索一个叶子结点,要求从T的根到该叶子结点的路径上依次的n条边相应带的n个权nXXX,...,,21满足约束集D的全部约束。在T中搜索所要求的叶子结点,很自然的一种方式是从根出发,按深度优先的策略逐步深入,即依次搜索满足约束条件的前缀1元组(1X)、前缀2元组(1X,2X)、„,前缀I元组),...,,(21iXXX,„,直到i=n为止。 在回溯法中,上述引入的树被称为问题P的状态空间树;树T上任意一个结点被称为问题P的状态结点;树T上的任意一个叶子结点被称为问题P的一个解状态结点;树T上满足约束集D的全部约束的任意一个叶子结点被称为问题P的一个回答状态结点,它对应于问题P的一个解。 2.1.3回溯法的基本思想 (1)针对所给问题,定义问题的解空间; (2)确定易于搜索的解空间结构; (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避 - 5 -
免无效搜索。 用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(n)。而显式地存储整个解空间则需要O(2n)或O(n!)内存空间. 2.1.4回溯法在TSP问题上的应用 旅行商问题的回溯算法可作为类Traveling 的一个成员。在其他例子中,有一个成员函数:Backtrack与T S P。前者是一个保护或私有成员,后者是一个共享成员。函数G .T S P ( v )返回最少耗费旅行的花费,旅行自身由整型数组 v 返回。若网络中无旅行,则返回No edge。Backtrack在排列空间树中进行递归回溯搜索, T S P是其一个必要的预处理过程。TSP假定x(用来保存到当前节点的路径的整型数组),best x(保存目前发现的最优旅行的整型数组),c c(类型为T的变量,保存当前节点的局部旅行的耗费),best c(类型为T的变量,保存目前最优解的耗费)已被定义为Traveling中的静态数据成员。 函数Backtrack见下。它的结构与函数Perm相同。当i=n 时,处在排列树的叶节点的父节点上,并且需要验证从]1[nX到nX有一条边,从nX到起点1X 也有一条边。若两条边都存在,则发现了一个新旅行。在本例中,需要验证是否该旅行是目前发现的最优旅行。若是,则将旅行和它的耗费分别存入best x与best c中。 - 6 -
当i<n 时,检查当前i-1 层节点的孩子节点,并且仅当以下情况出现时,移动到孩子节点之一: 1. 有从1iX 到iX的一条边(如果是这样的话,]:1[iX定义了网络中的一条路径); 2.路径]:1[iX 的耗费小于当前最优解的耗费。变量cc 保存目前所构造的路径的耗费。 每次找到一个更好的旅行时,除了更新best x 的耗费外,Backtrack需耗时O((n- 1 )!)。因为需发生O((n-1)!)次更新且每一次更新的耗费为(n)时间,因此更新所需时间为O(n(n- 1)!)。通过使用加强的条件能减少由Backtrack搜索的树节点的数量。 2.2遗传算法 2.2.1遗传算法的定义 遗传算法(Genetic Algorithm)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它是由美国Michigan大学J. Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J. Holland教授所提出的GA通常为简单遗传算法(SGA)。 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上