> 文章列表 > 解决旅行推销员问题的算法

解决旅行推销员问题的算法

解决旅行推销员问题的算法

英文标题:An Algorithm for Solving The Traveling Salesman Problem

摘要:

旅行推销员问题是一个典型的组合优化问题,至今尚未得到很好的解决。本文采用遗传算法来解决这一问题,并将基因片段视为一个城市序列。交叉率和突变率的引入不仅确保了当前良好的基因,还产生了更好的基因。通过这种方式,不断地实现问题解决方案的优化。我们在100个城市对遗传算法进行了实验验证,并针对这个问题,使用蚁群算法和粒子群算法进行了试验比较。实验结果表明,遗传算法在保证较快运算速度的前提下,具有较强的全局优化能力和较好的整体性能。

引言

旅行商问题是一个典型的组合优化问题,已成为现代组合优化领域的一个典型难题。已经证明它属于NP难问题。枚举方法理论上可以用来解决这个问题,但当问题更复杂时,就不可能使用这种方法了。因此,设计一种算法来获得该问题的最优解具有重要意义。几十年来,出现了许多近似优化算法,如最近邻法、贪婪算法、最近插入法、最远插入法等。目前,已经引入了许多更有效的算法来解决这个问题,如启发式搜索法、神经网络算法、二叉树描述法和模拟退火法[1]。此外,一些群体智能算法也被用来解决这个问题,但由于这些算法在求解过程中存在陷入局部最优的问题。M.Li介绍了一种针对波动因素的并行搜索策略和双向动态调整策略[2];Y.Zaifu提出了一种具有动态蚂蚁数的改进蚁群算法[3];Z.嘉善引入了精英策略的思想,提出了一种基于排序和加权的信息素更新策略,通过加强最优路径信息对蚂蚁的反馈作用,提高了算法的收敛速度和求解质量[4];M.rong gui综合考虑了当前节点与起始节点和目标节点之间的距离信息,改进了路径选择启发式函数,提高了路径搜索的方向性和准确性[5];M.xiangpin通过定义方向信息素和引入探索率因子,提高了算法的全局搜索能力,同时加速了算法的收敛[6]。D.pengzhen在使用k-均值聚类算法对旅行商问题进行分类的基础上,提出了一种面向对象的多角色蚁群算法。通过对每个角色蚁群实施不同的搜索策略和信息素更新策略,提高了理解空间的多样性,并取得了良好的实验结果[7],W.chong利用蚁群算法与其他优化算法的良好结合,提出了一系列融合蚁群算法。它增强了算法的全局搜索能力,避免了算法的过早停滞,提高了解的质量[8-11]。旅行推销员问题的遗传算法需要花费大量时间来执行大规模运算。通过改进典型遗传算法的交叉算子,提出了一种改进的遗传算法,该算法动态调整交叉和变异的概率,有效控制进化过程,不仅提高了算法的收敛速度,而且获得了更好的性能[12]。

尽管这些算法各有优缺点,但都存在全局搜索能力差的缺点。遗传算法具有良好的全局搜索能力,是解决各种优化问题的首选有效方法之一。它已经成为各个研究领域的热点。

二、旅行推销员问题与遗传算法

A.旅行推销员问题

旅行推销员问题的定义可以概括为:有一个由n个城市组成的城市集,一个推销员将商品从出发城市销售到剩余城市,最后返回目的地城市。该问题要求,除始发地和目的地城市外,每个城市的销售人员必须至少穿越一次,并且只能访问一次[13],有必要解决满足上述要求且成本最低的分配方案。成本通常被路径的总长度所取代,并找到一条使以下目标函数的值最小化的路径:

 旅行推销员问题可以用图论的语言描述为:在赋值完备图中,可以找到具有最小权重的哈密顿图(Hamiltonian graph)。设G=(V,E)为完备图,Vn={1,2,...,n}是顶点集,E是边集,顶点之间的距离为dij ,即:

 旅行推销员问题在数学模型中表示为:

 其中,|S|是集合S中包含的图G的顶点数。等式(3)表明目标函数是距离的最小和;方程(4)和方程(5)表明,图中的每个顶点只能有一条边进出;等式(6)表明没有生成子循环.

