陈畴镛 郑冬冬基于快速排序和遗传算法的物流路径优化研究
Posted 生产力研究
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了陈畴镛 郑冬冬基于快速排序和遗传算法的物流路径优化研究相关的知识,希望对你有一定的参考价值。
基于快速排序和遗传算法的物流路径优化研究
【摘 要】为了使企业处理物流配送问题更加高效、节约经济成本和时间、以及获得更多的利润,则建立物流配送路径问题数学模型,在约束条件中增加配送车辆和货物数量,在遗传算法选择操作中引入快速排序算法降低时间复杂度;使用Matlab工具和C语言对数学模型仿真,实验结果显示,引入快速排序算法的遗传算法,不仅能得到物流路径问题的最优解,而且降低了时间复杂度,提高了配送效率、节约了时间。
【关 键 词】物流配送;路径优化;快速排序;遗传算法;时间复杂度
【基金项目】国家自然科学基金项目(71171070,U1509220)
一、引言
从数学角度分析,物流配送路径优化是指,货车从起点(配送中心)出发,向需求点运送货物,其中已明确的条件是任意需求点所要求的数量、地理位置、车辆最大承重、最长路程,获得送货的最佳路线。
遗传算法是在处理面对众多送货路线抉择出最佳方案的方法当中使用更为广泛。美国的J.H.Holland教授最早构想遗传算法(Genetic Algorithm,GA)。最近几年,遗传算法不断地发展,H.C.W.Lau认为遗传算法是解决多个仓库、多个需求点、多个物品车辆配送路径优化问题的较好方法,通过模糊逻辑指导遗传算法关于处理货车行驶路线获得最优解[1]。姜大立认为遗传算法是解决车辆路径优化问题的一个较好方案,构建了经典的数学模型,利用遗传算法和染色体,以及针对向量采取了可行化影射[2]。郎茂祥认为遗传算法是解决复杂难题较好的方法,构造包括对个体编码、个体适应值计算及选择、交叉和变异,以此获得物流配送路径的满意解[3]。张迅认为遗传算法使用比较灵活,具有较强的收敛性和稳定性,特别是关于快递配送问题的处理如何分配车辆到各需求点送取货,是一个很好的解决方法[4]。郭赛克通过对遗传算法进行设计、编程和数据仿真研究,以及多次测试,验证了遗传算法的优越性[5]。总体而言,遗传算法在物流配送领域使用广泛,具有随机性、全局性的特点,可以求得满意解,能够解决复杂问题。但是遗传算法也有明显的缺陷,它所具有的全局搜索性、迭代性,自由空间大,随机选择,也导致了运算次数和时间复杂度高[6]。设计计算简便、时间复杂度低的遗传算法,能提高物流处理速度,对于企业节省经济成本具有重要的意义。
二、物流配送路径优化的数学模型
物流配送路径优化问题是指:以配送中心为起点,使用车辆向需求点送货,当车辆将货物送到目地的时,则返回起点,且等待下一次运送,需求点的所要求数量是已知的,需求点的地理位置是确定的,车辆具有最大的承载量和行驶最长距离。目标为总距离最短,总距离指车辆往返的长度,约束条件为:(1)全部车辆只从仅存在的一个配送中心点出发;(2)起点具有充沛的货物和足够的货车可以进行调度;(3)每辆车不容许超出最大承载量运行;(4)每辆车不允许超出限定的最长路程;(5)每一送货点的配送仅指派一辆车;(6)需求点所要求的数量和地理位置是确定的;(7)起点和需求点间的路程是已知的;(8)配送必须满足需求点所要求的到货时间。
本文主要参考文献[3]所创建的车辆路径问题的数学模型,根据实际情况,对模型进行修改,考虑到在配送过程的优化效果更显著,增加两个变量的约束范围,即配送车辆和货物的数量,使其趋于无穷,以此建立如下的数学模型。
假设1:O标记成起点,K为货车数量,G个货物,每辆货车的承载量最多是Qk(k=1,2,…,K),路程最长是Dh,L个送货点,需求点i的所要求数量为qi,配送中心O到需求点i的距离为doi,i和j之间的距离为dij(i,j=1,2,…,L)。
假设2:nk为第k辆货车所要送货的需求点数量(nk=0为第k辆货车未被指派),Rk为第k条的路线,由rki构成,指需求点在路线k里排序是i(不含rki=0),令rki=0为起点,以此创建此类物流配送问题的数学模型:
式(1)表示建立数学模型,在约束条件下,最终目的是最小值化z;
式(2)~(10)为研究问题的约束条件;
式(2)表示每辆车的货物总重量小于等于最大承载量;
式(3)表示必须满足指派出的车辆小于等于最长路程;
式(4)表示必须满足各个路线上的送货点没有超出总量;
式(5)表示任一需求点都安排车辆配送;
式(6)表示表示路径所需要配送的需求点;
式(7)表示满足任意一辆车能送多个点,但是每个客户仅由某货车负责;
式(8)表示起点具有足够的货车;
式(9)表示配送中心具有足够的货物;
式(10)存在两类情况,分别是货车参与送货,第k辆车运送需求点总数≥1,使sign(nk)=1;货车没有被指派,第k辆车送货需求点总数<1时,使sign(nk)=0。
三、算法
(一)遗传算法的思想
遗传算法是模仿自然界优胜劣汰的进化状况,将可能的解编码形成向量,而基因是构成向量的元素,通过不断计算各染色体的适应值,选择最好染色体,求得满意解或接近最优解。遗传算法优化的是一定数量个体构成的种群,优化的做法分别是选择、交叉、变异。在遗传操作过程中,设置一些基本参数:包括染色体长度、种群大小、实施交叉和变异操作的概率、最终结束运算值T。该算法包含以下6个元素及遗传算法流程图(见图1)。
(1)编码:是指将求解问题的每个可能的解编码形成向量(染色体),基因是构成染色体的元素,使计算机能辨别且可处理。
图1 遗传算法处理流程图
(2)初始群体生成:初始种群个体是由随机方式产生,种群的规模大小是由种群个体数目所决定,每个个体对应所研究问题的解。
(3)适应度评估:是指各自对周围的顺应能力,从而计算出适应度值来作为评估好坏的准则。需要按照问题本身需求,构建不同适应度函数,在遗传算法中处于重要位置[7]。
(4)选择:一般情况下,选择是基于一定的概率,是使用种群中个体的适应度值大小作为标准,当个体的适应度值越大,被选取的可能性也更高。
(5)交叉:一般来讲,交叉操作是以一定概率来替换重组两个父代中个体的一部分结构而生成新个体,交叉最终目标是为形成新的一代,是孕育出新的良好个体的方法。通常情况下,一般选取较大的交叉概率值,取值范围一般为0.4~0.9,交叉率越大,就会越早达到最优解。
(6)变异:一般情况下,变异是以一定概率进行变异。通常情况下,选取的变异概率值较小,区间是0.001~0.1,如果过高,会引起不稳定性。变异操作的思想来源是模拟人类遗传基因的突变,根据人体的遗传学,遗传基因是相对稳定的,突变情况是相对较少,则变异概率应选取偏小值。变异操作是为防止过早收敛,保证种群多样性,使染色体上基因发生突变。
(二)快速排序算法
通常,在遗传算法的选择操作中,个体的适应度值是进行从大到小的普通排序,时间复杂度大,则引入快速排序算法,降低时间复杂度。
快速排序是由C.A.R.Hoare在1962年提出,是始于分治的战略,其就像一个二叉树,基本思想是将排序的序列分成两个独立的子序列,前面的子序列中任一数据都比后面的子序列中任一数据要小,使无序序列成为有序序列。具体可描述为:假设这是一组无序序列K[1]、K[2]、…、K[n],首先任取数据K[x]作为基准;从序列的两端向中间按照顺序执行比较和交换所处的位置,使排在前的子序列中只留下比K[x]小的数据, 排在后的子序列中只留下比K[x]大的数据,同时重复把排在前子序列中大于等于K[x]的数据同排在后的子序列小于等于K[x]的数据互换位置,全部数据遍历之后,将K[x]放置在前面和后面两个子序列的接壤地方i,则排在前的子序列中所有数据都小于等于K[x],排在后的而是大于等于K[x],也就是使前面的K[1]~K[i-1]中的每一个数据<K[x],K[i+1]~K[n]中的每一个数据>K[x],K[x]的目前位置是排序后的最终放置的地方;紧接着K[1]~K[i-1]和K[i+1]~K[n]两组数据执行快速排序,循环上面语句,存在任一序列为空或仅包括一个元素,则中断并跳出。
一次划分PARTITION的算法步骤:
Step1:首先定义两个变量分别是i和j,对i和j进行初始化,令i=a,j=b;
Step2:使从未排序列中选择在第一位置的S[a]成为key,将K[x]值给pivot,则命令pivot=S[a];
Step3:从j由后向前比较(j--),寻找到第一个小于key的元素S[j],交换S[i]与S[j],同时,i++;
Step4:从i位置开始由前向后比较(i++),找到第一个大于key(基准)的S[i],S[i]与S[j]交换,同时,j--。
假设待排序的序列为{20,26,50,26,15,36,09},通过表1和表2的运算可知,一次划分之后为{15,09}20{26,50,36,26},序列左进行排序得到{09,15}20{26,50,36,26},序列右进行排序最终得到{26,26,36,50}, 最终得到的结果为{09,15,20,26,26,36,50}。
表1 i=1的一次划分过程
表2 以第一个数据为基准的排序结果
(三)结合快速排序的遗传算法
在遗传算法的选择操作当中,第一步是计算每条染色体的适应度值,第二步是算出各自占总和的比例,第三步按照适应度值从大到小排序。根据很多研究理论显示,计算机使用算法处理数据,排序时间占总处理时间的25%,则提高排序时间能提高算法处理效率。在此,将快速排序引入遗传算法的选择操作中是比较合理的,并不会产生冲突。不仅能够改善遗传算法的排序时间,而且可以提高其整体时间。由很多的理论基础、实验结果对比显示,在复杂情况下,其他算法略逊于快速排序。
对快速排序的效率分析得出,由很多的理论、实验、对比表明,快速排序算法仍然是目前最好的和时间复杂度最低的方法[8]。当记录较大时,则应选择快速排序,从平均时间性能的角度,其他3种的排序方法略次于快速排序和归并排序,这两种方法当输入规模庞大时,快速排序就占上风[9]。快速排序的特点在于排序极其快,数据移动少,最终使序列从小到大排序。快速排序算法是目前最实用的算法,很适合处理复杂问题,当问题规模越大时,运用算法的执行时间则更长,相对于其他算法,使用快速排序的效率更高,效果更显著。通常用时间复杂度(Asymptotic Time Complexity)和空间复杂度来衡量算法的效率,对比算法的时间复杂度在保证相同存储空间下,也就是保证S(n)的前提下,得到算法的运行的时间,快速排序算法的时间复杂度和空间复杂度分别为:
T(n)=O(f(n)) (1)
S(n)=O(f(n)) (2)
式(1)中,T(n)为算法执行时间,f(n)为问题的函数,其中n为研究问题的规模,T(n)是n的某个函数,T(n)和f(n)的增长率相同。
表3 快速排序算法的性能
针对n个需求点的时间复杂度研究显示,根据表3可知,当需求点越多,快速排序发挥的作用越大,引入快速排序时,使用遗传算法对n个需求点进行物流配送路径的优化,需要计算n2次;然而,当引入以后,仅计算nlogn次,总的降低了n2-nlogn次,当n越大时,在运算的时间上也明显减少,同时运算的次数得到很大的减少,最重要的是时间复杂度得到很大降低。
则可知引入后的时间复杂度:
T1(n)=O(f(n))=O(nlogn) (1)
未引入的时间复杂度:
T2(n)=O(f(n))=O(n2) (2)
(四)基于快速排序的遗传算法
针对物流配送路径优化问题的特点,构建解决此类现象的遗传算法,包括选择设计简单和最为经典的适应度函数,在选择操作中引入快速排序方法,主要是为遗传算法的复杂度得到下降。
1.编码方法:本文选用自然数的编码方式,0为起点(配送中心),其它的每个整数为每一个客户点。假设有10个需求点,1到10分别表示10个不同的需求点,配送顺序为0-2-1-3-5-6-4-10-9-8-7-0,这就是一条完整的配送路径,以0为起始点,以0为结束点,代表的含义是车辆配送时从配送中心出发最终回到配送中心。
2.初始群体生成:由各个需求点随机产生K条配送路径,然后由K条配送路径构成初始种群,初始种群的大小也就为K。
3.适应度函数:本文选择按比例的适应度计算,原理是将该问题的可行解代入模型方程计算,可得目标值,假如其值越小,适应度更优,该方法比基于排序的适应度计算更为简单,方便。根据资料显示,适应度函数可以根据解决问题的需求进行设计,目前存在较多适应度函数,适应度函数[8-9](Fitness Function)的选取及设计尽可能简单,使计算的时间复杂度最小,由于适应度函数会影响遗传算法的收敛速度及是否可以找到满意解,且是否体现遗传算法“优胜劣汰”的特点。
4.选择:是根据适应度函数的计算方法,第一步运算出每条染色体的适应度值,第二步所有的适应度求和,接着计算出每条染色体的适应度占总和的比例,最后按适应度值从大到小快速排序,在此引入快速排序代替普通排序,其原因在于快速排序能降低遗传算法运算的时间复杂度。
5.交叉:本文选择的是部分匹配交叉法(PartiallyMapped Crossover,PXM),原理是在两条任意染色体上选取两个点X、Y,对X、Y点之间的基因片段交叉,确定X,Y之间的基因映射关系,最后将未换部分按映射关系进行映射,以此恢复合法性。假设染色体1为:8-7-10-|9-3-1-2|-6-5-4;染色体2为:3-4-5-|2-6-7-9|-10-8-1;对染色体1和染色体2双切点之间的中间片段进行交换,确定映射关系,最终按照映射关系将未换部分进行映射得到:染色体1为:8-1-10-|2-6-7-9|-3-5-4;染色体2为:6-4-5-|9-3-1-2|-10-8-7。
6.变异:本文选择的变异方法是换位变异,换位变异法是为避免问题过早收敛,能保证多样性;基本原理是按一定概率选中染色体的换位变异操作,任意选出两个需求点交换位置。假设染色体1为:(13567842),若随机选择3和4两个需求点进行互换,则换位后的染色体1为(14567832)。
四、仿真实验与结果分析
本文针对物流配送路径优化问题进行仿真实验分析,目标是总距离最短。
假设货车为6辆,车辆的最大承载力为20吨,行驶的最长距离为65 km,根据模拟的10个坐标,如表4所示,求解各个距离,使用C语言和Matlab工具,在此使用引入快速排序的遗传算法对物流配送路径问题进行优化,求出配送需求点的顺序。
表4 10个随机点的坐标及需求量
在实验当中采用以下参数值:遗传代数:500,种群个数:100,交叉率:0.8,变异率:0.05,终止代数T为200。
经计算,未优化前得到最终的线路为:0-7-8-6-9-5-10-2-1-3-4-0,配送的总距离为:147.745 8 km,如图2所示。
图2 优化前的配送路径
针对此问题,在遗传算法的选择操作中引入快速排序算法及对遗传算法的设计对此例优化,算法运算具体步骤如下:
(1)获取表4需求点坐标,利用算法运算,求得距离值,具体运算过程如图3所示。
图3 算法通过获取坐标后的运算
最后还需判断基因是否在指定的区间isInArray(int value,int*s,int start,int end)。
(2)初始化种群:采用自然数的编码方法,Num为个体数,初始种群长度为len,初始化随机操作getOneRandSolution(int *fR,int len),初始化种群的代码流程如图4所示。
图4 初始化种群的代码流程图
(3)适应函数:选取按比例的适应度运算方式,令适应度值为f(x),目标值为F(x),如公式(1)所示,当目标值越小,则适应度越好。
f(x)=1/F(X)(1)
选择:在选择操作中引入快速排序算法 QSort(float *R,int**P,int start,int end)排序代替普通排序方法,提高排序速度,代码如下:
void Select(int **P,int Num,int len,float *dis,float**cost)
{
int i;
for(i=0;i<Num;i++)
{
dis[i]=getTotalDistance(P[i],cost,len);
}
QSort(dis,P,0,Num-1);
}
(4)交叉操作利用部分匹配交叉法Cross(int *f1,int*f2,int*s1,int*s2,intstart,int end,int len)进行交叉,按照遗传的交叉率0.8进行部分交叉。为防止过早收敛,引入变异操作,采用换位变异Mutation(int**P,int Num,intlen,float Pm)进行变异,按照遗传变异率0.05进行变异,最终例子的最优解。
(5)遗传算法优化后的结果:通过(1)~(5)的算法优化过程,也就是遗传算法设计及引入快速排序遗传算法的优化过程,优化后配送总距离为:122.017 3 km,最终的配送线路为:0-3-2-1-10-9-8-7-6-5-4-0,某公司的物流配送路径如图5所示。
图5 优化后的配送路径
通过遗传算法优化后与优化前的配送总距离比较可得优化的距离差值D:
D=147.7458 km-122.0173 km=25.7277 km(1)
则通过算式(1)的计算得到差值D为25.727 7 km,可知10个需要的优化后的距离明显减少很多。
通过遗传算法的设计得到此例的最优解,及引入快速排序可提高遗传算法的时间复杂度,从例子中10个需求点的时间复杂度研究显示,在实验中,可知引入快速排序的遗传算法比未引入快速排序遗传算法的运算时间复杂度更低,具体可以描述为:未引入快速排序时,遗传算法对10个需求点优化操作需要计算102次;引入快速排序时,遗传算法优化10个需求累计的计算次数达到10log10次,则运算次数减少102~10log10次,大概约为90次,不仅提高计算的效率,而且减少运算次数,降低其时间复杂度。
五、结语
处理物流配送路线优化问题,目前较多使用遗传算法,这是由于其实此类现象是 NP难题,而且是企业比较关注的问题,能够为企业带来更多的利益,使企业能快速发展。为了企业在处理配送的时间带来客户满意度的下降,则需要不断提高配送的技术。研究发现遗传算法具有可以扩大搜索空间,限制性较小,较自由,不受约束的特点,但有运算次数高和运算效率低的缺陷。所以根据此问题,构造引入快速排序的遗传算法来降低遗传算法的时间复杂度,以及设计包括采用自然数的编码、个体适应值的计算及选择、基于概率的交叉和变异操作。当企业所需配送的需求点越多,引入快速排序的效果更明显,效果不仅是配送的处理速度更加快速,当企业配送员碰到交通高峰期的时候,急需选择正确的道路,此方法可以为物流路径问题的满意解。
【参 考 文 献】
[1]Lau H C W,ChanT M,Tsui W T,et al.Applicationof Genetic Algorithms to Solve the Multidepot Vehicle Routing Problem[J].IEEETransactions on Automation Science and Engineering,2010,7(2): 383-392.
[2] 姜大立,杨西龙,杜文,等.车辆路径问题的遗传算法研究[J].系统工程理论与实践,1999,19(6):40-44.
[3] 郎茂祥,2002.基于遗传算法的物流配送路径优化问题研究[J].中国公路学报(3):78-81.
[4] 张迅,刘海东,李丹,等,2013.基于遗传算法的快递配送车辆路径问题研究[J].物流技术(5):263-267.
[5] 郭赛克,刘成泳,2012.基于遗传算法的物流配送路径优化问题的研究[J].科技信息(10):96-97.
[6] 席裕庚,柴天佑,恽为民,1996.遗传算法综述[J].控制理论与应用(6):697-708.
[7] 朱鳌鑫,1998.遗传算法的适应度函数研究[J].系统工程与电子技术(11):60-64.
[8] 霍红卫,许进,2002.快速排序算法研究[J].微电子学与计算机(6):6-9.
[9] 淦艳,杨有,2010.五种排序算法的性能分析[J].重庆文理学院学报(自然科学版)(3):45-50.
投稿邮箱:sclyj163@163.com
联系人:程老师(0351-4070868)
新媒体负责人:侯老师(13734007520)
以上是关于陈畴镛 郑冬冬基于快速排序和遗传算法的物流路径优化研究的主要内容,如果未能解决你的问题,请参考以下文章
优化选址基于matlab遗传算法求解物流配送中心选址含Matlab源码 1917期