一种基于约束规划的带时间窗车辆路径问题建模及优化方法与流程

文档序号:16314603发布日期:2018-12-19 05:25阅读:969来源:国知局
一种基于约束规划的带时间窗车辆路径问题建模及优化方法与流程

本发明公开了一种基于约束规划的带时间窗车辆路径问题建模及优化方法,属于智能交通技术领域。



背景技术:

物流配送是物流系统中非常重要的环节之一,现代物流成本占据物流系统成本的较大比例,减少物流成本成为提高企业竞争力的重要途径。而物流成本构成中,运输成占据近一半,远超过保管费用和管理费用。配送路线优化又能有效降低运输成本,并能大大减少能源浪费和空气污染。因此,研究优化物流运输路线的方法非常具有实际意义。

物流运输路线优化问题的核心是车辆路径问题。基础的车辆路径问题通常指的是在已知客户的地理位置和货物需求量的条件下,规划出车辆在各个客户点之间的运输路线,并使配送成本最低或配送路线最短。每辆车于配送中心出发且最后回到配送中心,每个客户只能由一辆车服务且必须满足客户的货物量需求。而带时间窗的车辆路径问题,是在基础车辆路径问题的基础上,加上时间窗口条件,即每个客户必须在其规定的时间范围内接受服务。

约束规划是一种功能强大的解决组合搜索问题的方法,它广泛借鉴了人工智能、运筹学、算法、图论和其他一些方法的优点及技术,并被广泛用于解决实际优化规划和调度中的有限域约束问题。一个约束规划问题,可由变量、变量的取值范围和约束条件表示。每个变量均有一个有限域,即该变量的值域。约束条件将限制对应变量的取值范围。约束规划算法综合了启发式搜索算法和一致性算法,求解约束条件多、搜索空间大的问题时,将运用约束推理的方法。约束消除是约束规划算法的核心思想,即求解器会不断地检测各个变量,变量的值域会因约束逻辑和一致性算法而持续修正,搜索树中不可能求解到最优解的分支会被删减掉,最终可确定满足所有约束条件的解。本发明将介绍一种基于约束规划的带时间窗车辆路径问题建模及优化方法。



技术实现要素:

本发明目的在于改善现有相关技术,提出一种基于约束规划的带时间窗车辆路径问题建模及优化方法,主要包括以下几个步骤:

步骤一、根据车辆路径问题的描述,建立其基本数学模型;

步骤二、基于车辆路径问题的数学模型,建立带时间窗车辆路径问题的约束规划基本模型;

步骤三、合理添加其他的约束条件,以优化基本约束规划模型,从而加快模型求解速度;

步骤四、导入用于验证和测试模型的基准测试包,并读取客户点信息,包括客户点位置坐标、货物需求量、时间窗信息等;

步骤五、调用CPLEX优化器求解带时间窗车辆路径问题的约束规划模型,实验并进行结果分析。

本发明的优点在于:

传统方法一般利用整数规划方法描述和求解车辆路径问题。而本发明所描述的带时间窗车辆路径问题建模方法,是基于约束规划方法建模,便于描述和表示该问题复杂的约束条件,使得模型表达更加清晰,易于调整和拓展;合理添加的启发式约束条件,可以在保证正确的情况下,大大缩减算法搜索空间而加速求解;可求解到精确的全局最优解。

附图说明

图1为本发明基于约束规划的带时间窗车辆路径问题建模及优化方法的流程示意图;

具体实施方式

下面将结合附图对本发明作进一步的详细说明。

本发明是一种基于约束规划的带时间窗车辆路径问题建模及优化方法,流程图如图1所示,包括如下步骤:

步骤一、根据车辆路径问题的描述,建立其基本数学模型

标准车辆路径问题仅对每一辆车有最大负载能力的限制,可用完全加权有向图G=(V,A,c)表示,其中V={0,1,2,3,...,n}来表示客户点集合,0代表车辆出发和货物存储的配送中心,V’={1,2,3,...,n}表示n个客户点,A={(i,j)|i,j∈V,i≠j}为任意两个客户点之间的连接弧的集合,cij表示从i到j所需要的配送成本。定义相关符号和变量如下:

