带自适应交叉算子的遗传算法求解具有访问约束的多旅行商问题

英文名:Genetic Algorithm with Adapted Crossover Operators for Multiple Traveling Salesmen Problem with Visiting Constraints

摘要

具有访问限制的多旅行推销员问题(VCSMP)是经典的多个旅游推销员问题(MTSP)的一般版本,其中每个城市只能由多个推销员访问。为了解决这个新问题,我们将遗传算法(GA)应用于MSTP,方法是使用双染色体表示方案,其中一条染色体表示城市的访问序列,另一条染色体代表城市对销售人员的分配。为了进一步提高遗传算法在求解VCSMP中的有效性,我们修改了三种流行的交叉算子,即循环交叉(CX)、顺序交叉(OX)和部分映射交叉(PMX)。与传统TSP的执行类似,三个交叉算子都在城市序列染色体上执行,而它们的适应性在于修改第二条染色体上的saler分配。为此,根据可达性矩阵进行校正机制,使交叉后生成的解可行。在基准TSPLIB集合生成的总共16个VCSMP实例上进行的大量实验表明,自适应遗传算法可以有效地应对VCSMP,并且具有修改的PMX的遗传算法实现了最佳的整体性能.

I.简介

多重旅行推销员问题(MTSP)是传统旅行推销员问题的一种广义形式[1]-[3]。在MTSP中,多个销售人员相互合作,穿越多个城市,每个城市只有一个销售人员访问一次,同时最大限度地减少他们的总旅行成本。在传统的MTSP中,所有销售人员都可以访问每个城市。然而,在一些现实世界的场景中,一些城市可能仅限于某些销售人员。例如,在物流调度中,一些危险货物只能由特定的卡车提供服务。为了模拟这一实际问题,本文建立了具有访问约束的多个旅行推销员问题(VCSMP),其中城市对推销员的可达性由包含0和1的可达性矩阵来表征。只有当元素为一时,相应的销售人员才能访问关联的城市。图1展示了MTSP的一个实例。在这个图中,不同的城市对不同的销售人员有不同的访问权限。点后面的数字表示可以访问该城市的推销员数量。特别是,点的大小越大,可以访问相关城市的推销员就越多.

由于对城市访问的复杂限制,VCMTSP比传统的MTSP更复杂、更难解决。特别是,访问限制使城市对销售人员的优化配置变得困难,并进一步使后续的路线优化变得困难[4],[5]。

在文献中,许多研究人员应用遗传算法来优化MTSP[6]–[10]。起初,为了有效地解决MTSP,研究人员开发了不同的表示方案来编码GA中的染色体。例如,[8]中采用了两部分染色体编码方法,第一部分表示城市序列,第二部分表示销售人员。[11]中提出了一种多染色体表示机制,每条染色体代表一条销售员的路线。此外,一些研究还调查了解决MTSP的不同GA[6],[9]。此外,还有一些研究侧重于具有复杂约束的扩展MTSP和现实世界应用中的研究,如长度约束的最小-最大MTSP[12]、具有容量和时间窗口的MTSP[13]、无人机的MTSP[14][15]和卡车的MTSP计划

尽管已经制定了各种GA来解决各种MTSP,但据我们所知,还没有研究考虑到对城市的访问限制。基于VCMTSP是MTSP的一般形式这一事实,本文试图通过将GA适用于MTSP来应对NCMTSP。具体来说,本文采用了一种双染色体表示策略,其中一条染色体负责城市的访问顺序,另一条负责将城市分配给销售人员。为了使其高效、高可行性地发展,本文采用了三种流行的交叉算子,即循环交叉(CX)[16]、顺序交叉(OX)[17]和部分映射交叉(PMX)[18],用于GA应对VCSMP.

为了验证自适应遗传算法在应对MTSP方面的有效性,本文首先从广泛使用的TSPLIB[19]基准集中生成了几个具有不同城市和销售人员数量的MTSP实例。然后,在这些实例上进行实验,观察自适应遗传算法在求解VCSMP时的优化性能。

本文的其余部分安排如下。第二节给出了VCMTSP的具体数学定义。然后,第三节介绍了GA框架以及三个适用于VCMTSP的交叉运营商。第四节对几个MTSP计划实例进行了实验,以证明调整后的GA的有效性。最后,第五节对本文进行了总结。

二、问题的定义

具体而言, 一个VCMTSP的数学定义如下。给定n个城市和m个推销员,城市地图可以描述为一个完全无向图G=(V,E),其中V表示城市,E={eij | i,j∈V}表示连接城市的边。为了公式化城市对销售人员的可达性,定义了可达性矩阵A=[aij] n×m,其中Aij=1表示城市i对销售人员j是可访问的,而Aij=0表示销售人员是不可访问的。图2显示了一个具有m个销售人员和n个城市的a VCMTSP i实例的可访问性矩阵示例。在这个矩阵中,行表示城市,而列表示销售人员。

 VCMTSP的目标功能是最大限度地减少所有销售人员的旅行总成本,其定义如下:

其中C(Routei)是第i个路线i的成本。这一目标是通过满足以下限制条件来实现的:

1) 必须访问所有城市:

2)每个城市只有一名销售人员到访:

3)Salesman i只能访问无障碍的城市,禁止访问有限制城市:

MTSP和VCMTSP之间的主要区别在于第三个制约因素。由于这种限制,VCSMP的优化变得更加困难,因为它严重影响了城市对销售人员的分配,并随后影响了销售人员的路线优化。

三、 适用于VCMTSP的适配器

为了有效地解决上述定义的VCSMP问题,本文基于可达性矩阵对遗传算法的交叉算子进行了修改。

A.遗传算法

本文采用双染色体[20]表示来表示VCMTSP的可行解决方案。具体来说,如图3(a)所示,每个可行的解决方案都由两条染色体组成。第一条染色体是城市的排列,而另一条染色体是将推销员分配到与第一条染色体相关的城市。有了这种表示机制,每个推销员的路线可以通过将具有相同推销员的城市按其在第一条染色体中的出现顺序排列来获得。

基于这种表示机制,遗传算法的总体过程在算法1中进行了概述。一开始,NP个体是通过贪婪策略初始化的。具体来说,第一条染色体是通过贪婪策略初始化的,就像传统的TSP遗传算法一样,而第二条染色体是基于可达性矩阵初始化的。对于第一条染色体中的每个城市,如果该城市只能由一名销售人员访问,则该城市被分配给该销售人员。否则,如果这个城市可以被多个销售人员访问,那么它将以相同的概率随机分配给其中一个销售人员。

在初始化种群(第1行)后,GA进入主循环(第4–21行)以迭代进化。首先,使用轮盘选择策略从要交叉的种群中选择个体(第5行)。在选择之后,它继续进行交叉操作。与传统的TSP遗传算法不同,本文首先对种群(第6行)进行随机洗牌,然后对个体进行配对。对于每对个体,如果[0,1]内随机生成的实数低于交叉概率,则对这两个个体执行交叉算子以生成两个后代(第9-11行)来替换它们。交叉后,对于每个个体,如果[0,1]内均匀生成的实数低于突变概率,则对该个体执行突变算子(第15-17行)。

上述主循环继续进行,直到满足终止条件为止。当到达算法的末尾时,获得全局最佳解作为最终输出。

在算法1中,交叉算子在后代生成中发挥着重要作用,因为一方面,它负责基因交换以生成有希望的后代;另一方面,在传统的TSP遗传算法中,交叉概率通常很高。因此,有效的交叉算子对遗传算法在解决风险管理策略问题中的性能有很大影响。在下文中,本文将三种流行的交叉算子应用于GA,以有效地解决VCMTSP问题。

B.部分映射的交叉  Partially Mapped Crossover

部分映射交叉(PMX)算子最初是由Goldberg和Lingle提出的,用于求解经典TSP[18]。对于要杂交的两个亲本,PMX首先随机选择染色体上的两个不同点,然后在两个亲本染色体中的两个选定等位基因之间交换基因片段,以产生两个后代。

在分段交换之后,生成的两个后代可能不可行,因为存在重复的城市和缺失的城市。为了修复这两个子代,基于交换的两个线段定义了一个城市映射序列。然后,在定义的城市映射的基础上,相应地替换交换段之外的重复城市。

为了直观地理解PMX算子的工作原理,图4显示了PMX在9个城市的两个父母身上的示例过程。首先,随机选择两个不同的等位基因,即3和6。然后,亲本A和亲本B中两个等位基因之间的两个片段,即3−4−5−6和2−1−3−6,被交换。因此,生成了两个子项,即1−2−2−1−3−6−7−8−9和8−5−3−4−5−6−4−9−7。

在片段交换之后,两个孩子是不可行的,因为在第一个孩子中,城市1和2是重复的,而在第二个孩子中城市4和城市5是重复的。为了解决这个缺点,首先基于两个交换的分段定义了城市交换序列。具体来说,城市映射为3↔ 2, 4↔ 1, 5↔ 3和6↔ 6,如图4中阴影中画的中间部分。基于这些映射,交换段之外的重复城市将被关联的城市取代。例如,在映射4的基础上,将Child 1中交换段之外的城市1替换为城市4↔ 1.根据映射3,首先将Child 1中的城市2替换为城市3↔ 2,但城市3也是重复的。因此,在地图5的基础上,城市3被城市5进一步取代↔ 3.

