改进的遗传算法求解TSP问题_3旅行商问题_24_34

改进的遗传算法求解TSP问题_3旅行商问题_24_34
改进的遗传算法求解TSP问题_3旅行商问题_24_34

3 旅行商问题

3.1 旅行商问题概述

3.1.1 旅行商问题的定义和数学模型

① 定义

旅行商问题(Traveling Salesman Problem ,简记TSP)是组合数学中一个古老而又困难的问题,它易于描述但至今尚未彻底解决,现己归入所谓的NP 完全问题类,经典提法为:

有一货物推销员要去若干个城市推销货物,从城市1出发,经其余各城市一次,然后回到城市1,问选择怎样的行走路线,才能使总行程最短(各城市间距离为己知)。

该问题在图论的意义下就是所谓的最小Hamilton 圈问题,由于在许多领域中都有着广泛的应用,因而寻找其实际而有效的算法就显得颇为重要了。遗憾的是,计算复杂性理论给予我们的结论却是,这种可能性尚属未知。

若设城市数目为n 时,那么组合路径数则为(n-1)!。很显然,当城市数目不多时要找到最短距离的路线并不难,但随着城市数目的不断增大,组合路线数将呈指数级数规律急剧增长,以至达到无法计算的地步,这就是所谓的“组合爆炸问题”。假设现在城市的数目增为20个,组合路径数则为(20-1)! ,如此庞大的组合数目,若计算机以每秒检索1000万条路线的速度计算,也需要花上386年的时间。

尽管现在计算机的计算速度大大提高,而且已有一些指数级的算法可精确地求解旅行商问题,但随着它们在大规模问题上的组合爆炸,人们退而求其次,转向寻找近似算法或启发式算法,经过几十年的努力,取得了一定的进展。

② 数学模型

设(,)G V E =为赋权图,{1,2,}V n ="为顶点集,E 为边集,各顶点间距离为ij c ,已知(0,,,)ij ij c c i j V >=+∞∈,并设

则旅行商问题的数学模型可写成如下的线性规划形式:

ij ij i j

MinZ c x ≠=∑

1,(,)0,ij i j x ?=??边在最优路线上其它

,1,1,

.1,{0,1},ij j i ij i j

ij i j S ij x i V x j V s t x K K V x i j V ≠≠∈?=∈??=∈???≤????∈∈?∑∑∑

这里,K 为V 的所有非空子集,K 为集合K 中所含图G 的顶点个数。前两个约束意味着对每个顶点而言,仅有一条边进出,后一约束则保证了没有任何子回路解的产生。于是,满足上述约束的解构成了一条Hamilton 回路。除此之外,模型还有其它一些等价的书写形式。

3.1.2 旅行商问题的分类

旅行商问题按不同的分类方法可以分成为不同的种类。

① 据距离矩阵划分

当,(,)ij ji c c i j V =∈时,问题被称为对称型旅行商问题。反之,称为非对称型旅行商问题。非对称型旅行商问题可以化为对称型旅行商问题,用对称型的方法求解。

当对所有,,[1,]i j k n ∈,有不等式ij jk ik c c c +≥成立时,问题被称为是满足三角形不等式的,简写成三角型旅行商问题。三角形不等式在很多情况下是自动满足的,如:只要距离矩阵是由一度量矩阵导出的即可。另一类自动满足的是闭包矩阵,ij c ????是的[]ij c 闭包,是指在{1,2,}n "的完全图中,ij c 为边(,)i j 距离,则ij c 是i j →之最短路长。一般而言,现实生活中的大多数问题都满足三角形不等式,它是旅行商问题中的一种主要类型。个别不满足的,也可转换成其闭包问题,它们的旅行商问题解是等价的。

当ij c 是欧氏距离时,则称为欧氏距离的旅行商问题。显然此类问题既是对称型旅行商问题也是三角型旅行商问题。

② 根据顶点的分布形态划分

有均匀分布的(Uniform Points) 、聚集分布(Clustered Points)、随机距离矩阵(Random Matrices),此外还有旅行商问题库(TSPLI B)中的实际范例。前三种都是人工模拟产生的旅行商问题,主要用于测试算法对不同分布形态的旅行商问题的表现,并计算算法的时间函数。后一种实际范例才是人们关注的重点。

③ 根据距离矩阵在数据文件中的存储方式划分和来源划分

MATRIX 型:距离矩阵直接给出。EUC_ 2D 或CEIL_ 2D :给出顶点坐标,距离矩阵需计算才能得到。CEO :给出顶点坐标,距离矩阵需计算才能得到,坐标来源于地理坐标。

3.1.3 旅行商问题的扩展

旅行商问题的研究经过几十年发展,取得了一系列的成果。除了经典的旅行商问题外,目前已引申出许多扩展形式,常见的有:

① 最小哈密尔顿链的问题

这是起点和终点不同的旅行商问题,前面提到的许多算法都可略作修改,用于求解该类问题。

② 瓶颈问题

目标函数为{,,}ij ij Max c x ""且,,i j i j G ≠∈的旅行商问题。

③ 非对称旅行商问题

距离矩阵非对称的旅行商问题。

④ 多人旅行商问题

