车辆路径问题的混合遗传粒子群算法文档格式.docx
- 文档编号:19780124
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:12
- 大小:437.46KB
车辆路径问题的混合遗传粒子群算法文档格式.docx
《车辆路径问题的混合遗传粒子群算法文档格式.docx》由会员分享,可在线阅读,更多相关《车辆路径问题的混合遗传粒子群算法文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
经常用Memetic算法(带有局部搜索阶段的遗传算法)来代替典型的遗传算法使用的原因是,纯粹的遗传算法很难有效的探索解空间。
全局优化算法与局部优化算法的结合往往能够提高算法的性能。
在本文中,我们用了一个全局搜索算法即PSO代替局部搜索算法来分别改进每个个体。
因此每个个体并不通过自身来改善解,而是利用整个群体的解的知识。
我们的另一个目标是在较短的计算时间内得到进可能好的结果。
这个目标使我们使用两个不同的程序,一是加速技术(扩张邻域搜索-ENS),另一个用于产生尽可能好的初始解(MPNS-GRASP)。
因此,遗传算法和一个非常快的局部搜索策略的PSO算法相结合,如扩大邻域搜索策略([Marinakis等,2005]和[Marinakis等,2005年),将产生非常快速和有效的算法,并将减少解决大规模的车辆路径算法的计算时间,以及更多的困难的组合优化问题。
本文下面的组织结构为:
下一节将具体描述车辆路径问题,第三部分中,算法hybridgenetic–PSO–GRASP–ENS(HybGENPSO)被提出并详细描述。
实验结果将在第四部分展示和分析,最后一部分得出结论以及对未来的展望。
2.车辆路径问题
VRP和CVRP问题经常被描述为,车辆基于中心仓库,要求到达地理位置不同客户以满足客户的需求。
令G=(V,E)表示一个图,其中V={i1,i2,…in}表示定点集合,(i1代表仓库客户位置表示为i2,…,in),E={(il,im):
il,im
V}表示边的集合。
每个客户必须被分配一个确切的车辆,每辆车分配的载量不能超过其容量(Qk),如果每辆车都是同质的则容量相等记为Q。
需求ql以及服务时间stl分配给每个客户节点il。
仓库节点的需求量q1和服务时间st1设置为0,il和im之间的运输费用记为Clm。
Tk表示车辆k被允许的路线上的最大时间。
该问题是建立一个低成本的,对每一辆车都可行的路线。
一条路线是一个地点的序列,车辆必须根据它提供的服务来访问路线,如果边(il,im)被车辆k经过则置变量为1,否则为0。
车辆必须在仓库处结束其行程。
下面我们用数学公式来描述VRP问题。
目标函数
(1)指出,总距离要尽量减少。
等式
(2)和(3)确保每个有需求的节点会得到一个车辆的服务。
(4)表示路线的连续性,即一辆车进入需求节点后必须从该节点出来。
公式(5)表示车辆的容量约束,式子(6)表示总共的时间约束。
式子(7)和(8)保证了车辆的供应能力没被超出。
VRP问题首先由丹捷格和拉姆瑟(1959)提出。
由于这是一个NP-难问题,提出了大批近似技术。
这些技术大体可分为两大类:
一是经典启发式算法,主要发展于1960年至1990年,以及最近15年才发展的超启发式算法,该算法可以根据使用的策略不同来分类。
禁忌搜索策略是比较常用的技术,很多研究人员提出了很多有效的禁忌搜索算法的变种。
一些有趣的高效的算法也被提出,基于自适应记忆的概念,将高质量的VRP解存在里面,并在解得过程中用更好的解来代替它。
模拟退火,贪婪随机自适应搜索过程和阈值接收算法也有效地应用于VRP求解。
在过去10多年中,自然启发超启发式算法已用于VRP问题的求解过程。
最常用的自然启发算法是遗传算法,蚁群优化,蜜蜂交配优化,以及其他进化技术。
读者可以很容易从现存的论文书籍中找到对这些算法的详细描述。
3.应用于VRP问题一种混合算法(Hybridgenetic–PSO–GRASP–ENS)
3.1Hybridgenetic–PSO–GRASP–ENS(HybGENPSO)的整体描述
该算法结合了遗传算法,MPNS-GRASP算法,邻域扩张搜索策略和粒子群优化算法。
接下来,将列出算法的提纲。
初始化
(1)创建初始种群的P个个体,使用的多阶段邻域搜索-GRASP(MPNS-GRASP)。
(2)评价每个个体的适应性。
(3)运用粒子群优化策略改善每个个体的适应性。
主算法
(1)设置generations为0.
(2)如果不满足终止条件,继续循环
2.1如果父代仍在选择和交配,继续循环
2.1.1通过轮盘赌的方式从群体中选择两个作为父代
2.1.2对两个父代进行交叉操作,首先将两个父代的共同特征克隆到后代,然后使用ENS的算法完成后代。
2.1.3通过突变操作(扩张邻域搜索)改进后代,并将其结果插入到群体中。
2.2ENDDO
2.3通过粒子群优化策略,提高新群体中每个个体(父代和后代)的适应性。
2.4根据适应性函数对子代和父代进行排序,然后选择与初始群体数目相等的个体作为新群体。
2.5代的数目加一。
(3)ENDDO
(4)返回最好的个体
3.2路径表示
在为某一问题设计遗传算法时,第一步就是设计合适的候选解的表示。
例如Vrp情况下,每个个体(旅行)通过旅行的路径来表示,即通过一个特殊的点序列。
有了这种表示,有2n种方式来表示相同的旅行,其取决于哪个节点被放置在位置1和旅行走向哪个方向,其中n是节点数。
该算法,与1号节点固定在了每一个人,总是克服代表性位置1,因此,同一旅游多种编码的障碍,克服了很多冗余的解决方案的代表性。
在提出的算法中,表示每个个体时,1号节点就被固定于位置1,这样就可以克服相同旅行有多个编码的障碍,克服解表示的冗余。
3.3群初始化-MPNS-GRASP
通常的遗传算法,随机产生初始化群,其中不能确保包含好的候选解,为防止这种情况,一种贪心随机自适应搜索算法的修改版本,多阶段邻域搜索-GRASP被用于初始化群体。
GRASP是一种迭代的两阶段搜索算法。
每次迭代由两个阶段构成,构建阶段和局部搜索阶段,在构建阶段中,用一个随机贪心函数来构建一个初始解。
该随机技术每次迭代中都产生一个可行的解,该解通过经过局部搜索阶段来提高。
最后的结果就是所有迭代过程中最优的解。
构建过程可被描述为一个逐步的过程,它一次增加一个元素到一个非完整解。
下一个要被加入的元素通过排序所有元素来选择,根据贪心函数,将一个最好的元素放于有限候选列表RCL中,然后从表中随机选择。
这个RCL由可能最好的D元素构成。
最后RCL每次迭代都通过用不属于RCL中的边替换掉包含在巡回中的边来调整,命名为第(D+m)条边,其中m表示目前迭代的次数。
用于解决VRP问题的贪心算法是一个简单的过程。
在第二阶段,局部搜索从这些点初始化,最终结果是整个搜索过程的最优解。
MPNS-GRASP介绍了应用多目标函数来替代经典方法中的简单贪心函数的灵活性,而且组合贪心算法也是可行的。
算法开始于一个贪心算法,如果结果没有改善,则利用一个多目标贪心函数来替代。
基于这些贪心函数忽略VRP问题的边约束,可解决一个TSP问题。
因此可以通过增加边约束来讲一个TSP问题转化为VRP问题。
更精确一点,第一辆车从代表仓库的节点出发,并基于TSP的解来移到下一个节点,检查车辆的容量或最大路线长度是否满足约束。
不满足任一约束则车辆返回仓库节点,开始一个新的路线。
经典算法的第二阶段,简单局部搜索局受限于获得好解的机会,因此MPNS-GRASP经常用扩张邻域搜索来代替,这是一种很灵活的局部搜索策略。
3.4适应度函数的计算
在VRP中,每个个体初始适应度与每个旅行的路线长度有关。
每个个体S的适应值由下式计算:
Fitnesss=Jmax-Js+1
其中Jmax是群体中最大花费的个体的目标函数值,Js是当前个体的函数值。
注意,选择个体去交配的可能性依赖于其适应值,并且花费最高的个体的适应值为0,它永远不会被选择,因此,加1来保证最坏的解不会完全剔除。
3.5选择概率
选择机制用于选择父代的染色体,并构建杂交池。
在以后的进化中更适应的染色体有较高的几率存活。
本文中,我们使用简单常用的轮盘赌方式来作为选择机制。
3.6交叉算子
我们提出一个交叉操作来首先标示父代个体的共同特征,然后将其复制到后代。
交叉操作是一种自适应记忆过程。
开始时,自适应记忆被作为解决VRP问题禁忌搜索超启发算法的一部分提出来的。
该过程存储了好解的特征。
每发现一个新的好解,自适应记忆就会更新。
对于我们来说,第一代的自适应记忆为空。
为了向其中加入一个或部分解,有几种更可能行:
(1)加入其中的候选解是前面最好的解,但它的花费至少比目前最好的解坏10%。
(2)加入其中的候选解是群体中的一员,其花费同样至少比最优解坏10%。
(3)一条路径与最优解及很多个体的相同
详加分析,在交叉操作中,点是由自适应记忆各个个体以及最优解中随机选择的。
因此首先选择两个交叉算子(Cr1,Cr2)来控制用于自适应记忆、个体和最优解的部分参数。
如果解之间有相同的部分则相同的部分遗传与下一代,否则Cr1、Cr2的值与一个随机数产生器的输出比较,randi(0,1)。
如果随机数不大与Cr1,则相应的值从最好的解中遗传,若介于两者之间,遗传的值为自适应记忆中的随机的一个解,否则从其他个体的解中随机选择。
因此如果子代解表示为Oi(t),最优个体解bii(t),自适应记忆解adi(t),一个其他个体的解pi(t):
每次迭代自适应记忆基于最优解来更新,交叉操作后,计算子代的适应度函数,如果比父代好,变量被选择为下一代,否则父代至少多存活一代。
3.7扩张邻域搜索
本文用的局部搜索方法为扩张邻域搜索,ENS是一种超启发式算法,可以用来解决很多组合优化问题。
该算法的主要特征:
(a)运用圈限制局部搜索移动策略。
(b)有在不同局部搜索策略间变动的能力。
(c)运用扩张策略。
这些特征将在下面祥加介绍。
圈受限局部搜索移动(CRLSM)策略中,计算时间比其他启发算法或超启发算法要少,因为所有不能改善解得边都在搜索过程中剔除了。
它将搜索空间约束到候选删除边的周围。
在2-opt局部搜索算法中,只有一种可能性来减少解得花费。
即至少一条边花费比两边中的一个少,并且另一边的花费比两个旧边的总花费少。
因此CRLSM策略中,对所有的局部搜索策略,圈在候选删除边的终节点周围产生,只有圈内的节点才被用于寻找更好解的过程中。
为了减少更多的计算时间,并且在候选删除边终结点附近很可能找到一个更好的解,我们开始不用最大的可行圈,而是用较小的圈来寻找更优解。
例如,在2-opt算法中,如果候选删除边的长度为A,则圈初始半径为A/2,然后,局部搜索策略按如下描述应用,并且如果解在圈内无法改善,圈按a%扩展后,该算法继续。
直到圈达到最大可能直径,A+B,其中B是另一个候选删除边的长度。
ENS算法有能力在不同局部搜索策略间变动。
Garfinkel和Nemhauser首先提出一种非常简单的方式来使用一个更大的邻域。
通常来说,局部优化发现中使用一个邻域,然后一个更大的邻域在试图挣脱局部优化时使用。
有人提出一个系统的方法来在不同的邻域间变换,叫做变种邻域搜索。
在扩张邻域搜索中一些局部搜索策略被应用于圈内。
工作过程如下:
首先当前解的一条边被选中(例如最差长度的边)并且应用第一种局部搜索策略。
如果用这种策略没有发现一个更好的解,对同一条边就会选用另一种局部搜索策略。
该过程一直持续到有一个更好的解被找到,或者所有的局部搜索策略都已经用到了。
第一种情况中,解得到更新,选出一个新的边,然后开始新一轮的扩张邻域搜索策略,第二种情况中,将圈扩大后再使用局部搜索策略,直到找到一个更好的解或者圈已经达到最大可能直径。
如果已经达到最大可能直径,则选择一个新的候选删除边。
用于VRP的扩张邻域搜索的局部搜索策略分为单一路线和多重路线的局部搜索策略。
属于第一类的局部搜索算法是解决TSP的常用算法,2-opt和3-opt步操作。
在单一路线交换中所有的路线在算法的初始阶段生成。
单一路线交换的局部搜索策略试图提高路由决策。
多路由交换试图提高委派决策。
这样自然会增加算法的复杂性,但能够更好的改善解。
多重路由交互策略允许上坡下坡动作,单路线交互局部搜索策略只允许下坡动作。
所用的多重路由交换局部搜索策略是1–0重新部署,2–0重新部署,1–1交换,2–2交换。
3.8群演化-粒子群优化
粒子群优化(PSO)是一种基于群的群体智能算法。
它最初是作为社会有机体的社会行为由肯尼迪和埃伯哈特提出的。
利用粒子群中个体的物理运动,具有灵活的平衡机制,以提高全局适应性和局部探测能力。
由于其易于实现和廉价的计算,编码性能的一致性和简单性,粒子群已被证明是一个为在连续空间优化问题的有效、有竞争力的算法。
PSO算法的大多数应用程序都集中于连续空间的优化,同时,最近对于离散优化问题也有所研究。
自推出以来,PSO算法已得到迅速普及,通过与其他超启发式演算法比较,被证明是有竞争力和有效的优化算法。
粒子群优化算法首先随机初始化粒子群。
在问题空间sjd(j=1,2,..N;
N为人口数目)中每个个体(叫做粒子)用一个d维的变量表示,并且通过预定义的适应度函数来进行评价。
因此,每个粒子随机的分布在d维空间中作为一个候选解。
第j个粒子的速度vjd定义为其位置的变化。
每个粒子的飞行方向,通过个体和整体的飞行经验来动态交互确定。
该算法通过个体最优解和全局最优解完成优化。
每个粒子的运动轨迹根据自己先前的最好位置和全局的最好位置来调整,分别记为pjd和pgd,每次迭代中群通过下式来更新。
vjd(t+1)=vjd(t)+c1rand1(pjd-sjd(t))+c2rand2(Pgd-sjd(t))(13)
sjd(t+1)=sjd(t)+vjd(t+1)(14)
其中t表示迭代次数,c1和c2加速系数,rand1和rand2是【0,1】之间产生的随机数。
加速系数c1和c2决定了粒子一次迭代移动的距离。
低值允许粒子在被拽回来之前能够在远离目标区域的地方漫游,反之则要求迅速移向过去最好位置或目标位置。
典型的值为2.0,虽然分配不同的值给加速系数有时会提高性能。
基础PSO算法及其变种已经成功运用于连续优化函数。
为了将应用扩展到离散空间,肯尼迪和埃伯哈特提出了离散二进制版本的PSO,其中粒子群的状态空间每个维局限于1和0,vjd表示速度变为1的概率。
粒子的轨迹定义为可能性的变化,vjd度量目前个体置为1的可能性。
速度越大,越可能选择1,越低越可能选择0。
应用一个sig函数将速度从实数空间转化到概率空间。
(15)
在二进制版本的pso中,粒子的速度和位置根据下式更新:
(16)
(17)
其中sjd属于{0,1},vjd表示速度,sig(vjd)根据15式计算,rand3是0到1间随机分配的一个数。
在基本的PSO,一个参数Umax用来限制vjd,这样sig(vjd)就不会过于靠近0或1。
这种机制可以保证二进制数积极地在0和1之间转换,Umax经常设置为4。
本文提出的算法是基于标准PSO的,名为带惯性权重的基本PSO,其中w为惯性权重。
惯性权重用以控制先前的速度对目前速度的影响,通常作为一个控制平衡的参数。
粒子根据其历史最优和其他粒子的最优信息来调整其运动轨迹。
惯性权重w也被用来控制PSO的收敛行为。
为了随着迭代而改变权重w,以允许算法探索细节区域,权重w可按下式更新:
(18)
其中Wmax,Wmin是惯性权重可以取的最大最小值,t是目前迭代的次数,itermax是最大的迭代的次数。
其中一个要处理的主要问题是如何将粒子从目前的解,移动到全局最优(整个群的最优解)或局部最佳(每个粒子的最佳解)。
通常在一个离散粒子群中使用(17)式。
混合遗传粒子群算法,使用路径重新链接策略代替这个公式。
路径重新连接是加强战略,作为一个在优秀解之间探索轨迹的方式使用。
因此,每个粒子当前解使用这一战略与全球或局部最优解结合。
这种方法通过连接高品质解来探索轨迹,并生成新的解。
从一个初始解出发,在邻域空间生成路径得到另一个解,称为目标解。
初始解和目标解的角色可以交换。
首先,选两个解最差的为初始解,另一个为目标解。
其次,角色发生变化。
有两个途径同时探索的可能性。
以粒子群优化粒子可以继续自己的方式,或返回到其以前的最佳解,或靠近全局最优解(到在群最好的粒子)。
因此,在混合遗传粒子群中,粒子无论跟随以往的最优解或全局最优解的路径,当当前解作为初始解,最优解作为目标解时,应用了路径重新连接的策略。
两个解之间的轨迹探测通过简单的交换初始解得两个节点,直到与目标解相同。
如果一些重新连接中产生一个新的最优解,无论是粒子或全体群,则目前最优解被代替,算法继续。
3.9群体替换和进程终止
就如上一节提到的,所有粒子在交叉变异后,并通过PSO算法来演化。
然后更适应环境的个体将有更大的生存和繁殖机会,否则就会被淘汰。
开始所有个体按照适应值排序,然后选p个最好的个体替代旧的群体。
当达到预定的最大迭代次数或收敛时,算法中止。
4.计算结果
整个算法用Fortran90语言执行,并使用处理器为1.86GHz的运行SUSELinux9.1的雷希f95编译器来编译。
该算法的参数选择经过充分的测试。
对一组不同值的数据进行了测试,并选择那些解质量较好和计算所需的时间较少的计算结果。
因此,所选的参数见表1。
最终参数选定后,根据不同的参数运行50次。
该算法在两类基准问题上进行了测试。
赫里斯托菲等人提出的14个基准问题,金等人提出20个大型车辆路由问题。
第一组的每个实例包含51到200个节点,包括仓库节点。
每个问题包括能力限制的问题,同时问题6-10、13、14有最大路线约束以及非零服务次数。
第二组的实例包含200到483个节点,每个问题实例包括容量约束,同时前8个有最长路线约束,以及0服务次数。
产生的解得质量为
,其中cHybGENPSO表示由HybGENPSO算法找到的解的成本,cBKS表示知道的最优解的成本。
在表2和表3的第一列表示每个实例节点数,而在第二,第三和第四列是重要的特征,即车辆最大容量、最大长度以及每辆车的服务时间。
后面的6个栏目,对算法(第5栏)的50次运行的平均结果,算法的最好结果(第6栏),最好已知解(BKS-第7栏),平均运行质量(ωav-8栏)最好的质量(ω-9栏)和最好运行时间(列10)。
从表2可以看出,该算法,在第一组的情况下的14个中10个已达到已知最优解。
至于其他四个实例的最佳解,运行质量介于0.07%和0.23%,而14个实例的平均质量是0.046%。
对于20个大型路由问题(表3),该算法的车辆已经找到了其中一个最知名的解,为其余的质量介于0.26%和1.04%,而为20情况下的平均运行质量是0.60%。
此外,在这些表中也需要计算所需的时间。
所需的CPU时间是很少的,只有第一组的两个实例5和10有点增加,但仍然是非常有效的。
在第二组的情况下,问题更复杂,因此,计算时间有所增加,但所有的实例仍低于10分钟。
这些结果表明了该算法的有效性。
在9个在所有50个运行实例都设置算法找到了最有效的解。
在大量实例情况下算法只在一个或两个上没有找到最佳解。
然而,即使是最好的解并非在所有运行中发现,但找到的解与最佳解时非常接近的。
应当指出,我们想提出一个非常快速和有效的算法,因而,参数的选择要在得到尽可能好的结果下,结合考虑收敛速度。
这个问题有时会导致该算法找不到最佳解。
如果我们增加了粒子数和迭代数提高了算法的解,但随后会发现找到这些解需要更多的计算时间。
为了证明HybGENPSO的贡献,我们分别执行主要阶段并与HybGENPSO的结果进行比较。
有两个非进化算法,扩展邻域搜索(ENS)(表4和表5的第1列和第2列)和多阶段邻域搜索-GRASP(MPNS-GRASP)(表4和表5的3、4列)和3个进化算法,混合遗传巨猿-ENS的(HybGEN)(第5和第6列),遗传--粒子群优化-算法(第7、8列)和GEN-PSO-ENS算法(第9、10列)。
HybGEN和HybGENPSO之间的唯一的区别是在于群是否通过粒子群优化算法实现进化,而GEN-PSO和HybGENPSO不同的是,在GEN-PSO中MPNS-GRASP和ENS根本没用到。
最后,GEN-PSO-ENS和HybGENPSO不同的是,GEN-PSO-ENS中初始化阶段的MPNS-GRASP根本没有使用。
在所有的实现中,这些参数都以这样一种方式选择,即在所有算法作出相同数目的评估函数。
该参数不影响评价函数的数目,如RCL等。
设置参数和局部搜索策略与HybGENPSO相同。
为了使HybGEN和HybGENPSO的评价函数肃穆相同,我们在HybGEN中增加了个体和迭代数目。
在表4和表5给出了成本以及解的质量。
因为它可以从表4和表5观察到,使用该算法使得结果改善。
更确切地说,在对从ENS的算法提出方法的结果质量的改善,对于赫里斯托菲基准实例介于0.00%和1.68%之间,平均为0.524%;
金基准的情况改善0.38%和3.32%之间,平均等于1.35%在对从MPNS–GRASP提出方法的结果质量的改善,对于赫里斯托菲情况介于0.00%和1.55%之间,平均改为0.347%,金基准情况下改善0.22%和2.06%之间,平均为0.74%。
在该解质量改善是相当高的粒子群优化算法的补充。
其原因是,现在,这些粒子以更快速和有效的方式来提高自己的局部最优或全局最优解。
对从HybGEN算法方法结果的质量的改善,前者介于0.00%和0.39%的平均等于0.06%,后者介于0.00%和1.71%,平均等于0.31%。
这最后一个问题是非常重要的,因为它证
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 车辆 路径 问题 混合 遗传 粒子 算法