在正确性之后,生成的两个后代是4−5−2−1−3−6−7−8−9和8−2−3−4−5–6−1−9−7,这两个现在都是可行的。

C.订单交叉 Order Crossover

阶跃交叉(OX)[17]在交换段方面与PMX类似。唯一的区别在于对重复城市的处理。特别是,与PMX类似,OX首先在染色体中随机选择两个不同的等位基因,然后在两个亲本染色体中的两个选定等位基因之间交换基因片段,产生两个后代。

随后,为了处理重复的城市,OX首先将两个后代染色体中的元素保持为空,但交换的片段除外。然后,为了保证子代应该从相关联的父代继承尽可能多的信息,OX通过来自交换段之后的第一个元素的相关联的母代中的剩余访问序列来填充空元素。需要注意的是,剩余的访问序列不包含交换段中出现的城市。

为了直观地理解OX的工作过程,图5显示了一个9个城市的例子。首先,随机选择两个不同的等位基因,即3和6。然后,两个等位基因之间的两个片段被交换,从而产生两个后代,即×-×−2−1−3−6−×-×-×和×-×-3−4−5−6−。应该提到的是,除了交换的片段外,两个后代染色体中的其他元素都设置为空。随后,空元素由相关联的父元素中的访问序列填充。特别是,对于子元素1,元素由父元素A的剩余访问序列填充,从交换段后的第一个元素开始,即7−8−9−4−5。因此,子1变为4−5−2−1−3−6−7−8−9。类似地,子2中的空元素由父B中剩余的访问序列填充,即9−7−8−2−1。因此,子2变为2−1−3−4−5−6−9−7−8。

经过上述顺序填充后,生成的两个后代现在都是可行的。

D.循环交叉 Cycle Crossover

循环交叉(CX)算子最早由Oliver等人提出。[16]。与上述两个交叉不同,CX通过迭代继承来自两个父级的信息(假设它们分别是父级a和父级B),一次创建一个子级。一开始,OX从两个父母中的一个(假设所选的父母是父母a)随机选择一个位置作为孩子的起始位置。然后,存储在与另一个父级(即父级B)相同位置的城市用于填充子级的与该城市相等的位置。随后,存储在父B的位置中的等于最后一轮中填充的城市的城市被用于填充子B的等于该城市的位置。上述过程一直持续到发生冲突,即下一个被填满的城市已经在孩子身上。之后,子代中的其他未填充元素直接从父代A继承。这样,子代可以同时继承两个父代中有价值的访问序列。

为了直观地理解CX的工作原理,图6显示了CX与9个城市的示例过程。首先,子对象被设置为空,然后开始在随机选择的位置从父对象A继承城市。在本例中,所选位置为1。因此,存储在父母A的位置1中的城市1被用来填充孩子的位置1。接下来,使用另一个父对象(父对象B)中相同位置(位置1)的城市(即8)来定位要填充的子对象的下一个位置。也就是说,子项中的位置8继承了父项A中位置8处的城市。之后,位置9以相同的方式填充。该过程一直持续到位置4。通过根据4查找下一个位置,下一个职位就是职位1。然而,位置1已经填充在子对象中,因此父对象A的继承形成了一个循环。在这种情况下,从父元素A的继承将停止,子元素中剩余的未填充位置将与父元素B中的关联元素一起继承。

最后,获得子项1−5−2−4−3−6−7−8−9,这是可行的。

E.销售人员分配更正

需要注意的是,上述引入的交叉算子都是在自适应遗传算法中的第一条染色体上执行的。对于第二条染色体,本文首先直接继承了来自父母的sales赋值。然而,由于交叉后第一条染色体中访问序列的变化,父母中的销售人员分配可能违反可访问性约束。为了缓解这一问题,本文首先根据可访问性确定了错误的销售人员分配。然后,对于每一个错误的任务,本文首先找到可以访问相关城市的销售人员。如果只有一个销售人员可以访问这个城市,那么通过用这个销售人员替换错误的销售人员来纠正错误的分配。如果有多个销售人员可以访问这个城市,那么错误分配的销售人员将被从这些销售人员中随机选择的一个具有相同概率的销售人员取代。

以图4中PMX交叉获得的子项1为例,如图7所示,子项4−5−2−1−3−6−7−8−9直接继承了父项A的sales分配。然而,根据图2中给出的可达性矩阵,发现城市5和城市2的销售人员分配错误。2。从可访问性矩阵中可以发现,城市5只能由销售员1访问,而城市2可以由销售人员1和销售员2访问。因此,对于城市5,错误的销售员2被销售员1取代。对于城市2,错误的销售员3被以相等概率从销售员1和销售员2中随机选择的销售员取代。在本例中,选择了销售员2。

