基于双种群的容量式电动汽车路由问题的协同进化算法(2023)

A Dual-Population Based Co-evolutionary Algorithm for Capacitated Electric Vehicle Routing Problems

摘要、:

有容量的电动汽车路由问题是一个具有挑战性的非确定性多项式硬问题(NP-hard),由两个相互依赖的子问题组成,即路由优化问题和充电决策问题。驾驶范围有限的电动汽车的路线优化取决于可用的充电站,而充电决策是基于在固定路线上估计的充电需求作为回报。考虑到这种耦合关系,本文提出了一种基于双种群的共同进化算法,该算法使用两个进化种群来协同优化这两个子问题。在路由群体中,充电站被视为一种没有需求的客户,并设计了一种改进的蚁群优化算法来生成涉及充电站位置信息的路线。在充电群体中,二元遗传算法被用来生成一个充电方案群体,其质量是根据从路由群体中获得的最佳蚁群来评估的,然后通过插入最佳充电方案得到的解决方案被用来更新路由生成的信息素。过进化过程中的信息互动,这两个种群协同寻找问题的最优解。实验结果表明,所提出的算法能够避免落入局部最优,并且在两个测试套件的平均路线距离上减少了约4%。此外,它还具有较高的计算效率,比先进的蚁群优化方法快2倍左右。

1.引言

在过去的几十年里,移民一直是温室气体排放的主要来源之一。最近,由于节能和碳减排的特点,电动汽车(EVs)已被确定为传统化石燃料驱动汽车的一个有前途的替代品[1]。考虑到日益严重的环境问题以及碳峰值和碳中和的目标,许多物流公司,如联邦快递、DHL和UPS,已经开始在其快递业务中使用电动汽车而不是化石燃料驱动的车辆[4], [5]。

从学术上讲,物流公司通常将为客户提供的服务建模为车辆路由问题(VRP),这是一个非确定性的多项式硬问题(NP-hard)[6]。在过去的几十年里,大量的VRP变体被广泛研究,用于不同的实际场景,如有容量的VRP(CVRP)[12],[13],有时间窗口的VRP[14],有取货和送货的VRP[15],多目标的VRP[16],[17],和动态VRP[18],[19]。请注意,这些VRPs大多是基于化石燃料驱动的车辆制定的,由于其驾驶距离长,而且加油站分布广泛,所以通常不考虑加油问题。然而,与燃料汽车相比,电动汽车的驾驶范围相对有限,目前城市的充电站数量也不足[20]。因此,当使用电动汽车作为交付车辆时,不仅要考虑访问客户的顺序,还要考虑电动汽车的充电方案。

由于这种额外的担忧,近年来提出了一种新的VRP变体,称为电动VRP(EVRP)[21]-[25]。此外,在过去几年中,已经提出了几种EVRP变体,如电容式EVRP(CEVRP)[26]、[27]、带时间窗的EVRP(EVRPTW)[21]、[28]、带取车和送货的EVRP[29]、带非线性充电的EVRP-NL(EVRP-NL)[30]等。特别是,CEVRP是最基本的变体,也是本文主要关注的问题。CEVRP可以描述如下:给定一支电动汽车车队,需要在电动汽车的容量和电池功率限制范围内找到最佳路线,从停车场开始,然后返回停车场,为一组有不同需求的客户提供服务。与传统的CVRP不同,CEVRP的目标是最大限度地减少车辆的总行驶距离,不仅包括所有客户的访问,还包括一些充电站的访问。每辆电动汽车在行驶过程中都不能超载或电量耗尽。如果车辆仅使用初始电量无法完成旅程,则需要前往充电站为电池充电。值得注意的是,CEVRP应同时优化两个方面:1)拜访客户的路线和2)每辆电动汽车的充电方案。这两个方面彼此高度依赖,因为行驶里程有限的电动汽车的路线优化取决于可用的充电站,而每辆电动车的充电决策方案则基于基于给定行驶路线估计的充电需求[31],[32]。

到目前为止,现有的解决EVRP的方法主要包括精确算法、启发式算法和元启发式算法[33]。精确算法总是将EVRPs转化为混合整数线性规划(MILP)模型来解决它们[36], [37]。对于小规模的测试实例,它们可以快速获得最优解,但在超过50个客户的大规模问题上效率很低。启发式算法是问题指定的程序,根据问题结构改进解决方案,如Clarke和Wright储蓄算法[2]。元启发式算法是一种与问题无关的启发式算法,不依赖于问题的具体条件。它可以分为基于个体和基于群体的元启发式算法。基于个体的算法通过局部搜索策略改进单一的解决方案,如模拟退火(SA)[38]、塔布搜索(TS)[39]、可变邻域搜索(VNS)[40]、[41]和自适应大邻域搜索(ALNS)[22]、[42]。基于种群的算法使用多种解决方案来进行协作搜索,以找到最佳解决方案,如遗传算法(GA)[43][46]和蚁群优化(ACO)[26], [47], [48]。