由多人完成环游的旅行商问题。该问题可转换成等价的单人问题,只需将点1改为m 个虚拟点(1',2',')m "其间用边连接,距离为充分大,ij M c ∑∑;各虚拟点'i 到j 的距离'1i j j c c =,对新问题求解其旅行商问题后,从虚拟点'i 进入原网络再回到虚拟点'j 的那段路线即是m 人中某一个的环游路线。

⑤ 多目标旅行商问题

若各边弧上有m 个权值,则使得哈密尔顿圈上相应的m 个目标值都尽可能小的解就称为多目标旅行商问题的(Pareto)有效解。如实际问题中常常需要考虑:路程最短、时间最少、费用最省、风险最小等等多方面的因素。由于多目标意义下的所谓最优解是一种“折衷解”、“非劣解”,因此,多目标旅行商问题解的含义为:假定有一哈密尔顿圈的解H ,若不存在任何其它回路解Q ,使得()(),1,2,k k Z Q Z H k m ≤=",其中至少有一个不等式严格成立(k Z 为相应的目标函数值),则H 为Pareto 解。

⑥ 依次排序问题

这类问题是非对称旅行商问题,在给定的一系列顶点和距离矩阵下,寻找最短从顶点1到顶点n 哈密尔顿链,同时满足限制:某些顶点要在另一些顶点之前被连接。

⑦ 载货量受限制的选径问题

给定n -1个顶点和一个仓库,已知顶点和顶点、顶点和仓库的距离。卡车的载货量受限制,卡车每次在部分顶点和仓库之间往返,寻求一条经过所有顶点的最短路线。

一般来说,这些扩展问题都有特殊的不同于对称型旅行商问题的求解方法,但也可将它们转化成对称型旅行商问题求解。

3.1.4 研究旅行商问题的意义

旅行商问题是一个NP完全问题,目前任何NP完全问题都不能用任何已知的多项式算法求解;若任何一个NP完全问题有多项式算法,则一切NP完全问题都有多项式算法。

由此,不少人猜测任何NP完全问题都没有多项式算法,但至今无人证明。事实上,人们普遍认为,不发展全新的数学技术就证明不了这个猜想。这样一种认识的实际意义就在于许多人相信,难计算是这样一类问题的固有性质,因此它们不可能用有效算法求解,而所有能精确求解NP完全问题的算法,在最坏情况下都需要指数级的时间。

另外,旅行商问题是一个理想化的问题,大多数对于此问题的研究都不是为了直接的实际应用,但这些研究可以经转化后用于许多现实的组合优化问题。很自然地可以想到,旅行商问题的成果可以应用于运输和物流问题。旅行商问题最早的应用是在上个世纪的四十年代,应用于校车路线的优化。现在,旅行商问题在越来越多的领域得到应用。

①电路板钻孔进度的安排。在这个应用当中,电路板上的孔代表旅行商问

题中的城市,钻头从一个钻孔移动到另一个钻孔。寻找最短路径变成了

寻找最省时的钻头移动时间。尽管目前钻机的工艺技术发展很块,但钻

头的移动时间仍然是一个令人头疼的问题。

②基因测序。Concorde是一种求解旅行商问题的程序。美国国家卫生机构

的研究人员利用这一程序来进行基因测序。在这一应用中,局部的基区

图谱作为城市,城市与城市的距离代表某张图谱与其它图谱相连的可能

性。研究人员试图寻找一种可能性最高的连接方式把这些局部的图谱合

成为整张基因图谱。

③半导体的线路设计。一家半导体生产厂家应用Concorde程序来优化半导

体的线路设计,这样可以节省刻制半导体的时间,也能减少半导体电路

消耗的能量。

④ 光缆的线路设计。贝尔电话公司利用Concorde程序来设计光缆的铺设线

路,同样的方法也应用于电话和电力线路的铺设当中。

⑤ 在机器人控制等其它方面,旅行商问题也有许多应用。

3.2 旅行商问题的求解

3.2.1 旅行商问题的精确解法

①可解特殊旅行商问题的精确算法

对于旅行商问题的一些特殊情况,业已研究出一系列非常完美的结果,如:

机器排序问题等。由于可解情形的结果都是成熟的定理,因此严格来说已不属算法研究的范畴。

② 线性规划算法

这是求解旅行商问题的最早的一种算法,主要是采用整数规划中的割平面法,即先求解模型中由前二个约束构成的松驰线性规划问题,然后通过增加不等式约束产生割平面,逐渐收敛到最优解。

Dantzig 等人早在1954年就求解过n= 42的旅行商问题最优解。70年代中期对于TS 多面体理论的研究,产生了一些比较有效的不等式约束,如:子回路消去不等式、梳子不等式等等。

目前,常用的方法是先用近似算法来求得近似解,再将此近似解作为下限,用线性规划方法来精确求解或证明此下限为最优解。

③ 动态规划算法

由于动态规划算法的时间复杂度为2(2)n O n ,空间复杂度为(2)n O n ,故除了

很小规模的问题外,几乎不予采用。

④ 分支定界算法

分支定界法是一种应用范围很广的搜索算法,它通过有效的约束界限来控制搜索进程,使之能向着状态空间树上有最优解的分支推进,以便尽快找出一个最优解。该方法的关键在于约束界限的选取,不同的约束界限,可形成不同的分支定界法。

1)以分派问题为界

通过求解相应的分派问题,得到旅行商问题的一个下界,以此进行分支定界搜索。这是一种使用较多的分支定界算法。

2)以匹配问题为界

通过求解相应的匹配问题,得到旅行商问题的一个下界,以此进行分支定界 搜索。该方法适用于对称型旅行商问题。

3)以最小权1生成树问题为界

通过求解相应的最小权1生成树问题,得到旅行商问题的一个下界,以此进 行分支定界搜索。在此基础上,Held 和Karp(1970) 曾将问题加以转换,得到更紧的下界,有时甚至能将搜索树整个显示出来。

虽说分支定界法对于较大规模的问题并不十分有效,可有时却被用来求解近似解。而且,将分支定界法与一些启发式算法相结合,常常能获得一些意外的成 功。

3.2.2 旅行商问题的近似解法

由于精确式算法所能求解的问题规模非常有限,实际中使用的往往都是多项

式阶数的近似算法或启发式算法。算法的好坏用*/C C E ≤来衡量,C 为近似算法所得到的总行程,C*为最优总行程,E 为最坏情况下,近似解与最优解的总行程之比所不超过的上界值。

① 插入型启发式算法

插入型算法可按插入规则的不同而分为若干类,其一般思想为::

Step 1 通过某种插入方式选择插入边(,)i j 和插入点k ,将k 插入i 和j 之间,

形成{,,,,}i k j "";

Step 2 依次进行直至形成回路解。

适用范围:对称的三角型旅行商问题。

具体实施中,可以将出发点取遍V 中各点而得到多个解,从中选择最好的一个,但此时的时间复杂度增加了n 倍。常见的插入型算法有:

1)最近插入法

最坏情况:E= 2;时间复杂度:2()O n 。

2)最小插入法

最坏情况:E= 2;时间复杂度:2(ln )O n n

3)任意插入法

最坏情况:E=21gn+0.16;时间复杂度:2()O n

4)最远插入法

最坏情况:E=21gn+0.16;时间复杂度:2()O n 5)凸核插入法

最坏情况:E=未知;时间复杂度:2(ln )O n n 。

② 最邻近算法

Step 1 任取一出发点;

Step 2 依次取最近的点加入当前解中直至形成回路解。

适用范围:对称的三角型旅行商问题。

具体实施中,可以将出发点取遍V 中各点而得到多个解,从中选择最好的一个,时间复杂度增加了n 倍。但此时最坏情况:E=(lgn+1)/2;时间复杂度:2()O n 。

③ Clark&Wright 算法

Step 1 任取一出发点p ,计算ij pi pj ij s d d d =+?;

Step 2 将各ij s 由大到小排列;

Step 3 将排好后的各配对顶点{,}i j 依次适当连接,形成回路解。

适用范围:对称的三角型旅行商问题。

具体实施中,可将出发点p 取遍V 中各点而得到多个解,从中选择最好的一个,但此时的时间复杂度增加了n 倍。最坏情况:E=21gn/7+5/21;时间复杂度:

2()O n 。

④ 双生成树启发式算法

Step 1 首先求出最小生成树;

Step 2 将树中各边都添一重复边并求出其Euler 回路;

Step 3 在Euler 回路点序列中去除重复点,形成回路解。

适用范围:对称的三角型旅行商问题。最坏情况:E=2;时间复杂度:2()O n 。 ⑤ Christofides 算法

Step 1 首先求出最小生成树;

Step 2 对树中所有奇项点解最小权匹配问题;

Step 3 将匹配边添入生成树并求出其Euler 回路;

Step 4 在Euler 回路点序列中去除重复点,形成回路解。

适用范围:对称的三角型旅行商问题。最坏情况:E=3/2;时问复杂度:3()O n 。⑥ r-op t 算法

该方法是一种局部改进搜索算法,由Lin 等人(1965)提出。适用范围:对称型旅行商问题。

Step 1 根据一定的规则求出每个顶点的候选顶点集,人为地规定该顶点只

能和候选集中的顶点相连接;

Step 2 产生初始路线;