gi客户点i处货物需求量

q车辆最大负载能力

R可供调用的车辆集合,R={1,2,3,...,m}

m可供使用的车辆数,假设所有的车辆型号都一样,具有同样的最大负载能力

其数学模型如下:

该模型中,式(1)为目标函数,即最小化总的运输成本;式(2)要求车辆不能超载;式(3)保证了每个客户只会由一辆车服务;式(4)和式(1)规定了到达和离开每一个客户点的车辆数均为一。

步骤二、基于车辆路径问题的数学模型,建立带时间窗车辆路径问题的约束规划基本模型

我们针对的问题是带有容量约束和硬时间窗约束的车辆路径问题。具体表述如下:有个配送中心有m辆相同型号的配送车辆,每一辆车都有最大容量限制Q;有n个客户节点的运输任务要求完成,每个客户节点的坐标已知,有特定的需求量Di,且每个客户点的需求量都不超过车辆的最大负载量Q;在每个客户点卸货所需要的时间为Ti;且每个客户点均有特定的服务时间窗约束[Ei,Li],即车辆必须在客户点的服务时间窗内给客户卸货,允许车辆在最早服务时间Ei以前到达客户所在地,但是车辆必须等待至最早服务时间才能给客户卸货;不允许车辆在最晚服务时间Li以后到达客户点。用于送货的车辆全部都从配送中心出发,给若干个客户送货后,最终全部车辆都返回原始配送中心,最终的目标为在满足这些约束条件的情况下,规划出一个总行驶路程最短的路线方案。

基于以上对问题的描述和假设条件,本发明对模型将涉及到的参数与变量进行如下定义:

N:要求服务的客户总数量,N={1...n};

i,j单个客户点,i,j∈N;

M各个车辆的编号,亦是路线编号,M={1,2,...,m};

Q车辆的最大负载量;

cij客户点i到客户点j的运输成本,此处单位距离成本为1,其中i≠j,i,j∈N;

tij从客户点i到客户点j所花费的时间,其中i≠j,i,j∈N;

Di客户点i的货物需求量,且max Di≤Q,i∈N;

Ei客户i可以接受服务的最早时间,i∈N;

Li客户i可以接受服务的最晚时间,i∈N;

Si对客户点i服务所需要的时间,i∈N;

Ti客户点i开始进行服务的时刻,i={0,1,2,...,n+2m},0代表配送中心;

S所有的出发点,S={n+1,...,n+m};

E所有的结束点,E={n+m+1,...,n+2m};

V所有的客户点,V=N∪S∪E;

VS所有具有继承点的客户点,VS=N∪S;

VE所有具有前身点的客户点,VE=N∪E;

si表示客户点i的下一个客户点,i∈VS;

pi表示客户点i的上一个客户点,i∈VE;

ri表示客户点i所属的路径编号,i∈m;

qi车辆到达客户点i后的载货量,i∈N∪S;

经过上述分析,以总的配送成本最小化为目标函数,建立带有时间窗和容量约束的车辆路径优化问题的约束规划模型如下。

目标函数为:

约束条件为:

以上的约束规划模型中各式的简要说明如下:

目标函数为最小化总的配送成本,配送成本仅与车辆行驶的总距离有关,且单位距离的成本为1,即总的配送成本在数值上与所有车辆行驶的总距离相等。约束(7)和(8)表示在所有的客户点处开始服务的时间都必须在其规定的时间窗内;约束(9)表示对于所有的起始点,开始服务的时间都等于0;约束(10)表示对于所有具有继承点的客户点来说,它的继承点的开始服务时间小于等于它的开始服务时间加上它的服务所需时间加上它到继承点所需的时间,当车辆从它到继承点后可以直接开始服务时,即不需要等待时,该式取等号;约束(11)和约束(12)表示对于所有的客户点,到达该处的载货量必须大于等于0且小于等于最大载货量Q;约束(13)表示所有的起始点载货量为0;约束(14)表示对于所有具有前身点的客户点来说,到达该点的车辆载货量等于到达它的前身点后的车辆载货量加上该点的货物需求量;约束(15)至约束(20)共同保证了路线的连续性;约束(2-21)表示继承点的路径变量等于前一个点的路径变量;约束(22)和约束(23)分别规定了各个起始点和结束点的路径编号。