注意,这些启发式和元启发式算法通常会迭代地、分阶段地优化路由计划和充电方案,这可以在一定程度上解决它们之间的耦合问题。然而,随着问题规模的增加,两个子问题之间的耦合变得更加复杂,这种两阶段交替优化会在大的求解空间中进行许多没有希望的搜索。具体来说,在选路阶段,只考虑对客户服务顺序的优化,忽略了充电站位置对选路计划的影响,可能会导致电动汽车绕道充电。而在充电阶段,对于固定的选路计划,过度寻求最佳充电方案,一旦下一代的选路方案发生变化,则需要重新优化充电方案。路由和计费的优化之间的这种不一致性导致优化过程中的搜索没有希望。

因此,如何在路由和充电之间进行协同优化,对于提高算法的搜索效率非常重要。在本研究中,为了更好地考虑路由优化和充电决策之间的耦合关系,采用了协同进化优化的思想,即通过使用两个协同进化种群同时优化两个子问题。通过进化过程中的信息交互,这两个种群协同寻找问题的最优解。总而言之,本文的贡献如下。

1)提出了一种基于双种群的共同进化算法(DPCA)来解决CEVRP,其中一个种群用于路由优化,另一个种群用于充电优化。

2)设计了一个改进的ACO来生成路线,其中充电站被视为一种没有需求的客户,它可以考虑充电站的位置对路线规划的影响。

3)使用二元遗传算法来生成二元充电方案的群体,这可以提供多样化的充电方案,以更好地匹配最佳路由计划,从而减少无望的搜索。

4)提出了一种交互策略,使两个种群共同进化,其中路由种群中的最佳蚁群被用来评估充电种群,通过插入最佳充电方案得到的解决方案被用来更新信息素信息。

本文的其余部分组织如下。在第二节中,介绍了相关的工作,并给出了工作的动机。在第三节中,介绍了CEVRP的表述。在第四节中,介绍了所提出的用于解决CEVRP的DPCA的细节。实验研究在第五节进行。最后,第六节对本文进行了总结,并指出了一些未来的研究问题。


二相关工作

本节首先介绍了现有的解决EVRP的方法,然后总结了这些方法,给出了这项工作的动机。

A现有的CEVRP方法

在这一节中,我们回顾了现有的解决EVRP的方法,这些方法可以分为四类。1)精确方法,2)启发式方法,3)基于个体的元启发式方法,以及4)基于群体的元启发式方法

精确方法通常将EVRP转换为相应的数学规划模型或线性规划问题,并采用通用精确求解器,如CPLEX优化器或其他商业软件来求解。Lin等人[36]将考虑车辆负载的EVRP描述为MILP模型,并使用CPLEX来解决该问题。实验结果表明,CPLEX为13个客户的小规模实例找到了最优解决方案。肖等人[49]考虑了非线性充电特性下的EVRPTW,并将其转换为MILP模型,还使用CPLEX成功解决了25个客户的测试实例。最近,姚等人[50]将EVRP分解为两个线性规划问题,即与路由相关的问题和与充电相关的问题。通过分阶段迭代求解这两个子问题,该算法可以在多项式时间内获得近似最优解。即便如此,实验中的问题规模也很小,客户不超过50人。这些研究表明,精确的方法总是可以找到小规模实例的最优解,但在处理大规模实例时不适用或效率低下。

启发式方法通过经验和实验分析的归纳推理来解决EVRP,从初始解开始,在其附近找到一个更好的解作为当前的解,然后重复这个过程,直到没有更好的解可以被更新。启发式算法可以分为构造启发式算法和局部改进启发式算法[33], [34]。构造时,我们从 "零 "开始,依次构造一个解。Clarke和Wright节约(CW)算法是常用于EVRP的构造启发式算法之一。Erdogan等人。[2]使用改进的CW算法来解决可再生燃料车辆的路由问题。另一个广泛使用的构造启发式算法是两阶段启发式算法。Felipe等人[51]使用一个两阶段的启发式方法来解决具有有限自主性的EVRP。与构造启发式不同,局部改进启发式从一个完整的初始解开始,迭代改进当前的解,通过启发式算子获得一个更好的解。典型的是局部搜索算法,该算法已经在各种EVRP研究中与其他算法广泛结合[52]。

基于个体的元启发式方法主要基于不同的局部搜索策略,可以在合理的时间内获得大规模EVRP的近似最优解。2014年,Schneider等人[21]首次提出EVRPTW模型,并将禁忌搜索和可变邻域搜索相结合进行求解。Montoya等人[30]提出使用迭代局部搜索(ILS)算法求解EVRP-NL。杨等人[22]提出了一种称为SIGALNS的混合启发式方法来解决CEVRP,其中路由和计费问题通过ALNS和迭代贪婪(IG)启发式分阶段优化。与ALNS一起,Hof等人[23]在ALNS的摇动步骤中设计了一种新的设施相关的邻域结构,用于快速搜索电动汽车路线计划。Schiffer等人[55]开发了ALNS和动态编程的混合体,使用计算并行化技术在合理的时间内解决大规模测试实例。一般来说,这些算法的有效性值得称赞,但它们的性能在很大程度上取决于与问题相关的本地搜索算子。对于更大规模的测试问题,算子的选择会对算法的性能产生很大影响。如果算子选择不当,算法很容易陷入局部最优。