Step 3 对每一个顶点轮流进行r-opt 交换,直到无法改进当前解为止; Step 4 输出当前的解作为结果。

最坏情况:E=2(n 8,r n/4)≥≤;时间复杂度:()r O n 。

⑦ 合成算法

用某个近似算法求得初始解,

然后借助一个或若干个r-opt 算法对解加以改进。这种合成型的算法往往能获得较好的解,但也很耗时,一般仅在对解有较高要求时采用。

⑧ 概率算法 该算法能对任意给定的E>0,在1+E 之内几乎处处解决对称型旅行商问题。假定G 位于单位正方形内,函数t(n)映射到正有理数,满足:a :22~log (log )t n ;b :对所有n ,/n t 是完全平方。则有:

Step 1 以1/2[()/]t n n 为尺寸构成网格,将单位正方形分成/()n t n 个正方形,将

G 也分成/()n t n 个子图;

Step 2 用动态规划方法求解每个子图的最优回路;

Step 3 将/()n t n 个子图各自收缩为一点,其间距离定义为原子图的最优子回

路间最短距离,并对新构成的图求最小生成树T ;

Step 4 将T∪{各子图的最优子回路}视为一可能有点、边重复的闭回路,根据三角形不等式条件,归约重复点或边,得旅行商问题回路。

适用范围:对称型旅行商问题。

O n n。

最坏情况:E=1+(任意给定正数);时间复杂度:(ln)

⑨神经网络算法

八十年代中后期,美、日等国家出现了一股神经网络热潮,许多从事脑科学、心理学、计算机科学以及电子学等方面的专家都在积极合作,开展这一领域的研究。其早期思想源于四十年代,由于受V on Neumann串行处理体系的限制,一直进展不大,直到八十年代,美国生物物理学家Hopfield提出人工神经网络(ANN)模型,才被认为是一个重大突破。

人工神经网络(Artificial Neural Network, ANN),也称为神经网络(Neural Networks ,NN),是由大量处理单元即神经元(Neurons)互相连接而成的网络,通过反映人脑的基本特性,对人脑进行抽象、简化和模拟的一种工程系统。人工神经网络算法成为近年来的热点研究领域,涉及到电子科学与技术、电气工程、控制科学与技术等诸多学科,其应用领域包括了建模、时间序列分析、模式识别和控制等,并且仍然在不断扩展。

作为神经网络的基本单元,神经元模型具备三个基本要素。其一是具有一组w表示神经元i和神经元j之间的联接强度,或称之为权值,取突触或连接,常用

ij

值可在负值和正值之间;其二是具有反映生物神经元时空整合功能的输入信号累加器;其三是具有一个激励函数用于限制神经元的输出。

根据信息流向和网络的拓扑结构,可以将神经网络模型分成以下几大类:

1)前馈神经网络。2)反馈神经网络。3)随机神经网络。4)竞争神经网络。

而Hopfield和Tank (1985)用ANN方法求解旅行商问题获得成功以来,更是引起了极大的关注,国内也报导了求解数百个结点旅行商问题的有关结果。方法的思想是通过对神经网络引入适当的能量函数,使之与旅行商问题的目标函数相一致来确定神经元之间的连接权,随着网络状态的变化,其能量不断减少,最后达到平衡时,即收敛到一个局部最优解。目前,前述的几种神经网络都有在旅行商问题商的应用实例,且取得了一定的成功,但还存在着严重缺点,而且就一般实际问题而言,无法与其它近似算法相比。因此,该算法的适用范围很可能在于非欧空间或不可度量的旅行商问题方面。

⑩模拟退火算法

这是一种源于五十年代、基于Monte Carlo迭代求解思想的随机搜索算法,八十年代才开始应用于组合优化领域,其出发点是将组合优化问题与统计力学的热平衡作类比,把优化的目标函数视作能量函数,模仿物理学中固体物质的退火处

理,先加温使之具有足够高的能量,然后再逐渐降温,其内部能量也相应下降,在热平衡条件下,物体内部处于不同状态的概率服从Boltzmann 分布,若退火步骤恰当,则最终会形成最低能量的基态。这种算法思想在求解优化问题时,不但接受对目标函数(能量函数)有改进的状态,还以某种概率接受使目标函数恶化的状态,从而可使之避免过早收敛到某个局部极值点,也正是这种概率性的扰动能够使之跳出局部极值点,故而得到的解常常很好。经典的模拟退火算法流程为: Step 1 选择初始状态H(初始解)、初始温度、降温次数;

Step 2 生成H 的邻域状态'H ,并计算(')()Z H Z H ?;

Step 3 按接受概率置换H ;

Step 4 重复Step 2直至停机条件满足。

模拟退火法所得解的好坏与初始状态、温度函数等都有一定的联系,降温较快的效果不一定很好,效果好的,其降温过程又极其缓慢。但由于该方法适用范围广,并且可以人为控制迭代次数,反复求解,因此具有很强的实用性。

11 遗传算法 它是一种来自生物进化理论中“适者生存”的自然选择原则的搜索(寻优)算法,它基于生物学的自然选择原理和自然遗传机制模拟生命的进化,这种新近发展起来的完全异于传统思想的搜索和优化方法自John Holland 等(1975)提出以来,获得了广泛的应用。尤其是在人工智能领域,取得了极大的成功,对于许多复杂困难问题的解决提供了强有力的处理办法。

遗传算法用于优化问题时,其最主要特征就是:它不在单点上寻优,而是从整个种群(Population )中选择生命力强的个体产生新的种群;它使用随机转换原理而不是确定性规则来工作。遗传算法中常用的遗传操作包括三个基本算子:复制(Reproduction)、交叉(Crossover)、变异(Mutation)。其中,繁殖算子用于从旧种群生成新种群,交叉算子用于从父母代生成子代,变异算子用于对子代作某种变异。这里,复制和交叉操作是遗传算法的有效性所在,但有时会丢失一些重要的遗传信息,适当的变异操作可保证这些有用信息的引入。

12 其它算法 除了前面提及的一些典型的旅行商问题算法之外,还有其它许多方法可供使用,如,Norback 等人(1977)的几何图解法、极小代数算法(1990)、归约算法(1991)、遗传退火法、蚂蚁算法等等。还有一种使用效果也相当不错的禁忌搜索法,它采用了类似爬山法的移动原理,将最近若干步内所得到的解储存在禁忌列表中,从而强制避免再次重复搜索表中的解,该方法在九十年代曾求解过几十万个顶点的大型旅行商问题。

3.3 小结

旅行商问题是经典的组合问题,在现实生活生产实践中有着广泛的应用。本章先介绍了旅行商问题的定义、分类、扩展的形式、研究的难点和应用领域等,然后介绍了旅行商问题的基本算法,其中重点介绍了目前最有发展潜力的神经网络、遗传算法等。

4 遗传算法求解TSP 问题

4.1 遗传算法求解TSP 问题的基本方法

4.1.1 编码

用遗传算法求解TSP 问题时,TSP 的编码策略主要包括:

① 二进制表示

二进制编码将TSP 问题的解空间映射到{0,1}l l B =上,然后在位串空间上进行遗传操作。由于二进制表示不自然且需要额外的修正算子以保证个体的合法性,在实际中很少应用。

② 近邻表示

