第14章车辆路径问题14.1 物流配送车辆优化调度概述14.1.1 概述车辆路径问题:对一系列装货点和(或)卸货点,组织适当的行车路线,使车辆有序地通过它们,在满足一定的约束条件(如货物需求量、发送量、交发货时间、车辆容量限制、行驶里程限制、时间限制等)下,达到一定的目标(如路程最短、费用最少、时间尽量少,使用车辆数尽量少等)。
又称运输调度问题,包括两部分:一是行车路线的设计;二是出行时间表的安排。
最基本的车辆路径问题,是客户需求位置已知的情况下,确定车辆在各个客户之间的行程路线,使得运输路线最短或运输成本最低,通过研究车辆路径问题,可以合理使用运输工具,优化运输路线,降低企业物流成本。
14.1.2 路径特性(1)地址特性:车场数目、需求类型、作业要求(2)车辆特性:车辆数量、载重量约束、可运载品种约束、运行路线约束、工作时间约束(3)问题的其他特性:道路网络可能是有向的,或者是无向的;单项作业是否可以分割完成;每一辆车是否可以承担多条线路,是否完成作业后必须回到出发点。
(4)目标函数可能是总成本极小化,或者极小化最大作业成本,或者最大化准时作业。
14.1.3 常见的基本问题(1)旅行商问题在一个配送中心p有一辆容量为q的货车,现有m个需求点的货运任务需要完成,已知需求点i的货运量为gi(i=1,2,…,m),且Σgi≤q,求在满足各收点需求的约束条件下,总发送距离最短的货车送货路线。
在运筹学中,旅行商问题是这样解释的:有一个推销员,要到n个城市去推销商品,当各个城市间的距离已知,并规定每个城市只访问一次,问按什么样的顺序访问,其距离最短。
(2)带容量约束的车辆路线问题在一个配送中心p,有一个车队Qj(j=1,2,…,n),这个车队每辆车容量均为q,且有足够的运力保证任务的完成,需求点i的货运量gi满足:nq≥Σgi≥q。
这样一来,配送中心需要派出若干的车辆来完成配送任务,每个车可能要为多个需求点服务然后返回配送中心。
该问题包括两个要解决的小问题:一是哪些用户要被分配到一条路线上;二是每条路线上的用户的绕行次序。
可以将这个问题看作是一个广义分配问题和多个旅行商问题的结合。
(3)带时间窗的车辆路线问题由于客户会提出配送的时间要求,因此在上述的问题基础上,要增加时间约束。
假设一组有n个需求点要求送货,并表示为1,…,i,…,n,需求点i有一个固定的完成时间Ti,一个服务时间Si,在任何两个需求点i和j之间的运输时间为DH(i,j),距离用dij表示。
这个问题首先在无圈有向网络中寻找i到j,并经过所有节点的路径的最小条数(用最大流或最小费用最大流算法来解),它的解为完成所有需求点运输任务所必需的最小车辆数,然后固定车辆数或求解有关的最小费用流问题,这个解保证最小车队规模的同时,使路线运行费用最小。
(4)收集和分发问题这是对以上问题的推广,假设有多个配送中心,或是允许车辆从需求点发车,问题就升级为有几个封闭循环线路的旅行商问题的组合,这是一个组合优化问题。
车辆调度的目标是以最少的车辆通过最经济的线路完成所有的运输任务。
(5)多车型车辆路线问题(6)优先约束车辆路线问题(7)相容性约束车辆路线问题(8)随机需求车辆路线问题14.1.4 车辆路径问题的求解方法(1)数学解析法如动态规划法、整数规划法、树状搜寻法等。
对于配送点的问题,可以求得一个最优的解,但若求解的节点数增加,其结果相对变差,与实际配送的情况相差较大。
(2)人机互动法提供使用者人机互动的方式,结合使用者过去的经验,调整该模型的参数,以作为配送路线规划决策的依据。
(3)先分组再排路线法先将所有的配送点分成若干的群组,再分别对各个群组进行路线规划,如扫描法。
(4)先排路线再分组法先进行路线的规划,再进行分割,如巨集分割法。
又可以分为单巨集分割法和多巨集分割法。
单巨集分割法:取所有配送点进行旅行商问题的求解,建立一个自原点出发,经过所有结点,最后回到原点的巡回路线,然后以最短路径解法对此路线进行分割,求得所需结果。
多巨集分割法:与单巨集分割法相似,最大的差异在于建立巡回路线时并不包含原点,因此在切割路线时,可以有较多的切割方式。
(5)节省或插入法节省法:以三角不等式为基础,一部车只以一个配送点为起始点,如此若有N个配送点就有N条路线,计算节省量,可将较短的路线与原始路线交换,缩短配送距离。
插入法:将节省法中的节省值观念应用于循序路线构建上,并以距离物流中心最远的配送点作为起始点,再以最临近的一点作为下一个插入点的配送点,求其节省值,根据取值最大者决定插入的位置并进行插入,重复选取与插入的步骤,直到所有配送点均被服务到为止。
(6)改善或交换法以其它方法产生的解为初始解,再利用节点或节线交换的方式,对求出的路线解进行改善,达到更好的目标函数值。
(7)数学规划近似法此法针对放松后的数据模式进行最优化处理。
如可以将车辆路径问题,转换成两个相关的子问题组成的数学规划,其中一个为一般化配送点的指派问题,另一个则为旅行商问题,并提出一些准则用来产生路径种子点,再利用节省值产生一个指派问题的目标函数,然后先解指派问题,再针对每辆车的旅行商问题求解。
14.2 旅行商问题旅行商问题属于数学NP难题,所谓NP难题,是完全多项式非确定问题。
有些计算问题是确定性的,比如加减乘除之类,你只要按照公式推导,按部就班一步步来,就可以得到结果。
但是,有些问题是无法按部就班直接地计算出来。
比如,找大质数的问题。
有没有一个公式,你一套公式,就可以一步步推算出来,下一个质数应该是多少呢?这样的公式是没有的。
再比如,大的合数分解质因数的问题,也没有一个公式,把合数代进去,就直接可以算出,它的因子各自是多少。
这种问题的答案,是无法直接计算得到的,只能通过间接的“猜算”来得到结果。
这也就是非确定性问题。
而这些问题的通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案还是错误的。
这个可以告诉你“猜算”的答案正确与否的算法,假如可以在多项式时间内算出来,就叫做多项式非确定性问题。
而如果这个问题的所有可能答案,都是可以在多项式时间内进行正确与否的验算的话,就叫完全多项式非确定问题。
完全多项式非确定性问题可以用穷举法得到答案,一个个检验下去,最终便能得到结果。
但是这样算法的复杂程度,是指数关系,因此计算的时间随问题的复杂程度成指数的增长,很快便变得不可计算了。
旅行商问题有很多种解法,有分枝定界解法、整数规划的解法、动态规划的解法、遗传算法的解法等,随着城市数量的增加,其精确解越难找出,只能找出近似解。
这里介绍一种简单的算法,称为最小增量法。
设有N个城市,每个城市之间的距离已知,要从某一个城市出发,再回到该城市,其余每个城市都仅到一次,选择经过城市的顺序,使总路程最短。
最小增量法计算的步骤:(1)选择离出发点最近的点作为初始回路,设这两个点为(i,j)(2)在已知回路上(i,j)中插入一个城市点k,计算增加的路程数,即:δ(3)比较所有的点的δk值,取最小的δk值所对应的点作为新插入点。
(4)重复前两步,直到所有的点都被插入为止,所得的回路即为要求的最优解。
8出发,再回到城市8,找一个最短的回路。
(2)将剩余的点1、2、3、4、5、6六个点分别插入到7→8和8→7之间,算出每个δk值,计算结果见表1。
(4)将剩余的点2、3、4、5、6分别插入到7→1,1→8,8→7,1→7,7→8,8→1之间;点1、2、4、5、k 值,见表3。
4。
总路程为:318 8 51出发回到城市1的最优旅行方案14.3 扫描法当配送点较多,需要多个运输车辆进行配送时,可以用比较简单的扫描法找出最优解的近似解。
扫描法由两个阶段组成:第一个阶段是将停留点的货运量分配给送货车,第二阶段是安排停留点在路线上的顺序。
其具体步骤为:(1)将配送中心和配送点的位置及需要量,按实际的位置画在图上。
(2)从规定的位置或习惯上从正北方向开始,用直尺按顺时针或逆时针方向转动直尺,直到直尺交到一个配送点,此时判断累积的装货量是不是超过配送车辆的载重,如果是,则将最后停留的点排除后将路线定下来。
再从这个被排除的点开始继续扫描,从而开始一条新的路线。
一直到所有的点都被扫描到为止。
(3)对每条运行路线安排停留顺序,以求运行距离最小化。
例3:某公司从其所属的配送中心用货车给各个客户点送货,全天的送货量如图所示,送货数量按件计算,货车每次可运载10000件,完成一次运行路线一般需要一天时间。
该公司需要确定:需要多少辆货车才能完成所有的配送工作?每条路线上有哪些客户点?货车途径有关客户点的顺序。
14.4 单中心非满载送货车辆路径问题的启发式算法一、禁忌搜寻法简介主要内容是使用移步的方式,运用具有弹性的记忆结构,以迭代的方式从目前的解出发开展对邻近解的搜寻,而其记忆结构可分为长期记忆结构和短期记忆结构两种。
记忆的目的在于使寻求解的过程能越过局部最优解而找到更好的解。
(1)初始解(2)移步:在所有合法的邻近解里,选最优解,作为下一步找邻近解的基础。
(3)禁忌名单:为了避免重复前面已选取过的解,将最近几次移步的解记录在禁忌名单中。
(4)免禁准则:如果被禁忌的解可以使目标函数得以改善,则可以被释放。
(5)停止准则:整个计算过程结束的条件。
二、问题特点(1)物流配送中心的位置为已知并且唯一(2)需求点的位置及需求量为已知(3)需求点与需求点之间的路线及距离为已知且确定(4)货车经过需求点只有卸货而无装货,配送完毕后空车返回配送中心 (5)物流中心只有一种货车(6)目标函数为:使货车配送路线的总成本最小,或距离最短。
V —需求点集合 O —配送中心 W —货车的容量 K —货车集合 qi —需求点i 的需求量 cij —需求点i 到j 点的距离 yik=1如果配送点i 由货车k 服务,0其它情形yik=1如果配送点i 由货车k 服务,0其它情形数学模型目标函数:约束条件:三、求解过程1、构造初始解可以用扫描法作为基础,先进行分组,分组后求最优顺序。
由于扫描的起点为不同,因此可以得到很多不同的路线构造结果。
因此,当一组初始解完成最优化求解之后,要继续建立另一组新的初始解,并进行另一次最优化求解,直到完成所有可能的初始解为止。
2、搜索移步(1)建立配送点数据表(2)设定参数:禁忌名单长度,最大重复搜寻次数(3)目标函数与移步例4:下表为各个配送点的距离,求旅行商问题。
解:(1)交换相邻两个配送点,计算回路的距离增量,距离增量为:δ=d13+d24-d12-d34距离增量可写为:δ=dik+dhj-dij-dhk5→6→1。
此时回路总长为40。
再进行交换,列出交换结果见表所示:∑∑∑∈∈∈K k V i Vj ijijk c x min K k W y q Vi ik i ∈∀≤∑∈,K k V i y x K k V j y x V i y i k y ik V j ijk jk Vi ijk K k ik K k ik ∈∈∀=∈∈∀=∈===∑∑∑∑∈∈∈∈,,,,,10, 34 5 6 7 58 3 11 2 6 3 46 67 54 3 121 25用扫描法求出的分组结果,由于不同的线路之间不可以交换节点,所以所得的解可能并不是最优的解,为了得到更优的解,应当允许不同的线路之间交换节点。