基于种群的元启发式算法通常受到生物体自然进化规律或行为的启发,并显示出在广泛的复杂问题上获得最优解的全局搜索能力。一些学者试图使用它们来解决EVRP,如GA[44]、[45]和ACO[26]、[47]、[48]。最早,郭等人[44]和Shao等人[45]提出使用遗传算法同时解决EVRP的两个子问题,将客户和充电站的订单编码在一个进化群体中。然而,这种解决方案导致搜索空间巨大,而且像2-opt这样的传统本地搜索运营商是无效的,因为它们不能同时处理客户和站点订单,这最终使得所提出的GA在大规模EVRP上无效。之后,大多数研究转向了分阶段交替优化路由计划和计费方案的两阶段优化框架。Mavrovouniotis等人[26]在不考虑电力约束的情况下,采用最大最小蚂蚁系统算法(MMAS)优化路由,然后使用简单的修复方法将充电站添加到获得的路由计划中。贾等人[47]提出了一种基于双层优化思想的双层ACO(BACO)来求解CEVRP,其中ACO用于优化路由计划,而不考虑上层CVRP子问题中的电力约束,并设计了去除启发式算法来获得下层的充电方案。最近,为了提高BACO算法的效率,Jia等人[48]提出了一种改进的基于置信度的双层蚁群优化算法(CBACO),其中基于置信度只选择有前景的路由计划进行较低级别的优化。

B动机

可以发现,大多数现有的启发式和元启发式算法通常将CEVRP分解为两个子问题,即路由优化问题和计费决策问题,并分阶段交替优化。然而,这种两阶段交替优化框架在每个阶段过度搜索最优路由方案和收费方案,很容易错过它们之间的最佳匹配,并且当问题规模增加时,会进行大量没有希望的搜索。具体而言,由于它们之间复杂的耦合关系,很可能存在次优路由计划,但具有适当的充电方案,可以实现比分阶段组合各个最优方案更好的结果。为了说明这种情况,图1在不考虑充电站的情况下绘制了路线图,以及MMAS[26]和R4-C-30测试实例[56]上提出的方法获得的最终解决方案。从图1(a)(b)可以发现,虽然MMAS获得的路由计划和充电方案都是最优的,但最终得到的解决方案并不是最优的。而在图1(c)(d)中,虽然路由计划不是最优的,但有了匹配良好的充电方案,解决方案的质量可以更好。因此,为了实现路由和计费的协同优化,本文设计了一种基于对偶种群的协同进化算法来协同搜索问题的最优解。

请注意,双种群共同进化策略已被广泛用于连续优化领域,用于解决复杂的优化问题[57]。例如,为了解决具有复杂的帕累托最优集的多目标优化问题,Li等人提出了 "多目标优化"。[57]使用两个独立的、共同进化的种群来同时处理收和多样性问题。对于受限的多目标优化问题,Tian等人(2021)研究了多目标优化问题。[58]提出进化一个种群来解决原始问题,另一个种群解决一个与原始问题相比没有约束的辅助问题。通过在两个种群之间共享有用的信息,复杂的原始问题可以得到有效解决。最近,这种共同进化的优化策略也被用于解决组合优化问题[60]。例如,Wang等人。[62]使用两个种群来协同搜索设施不确定情况下的多目标位置问题的最优解,其中位置种群在评估每个位置的半径质量时为半径种群提供了高质量的位置方案,而半径种群在确定良好的位置方案时为位置种群配备了适当的半径。因此,本文采用这种双种群协同进化策略来解决CEVRP,其中一个种群用于路由优化,另一个种群用于充电优化。

三 问题公式

图1 在R-4-C-30测试实例上,不考虑充电站的路由计划和MMAS和所提方法的最终解决方案,其中◦、▷和□分别代表仓库、客户和充电站。(a) MMAS的路由计划,旅行距离为564.99。(b) MMAS的最终解决方案,旅行距离为737.62。(c) DPCA的路由计划,旅行距离为610.01。(d) 建议方法的最终解决方案,旅行距离为611.26

CEVRP可以定义在一个全连通的加权图G=(V,E)上,其中V={0}ŞIõF′是一组节点,E={(I,j)|I,j∈V,I̸=j}是连接这些节点的弧的集合。节点0表示仓库。我是一组n个客户,每个客户我都有一个固定的货物需求。F′表示一个扩展的充电站集,包括i∈F中每个充电站的δi个副本,其中F是已经建立的m个充电站的集。在最坏的情况下,δi设置为2|i|,并且每个充电站可以访问一次、多次或不访问。每个电动汽车都有最大的货物需求容量C和最大的电池容量B。此外,当电动汽车到达节点∀i∈V时,它有剩余的承载能力u i和剩余的电池水平y i。假设充电消耗率不随电动汽车的负载而变化,消耗的能量被描述为h*dij,其中dij表示从节点i到节点j的距离,h表示恒定的充电消耗率。

根据现有的研究[33],CEVRP的基本假设如下。

1)电动汽车从仓库出发,最后返回仓库。

2)每个客户节点正好由一辆电动汽车提供服务。

3) 电动汽车可以访问一个充电站,在任何两个客户之间为电池充电。4)每个充电站可以由一辆以上的电动汽车访问。

5)仓库、客户和充电站的位置以及从任何节点到任何充电站的旅行距离是已知的。

6)电动车的电池水平必须始终在0和其电池容量之间。

7)一条路线上客户的总需求不能超过电动车的最大容量。

