VRPTW求解:智能算法(遗传算法篇)

一、前言

相信很多物流专业的小伙伴们都会遇到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):

VRPTW求解:智能算法(遗传算法篇)_第1张图片

设有一场站(depot),共有M 辆货车,车辆容量为Q,有N位顾客(customer),每位顾客有其需求量D。车辆从场站出发对客户进行配送服务最后返回场站,要求所有顾客都被配送,每位顾客一次配送完成,且不能违反车辆容量的限制,目的是所有车辆路线的总距离最小。车辆路线的实际问题包括配送中心配送、公共汽车路线制定、信件和报纸投递、航空和铁路时间表安排、工业废品收集等。

模型截图如下:

VRPTW求解:智能算法(遗传算法篇)_第2张图片VRPTW求解:智能算法(遗传算法篇)_第3张图片

2、vrptw模型

(1)有时间窗车辆路径问题(vehicle routing problems with time windows,VRPTW)车辆路线问题(VRP)最早是由Dantzig和Ramser于1959年首次提出,它是指一定数量的客户,各自有不同数量的货物需求,配送中心向客户提供货物,由一个车队负责分送货物,组织适当的行车路线,目标是使得客户的需求得到满足,并能在一定的约束下(载重、时间窗),达到诸如路程最短、成本最小、耗费时间最少等目的。

VRPTW求解:智能算法(遗传算法篇)_第4张图片

VRPTW求解:智能算法(遗传算法篇)_第5张图片VRPTW求解:智能算法(遗传算法篇)_第6张图片

VRPTW求解:智能算法(遗传算法篇)_第7张图片

(2)vrptw求解方法总结

VRPTW求解:智能算法(遗传算法篇)_第8张图片

三、遗传算法求解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./总成本适应度值 =frac{1}{总成本}

(3)选择算子

通过轮盘赌或者锦标赛方式,从父代种群中随机选择个体组成子代种群。

(4)交叉算子

随机配对或者设定一定配对规则,选择父代1和父代2  ,进行交叉得到子代1和子代2,根据问题需要,可选择多种交叉方式(单点交叉、双点交叉(片段交叉)、随机对称交叉等),注意交叉结束后一般产生不可行染色体,此时一般要进行消重替换处理(消除交叉后子代1、子代2染色体上产生的重复节点编号,替换为缺失的节点编号)。

(5)变异算子

选择一种变异算子(单点变异,多点变异、片段交换变异等),进行变异操作,同样,也要进行消重替换处理。

(6)重组

重组指的是将子代和父代重新组合成新的下一代种群。

算例计算结果

VRPTW求解:智能算法(遗传算法篇)_第9张图片VRPTW求解:智能算法(遗传算法篇)_第10张图片

本人物流专业研究生,源码已写好,经多次测试结果正确无误,感兴趣朋友们请加qq 2545724522 ,进一步互相交流学习进步!谢谢。

你可能感兴趣的:(路径优化,matlab,算法)