基于聚类的遗传算法解决旅行商问题摘要:遗传算法(GA)是解决旅行商问题(TSPs)的有效方法,然而,传统的遗传算法(CGA)对大规模旅行商问题的求解效果较差。
为了克服这个问题,本文提出了两种基于聚类的改进的遗传算法,以寻找TSPs的最佳结果。
它的主要过程是聚类、组内演进和组间连接操作。
聚类包括两种方法来将大规模TSP划分为若干子问题,一种方法是k-均值(k-means)聚类算法,另一种是近邻传播(AP)聚类算法。
每个子问题对应于一个组。
然后我们使用GA找出每个子问题的最短路径长度。
最后,我们设计一个有效的连接方法将所有这些组合成为一个,以得到问题的结果。
我们尝试在基准实例上运行一组实验,用来测试基于k-means 聚类(KGA)和基于AP聚类(APGA)遗传算法的性能。
实验结果表明了它们有效性和高效的性能。
将结果与其他聚类遗传算法进行比较,表明KGA和APGA具有更强的竞争力和有效性。
关键词:大规模旅行商问题;遗传算法;聚类;k-means聚类;AP聚类一、引言旅行商问题(TSP )是在所有城市搜索最短哈密尔顿路线的问题。
TSP 是众所周知的NP-hard 问题。
它有许多现实世界的应用[1,2],如规划调度、物流配送、计算机网络和VLSI 路由。
近年来研究人员已经研究了不同类型的TSP [3-6]。
TSP 问题可以用如下方式描述:有N 座城市,给出城市之间的距离矩阵为()d ij N ND ⨯=。
TSP 问题的要求是从所有路径中找到最短路径。
如果()i π被定义为在步骤 ( 1,,)i i N =中访问的城市,则路线可以被看作城市从1到N 的循环排列。
路线的表达式如下:1()(1)()(1)1minimize N i i N i f d d πππππ-+==+∑ (1) 如果对于1i j N ≤≤、,距离满足d dijji = ,则这种情况是对称TSP 。
TSP 可以模型化为加权图。
每个顶点代表一个城市,每个边缘连接两个城市。
边的权重表示两个相连的城市之间的距离。
现在一个TSP 问题实际上是一个哈密尔顿回路,最优的TSP 路径是最短的哈密顿回路。
用于求解TSP 的算法可以概括为两类,精确算法和启发式算法。
精确的算法确保最终解决方案是最优的。
分支切割算法是这一类中的典型示例[7,8]。
这些算法的关键问题是它们相当复杂,并且在计算机性能方面非常苛刻[9]。
自引入模拟退火[10]和禁忌搜索[11]以来,启发式算法有可能突破局限,从而找到路径的局部最优解。
在过去的二十年中,提出了大量的自然启发或群体智能方法,例如蚁群算法[12,13],粒子群算法[14]和遗传算法[15,16]来解决TSP 问题 。
遗传算法(GA )是一种通过模拟自然演化过程来搜索最优解解决大规模搜索问题(例如TSP 问题)的有效方法,GA 的目的是通过几个遗传操作,如选择、交叉和突变获得大规模搜索问题的近似解。
与其他精确搜索算法相比,其优点主要是通过使用群体的信息而不是仅仅一个个体来实现搜索[5]。
除了上述内容之外,GA 通过适应度函数的数值来评估个体的质量,减少当使用启发式算法时被浸入在局部最优解中的风险。
虽然GA 是解决TSPs 的有效方法,但是,随着旅行城市的数量增长,经典遗传算法效果较差。
为了使TSP 问题变得更容易并且可以有效地解决大规模TSP ,本文提出了两种改进的基于聚类的遗传算法,分别称为KGA 和APGA 。
首先,KGA 和APGA 使用聚类方法将大规模TSP 划分为若干子问题,每个子问题对应于一个组。
在KGA 和APGA 中分别采用k-means 和AP 聚类方法。
然后,我们使用GA 找到每个聚类的最短哈密顿回路。
所有这些集群可以并行处理。
最后,我们设计有效的连接方法将这几个组合并为一个整体,以实现缩短整个路线的目的。
本文的其余内容以此方式描述:第二节提出了两种聚类方法,包括k-means 和近邻传播(AP )。
第三节描述了基于k-means 聚类(KGA )的遗传算法和基于AP 聚类(APGA )的遗传算法。
然后在第四部分,提供实验和比较结果。
最后,我们在第五节结束本文。
二、聚类方法 A 、K-means 聚类K-means 是一种普遍的无监督智能算法,由于其简单性[17],广泛应用于各种领域,如数据挖掘。
这个想法是将一组样本分成几个组(簇),其中每个对象具有类似于另一个对象的特征。
我们选择群集内最远的距离并标记它。
该算法需要随机地产生对聚类(1,,)C i K i = 的K 个初始中心点的选择。
我们称之为中心。
首先,计算从每个对象到其他聚类中心的距离,并将所有对象划分为距离最小的组。
其次,根据上一步,重新计算每个集群中心。
我们重复这两个步骤,直到中心不再改变,以实现收敛稳定。
我们使用Euclidean 距离来计算顶点和集群之间的距离。
聚类的目的是优化以下函数:211,minimize ||||iKNj i i j j Gf x C ==∈=-∑∑ (2) 其中K 是聚类的数量,N 是顶点(或城市)的数量,j x 是顶点j 的坐标,C i 是聚类i 的坐标,i G 是属于聚类i 的顶点组。
该算法可以通过在空间中移动聚类中心来获得最短的平方距离。
聚类的新中心根据分配给它的所有顶点不断更新。
计算聚类中心的公式如下:1,1||iNi j j j G i C x G =∈=∑ (3)其中||i G 是包含在簇中的顶点的数量。
算法1给出了K-means 聚类算法的伪代码。
算法1:K-Means 的伪代码B 、AP 聚类基于相似性度量的聚类方法已经广泛用于工程系统和科学数据分析中。
聚类的一种常见方法是将数据分成几个部分,并找到一组中心,以使数据点及其最接近的中心具有最小的平方误差和。
我们从所有实际存在数据点中选择中心,并将它们命名为“样本”。
K-Means 聚类方法最初使用一组随机选择的样本,然后迭代地优化那些样本,目的是降低平方误差的和。
K-Means 聚类方法最初很容易选择样本,所以它总是需要用不同的初始化来优化许多次,并努力获得更好的解决方案。
因此,它仅在组的数量较少并且至少一个随机初始解接近优秀解的情况下表现很好。
近邻传播(AP )与K-Means 聚类非常不同[18],它不需要在运行算法之前人工设置聚类的数量。
它将所有数据点视为同一时间的潜在样本,并将其视为每个集群的代表。
在AP 中的数据点之间交换的消息有两种类型。
它交替地使用两种消息传递步骤来更新两个矩阵:“责任”矩阵和“可用性”矩阵,并且它们中的每一个考虑不同种类的竞争。
可以在任何时间组合消息以从点中选择样本。
“责任”矩阵(),r i k 描述了点i 适合于点k 的程度,即从i 到k 的消息。
“可用性”(),a i k 描述点i 选择点k 作为其聚类中心的程度,将消息从i 发送到k 。
点k 应当是考虑来自其他相邻点的支持的示例。
(),r i k 和(),a i k 使用以下公式计算:()()()()()''',,max ,,k kr i k s i k a i k s i k ≠=-+ (4)()()()(){}()()''','min 0,,max 0,,,,max 0,,,i i k i kr k k r i k i k a i k r i k i k∉≠⎧⎧⎫⎪⎪⎪+≠⎨⎬⎪⎪⎪⎩⎭=⎨⎪=⎪⎩∑∑ (5)其中,()2,i ks i k x x =--AP 的详细描述可参考[19,20]。
三、基于聚类的遗传算法本文提出了两种改进的聚类遗传算法,即基于K-means 聚类(KGA )的遗传算法和基于AP 聚类(APGA )的遗传算法,以有效地解决大规模TSP 问题。
首先,KGA 和APGA 使用聚类方法将大规模TSP 转换成几个小的子问题,每个子问题对应于一个组。
在KGA 和APGA 中分别采用K-means 聚类和AP 聚类方法。
然后,我们使用遗传算法找到每个聚类的最短哈密顿回路。
所有这些组可以并行处理。
最后,以缩短整个旅行路线为目标,我们设计了有效的连接方法,将所有组合并为一个整体。
A.组内演化组内演化操作的目的是为每个组中的给定结点找到最短的哈密顿回路。
遗传算法是一个基于进化论的有影响力的技术,如TSP 的问题[21]。
在每个组中执行遗传算法,旨在通过选择、交叉和突变这几个遗传操作获得近似解。
与其他精确的传统搜索算法相比,其优点主要是使用循环群体的信息而不是仅仅一个循环来执行搜索。
在组内使用有序编码方案。
使用此方案,每个结点都被编号为从1到该群体结点总数量中的唯一整数。
染色体是以整数排列,表示交通路径。
我们将组中结点的编号排列在基因片段上,染色体可以被认为是所有基因片段的排列,并且每个基因片段代表组。
每个聚类中使用的遗传算法的过程如下:所有这些集群可以并行处理。
这一步的结果是将结点123,,,...,k T T T T 聚类为组123,,,...,k G G G G 。
B.组间连接有效地解决TSP 问题的目的是找到最短的旅行路线。
在上一步中,我们获得的是每个组中给定结点的最短哈密顿回路,然后在这一步我们需要考虑如何连接所有的组,并实现所有结点的连接。
连接两个组就是确定哪些路径将从每个组中的最短哈密顿回路中删除,以及哪些路径将被连接以将两个相邻组组合成一个。
假设i ,j 是i G 与j G 两组最接近的结点,对于i G ,1i -与1i +是与i 相邻的两个结点,同样对于j G ,1j -和1j +是与j 相邻的两个结点。
给出i G 和j G ,为了连接两个组为一个,我们需要选择两个结点'i i *∈、'j j *∈来删除及连接边缘。
如何选择它们,我们参考公式(1):{}'''''''''',,,arg min ij i j ii jj i j ij i j ii jj d d d d i j d d d d **+--⎧⎫⎪⎪=⎨⎬+--⎪⎪⎩⎭(1)其中,''{1,1}{1,1}i i i j j j ∈-+∈-+、。
重复此过程,直到所有组被合并为一个整体,实现所有结点的连接。
以上方案如图1所示:图1.组合集群的过程不同的组合中的组合序列将导致不同的交通布线路径,寻找最短的路径是我们的目的。
因此,当群体数量较大时,我们考虑设计一个修改的遗传算法进行整体优化,以缩短整个交通路线。
有序编码方案也用于整体优化。
然而,不同于代表交通路径的染色体,在这个过程中,我们在组之间梳理编码序列。
换句话说,我们需要优化聚类的序列并找到最好的组合序列。