8) 电动车离开仓库和充电站时,电池被完全充电。

从形式上看,CEVRP可以表述如下。目标(1)是最小化所有电动车的总驾驶距离。约束条件(2)确保每个客户被一个电动车访问。约束条件(3)保证一个充电站可以被多次访问。约束条件(4)通过保证在每个节点上,传入弧的数量等于传出弧的数量来建立流量保护。约束条件(5)-(6)与电动车负载有关,这被称为 "容量约束"。约束条件(5)要求电动车的负载是非负的,当它到达任何节点时不能超过最大值。约束条件(6)保证所有客户的货物需求得到满足。约束条件(7)-(9)与电动汽车的电池水平有关,这被称为 "电力约束"。约束条件(7)要求电动车的剩余电池容量为非负值,当它到达任何节点时不能超过最大电池容量。约束条件(8)假设电动汽车在充电站或仓库总是完全充电。约束条件(9)将节点j的可用能量与节点i的可用能量联系起来。节点j的电量随着弧(i,j)的消耗而减少。在约束条件(10)中,x ij是一个二元变量,表示弧(i,j)是否被走过。

作为众所周知的CVRP的扩展,CEVRP不仅需要确定客户订单,还需要确定路线中的充电站访问量。由于对充电站的访问次数不受路线的限制,电动汽车可以不访问充电站,也可以访问一次或多次充电站,这对充电优化提出了挑战。图2展示了CEVRP解决方案的示例,该解决方案涉及十个客户(C1、…、C10)、四个充电站(S1、…、S4)以及也可用作充电站的仓库。可以发现,一辆电动汽车在行驶过程中访问充电站两次,一辆汽车访问一次,另一辆电动车辆不访问任何充电站。此外,电动汽车的充电决策也是一个复杂的优化问题。它需要确定电动汽车访问充电站的适当位置,满足电力限制并避免绕行。例如,对于图2中的路线C7C8-S3-C9-C10和C7-C8-S4-C9-C10。2,尽管这两条路线都是电力可行的,但前者可以实现比后者更好的总距离,因为它有效地避免了绕行。换言之,当电动汽车需要充电时,选择最近的充电站并不总是最优的,因为它在很大程度上受到路线计划的影响。因此,应同时考虑对路由计划和充电方案的优化,以更好地处理它们之间的耦合关系。


四、算法

在这一节中,首先给出了拟议算法的框架。然后,介绍了路由群体和充电群体的详细演变程序。最后,详细介绍了两个种群之间的信息交互方法,这是提出的DPCA的主要组成部分。

A.拟议的DPCA的框架