B.遗传算法原理

遗传算法是一种模仿自然界生物进化机制开发的随机全局搜索和优化方法。它借鉴了达尔文的进化论和孟德尔的遗传学理论。其本质是一种高效、并行、全局的搜索方法。在遗传算法中,随机生成一组初始解,称为“种群”。在最初的搜索过程中,种群中的每个个体都是问题的解决方案,并且在随后的迭代中不断发展。它可以在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以获得最优解[14]。遗传算法运算利用适者生存的原理,在潜在解群体中连续生成近似最优解[15]。在每一代The Genetic Algorithm中,适应度都用来表示个体的优势和劣势,并根据个体在问题域中的适应度和借鉴自然遗传学的重建方法来选择个体,以生成新的近似解。这个过程导致种群中个体的进化,获得的新个体比原来的个体更适应环境,实现了种群中的优胜劣汰,就像自然界中的转变一样,逐渐朝着更好的发展方向发展.

在算法中,个体选择的目的是通过复制将适应度值较高的优秀个体遗传给下一代,使优秀个体不断进化。通过选择轮盘,具有适应度fit(i)的个人被选中的概率为:

 通过交叉和突变操作,保留父代个体的优秀基因,形成一个全新的个体。同时,防止了算法陷入局部最优解,并保持了种群的多样性。由于自然界中的变异是为了适应环境,因此选择了自适应交叉和变异,并自适应调整交叉率和变异率,从而避免了遗传算法的过早收敛。概率函数为:

fmax是当前世代的最大适应值,f''是当前世代平均适应值,fi是当前世代中第i个个体的适应值,f'是当前代中两个交叉个体的较大适应值,N是染色体长度,K1和K2是调整系数.

C.算法步骤

•初始化。随机生成N个个体作为初始种群P,设置进化代数计数器t=0,设置最大进化代数t、交叉概率和突变概率。

•个体评估。计算个体P的适合度。

•选择适应度函数。根据适应度函数,将选择算子应用于种群,并基于个体适应度,选择最优个体并将其直接遗传给下一代,或者通过配对和交叉产生新的个体,然后将其遗传到下一代

交叉操作。将当前种群中的每个个体随机配对为一对,然后对于每对个体的染色体结构,在交叉概率的控制下,对种群中的个体进行成对交叉。

•突变操作。将每个等位基因放在当前交配池中的所有个体串上,在突变概率的控制下,改变一个或一些基因的值,使组中的个体发生突变,然后随机调整个体的基因。

•经过选择、交叉和突变操作,获得下一代种群。重复上述操作,直到遗传代数为T,并将进化过程中获得的具有最优适应度的个体用作最优解输出,并终止计算。

D、 算法的应用

遗传算法已被广泛用于求解各种优化问题的最优解。将遗传算法应用于实际问题时,关键是实现优胜劣汰,保留好的基因,消除不适合环境的基因。在算法中,本文使用轮盘赌方法,根据每个个体的适合度选择适合度高的个体,并广泛传播好的基因,同时,不适合的个体产生少量后代或直接被淘汰,从而实现这一目标。此外,为了防止反向进化的发生,采用了将最优个体直接进入下一代的方法,并且不参与交叉和突变操作,从而防止了这些操作破坏当前优秀基因而导致的反向进化,确保了算法一直处于正向进化过程中。当使用遗传算法来解决旅行推销员问题时,如下:

• N个城市的行程问题可以描述为一个城市序列,一组城市序列被识别为基因,这些城市序列用于表达人口中的每个个体。

•将基因中城市之间总距离的倒数作为适合度。

 其中:d(i,i+1)是基因城市序列中第i个城市和第i+1个城市之间的距离。

三、实验