步骤三、合理添加其他的约束条件,以优化基本约束规划模型,从而加快模型求解速度;

步骤二所叙述的模型是基于约束规划的带时间窗车辆路径问题的基本模型,足够描述带时间窗的车辆路径问题,但是在编程实现的过程中,仍然有很大的提升空间,本步骤将叙述在实验过程中找到的优化模型的方法(求解结果以Solomon提出的带时间窗车辆路径问题标准测试包C101为例)。

a)减少车辆数量

首先对测试数据进行简单分析,可得测试包中可供使用的车辆数为25,每辆车的最大负载量是200,而所有客户点的需求量总和却远远小于25*200=5000,所以调度时可用车辆是过盛的。如果不对车辆数进行约束的话,解的初始空间会非常大,一开始求解的时候调用的车辆数较多,车辆使用率很低。所以为了减少这样的情况发生,缩小解的搜索空间,本发明对车辆数进行一些控制。我们通过客户总需求量和车辆最大负载量的关系估计车辆使用数量,具体代码如下:

m=2*IloSum(D)/Q+1;//减少用车数量

其中D为存储客户的货物需求量的数组,IloSum的作用是对数组D中的各元素进行求和,Q为车辆的最大载重量,加1意义是对于前面所得结果向上取整数。由于只取一倍时,车辆数过少,可能会求不到最优解,所以取两倍的客户总需求量与最大负载量的比值。以C101数据包测试时,基本模型求解需要的时间大于1000秒,加上上述约束条件后,求解时间缩短至58.6秒,加速求解的效果非常显著。

b)消除车辆对称性

通过前面描述的模型和测试数据可以知道,所有的车辆的型号和最大运载量相同,所以车辆之间具有对称性,这将导致求解器找到最优的路线规划方案后,它将继续寻找那些分配不同的车辆按同样的路线运输货物的解。显然,这是没有必要的,并会浪费大量的求解时间。所以,应该通过消除车辆之间的对称性,而有针对性地减少因此而浪费的求解时间。基本思路是:优先安排编号较小的车辆,即最先派出一号车,再派出二号车,直至车辆数足够。实现方法是:令一号起点的下一个点的编号小于二号起点的下一个点的编号,二号起点的下一个点的编号小于三号起点的下一个点的编号,以此类推。具体代码如下:

for(i=n+1;i<n+m;i++)//确定车辆调度路线

model.add(s[i]<s[i+1]);

实验得以上约束条件可以有效加快求解速度。求解时间进一步降低至12.01秒。

c)增加路径变量约束

在初始模型中,约束ri=rsi,已经可以对所有点的路径变量加以限制,但实验表明,有时加上一些冗余约束可以加速求解过程的结束。经过测试,在模型中加入约束ri=rpi可以加快求解。由原来的时间减少到9.83秒。

具体代码如下:

for(i=n+m+1;i<=n+2*m;i++)

model.add(r[i]==r[p[i]]);

d)调用IloAllDiff约束

由于在本发明研究的问题中,每一个客户点只能由一辆车访问一次,所以每一个客户点的前一个点和下一个点都必须是唯一的。因此,在本发明设计的基于约束规划的带时间窗车辆路径问题的模型中,每一个前身变量和继承变量的值都是各不相同的。这可以使用CP优化器自带的一个约束条件IloAllDiff来实现。具体代码如下:

model.add(IloAllDiff(env,s));

model.add(IloAllDiff(env,p));