算法1总结了所提出的DPCA的框架。第一个种群P用于路由优化,并且每个个体(蚂蚁)使用整数编码。具体地,ant x=(x1,x2,…,xn+m)表示包括访问客户(1,2,…,n)和充电站(n+1,…,n+m。另一个群体Q用于充电优化,并且每个个体使用二进制编码。考虑单个y=(y 1,y 2,…,y n),第i位中的二进制1表示EV在访问给定路由计划中的第i个客户后需要充电,否则为二进制0。首先,初始化这两个大小为N的种群P和Q、最优解s和信息素矩阵Φ(1-3行)。之后,在每一代中,首先分别进化两个种群,其中种群P使用改进的maxmin-ant系统来优化路由计划(第5行),种群Q使用二进制遗传算法来优化充电方案(第6行)。然后,实现它们之间的交互,以交换有用的信息,从而进一步提高解决方案的质量(第7行)。当满足终止标准时,交替地实施和终止这两个过程。在进化的最后,CEVRP最终解决方案中的充电方案最终通过迭代贪婪(IG)算法[22]进行了改进(第8行)。

B.路由优化 基于改进的ACO蚁群优化(ACO)

算法[63]是一种基于种群的元启发式算法,基于对自然界中真实蚁群的集体采食行为的研究,模拟真实的蚁群合作过程。ACO不依赖于特定的局部搜索算子,具有良好的全局搜索能力,近年来被广泛用于解决EVRPs[26], [47], [48], [63]。在几个ACO变体中,max-min ant系统(MMAS)是研究最多的一个,并且已经在CEVRP中证明了它的良好性能[26], [47], [48]。因此,在本研究中,MMAS也被用来优化电动车路线。与现有的只考虑客户服务顺序的方法不同,本文考虑了充电站的位置对路线规划的影响,并将充电站预先置于路线建设中,其中充电站被视为没有需求的客户之王。由于客户和充电站都被考虑在内,信息素矩阵Φ的大小为n′∗n′,其中n′=n+m+1,每个元素φ ij∈Φ代表从i到j旅行的信息素值。此外,信息素值φ max和φ min的边界是按照[26]的建议计算的。

其中ρ是蒸发率,Cbs是最佳远期蚁的驱动距离。

路由优化过程如算法2所示。首先,通过根据轮盘选择策略从候选节点中选择节点来构建路由r(第4-12行)。在每个步骤中,从当前节点i到节点j的概率通过以下公式计算:

其中α、β是两个参数,用于调整信息素值和距离值的权重,I s是一组候选节点。

然后,通过使用[66]中提出的分割算法,将路由计划r分割成几条容量可行的路由(第13行)。之后,2-opt局部搜索算子被用来进一步提高路由质量(第14行)。在获得用ant表示的路由计划群体后,找到P中的最佳ant,表示为P best,然后由提议的局部搜索算子改进(第17-18行)。此外,P best中的相关充电方案,表示为l s,被提取出来用于指导充电群体的演变(第19行)。

在对P最优进行局部搜索时,为了更好地匹配收费方案,最终形成高质量的解决方案,提出了一种新的关联插入算子来生成稳定性更好的路由计划,其中节点仍然通过使用连续串去除算子从路由计划中去除[67]。首先,找到所有关联的节点和已删除节点的关联边。例如,在图3中,对于要插入的节点a,其关联节点a1是最靠近未被移除的a的节点,l1是节点a的关联边,因为在移除一些节点后,它在路由中的所有边中最靠近a。c1和l1分别是节点c的相关节点和相关边。然后,节点将按照以下规则依次插入:如果关联节点和关联边属于同一路由(例如,节点a),则在不违反容量约束的情况下,节点将首先插入到路由中;如果不是(例如,节点c),则节点将被插入两条路线中的每一条,并且将选择驾驶距离较短的一条。如果节点在上述两种情况下都违反了容量约束,则会在所有路由中尝试贪婪插入。如果没有要插入的管线,则会打开一条新管线。

C.基于二进制GA的充电优化

对于充电优化,一个二进制的GA被用来生成一个充电方案群,为路由群提供多样化的充电方案。首先,提出了一种初始化方法来产生初始充电方案。具体来说,每个客户根据欧氏距离被分配到其最近的充电站。假设第i个客户被分配到第j个充电站S j,访问第i个客户后去S j的概率计算如下。

其中d i,j是第i个顾客到S j的距离,d max(d min)是S j与分配给S j的最远(最近)顾客之间的距离。常数ξ的加入是为了避免分母为0,它被设置为1。对于种群中每个个体的第i位,其计算方法如下。

然后,通过使用[68]中提出的公共均匀交叉和位翻转突变来生成后代群体Q。不同的是,路由种群中最好的蚂蚁P best所包含的二进制充电方案l s被用作父方案,旨在通过路由种群中的精英信息来引导充电种群的进化。通过基于人群的搜索,充电人群可以始终保持许多不同的充电方案,这些方案可以很好地匹配迭代变化的路由计划

D. 两个种群之间的相互作用

为了更好地考虑到CEVRP中子问题之间的耦合,在两个种群的进化过程中实施互动,以协同寻找问题的最优解。算法3描述了路由群体P和充电群体Q之间互动的详细步骤。首先,将最佳蚁蚁P best中的客户服务序列r c作为基本路由计划,以匹配Q ∪O中的每个充电方案,从而可以评估每个充电方案的质量(第1行)。然后,可以确定最佳充电方案Qbest,Q∪O中的前N个最佳充电方案可以存活到下一代(第2-3行)。之后,通过结合r c和Qbest可以构建一个新的解决方案s′(第4行)。如果解决方案s′是电力可行的,并且其质量优于当前的最佳解决方案s,则s由s′更新,信息素矩阵Φ由s′更新(第5-7行);否则,信息素矩阵Φ由P best更新(第8-9行)。具体来说,信息素矩阵的更新方式如下。

为了更好地理解交互过程,图4说明了每一代中两个种群之间的信息交流。假设存在四个客户和一个充电站,客户数为1∼4,充电站的数量为5。首先,找到路由群体中的最佳蚁P best = (1, 5, 2, 3, 4),并用于指导充电群体的进化。最佳蚁群的功能主要包括以下两个方面。1)将客户服务序列r c = (1, 2, 3, 4)作为基本路由来评估充电方案的质量,2)将P best包含的二进制充电方案l s = (1, 0, 0, 0)作为父代来生成子代充电方案。这样一来,充电群体可以很好地匹配具有一定多样性的最佳路由计划,这有助于防止解决方案出现局部最优。然后,可以确定最佳充电方案Qbest=(0,1,0,0)与r c=(1,2,3,4)相匹配,从而通过合并它们得到一个新的解决方案(1,2,5,3,4)。作为回报,这个新的解决方案被用来更新信息素矩阵Φ以生成路由。通过进化过程中的信息交互,这两个种群可以协同搜索问题的最优解。


五实验

首先给出了相关的实验设置。然后,将DPCA与四种最先进的算法在求解质量和时间效率方面的性能进行了比较。然后,通过比较DPCA及其三种变体,验证了双种群协同进化策略的有效性。最后,验证了所提出的关联插入算子在提高路由质量方面的有效性。

A.实验设置

1) 算法:

通过将所提出的DPCA与四种最先进的算法进行比较,验证了其性能,

即混合ALNS启发式算法(SIGALNS)[22]、

最大最小蚂蚁系统(MMAS)[26]、

双层蚁群优化算法(BACO)[47]和基于置信度的BACO(CBACO)[48]。

请注意,SIGALNS是一种基于个体的元启发式算法,而MMAS、BACO和CBACO是基于群体的元启发式方法。

