基于遗传算法的TSP问题研究
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于遗传算法的TSP问题研究
摘要:旅行商问题是一个经典的优化组合问题,本文采用遗传算法来求解旅行商问题,深入讨论了遗传算法解决TSP问题的求解过程,并通过MATLAB对算法进行了实现,最后对实验结果进行分析。
关键字:旅行商问题;遗传算法
Abstract:The traveling salesman problem is a classic optimal combination problem. In this paper, we use genetic algorithm to solve the TSP problem.We discusse the solving process, and the algorithm is realized by MATLAB. Finally, the experimental results are analyzed.
Key words: Traveling Salesman Problem; Genetic Algorithm
1 引言
旅行商问题(Traveling Salesman Problem,TSP)的原始问题为:一个商人欲到n个城市推销商品,每两个城市i和j之间的距离为
ij
d,如何选择一条道路使得商人每个城市正好走一遍后回到起点且所走路线最短。这是一个经典的优化组合问题,它可以扩展到很多问题,如电路布线、输油管路铺设等,但是,由于TSP问题的可行解数目与城市数目N是成指数型增长的,是一个NP-hard问题,即不存在多项式时间算法。因而一般只能近似求解,遗传算法(Genetic Algorithm,GA)是求解该问题的较有效的方法之一,当然还有如粒子群算法,蚁群算法,神经网络算法等优化算法也可以进行求解。遗传算法是美国学者Holland根据自然界“物竞天择,适者生存”现象而提出的一种随机搜索算法,本文采用MATLAB来实现遗传算法解决TSP问题。
2 旅行商问题
旅行商问题可以具体描述为:已知n个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。图论模型如图1所示,构造一个图G=(V,e),顶点V 表示城市,边e表示连接两城市的路,边上的权()e
W表示距离(或时间或费用)。于是旅行推销员问题就成为在加权图中寻找一条经过每个顶点正好一次的最短圈的问题,即求最佳Hamilton 圈的问题。
A
B
C
D
E
F
45
26
3839
68
59
92
62
65
73
83
38
93
87
94
图1 TSP问题的图论模型
TSP问题是NP-hard问题,。也就是说,对于大型网络(赋权图),目前还没有一个精确求解TS P问题的有效算法,因此只能找能求出相当好(不一定最优)的解的算法。TSP问题的数
学规划模型:设ij d 是i 与j 之间的距离,
10或=ij x ,其中1表示连线,0表示不
连线,那么整个TSP 问题的数学模型表示如下:
v
j i v k k x V i x t s x d Z s
j i ji
j i ij j
i ij
ij ∈⎪⎩⎪⎨⎧⊂-≤∈==∑∑∑∈≠≠,,,1||,1..*min , 式中,k 为v 的全部非空子集;|k|为集合k 中包含图G 的全部顶点个数。
3 遗传算法
遗传算法(genetic algorithm ,GA)起源于对生物系统所进行的计算机模拟研究,是一种借鉴生物界自然选择(Nature Selection)和自然遗传机制的随机搜索算法(Random Searching Algorithms)。其基本流程图如图2所示。该算法适宜于多峰值空间中的优化求解,能从任一初始化的群体出发,通过随机选择、交叉和变异等遗传操作,使群体逐渐进化到搜索空间越来越好的区域。遗传算法的应用已从最初的组合优化领域扩展到生产调度、自动控制、机器人学、图像处理、机器学习、数据挖掘等多个领域。遗传算法应用的关键在于如何结合应用模型构造出染色体以及交叉、变异操作。 3.1 遗传算法的运行过程
遗传算法的运算流程如图2所示。
由图2可以看出,使用上述三种遗传算子的遗传算法的主要运算过程如下:
(1)编码:解空间中的解数据x ,作为遗传算法的表现型形式。从表现型到基因型的映射成为编码。遗传算法在进行搜索之前先将解空间数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合就构成了不同的点。
(2)初始群体的生成:随机产生N 个初始串结构数据,每个串结构数据成为一个个体,N 个个体构成了一个群体。遗传算法以这N 个串结构作为初始点开始迭代。设置进化代数器
0←t ;设置最大进化代数T ;随机生成M 个个体作为初始群体()0P 。
(3)适应度值评价检测:适应度函数表明个体或解得优劣性。对于不同的问题,适应度函数的定义方法不
同。根据具体问题,计算群体()t P 中个体的适应度。
(4)进行遗传操作:群体()t P 通过选择、交叉、变异运算后得到下一代群体()1+t P 。
(5)终止条件判断:若T t ≤,则1+←t t ,转到步骤(2)
;若T t >,则以进化过程中所得到的最大适应度的个体作为最有解输出,终止运算。 3.2遗传算法的基本操作
遗传算法有三个基本操作:选择(Selection )、交叉(Crossover )和变异(Mutation )。
从群体中选择优胜的个体,淘汰劣质的个体的操作叫做选择。选择算子有时又称为再生算子(reproduction operator )选择操作是建立在群体中个体的适应度评估基础上的,目前常用的选择算子有以下集中:适应度比例方法、随机遍历抽样法、局部选择法。其中,轮盘赌选择法(roulette wheel selection )是最简单也是最常用的选择方法。在该方法中,各个个体的选择概率和其适应值成比例。设群体大小为n ,其中个体i 的适应值为i f ,则i 被选择的概率为
∑==n
j i i i f f p 1/
显然,概率反映了个体i 的适应值在整个群体的个体适应值总和中所占的比例。个体适应度越大,其被选择的概率就越高,反之亦然。
交叉是把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力
得以飞跃提高。交叉算子根据交叉概率将群体中的两个个体随机的交换某些基因,能够产生新的基因组合,期望将有益基因组合在一起。根据编码表示的方法不同,可以有以下算法:
(1)实值重组(real valued recombination ):离散重组(discrete recombination )、中间重组(intermediate recombination )、线性重组(linear recombination )、扩展线性重组(extended linear recombination )。
(2)二进制交叉(binary valued crossover ):单点交叉(single-point crossover )、多点交叉(multiple-point crossover )、均匀交叉(uniform crossover )、洗牌交叉(shuffle crossover )。
最常用的交叉算子为单点交叉。具体操作是:在个体串中随机设定一个交叉点,实现交叉时,该点前或后的两个个体的部分结构进行互换,并产生两个新个体。下面给出了单点交叉的一个例子:
新个体个体新个体个体00111110000011:B 10010001111001:A →↑→↑
变异算子的基本内容是对群体中的个体串的某些基因座上的基因值做变动。依据个体编码表示方法的不同,可以有以下的算法:实值变异、二进制变异。一般来说,变异算子操作的基本步骤如下:
(1)对群体中所有个体以实事先设定的变异概率判断是否进行变异。