类似地,销售人员分配的上述正确性可以用于OX和CX生成的子代。

然而,对CX算子过程的深入观察表明,销售人员的分配也可以与第一条染色体中的城市交叉一起交叉。也就是说,在相对于第一染色体填充子染色体中的元素期间,相关的销售员分配可以相应地填充在子染色体的第二染色体中。

为了区别于第一推销员分配的正确性,本文将具有上述推销员分配继承的CX定义为“CX+”。以图6中生成的子项为例,图8显示了CX+中业务员分配继承的过程。从该图中可以发现,对于从父代B继承的城市,即4−7−8−9,其销售人员分配直接继承自父代B;对于母公司A的城市,即1−5−2−3−6,其销售人员分配直接继承自母公司A。

与CX相比,CX+可以同时继承父母双方的城市访问序列和销售任务。因此,预计带有CX+的GA可以比带有CX的GA获得更具前景的性能,这将在下一节的实验中得到证明。

四、实验

为了观察具有三个自适应交叉算子的GA在应对VCSMP时的优化性能,本文首先从TSPLIB基准集中选择了四个具有不同城市数量的实例,即att48、kroA100、kroA150和kroA200。接下来,本文为他们分配了四个不同数量的销售人员,即2、4、6和8。随后,对于每个销售人员数量的实例,本文随机构建了一个可访问性矩阵。因此,总共生成了16个VCMTSP,这些实例可以在https://gitee.com/sorel/tspresearch.git以及生成源代码作为参考。

在实验中,基于参数微调的初步实验,种群大小NP为100,突变概率为P m=0.1,交叉概率为P c=0.5。此外,最大代数GEN max设置为10000。

表I显示了GA与三个交叉算子在16个VCSMP实例上的比较结果。本表中的“Best”、“Worst”和“Mean”分别表示通过相关算法在30次独立运行中获得的所有销售人员的最小、最大和平均总旅行成本。三个指标的最佳结果以粗体突出显示。从表I中,我们得到了以下发现:

•就三个指标而言,GA-PMX在16个实例中获得了最佳的总体性能。此外,随着城市数量和销售人员数量的增长,GA-PMX相对于其他两个GA的优势越来越明显。此外,GA-PMX也显示出良好的稳定性,因为“最佳”和“最差”的结果之间几乎没有差异。

•GA-OX在16个实例中显示了三种GA中最差的有效性。特别是,在拥有大量城市或销售人员的情况下,其表现尤其糟糕。

•GA-CX的性能比GA-OX好得多,但性能比GA-PMX稍差。特别是,研究发现,随着城市数量或销售人员数量的增加,GA-CX的优化性能会迅速下降。

关于CX,在上一节中,本文设计了另一种销售人员分配正确性机制,从而产生了一个新版本的CX,名为CX+。为了验证其有效性,本文在16个VCSMP实例上比较了GA和两个CX算子的优化性能。表II显示了GA与两个CX运营商在30次独立运行中获得的16个实例中所有销售人员的平均差旅成本。

 

从该表中可以发现,在16个实例上,GA-CX+实现了比GA-CX更好的性能。特别是,研究发现,随着城市数量或销售人员数量的增加,GA-CX+对GA-CX的改进越来越明显。GACX+相对于GA-CX的优越性主要得益于销售人员分配的正确性,这可以继承父母的有前途的销售人员分配。

为了进一步观察GA与三个运营商之间的差异,本文绘制了三个GA在最佳运行中获得的最佳路线。图9、图10、图11和图12显示了四个实例中所有销售人员的最佳路线。

从这些数字中可以发现,在城市和销售人员数量较少的情况下,三个GA在城市分配方面的差异较小,但销售人员的路线差异较大。随着城市数量或销售人员数量的增加,三种GA之间的城市分配差异越来越大,导致它们在优化性能上存在很大差异。

通过上述实验,发现PMX对于GA来说比OX和CX更有希望应对VCMTSP。

五.结论

本文通过考虑城市对销售人员的可及性,制定了一个新的MTSP,从而得出了VCMTSP。为了解决这一新问题,本文基于双染色体表示机制,修改了三种经典的交叉算子,即部分映射交叉(PMX)、顺序交叉(OX)和循环交叉(CX),对遗传算法进行了改进。特别是,主要的修改在于第二条染色体所代表的推销员分配。

已经对流行的TSPLIB基准集生成的16个VCSMP实例进行了实验。实验结果表明,具有三个自适应交叉算子的遗传算法能够处理VCSMP,并且具有PMX的遗传算法在16个VCSMP实例上实现了最佳的总体性能。基于实验,建议使用PMX与GA合作来应对VCSMP。

猜你喜欢

转载自blog.csdn.net/qq_45874683/article/details/129743485