本文将遗传算法和另外两种群智能算法用于求解旅行商问题,通过设置每个城市之间的距离,考虑100个城市,记录三种算法的求解过程曲线和求解时间。此外,为了避免实验的机会,进行了10次重复实验进行比较,并记录了算法的最优解。

A.实验1

遗传算法的进化过程如图所示。1。图中横坐标为迭代次数,纵坐标为城市序列的总距离,红色曲线为每一代中最优个体的距离,蓝色曲线为每代的平均距离。从图1中可以看出,这两条线都呈下降趋势,这意味着它们都在演变。

图1:遗传算法的进化过程图

从实验曲线可以看出,城市序列的平均总距离一直在减小。这是因为每次保留的最佳个体将直接传递给下一代。由于优秀基因的出现,也就是某个城市序列的出现,这种优秀的特性迅速在整个人群中传播。就像自然界中适者生存一样,是基因适应了环境才能生存。

在算法中,引入交叉率和突变率的意义不仅在于确保当前的好基因,还在于尝试生成更好的基因。该基因片段是旅行推销员问题中的一个小城市序列。当某个序列的距离和相对较小时,意味着这个序列对这些城市来说是一个相对较好的遍历顺序。遗传算法将这些优秀的片段结合起来,实现了对旅行推销员问题解的连续优化。

B.实验2

蚁群算法的实验结果如图所示。图2中的横坐标是释放的蚂蚁数量,纵坐标是信息素浓度最大的路径距离。

 图2:蚁群算法的求解过程

蚁群算法具有正反馈的特点。正反馈的过程会迅速扩大初始差分,并将整个算法引导到最优解的方向,这使得算法具有良好的收敛速度,但很容易使算法陷入局部最优,很难跳出局部最优。

从图中可以看出,2算法在超过一半的迭代次数后已经收敛。虽然该算法收敛速度快,但不容易判断算法是否陷入局部最优,全局优化能力差,导致最优解不正确。

实验3粒子群算法的实验结果如图所示。3。图中横坐标为迭代次数,纵坐标为路径距离,红色曲线为本次迭代中城市序列的最优解,蓝色曲线为每次迭代的平均距离。

图3。粒子群算法的求解过程

从实验曲线可以看出,粒子群算法与遗传算法不同。初始最优解是波动的,并且不会一直减小。这是因为所有处于初始阶段的鸟类都是随机分布的。每个人离食物的距离都差不多,即使是离食物最近的鸟提供的信息也没有太大的参考价值,所以一开始,处于最佳位置的鸟会波动,到了后期,当食物的位置更加确定时,它的波动性就会消失。这导致粒子群算法寻找最优解的速度较慢,但算法的总体趋势是下降的,它正在向最优解发展,并具有良好的全局优化性能。

D.实验数据

为了避免实验的机会,每个算法被重复10次作为比较,并记录其最优解和算法运行时间。实验数据如表1所示

算法    迭代次数    最佳解决方案    最坏解决方案    操作时间

 

 从实验结果可以看出,三种群体智能算法被用于解决旅行推销员问题。从算法运行速度来看,粒子群优化算法运行速度相对较慢,而遗传算法和蚁群算法运行速度较快;就遗传算法的质量而言,遗传算法的最优解和最差解的质量相对较好。总的来说,与蚁群算法和粒子群算法相比,遗传算法被用于解决旅行推销员问题。它不仅可行,而且确保了更好的全局优化能力,并且解决方案性能相对最好。

四、 摘要

在本文中,对于大规模的旅行商问题,遗传算法可以快速获得旅行商问题的最优解。在保证求解速度的前提下,全局优化能力更好,算法整体性能较高,在解决此类组合优化问题时具有很大优势。然而,遗传算法在解决旅行推销员问题方面仍然存在一些不足。在对此类问题进行优化时,未来的研究可以在进化的早期阶段使用较小的种群规模来加快进化,当适应度达到一定阈值时,增加种群规模和突变率,以避免出现局部最优解。使用这种动态调整方法来控制每一代的计算效率与整体计算效率之间的平衡