2) 测试问题:选择两个众所周知的测试套件,即R-C测试套件[56]和E-X测试套件[26],用于算法的性能比较。RC测试套件通过将客户和充电站的位置随机分散在100×100的网格上,考虑了实际物流配送中不确定性的影响。它包括34个测试实例,客户数量从30到200不等。在这些情况下,每个客户的需求被设置为5、10和15,充电站的数量被设置为2、4、6和8。EV的最大容量被设置为100,并且EV的最大电池容量被设置成150。Mavrovouniotis等人最近提出了E-X测试套件[26],该套件涵盖了与实际问题特征相关的大量不同场景,如消费者及其需求的分布、充电站的数量和分布、车辆的货运和电池容量。补充文件中的表I给出了E-X测试实例的详细信息。

3) 参数设置:实验在配有64GB内存的Intel Core i7 3.4GHz CPU的工作站计算机上进行。每个测试实例执行20次独立运行,最大生成数设置为5000。为了进行公平的比较,所有参数都设置为与原始研究中建议的相同。关于DPCA的设置,使用的MMAS遵循Mavrovouniotis等人[26]建议的建议设置,其中信息蒸发率ρ设置为0.98,α和β分别设置为1和2。按照贾等人[48]的建议,将人口规模设置为客户数量。

B.拟议的DPCA的性能

为了验证所提出的算法在求解CEVRP方面的性能,在R-C和E-X测试套件上将其与四种最先进的算法进行了比较。从以下几个方面分析了DPCA的性能。

1) 总行驶距离比较:比较MMAS、SIGALNS、BACO、CBACO和DPCA在20次独立运行中获得的最小和平均目标值,比较结果见补充文件中的表II和表III,其中括号中的数字表示使用的车辆数量。“w/t/l”表示DPCA与其他算法的胜、平或败实例数,“rank”行显示了根据Friedman检验的每个算法的总体rank。对于R-C测试套件[56],DPCA在充电站较少的14个测试实例(2和4)中获得12个最佳最小目标值。BACO在这些实例中实现了4个最佳最小目标值,而其他两个算法未能实现最佳值。对于充电站较少的测试实例,路由优化与充电决策之间的耦合更强。SIGALNS、MMAS、BACO和CBACO分阶段优化两个子问题,在优化过程中无法很好地处理这种强耦合关系,导致性能较差。具体而言,对于“R-2-C-90”,MMAS甚至无法找到可行的解决方案,因为当充电站的数量较少时,很难满足电力限制。对于具有更多充电站(6和8)的20个测试实例,就平均值而言,与BACO相比,DPCA实现了可比的性能。就最小值而言,DPCA在这些实例中获得了12个最佳结果,而BACO获得了7个,而其他算法仅获得一个或没有。这表明即使在路由优化和计费决策之间的耦合较弱的情况下,DPCA在解决CEVRP方面也是可比的。总体而言,在R-C测试套件中,与SIGALNS、MMAS、BACO和CBACO相比,DPCA分别减少了3.34%、6.79%、2.74%和3.30%。对于E-X测试套件[26],由于客户和站点的复杂分布,路由优化和充电决策之间的耦合变得更加复杂。由于对偶种群协同进化策略对该耦合问题的有效性,DPCA明显优于其他算法。具体而言,与SIGALNS、MMAS、BACO和CBACO相比,它分别减少了5.37%、5.73%、0.75%和1.94%。

2) 迭代过程中路由调整的有效性:图5分别显示了MMAS、BACO和DPCA在“R-2-C-40”测试实例上进化过程的不同阶段获得的路由。由虚线表示的路线是通过忽略充电站并将该问题视为CVRP而获得的。可以发现,在第200代时,由MMAS、BACO和DPCA获得的初始路由与作为CVRP解决的情况下的初始路由几乎重叠。在第400代或第600代,MMAS、BACO和DPCA获得的路线在信息素的作用下发生变化。其中,DPCA有着明显的变化。原因是,通过新的信息素更新规则,DPCA考虑了充电站位置的影响,从而使路由计划逐渐接近充电站。同时,前往充电站的行驶距离逐渐缩短。最后,在第800代,DPCA获得的路由计划与CVRP的情况几乎没有重叠。值得注意的是,这并不是CVRP的最佳路由方案,而是CEVRP的最佳路由规划,这表明了路由和计费协同优化的必要性。

3) 解决方案比较:图6显示了SIGALNS、MMAS、BACO和DPCA在“R-8-C-30”测试实例上获得的最终解。此运行对应于具有最小目标值的结果。如图6(a)所示,电动汽车访问客户18和16、28和29之间的充电站,即使是最近的充电站也离客户很远。原因是,MMAS只允许电动汽车在电力不足以到达下一个客户时访问充电站。绕行充电站不可避免地会增加行驶距离。如图6(b)所示,与MMAS相比,SIGALNS使用的路由修复方法在绕行方面有一些改进。当遇到电量不足无法到达下一个客户时,SIGALNS中有更多的充电站位置选择。然而,路线中先前插入的充电站会影响后续充电站的决定,当电量再次不足时,下一个充电站的最佳位置也可能导致绕行,导致总行驶距离增加。如图6(c)所示,BACO使用去除启发式方法来优化充电方案,该方法可以有效地避免电动汽车的绕行,但优化过程非常耗时,因为它需要优化人群中每个路由计划的充电方案。如图6(d)所示,DPCA可以获得适当的充电方案来匹配路由计划,从而可以有效地避免总行驶距离的增加。

