一、前言
相信很多物流专业的小伙伴们都会遇到VRP (路径规划问题)问题的求解,和TSP问题类似,都属于N-P难问题,随着节点数的增大,对求解算法的精度要求更高了。一般求解算法分精确算法和启发式算法,而精确算法很难解决这类N-P难问题,而最优解一般很难得到,因此需要借助启发式算法(遗传算法,蚁群算法、模拟退火、粒子群算法等)求解出满意解(接近最优解),同时也通过得到最优解的耗时来评价一个算法的优劣。
今天咱们就探讨下如何用智能算法求解VRP问题以及遗传算法求解VRPTW的实例讲解。
二、vrp模型与vrptw模型
1、vrp模型
车辆路径问题(Vehicle Routing Problem,VRP)
车辆路线问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下,达到诸如路程最短、成本最小、耗费时间最少等目的[1]
由此定义不难看出,旅行商问题(Traveling Saleman Problem,TSP)是VRP的特例,由于Gaery[2]已证明TSP问题是NP难题,因此,VRP也属于NP难题。
车辆路线问题自1959年提出以来,一直是网络优化问题中最基本的问题之一,由于其应用的广泛性和经济上的重大价值,一直受到国内外学者的广泛关注。车辆路线问题可以描述如下(如图1):
设有一场站(depot),共有M 辆货车,车辆容量为Q,有N位顾客(customer),每位顾客有其需求量D。车辆从场站出发对客户进行配送服务最后返回场站,要求所有顾客都被配送,每位顾客一次配送完成,且不能违反车辆容量的限制,目的是所有车辆路线的总距离最小。车辆路线的实际问题包括配送中心配送、公共汽车路线制定、信件和报纸投递、航空和铁路时间表安排、工业废品收集等。
模型截图如下:
2、vrptw模型
(1)有时间窗车辆路径问题(vehicle routing problems with time windows,VRPTW)车辆路线问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下(载重、时间窗),达到诸如路程最短、成本最小、耗费时间最少等目的。
(2)vrptw求解方法总结
三、遗传算法求解vrptw实例讲解
直接上干货
假设用3辆车配送10个需求节点,在软时间和载重约束下,求车辆固定成本和配送成本和时间窗惩罚成本最小的配送方案。
(1)染色体编码与解码
染色体编码有多种方式,比较经典的方式是将用两刀将1到10的随机排列随机分成3段,每段上的节点路径就是一辆车的配送客户编号和顺序,这种方式随机性很强,排列组合的总数大多,很难穷尽,并且最大的问题是生成的染色体存在一部分通过不了车辆载重约束,导致了一部分不可行解,增加了计算耗时和资源。因此,可通过在初始化染色体时考虑车辆载重约束,即可生成100%可行方案的初始方案,提高计算效率。
先得到1-10的自然数随机排列,再通过车辆载重约束来配车,即按照染色体从左到右顺序,依次添加到车辆中,当一辆车装不下时,就换下一辆车,如此就配车完成。用0将生成的每辆车的配送路径隔开,如下图所示。
1 | 2 | 3 | 0 | 5 | 6 | 0 | 4 | 7 | 8 | 9 | 10 |
(2)适应度值计算
先对染色体进行解码,得到每辆车的配送路径,然后通过遍历每辆车路径,计算配送总路径,总时间等关键变量,进而统计得到车辆固定成本(车辆使用数*单位车辆固定成本),配送成本(单位距离成本*配送总距离),时间窗惩罚成本(提前到达惩罚成本 + 延后到达惩罚成本),以及其他成本等。
适应度值 = 1./总成本
(3)选择算子
通过轮盘赌或者锦标赛方式,从父代种群中随机选择个体组成子代种群。
(4)交叉算子
随机配对或者设定一定配对规则,选择父代1和父代2 ,进行交叉得到子代1和子代2,根据问题需要,可选择多种交叉方式(单点交叉、双点交叉(片段交叉)、随机对称交叉等),注意交叉结束后一般产生不可行染色体,此时一般要进行消重替换处理(消除交叉后子代1、子代2染色体上产生的重复节点编号,替换为缺失的节点编号)。
(5)变异算子
选择一种变异算子(单点变异,多点变异、片段交换变异等),进行变异操作,同样,也要进行消重替换处理。
(6)重组
重组指的是将子代和父代重新组合成新的下一代种群。
算例计算结果
本人物流专业研究生,源码已写好,经多次测试结果正确无误,感兴趣朋友们请加qq 2545724522 ,进一步互相交流学习进步!谢谢。