近邻表示将路径表示为n 个城市的一个排列,且在第i 位城市为j 当且仅当路径中从i 所到达的下一个城市为j 。

例如,排列 (2 4 8 3 9 7 1 5 6) 表示路径: 1-2-4-3-8-5-9-6-7.

显然,每一条路径都唯一对应一个近邻表示,然而,任一近邻排列却不一定

都对应于合法路径,如近邻排列:(2 4 8 1 9 3 5 7 6)却导致不完全回路1-2-4-1。

③ 次序表示

次序表示仍将路径表示成n 个城市的一个排列。其表示方法为:先取城市集

合C 的排列顺序C=(1 2 3 4 5 6 7 8 9)作为次序排列的一个参照点,

然后按路径中城市处在C 的位置确定表示串中的点,且每确定一个则从C 中删除相应的城市。

例如,路径 1-2-4-3-8-5-9-6-7其次序表示为(1 1 2 1 4 1 3 1 1).

次序表示的主要优点是可以使用传统的交叉算子。即以次序表示的任两条路径,从某点截断后交换相应的子串所得到的两个后代仍是合法路径。

④ 路径表示

路径表示是TSP 的自然、直观的表示方式。它直接采用城市在路径中的相当位置来进行表示。

例如,路径:5-1-7-8-6-2-9-3-4直接表示成(5 1 7 8 6 2 9 3 4)

人们对路径表示的编码策略的TSP 问题的交叉算子进行了大量研究,本文的研究也主要建立在路径表示的基础上。

⑤ 矩阵表示

Fox 和 McMahon 等提出了旅程的矩阵表示方法,将一个旅程定义为一个优先权布尔矩阵M,当且仅当城市i 排在城市j 之前时矩阵元素1ij m =。例如,一条路径(3 1 2 8 7 4 6 9 5)可以用如下的矩阵表示。

实验六:遗传算法求解TSP问题实验分析

实验六:遗传算法求解TSP问题实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。用遗传算法对TSP问题进行了求解,熟悉遗传算法地算法流程,证明遗传算法在求解TSP问题时具有可行性。 二、实验内容 参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。 对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。 增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。 1. 最短路径问题 所谓旅行商问题(Travelling Salesman Problem , TSP),即最短路径问题,就是在给定的起始点S到终止点T的通路集合中,寻求距离最小的通路,这样的通路成为S点到T点的最短路径。 在寻找最短路径问题上,有时不仅要知道两个指定顶点间的最短路径,还需要知道某个顶点到其他任意顶点间的最短路径。遗传算法方法的本质是处理复杂问题的一种鲁棒性强的启发性随机搜索算法,用

遗传算法解决这类问题,没有太多的约束条件和有关解的限制,因而可以很快地求出任意两点间的最短路径以及一批次短路径。 假设平面上有n个点代表n个城市的位置, 寻找一条最短的闭合路径, 使得可以遍历每一个城市恰好一次。这就是旅行商问题。旅行商的路线可以看作是对n个城市所设计的一个环形, 或者是对一列n个城市的排列。由于对n个城市所有可能的遍历数目可达(n- 1)!个, 因此解决这个问题需要0(n!)的计算时间。假设每个城市和其他任一城市之间都以欧氏距离直接相连。也就是说, 城市间距可以满足三角不等式, 也就意味着任何两座城市之间的直接距离都小于两城市之间的间接距离。 2. 遗传算法 遗传算法是由美国J.Holland教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。通过模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。遗传算法在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。其假设常描述为二进制位串,位串的含义依赖于具体应用。搜索合适的假设从若干初始假设的群体集合开始。当前种群成员通过模仿生物进化的方式来产生下一代群体,如随机变异和交叉。每一步,根据给定的适应度评估当前群体的假设,而后使用概率方法选出适应度最高的假设作为产生下一代的种子。

基于Matlab的遗传算法解决TSP问题的报告

报告题目:基于Matlab的遗传算法解决TSP问题 说明:该文包括了基于Matlab的遗传算法解决TSP问题的基本说明,并在文后附录了实现该算法的所有源代码。此代码经过本人的运行,没有发现错误,结果比较接近理论最优值,虽然最优路径图有点交叉。 因为本人才疏学浅,本报告及源代码的编译耗费了本人较多的时间与精力,特收取下载积分,还请见谅。若有什么问题,可以私信,我们共同探讨这一问题。 希望能对需要这方面的知识的人有所帮助!

1.问题介绍 旅行商问题(Traveling Salesman Problem,简称TSP)是一个经典的组合优化问题。它可以描述为:一个商品推销员要去若干个城市推销商品,从一个城市出发,需要经过所有城市后,回到出发地,应如何选择行进路线,以使总行程最短。从图论的角度看,该问题实质是在一个带权完全无向图中。找一个权值最小的Hemilton回路。其数学描述为:设有一个城市集合其中每对城市之间的距离(),i j d c c R +∈,求一对经过C中每个城市一次的路线()12,,n c c c ΠΠΠ?使 ()()() 1111min ,,n i n i i d c c d c c ?ΠΠΠΠ+=+∑其中()12,,12n n ΠΠΠ??是,的一个置换。 2.遗传算法 2.1遗传算法基本原理 遗传算法是由美国J.Holland 教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。 遗传算法模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。 遗传算法,在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。遗传算法在模式识别、神经网络、图像处理、机器学习、工业优化控制、自适应控制、负载平衡、电磁系统设计、生物科学、社会科学等方面都得到了应用。在人工智能研究中,现在人们认为“遗传算法、自适应系统、细胞自动控制、混沌理论与人工智能一样,都是对今后十年的计算技术有重大影响的关键技术”。 2.2遗传算法的流程 标准的遗传算法包括群体的初始化,选择,交叉,变异操作。流程图如图1所示,其主要步骤可描述如下: (1)随机产生一组初始个体构成的初始种群,并评价每一个个体的适配值。 (2)判断算法的收敛准则是否满足。若满足输出搜索结果;否则执行以下步骤。

遗传算法解决TSP问题

遗传算法解决TSP问题 姓名: 学号: 专业:

问题描叙 TSP问题即路径最短路径问题,从任意起点出发(或者固定起点),依次经过所有城市,一个城市只能进入和出去一次,所有城市必须经过一次,经过终点再到起点,从中寻找距离最短的通路。 通过距离矩阵可以得到城市之间的相互距离,从距离矩阵中的到距离最短路径,解决TSP问题的算法很多,如模拟退火算法,禁忌搜索算法,遗传算法等等,每个算法都有自己的优缺点,遗传算法收敛性好,计算时间少,但是得到的是次优解,得不到最有解。 算法设计 遗传算法属于进化算法的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解. 遗传算法有三个基本算子:选择、交叉和变异。 数值方法求解这一问题的主要手段是迭代运算。一般的迭代方法容易陷入局部极小的陷阱而出现"死循环"现象,使迭代无法进行。遗传算法很好地克服了这个缺点,是一种全局优化算法。 生物在漫长的进化过程中,从低等生物一直发展到高等生物,可以说是一个绝妙的优化过程。这是自然环境选择的结果。人们研究生物进化现象,总结出进化过程包括复制、杂交、变异、竞争和选择。一些学者从生物遗传、进化的过程得到启发,提出了遗传算法。算法中称遗传的生物体为个体,个体对环境的适应程度用适应值(fitness)表示。适应值取决于个体的染色体,在算法中染色体常用一串数字表示,数字串中的一位对应一个基因。一定数量的个体组成一个群体。对所有个体进行选择、交叉和变异等操作,生成新的群体,称为新一代遗传算法计算程序的流程可以表示如下: 第一步准备工作 (1)选择合适的编码方案,将变量(特征)转换为染色体(数字串,串长为m)。通常用二进制编码。 (2)选择合适的参数,包括群体大小(个体数M)、交叉概率PC和变异概率Pm。 (3)确定适应值函数f(x)。f(x)应为正值。 第二步形成一个初始群体(含M个个体)。在边坡滑裂面搜索问题中,取已分析的可能滑裂面组作为初始群体。 第三步对每一染色体(串)计算其适应值fi,同时计算群体的总适应值。 第四步选择