在CP优化器中,我们能够对一些求解参数进行设置,来调整搜索和求解的策略。对于本发明所用到的约束条件IloAllDiff来说,我们可以改变它的AllDiffInferenceLevel参数,来调整模型求解性能。AllDiffInferenceLevel参数有三种可以选择,分别是Basic,Medium和Extended。在Basic级别下,IloAllDiff将会把已经确定的变量值从其他的变量的值域中去除;在Medium级别下,各个变量的值域将会进一步地缩小,比如,当两个变量的值域相同且都为两个数,那么其他的变量就不可能取到这两个数,所以求解时会将这两个数从其他变量的值域中去掉。在Extended级别下,各个变量的值域将会进行全缩减,比如,当两个变量的值域本来不相同,但因值域缩减变成相同的且都为两个数,那么其他的变量就同样不可能取到这两个数,所以求解时会将这两个数从其他变量的值域中去掉。但是,更多地值域缩减也会耗费更多地计算时间,所以我们需要在值域缩减所减少的求解时间和增加的计算时间之间进行权衡。

经测试,发现将AllDiffInferenceLevel修改成Extended可以使求解时间大大减少,从原来直接减少到2.66秒。具体代码如下:

cp.setParameter(IloCP::AllDiffInferenceLevel,IloCP::Extended);

e)更改搜索方式

我们除了可以对AllDiffInferenceLevel参数进行设置外,我们还可以通过调整其他的参数来调整搜索方案。在CP优化器中,有三种搜索方式,分别是Restart、DepthFirst和MultiPoint。

其中Restart是默认的搜索方式。Restart搜索方式下,当求解器在搜索过程中遇到一个不好的分支解时,它就会跳回到上一步或上几步,来避免继续在一个不好的搜索空间里浪费更多地搜索时间,再重新从下一个搜索分支开始搜索。所以Restart搜索方式可以最快找出最优解来,但是因为在这个搜索方式下,它并不知道当前解已经是最优解了,所以它依然会继续搜索其他的可行区域,直到所有的可行域都被搜索一遍。经实验发现,在该问题中选用Restart的搜索方式会导致模型在较长的时间中依然不能求解结束。第二种是DepthFirst,在这个搜索模式下,求解器会将每一个大分支下的每一个小分支都搜索完成后,才会从当前大分支跳到下一个大分支去搜索,如果在求解的过程中遇到最优解,求解器就能够知道当前解已经是最优解了,并结束求解过程。所以当分支较少时,选用DepthFirst的搜索模式就能较快的结束求解过程,但是分支较多或者初始分支不是很理想的情况下,DepthFirst可能会花费更多的求解时间。第三种是MultiPoint,这个算法是基于搜索点池。一个搜索点是决策变量赋值,可能会是可行域或部分解决方案的集合。针对于本发明研究的问题,对测试包进行测试后发现,选用DepthFirst的搜索模式对大部分的测试包进行测试时,都能够最快的结束求解过程。具体代码如下:

cp.setParameter(IloCP::SearchType,IloCP::DepthFirst);

步骤四、导入用于验证和测试模型的基准测试包,并读取客户点信息,包括客户点位置坐标、货物需求量、时间窗信息等;

本步骤中选取的实验算例是1987年Solomon提出的带时间窗车辆路径问题标准测试包,并选用其中25个客户点的集中分布型和随机分布型问题作为测试对象。导入模型,读取客户点信息,包括客户点位置坐标、货物需求量、时间窗信息等。另外,计算各客户点之间的距离,以便后续求解。

步骤五、调用CPLEX优化器求解带时间窗车辆路径问题的约束规划模型,实验并进行结果分析。

本发明基于约束规划的带时间窗车辆路径问题模型在VS2013上采用C++编程实现,运行于CPU为i5-6300HQ、内存为8G的笔记本电脑,调用CPLEX优化器求解约束规划模型,求解结果精确到小数点后两位。测试结果如表1和表2。

表1客户集中分布型测试结果

表2客户随机分布型测试结果

对于目前的模型和测试结果来看,集中型的客户分布算例较好求解,其中C101、C105、C106、C107四个测试包都能在几秒内甚至是零点零几秒内求解到最优解并且求解结束,其他五个测试包也均能在10秒内解到最优解,可见求解速度较快。25个客户点的9个C10X测试包能够求解到最优解的数量占总测试包数量的100%,可见较适合求解该类问题。而对于随机分布型的客户类型,求解到最优解的时间较集中型的慢,从几秒到几十秒不等。25个客户点的9个R10X测试包能够求解到最优解的数量占总测试包数量67%,没有解到最优解的与已知最优解的差值都在4%以内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1