图7在R-6-C-40上绘制了用所提方法得到的最终解决方案中的一条路线,涉及9个客户(C1,.... ,C9)、6个充电站(S1,...,S6)和也可用于充电的仓库(D),同时记录电动车在行驶过程中访问每个节点(仓库、充电站或客户)前后的剩余负荷和电池水平。括号中的第一项表示剩余负荷,第二项是剩余电池电量,沿弧线的数值表示电动车消耗的电池电量。C3和C4的货物需求为5,C6、C7和C8的需求为10,C1、C2和C9的需求为15。电动车从仓库(D)开始,剩余负荷为100,剩余电池水平为150。当电动车到达客户C1时,它消耗了电池电量9,在访问C1后,电动车的剩余负荷为85。当离开C3时,电动车选择去S5充电,然后访问C4,尽管电动车仍然有足够的能量从C3到C4。原因是在随后的旅程中没有可用的充电站。当电动车返回仓库时,剩余的电池电量为2,剩余的负载为0。通过记录剩余电池水平和电动车负载的变化,可以发现所提出的方法最好地利用了可用的充电站,并将路由计划与适当的充电方案嵌入,导致更短的驾驶距离。

4) 收敛速度:为了分析每种算法的收敛能力,通过在固定的CPU时间T运行每种算法来计算目标值,可以确定如下:

其中|I|是客户总数。对于少于100个客户的测试实例,θ设置为0.5,而对于100~200个客户的试验实例,θ则设置为1。

图8绘制了五种算法在不同规模的测试实例上的收敛曲线。可以发现,就最终总行驶距离而言,DPCA在“R-6-C-80”上可以实现与BACO相当的性能,在“R-6-C-90”和“R-6-C-120”上都表现更好。此外,DPCA在“R-6-C-200”等大型测试实例上具有明显的优势。此外,在收敛速度方面,在大多数测试实例上,DPCA的收敛速度都快于其他三种算法。

5) 时间效率:图9显示了这五种算法在R-C测试套件的34个测试实例上消耗的CPU时间。可以发现,DPCA所消耗的CPU时间明显小于BACO所消耗的时间。具体来说,DPCA比BACO快约2倍,在一些大规模实例中甚至达到10倍。对于BACO来说,对所有蚂蚁进行较低级别的充电优化需要花费大量时间,而DPCA只需要对最佳蚂蚁的充电方案进行优化,就可以大大节省时间。对于CBACO,它只选择一些有前途的蚂蚁来执行充电优化,这也可以减少CPU时间,而DPCA的计算效率与之相当。对于MMAS,它直接插入最近的充电站,使解决方案电力可行,计算复杂度最低,但总行驶距离显著增加。总体而言,与其他算法相比,所提出的DPCA保持了可接受和可比较的计算效率

C.双重人口共同进化战略的有效性

为了验证所采用的双种群协同进化策略的有效性,在R-C测试套件上将DPCA与其三种变体进行了比较。在Variant-I中,最佳蚂蚁所包含的充电方案不用于指导充电群体的进化,即随机选择充电群体中的两个个体作为父母来产生后代,这主要验证了从路由群体到充电群体的交互的有效性。在变体II中,GA不用于为最佳蚂蚁生成一组充电方案,而是使用IG启发式算法[22]来优化每个蚂蚁的充电方案,旨在验证维持不同充电方案以跳出局部最优的有效性。在变体III中,在规划路线时不考虑充电站,只优化了客户的服务订单,这主要验证了将充电站预先放入路线计划以避免电动汽车绕行的有效性。

表I显示了DPAC及其三种变体在R-C测试套件上获得的20次独立运行中的最小目标值。图10显示了DPCA和三种变体在具有六个充电站的十个R-C测试实例上的收敛曲线。从表I中的结果可以获得以下观察结果:

1) 与Variant-I相比,DPCA可以在34个测试实例中的20个上执行得更好。此外,从图10中可以发现,在所有情况下,DPCA的收敛性能都优于Variant-I。这表明,当最好的蚂蚁所包含的充电方案与充电人群中的个人进行交叉时,可以快速移除一些远离客户的充电站,从而大大提高解决方案的质量。

2) 与变体II相比,DPCA在34个测试实例中的22个测试实例上可以获得更好的结果。同样在图10中,在大多数测试实例上,DPCA可以比变体II执行更好的收敛能力。其原因是双种群协同进化策略可以为最佳路由计划生成合适的计费方案,以摆脱局部最优。IG算法的重点是为固定路由计划提供最优的计费方案。然而,阶段中各个最优值的组合并不总是CEVRP的最优解,IG很可能使该解陷入局部最优。

3) 与变体III相比,DPCA可以在34个测试实例中的31个上获得更好的结果。原因是,将充电站预先纳入路线规划,可以更好地平衡目标最小化和电力约束满足,避免过度寻求客户之间行驶距离的最小化导致电动汽车绕道充电。如图10所示,DPCA表现出更好的收敛能力

D.建议插入运算符的有效性