遗传算法解决TSP问题的matlab程序

1.遗传算法解决TSP 问题(附matlab源程序) 2.知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市 3.只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,可使其 4.旅行路线的总长度最短? 5.用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij) 6.是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶 7.点且每个顶点只通过一次的具有最短距离的回路。 8.这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商 9.问题(dij≠dji,,任意i,j=1,2,3,…,n)。 10.若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中 11.ti∈v(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为: 12.min l=σd(t(i),t(i+1)) (i=1,…,n) 13.旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目 14.与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法 15.求其近似解。 16.遗传算法: 17.初始化过程:用v1,v2,v3,…,vn代表所选n个城市。定义整数pop-size作为染色体的个数 18.,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。 19.适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)). 20.评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中 21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被 22.选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=al 23.pha*(1-alpha).^(i-1) 。[随机规划与模糊规划] 24.选择过程:选择过程是以旋转赌轮pop-size次为基础,每次旋转都为新的种群选择一个 25.染色体。赌轮是按每个染色体的适应度进行选择染色体的。 26.step1 、对每个染色体vi,计算累计概率qi,q0=0;qi=σeval(vj) j=1,…,i;i=1, 27.…pop-size. 28.step2、从区间(0,pop-size)中产生一个随机数r; 29.step3、若qi-1 step4、重复step2和step3共pop-size次,这样可以得到pop-size个复制的染色体。 30.grefenstette编码:由于常规的交叉运算和变异运算会使种群中产生一些无实际意义的 31.染色体,本文采用grefenstette编码《遗传算法原理及应用》可以避免这种情况的出现 32.。所谓的grefenstette编码就是用所选队员在未选(不含淘汰)队员中的位置,如: 33.8 15 2 16 10 7 4 3 11 14 6 12 9 5 18 13 17 1 34.对应: 35.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1。 36.交叉过程:本文采用常规单点交叉。为确定交叉操作的父代,从到pop-size重复以下过 37.程:从[0,1]中产生一个随机数r,如果r 将所选的父代两两组队,随机产生一个位置进行交叉,如: 38.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1 39. 6 12 3 5 6 8 5 6 3 1 8 5 6 3 3 2 1 1 40.交叉后为: 41.8 14 2 13 8 6 3 2 5 1 8 5 6 3 3 2 1 1 42. 6 12 3 5 6 8 5 6 3 7 3 4 3 2 4 2 2 1 43.变异过程:本文采用均匀多点变异。类似交叉操作中选择父代的过程,在r 选择多个染色体vi作为父代。对每一个 选择的父代,随机选择多个位置,使其在每位置

TSP问题的遗传算法求解