为了验证所提出的插入算子在路由优化中的有效性,将其与基本贪婪插入算子(BGI)和regret2插入算子(Regret-2I)[69]进行了比较,而基于字符串的移除算子[67]仍用于移除路由计划中的节点。表II显示了10个不同尺度的R-C测试实例的最小和平均目标值,其中“关联-I”表示所提出的关联插入算子。可以发现,与BGI方法和Regret-2I方法相比,AssociateI在大多数测试实例上都表现良好。尽管这两种方法已被证明对车辆路径优化是有效的,但它们似乎不适合CEVRP中的充电站路径优化。这是因为CEVRP不仅受到容量约束的限制,还受到电力约束的限制。在不考虑电力约束的情况下,即使找到了最优路由计划,对最小成本插入的贪婪选择也可能对生成CEVRP的最优解无效。拟议的联营企业I指的是相关的客户和相关的边缘。它首先插入属于同一路由的客户,然后考虑属于多个路由的客户的最佳插入位置。与贪婪或后悔插入相比,该算子可以为CEVRP找到更合适的节点插入位置。

VI、 结论

本文提出了一种基于双种群的协同进化算法(DPCA)来求解CEVRP。该算法通过运行两个协同进化种群来考虑路由优化和计费决策之间的耦合。在路由群体中,设计了一种改进的蚁群优化算法,以生成高质量的路由计划,该计划可以提前包含充电站的位置信息。在充电群体中,使用二进制遗传算法生成充电方案群体,基于从路由群体中获得的最佳蚂蚁来评估其质量。通过进化过程中的信息交互,这两个群体可以协同搜索问题的最优解。基于实验,发现DPCA在总驾驶距离方面优于四种广泛使用的元启发式算法,与两个测试套件的SIGALNS、MMAS、BACO和CBACO平均值相比,总驾驶距离分别减少了3.82%、5.83%、1.62%和2.57%。通过对迭代过程中路由变化的观察,可以发现DPCA通过将路由计划与适当的计费方案相匹配,可以有效地避免陷入局部最优。就时间效率而言,与先进的BACO相比,DPCA具有明显的优势,速度是SIGALNS的两倍,性能与SIGALNS相当。

在未来的研究中,为更复杂的EVRP变体开发基于双种群的协同进化框架将是一件有趣的事情,例如具有时间窗的EVRP[21]、[28]和具有非线性充电的EVRP(EVRP-NL)[30]。

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
种群协同进化是一种优化算法,它通过同时演化两个种群来解决复杂的优化问题。下面是一个简单的种群协同进化的代码示例: ```python import numpy as np # 定义目标函数 def objective_function(x): return x**2 # 初始化种群 def initialize_population(population_size, lower_bound, upper_bound): population = np.random.uniform(lower_bound, upper_bound, population_size) return population # 计算适应度 def calculate_fitness(population): fitness = objective_function(population) return fitness # 选择操作 def selection(population, fitness, selection_size): selected_indices = np.argsort(fitness)[:selection_size] selected_population = population[selected_indices] return selected_population # 交叉操作 def crossover(parents, crossover_rate): offspring = [] for i in range(len(parents) // 2): if np.random.rand() < crossover_rate: parent1 = parents[i * 2] parent2 = parents[i * 2 + 1] child1 = (parent1 + parent2) / 2 child2 = (parent1 - parent2) / 2 offspring.extend([child1, child2]) else: offspring.extend([parents[i * 2], parents[i * 2 + 1]]) return np.array(offspring) # 变异操作 def mutation(population, mutation_rate, lower_bound, upper_bound): mutated_population = population.copy() for i in range(len(mutated_population)): if np.random.rand() < mutation_rate: mutated_population[i] += np.random.uniform(lower_bound, upper_bound) return mutated_population # 种群协同进化算法 def dual_population_cooperative_evolution(population_size, lower_bound, upper_bound, num_generations, selection_size, crossover_rate, mutation_rate): population1 = initialize_population(population_size, lower_bound, upper_bound) population2 = initialize_population(population_size, lower_bound, upper_bound) for generation in range(num_generations): fitness1 = calculate_fitness(population1) fitness2 = calculate_fitness(population2) selected_population1 = selection(population1, fitness1, selection_size) selected_population2 = selection(population2, fitness2, selection_size) offspring1 = crossover(selected_population1, crossover_rate) offspring2 = crossover(selected_population2, crossover_rate) mutated_population1 = mutation(offspring1, mutation_rate, lower_bound, upper_bound) mutated_population2 = mutation(offspring2, mutation_rate, lower_bound, upper_bound) population1 = np.concatenate((population1, mutated_population2)) population2 = np.concatenate((population2, mutated_population1)) best_solution1 = population1[np.argmin(calculate_fitness(population1))] best_solution2 = population2[np.argmin(calculate_fitness(population2))] return best_solution1, best_solution2 # 参数设置 population_size = 100 lower_bound = -10 upper_bound = 10 num_generations = 100 selection_size = 50 crossover_rate = 0.8 mutation_rate = 0.1 # 运行种群协同进化算法 best_solution1, best_solution2 = dual_population_cooperative_evolution(population_size, lower_bound, upper_bound, num_generations, selection_size, crossover_rate, mutation_rate) print("最优解1:", best_solution1) print("最优解2:", best_solution2) ``` 这段代码实现了一个简单的种群协同进化算法,其中包括目标函数的定义、种群的初始化、适应度计算、选择操作、交叉操作和变异操作等。你可以根据自己的需求进行修改和扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

脑电情绪识别

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值