TSP问题的遗传算法求解 一、问题描述 假设有一个旅行商人要拜访N个城市,要求他从一个城市出发,每个城市最多拜访一次,最后要回到出发的城市,保证所选择的路径长度最短。 二、算法描述 (一)算法简介 遗传算法(GeneticAlgorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择个体,并借助于自然遗传学的遗传算子(geneticoperators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。(摘自百度百科)。 (二)遗传算子 遗传算法中有选择算子、交叉算子和变异算子。 选择算子用于在父代种群中选择进入下一代的个体。 交叉算子用于对种群中的个体两两进行交叉,有Partial-MappedCrossover、OrderCrossover、Position-basedCrossover等交叉算子。 变异算子用于对种群中的个体进行突变。 (三)算法步骤描述 遗传算法的基本运算过程如下: 1.初始化:设置进化代数计数器t=0、设置最大进化代数T、交叉概率、变异概率、随机生成M个个体作为初始种群P 2.个体评价:计算种群P中各个个体的适应度 3.选择运算:将选择算子作用于群体。以个体适应度为基础,选择最优个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代 4.交叉运算:在交叉概率的控制下,对群体中的个体两两进行交叉 5.变异运算:在变异概率的控制下,对群体中的个体两两进行变异,即对某一个体的基因进行随机调整 6.经过选择、交叉、变异运算之后得到下一代群体P1。 重复以上1-6,直到遗传代数为T,以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。 三、求解说明 (一)优化目标 给定二维数据int[][]pos用于存储各个城市的坐标,采用欧式距离代表城市之间的距离。利用遗传算法,找到不重复遍历所有城市的路径中,所走距离最短的路径。 (二)选择算子 选择算子采用轮盘赌选择,以每个个体的适应度为基础,为每个个体计算累积概率。

用遗传算法解决旅行商问题

用遗传算法解决旅行商问题 姓名:王晓梅 学号:1301281 班级:系统工程6班

一、问题背景 有一个销售员,要到n 个城市推销商品,他要找出一个包含所有n 个城市的具有最短路程的环路。 现在假设有10个城市,他们之间的距离如下。 { 0, 107, 241, 190, 124, 80, 316, 76, 152, 157}, { 107, 0, 148, 137, 88, 127, 336, 183, 134, 95}, { 241, 148, 0, 374, 171, 259, 509, 317, 217, 232}, { 190, 137, 374, 0, 202, 234, 222, 192, 248, 42}, { 124, 88, 171, 202, 0, 61, 392, 202, 46, 160}, { 80, 127, 259, 234, 61, 0, 386, 141, 72, 167}, { 316, 336, 509, 222, 392, 386, 0, 233, 438, 254}, { 76, 183, 317, 192, 202, 141, 233, 0, 213, 188}, { 152, 134, 217, 248, 46, 72, 438, 213, 0, 206}, { 157, 95, 232, 42, 160, 167, 254, 188, 206, 0} 将这10个城市分别编码为0,1,2,3,4,5,6,7,8,9。要求走完这10个城市,目标是使走的距离最短。 二、建立模型 ),...,1,(1) ,...,1,(1. .)(min 11 11n j j i n i j i t s j i n j ij n i ij ij n i n j ij x x d x =≠==≠=≠∑∑∑∑==== 三、设计算法 1、种群初始化 (1)一条染色体的初始化 10个城市分别对应0~9这十个数,每个染色体代表一个解决方法,即0~9这十个数的一种排序方式,可随机产生一个数,用取余的方法得到一个0~9的数,依次得到与前面不重复的十个数,构成一个染色体。 (2)种群的初始化 这里假设种群有100个染色体,也就是循环100次染色体的初始化可得到一个种群。

完整word版遗传算法求解TSP问题实验报告

人工智能实验报告 实验六遗传算法实验II 一、实验目的: 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP 问题的流程并测试主要参数对结果的影响。 二、实验原理: 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP问题是一个组合优化问题。该问题可以被证明具有NPC计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。 遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程。群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。要求利用遗传算法求解TSP问题的最短路径。 三、实验内容: 1、参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。 2、对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。 3、增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。 4、上交源代码。 四、实验报告要求: 1、画出遗传算法求解TSP问题的流程图。 开始初始化种群(随机产生城市坐标确定种群规模、迭代次数、个体选择式、交叉概率、变异概率计算染 色体适应度值(城市间的欧氏距离按某个选择概率选择个YE个体交个体变P迭代总次N输入适应度最高的结

基于遗传算法的TSP问题解决

基于遗传算法的TSP问题解决 —余小欢B07330230 概述:TSP问题是一个经典的运筹学的组合优化问题,针对此问题,研究人员提出了个中各样的算法,主要有贪婪算法,遗传算法,混沌搜索算法等。在本文中分别用贪婪算法和遗传算法去解决30个城市的最短路径问题,并把两者得到了最优解进行比较,发现用遗传算法解决TSP问题非常具有优越性,同时在文章的最后提出了对此遗传算法进行改进的方向。 1.贪婪算法 x=[18 87 74 71 25 58 4 13 18 24 71 64 68 83 58 54 51 37 41 2 7 22 25 62 87 91 83 41 45 44]; y=[54 76 78 71 38 35 50 40 40 40 42 44 60 58 69 69 62 67 84 94 99 64 60 62 32 7 38 46 26 21 35]; a=zeros(30,30); for i=1:30 for j=1:30 a(i,j)=sqrt((x(i)-x(j))^2+(y(i)-y(j))^2); %求取距离矩阵的值end a(i,i)=1000; %主对角线上的元素置为1000作为惩罚 end b=0; c=zeros(30); for j=1:30 [m,n]=min(a(:,j)); b=b+m; %得到的b值即为贪婪最佳路径的总距离 a(n,:)=1000; %已经选择的最小值对应的行的所有值置为1000作为惩罚 c(j)=n; end x1=zeros(30); y1=zeros(30); for t=1:30

x1(t)=x(c(t)); y1(t)=y(c(t)); end plot(x1,y1,'-or'); xlabel('X axis'), ylabel('Y axis'), title('ì°à·?·??'); axis([0,1,0,1]); axis([0,100,0,100]); axis on 用贪婪算法得出的最佳路径走遍30个城市所走的路程为449.3845km 其具体的路径图如下: 2.遗传算法 1主函数部分 clc; clear all;

遗传算法解决10城市TSP问题程序源代码

#include "stdio.h" #include "stdlib.h" #include "conio.h" #include "math.h" #include "time.h" #define num_C 10 //城市个数 #define N 100 //群体规模为100 #define pc 0.9 //交叉概率为0.9 #define pm 0.1 //变异概率为10% #define ps 0.6 //进行选择时保留的比例 #define genmax 200 //最大代数200 int RandomInteger(int low,int high); void Initial_gen(struct unit group[N]); void Sort(struct unit group[N]); void Copy_unit(struct unit *p1,struct unit *p2); int search_son(int son[num_C],int k); void Cross(struct unit *p1,struct unit *p2); void Varation(struct unit group[N],int i); void Evolution(struct unit group[N]); void Calculate_cost(struct unit *p); void Print_optimum(struct unit group[N]); /* 定义个体信息*/ typedef struct unit { int path[num_C]; //个体的路径信息 int cost; //个体代价值 }; struct unit group[N]; //种群变量group int num_gen=0; //记录当前达到第几代 /***************************************************************************/ /* 城市间的距离信息:*/ /* 北京天津武汉深圳长沙成都杭州西安拉萨南昌*/ /* (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) */ /* 北京(0) 0 118 1272 2567 1653 2097 1425 1177 3947 1574 */ /* 天津(1) 118 0 1253 2511 1633 2077 1369 1157 3961 1518 */ /* 武汉(2) 1272 1253 0 1462 380 1490 821 856 3660 385 */ /* 深圳(3) 2567 2511 1462 0 922 2335 1562 2165 3995 933 */ /* 长沙(4) 1653 1633 380 922 0 1700 1041 1135 3870 456 */ /* 成都(5) 2097 2077 1490 2335 1700 0 2311 920 2170 1920 */ /* 杭州(6) 1425 1369 821 1562 1041 2311 0 1420 4290 626 */ /* 西安(7) 1177 1157 856 2165 1135 920 1420 0 2870 1290 */ /* 拉萨(8) 3947 3961 3660 3995 3870 2170 4290 2870 0 4090 */ /* 南昌(9) 1574 1518 385 993 456 1920 626 1290 4090 0 */ /***************************************************************************/

遗传算法及其在TSP问题中的应用

遗传算法及其在TSP问题中的应用 摘要:本文首先介绍了遗传算法的基本理论与方法,从应用的角度对遗传算法做了认真的分析和研究,总结了用遗传算法提出求解组合优化问题中的典型问题——TSP问题的最优近似解的算法。其次,本文在深入分析和研究了遗传算法基本理论与方法的基础上,针对旅行商问题的具体问题,设计了基于TSP的遗传算法的选择、交叉和变异算子等遗传算子,提出了求解旅行商问题的一种遗传算法,并用Matlab语言编程实现其算法,最后绘出算法的仿真结果,并对不同结果作出相应的分析。然后,本文还针对遗传算法求解TSP时存在的一些问题对该算法进行了适当的改进。如针对初始群体、遗传算子作出适当改进,或者将遗传算法与其他方法相结合,以及在编程过程中对算法流程的改进。本人在用计算机模拟遗传算法求解TSP问题时,首先分析了用Matlab语言设计遗传算法程序的优越性,接着以遗传算法求解TSP问题为例,深入讨论了各个遗传算子的程序实现,并通过分析实验数据,得到各个遗传算子在搜索寻优过程中所起的作用,最后指出了用Matlab语言编程同用其它高级程序语言编程的差异所在,以及运用Matlab编写遗传算法程序的一些注意事项。最后,本文提出将遗传算法与其它算法相结合来求解一般问题的想法;并将遗传算法的应用范围扩展,提出可以运用遗传算法求解由TSP衍生出的各类TSP扩展问题,如求解配送/收集旅行商问题的遗传算法(TSPD)、遗传算法在货物配送问题中的应用(ST-TSP)、多旅行商问题(MTSP)等。 引言:优化问题可以自然地分为两类:一类是连续变量的优化问题;另一类是离散变量的优化问题,即所谓组合优化问题。对于连续变量的优化问题,一般是求一组实数或一个函数;而在组合优化问题中,一般是从一个无限集或有限的几个无限集中寻找一个对象——它可以是一个整数,一个集合,一个排列或者一个图,也即是从可行解中求出最优解的问题。TSP问题就是其中的典型例子,就本质上而言它可抽象为数学上的组合优化,它描述的是旅行商经N个城市的最短路径问题,因而对TSP问题的求解是数学上,同时也是优化问题中普遍关注的。旅行商问题(Traveling Salesman Problem,简称TSP)也称为货担郎问题,是一个较古的问题,最早可以追溯到1759年Euler提出的骑士旅行问题[9]。旅行商问题可以解释为,一位推销员从自己所在城市出发,必须邀访所有城市且每个城市只能访问一次之后又返回到原来的城市,求使其旅行费用最小(和旅行距离最短)的路径。 TSP是一个典型的组合优化问题,并且是一个NP难题,所以一般很难精确地求出其最优解,因而寻找出其有效的近似求解算法就具有重要的理论意义。另一方面,很多实际应用问题,如公安执勤人员的最优巡回路线、流水作业生产线的顺序问题、车辆调度问题、网络问题、切割问题以至机组人员的轮班安排、教师任课班级负荷分配等问题,经过简化处理后,都可建模为TSP问题,因而对旅行商问题求解方法的研究也具有重要的应用价值。再者,在各种遗传算法应用实例中,其个体编码方法大多都是采用二进制编码方法或浮点数编码方法,而TSP问题是一种典型的需要使用符号编码方法的实际问题,所以,研究求解TSP问题的遗传算法,对促进遗传算法本身的发展也具有重要意义。在过去的20年里,在求解旅行商问题的最优解方面取得了极大的进展。尽管有这些成就,但旅行商问题还远未解决,问题的许多方面还要研究,很多问题还在期待满意的回答。 另外,遗传算法就其本质来说,主要是解决复杂问题的一种鲁棒性强的启发式随机

遗传算法求解TSP问题MATLAB实现

遗传算法求解TSP 问题MATLAB 实现 摘要:旅行商问题(TSP )是一个经典的优化组合问题,本文采用遗传算法来求解TSP 问题,深入讨论了遗传算法解决TSP 问题的求解过程,并通过MATLAB 对算法进行了实现,最后对实验结果进行分析,并与粒子群算法进行对比和分析。 关键字:TSP ;遗传算法;粒子群算法 0.引言 旅行商问题是一个经典的优化组合问题,它可以扩展到很多问题,如电路布线、输油管路铺设等,但是,由于TSP 问题的可行解数目与城市数目N 是成指数型增长的,是一个NP 难问题,因而一般只能近似求解,遗传算法(GA )是求解该问题的较有效的方法之一,当然还有如粒子群算法,蚁群算法,神经网络算法等优化算法也可以进行求解。遗传算法是美国学者Holland 根据自然界“物竞天择,适者生存”现象而提出的一种随机搜索算法,本文采用MATLAB 来实现遗传算法解决TSP 问题。 1.旅行商问题 旅行商问题可以具体描述为:已知n 个城市之间的相互距离,现有一个推销员从某一个城市出发,必须遍访这n 个城市,并且每个城市只能访问一次,最后又必须返回到出发城市,如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短。用图论术语来表示,就是有一个图g=(v,e),其中v 是定点5,e 是边集,设d=(dij)是有顶点i 和顶点j 之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶点且每个顶点只通过一次的最短距离的回路。若对与城市v={v1,v2,v3…vn}的一个访问顺序为t=(t1,t2,t3…,tn),其中ti ∈v(i=1,2,..n),且记tn+1=t1,则旅行上问题的数学模型为式1: min ((),(1))(1,....,)I d t i t i i n δ =+ = (1) 2.遗传算法与粒子群算法 2.1遗传算法 遗传算法的基本原理是通过作用于染色体上的基因寻找好的染色体来求解问题,它需要对算法所产生的每个染色体进行评价,并基于适应度值来选择染色体,使适应性好的染色体有更多的繁殖机会,在遗传算法中,通过随机方式产生若干个所求解问题的数字编码,即染色体,形成初始种群;通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择高适应度的个体参加遗传操作,经过遗产操作后的个体集合形成下一代新的种群,对这个新的种群进行下一轮的进化。 2.2遗传算法的过程 遗传算法的基本过程是: 1. 初始化群体。 2. 计算群体上每个个体的适应度值 3. 由个体适应度值所决定的某个规则选择将进入下一代个体。 4. 按概率Pc 进行交叉操作。 5. 按概率Pm 进行变异操作。 6. 没有满足某种停止条件,则转第2步,否则进入第7步。

基于遗传算法解决TSP问题

基于遗传算法解决TSP问题 摘要 题目要求给出环游全国全部省会的最短路径方案,是传统的TSP问题,本文将图表数据数字化后,将其转变成为线性规划问题,进而采取遗传算法用Matlab求解出理论上的最短路径与路线图。通过第一问求出的路线顺序结合实际情况求解出实际情况下的最短路径与最短时间。 针对第一问,首先建立基本TSP模型,求出其线性规划方程组,用Matlab 对地图做出基本处理,求出其像素坐标的矩阵。将省会城市初始化为种群数据,用遗传算法求解出模型最优解,即最短路径大小与旅游城市顺序。 针对第二问,由于遗传算法求出的是近似最优解,以及实际道路情况不可能是直线距离,所以理论数据与实际有一定差别。将旅行顺序求解出后,需要根据实际道路情况重新求解出最短路径大小,并根据题目所给条件求解出最短时间。根据实际情况,求得最后的最短路径长度为20402.9公里,时间为45天。 题目中给出城市转化为图集,一共有33个顶点,数据较大,用Dijkstra 算法和Floyd算法虽然答案可能更精确,但数据处理量大,时间复杂度高。采用遗传算法可以得到近似最优解,并且精简了时间复杂度。 关键词:最短路径 TSP问题线性规划遗传算法 一、问题重述 如果从杭州出发,要想开车走遍全国所有的省会城市,而且在到了每个省会城市以后都必须住一晚,第二天早上才能出发,安全起见每天开车时间最多在8小时左右,车速视实际路况而定,一般高速公路可以取平均车速100公里/小时左右,不是高速公路平均车速取60公里/小时左右,从杭州出发要走遍所有省会城市以后回到杭州,开车里程最少需要多少公里?最少需要多少时间?(暂不考虑台湾省) 二、问题分析 题目要求求出最短路径与时间是典型的TSP问题,即要用最短的总路径走遍所有城市,此处需要设立一个二元组)) E V,并且求出一个点的邻接矩阵。 G ( ( ), (G 根据经典的TSP模型,得出一般的线性规划方程组。解TSP模型的一般算法有Dijkstra算法和Floyd算法,由于TSP问题是典型的NP难题,其可能路径数目与城市总数目n是呈指数型增长,并不适合用以上两种算法。另外常用来解决TSP问题的退火算法受概率和退火过程影响,可能运算起来十分缓慢。为了精简时间复杂度,故选取了遗传算法将图形数据初始为种群数据进行计算。并且随着

用遗传算法求解TSP问题

用遗传算法求解TSP问题 遗传算法(Genetic Algorithm——GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的。J.Holland教授和它的研究小组围绕遗传算法进行研究的宗旨有两个:抽取和解释自然系统的自适应过程以及设计具有自然系统机理的人工系统。遗传算法的大致过程是这样的:将每个可能的解看作是群体中的一个个体或染色体,并将每个个体编码成字符串的形式,根据预定的目标函数对每个个体进行评价,即给出一个适应度值。开始时,总是随机的产生一些个体,根据这些个体的适应度,利用遗传算子——选择(Selection)、交叉(Crossover)、变异(Mutation)对它们重新组合,得到一群新的个体。这一群新的个体由于继承了上一代的一些优良特性,明显优于上一代,以逐步向着更优解的方向进化。遗传算法主要的特点在于:简单、通用、鲁棒性强。经过二十多年的发展,遗传算法已经在旅行商问题、生产调度、函数优化、机器学习等领域得到成功的应用。 遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,主要有以下特点: 1、遗传算法以决策变量的编码作为运算对象。传统的优化算法往往直接决策变量的实际植本身,而遗传算法处理决策变量的某种编码形式,使得我们可以借鉴生物学中的染色体和基因的概念,可以模仿自然界生物的遗传和进化机理,也使得我们能够方便的应用遗传操作算子。 2、遗传算法直接以适应度作为搜索信息,无需导数等其它辅助信息。 3、遗传算法使用多个点的搜索信息,具有隐含并行性。 4、遗传算法使用概率搜索技术,而非确定性规则。 遗传算法是基于生物学的,理解或编程都不太难。下面是遗传算法的一般算法步骤: 1、创建一个随机的初始状态 初始种群是从解中随机选择出来的,将这些解比喻为染色体或基因,该种群

遗传算法

遗传算法 开放分类:编程、程序、数学、计算机、算法 目录 ? 遗传算法定义 ? 遗传算法特点 ? 遗传算法的应用 ? 遗传算法的现状 ? 遗传算法的一般算法 ? 遗传算法实例 遗传算法定义 [编辑本段] 遗传算法(Genetic Algorithm)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它是有美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Hilland教授所提出的GA通常为简单遗传算法(SGA)。 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小挑选(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。 遗传算法特点 [编辑本段] 遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,主要有以下特点:1、遗传算法以决策变量的编码作为运算对象。传统的优化算法往往直接决策变量的实际植本身,而遗传算法处理决策变量的某种编码形式,使得我们可以借鉴生物学中的染色体和基因的概念,可以模仿自然界生物的遗传和进化机理,也使得我们能够方便的应用遗传操作算子。 2、遗传算法直接以适应度作为搜索信息,无需导数等其它辅助信息。 3、遗传算法使用多个点的搜索信息,具有隐含并行性。 4、遗传算法使用概率搜索技术,而非确定性规则。 遗传算法的应用 [编辑本段] 由于遗传算法的整体搜索策略和优化搜索方法在计算是不依赖于梯度信息或其它辅助知识,而只需要影响

遗传算法求解TSP问题

实验六遗传算法求解TSP问题 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。 二、实验内容 1、参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。 2、对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。 3、增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。 4、上交源代码。

三、遗传算法求解TSP问题的流程图 四、遗传算法求解不同规模的TSP问题的算法性能 (1)遗传算法执行方式说明: 适应度值计算方法:当前路线的路径长度

●个体选择概率分配方法:适应度比例方法 ●选择个体方法:轮盘赌选择 ●交叉类型:PMX交叉 ●变异类型: 两点互换变异 (2)实验模拟结果: 图1-1 (3)分析 由图1-1可知,遗传算法执行时间随着TSP问题规模的增大而增大,并且大致为线性增长。 五、不同参数下的计算结果对比 (1)种群规模对算法结果的影响

实验次数:10 最大迭代步数:100 交叉概率:0.85 变异概率:0.15 如表1-1或3-1-0-9-2-4-8-5-7-6,注意到这是一圈,顺时针或者逆时针都可以。当种群规模为10,20时,并没有找到最优解。 (2)交叉概率对算法结果的影响 实验次数:15 种群规模:25 最大迭代步数:100 变异概率:0.15 实验结果:

在该情况下,交叉概率过低将使搜索陷入迟钝状态,得不到最优解。 (3)变异概率对算法结果的影响 实验次数:10 种群规模:25 最大迭代步数:100 交叉概率:0.85 实验结果: 又表1-3可知,当变异概率过大或过低都将导致无法得到最优解。注:(2)(3)的实验数据与(1)的实验数据不同,详见附录。

TSP问题的遗传算法实验报告

TSP问题的遗传算法实验报告 一实验题目 TSP问题的遗传算法实现 二实验目的 1熟悉和掌握遗传算法的基本概念和基本思想; 2加深对遗传算法的理解,理解和掌握遗传算法的各个操作算子; 3理解和掌握利用遗传算法进行问题求解的基本技能。 三实验要求 1 以10/30个结点的TSP问题为例,用遗传算法加以求解; 2 掌握遗传算法的基本原理、各个遗传操作和算法步骤; 3 能求出问题最优解,若得不出最优解,请分析原因; 4 要求界面显示每次迭代求出的局部最优解和最终求出的全局最优解。 四数据结构 请说明染色体个体和群体的定义方法。 typedef struct{ int colony[POPSIZE][CITY_NUM+1];//城市种群,默认出发城市编号为0,则城市编号的最后一个城市还应该为0 每CITY_NUM个城市的排列组合为一个染色体double fitness[POPSIZE];// 路径适应值 double Distance[POPSIZE];//路径实际长度 int BestRooting[CITY_NUM+1];//最优城市路径序列 double BestFitness;//最优路径适应值 double BestValue;//最优路径长度 }TSP,*PTSP; 五实验算法 1 说明算法中对染色体的编码方法,适应度函数定义方法; 染色体的编码方法:0~9一个排列组合为一条染色体。 适应度函数的定义方法:取路径长度的倒数。 void CalFitness(PTSP city,int m) { int i,j,t=0; int start,end; for(i=0;iDistance[i]=0; for(j=1;j<=CITY_NUM;j++) {

遗传算法解决TSP问题(C++)

遗传算法解决TSP问题(C++版) 遗传算法流程: 交叉,编译,计算适应度,保存最优个体。 其中交叉过程是选择最优的两个染色体进行交叉操作,本文采用的是轮盘赌算法。 #include #include #include usingnamespace std; #define population 200//种群数量 #define pc 0.9//交叉的概率 #define pm 0.1//变异的概率 #define count 200//迭代的次数 #define num 10//城市的数量 int** city;//存放每个个体的访问顺序 int path[10][10] = { //0, 1, 2, 3, 4, 5, 6, 7, 8, 9 { 0, 23, 93, 18, 40, 34, 13, 75, 50, 35 },//0 { 23, 0, 75, 4, 72, 74, 36, 57, 36, 22 },//1 { 93, 75, 0, 64, 21, 73, 51, 25, 74, 89 },//2 { 18, 4, 64, 0, 55, 52, 8, 10, 67, 1 }, //3 { 40, 72, 21, 55, 0, 43, 64, 6, 99, 74 }, //4 { 34, 74, 73, 52, 43, 0, 43, 66, 52, 39 },//5 { 13, 36, 51, 8, 64, 43, 0, 16, 57, 94 },//6 { 75, 57, 25, 10, 6, 66, 16, 0, 23, 11 }, //7 { 50, 36, 74, 67, 99, 52, 57, 23, 0, 42 },//8 { 35, 22, 89, 1, 74, 39, 94, 11, 42, 0 }//9 }; int* dis;//存放每个个体的访问顺序下的路径长度 double* fitness;//存放灭个个体的适应度 int min_dis = 1000000; int min_index = -1;

相关文档
最新文档